CC++ & Algorithm

告别死板的程序:用if语句给你的代码装个“红绿灯”

2026年7月26日关联知识点:C++ if 语句11 次阅读

想象一下,你正在玩一个角色扮演游戏——你操控的角色走到一个岔路口,左边是金币宝箱,右边是怪物巢穴。游戏程序怎么知道该让你走哪条路?答案很简单:它得“看情况办”。这种“看情况”的能力,在C++里就是if语句的看家本领。

if语句就像马路上的红绿灯——绿灯亮了,咱就大步向前;红灯亮了,乖乖停下。在代码里,条件成立是绿灯,不成立是红灯。学会if,你的程序就不再是死板的直线执行,而有了“大脑”。

if语句长什么样?——记住红绿灯的规则

先看标准格式:

if (条件) {
    // 条件成立时执行的代码
}

圆括号()里放条件,花括号{}里放要干的事。有一点必须刻在脑子里:条件必须用圆括号括起来,这是C++的语法规则。有同学问过:“为什么不用方括号?”——因为C++的语法就是这么设计的,就像红绿灯只能用红黄绿三种颜色,你不能改成蓝灯。这个规则在初学者那儿经常会忘:写成了if 条件if[条件],结果编译报错。记住:条件外面永远是圆括号。

条件怎么写?——比较运算符是判断的“尺子”

要想让条件成立,得用比较运算符来比较两个东西。最常用的就那六个:

运算符含义例子成立时机
>大于a > 5a比5大
<小于b < 10b比10小
>=大于等于x >= 0x不小于0
<=小于等于y <= 100y不超过100
==等于(两个等号)flag == 1flag正好等于1
!=不等于ans != 0ans不是0

特别注意:判断相等要用两个等号==。一个等号=是赋值,比如if (a = 5)这行代码看起来合法,但它先悄悄把a赋值为5,然后判断5是否“真”(非0即为真),结果永远为真——你本来想判断a是不是等于5,却误打误撞改写了a的值。这是C++新手最常见的“隐形炸弹”之一。曾有同学调试了半天,发现不管输入什么分数,程序都说“及格了”——就是因为在if (score = 60)里用了一个等号。

从生活到代码:零花钱买薯片

假设你每周有20元零花钱,想买一包5元的薯片。if语句可以这样写:

int money = 20;
int price = 5;
if (money >= price) {
    cout << "钱够,买薯片啦!" << endl;
}

运行后屏幕会显示那句话。如果把money改成3,条件不成立,屏幕上啥也没有——红绿灯没亮,程序安静地跳过花括号,继续往后走。简单,但已经能解决很多实际问题了。

实战一:两数比大小——if的“基本功”

来看一个典型的入门题:输入两个不相等的整数,输出较大的那个。这正是if语句最直接的用例——判断谁大谁小。

思路:读入两个数a和b,如果a大于b,输出a,否则输出b。注意题目要求输出较大数,所以只需要一组if-else(或两个if),这里我们只贴if的部分:

if (a > b) {
    cout << a;
}
if (b > a) {
    cout << b;
}

当然用if-else更简洁,但只用if也能解决——因为两个数不相等,总有一个条件成立。这道题考察的就是你能不能把“谁大”这个条件用>运算符正确表达出来。很多同学会写成if (a > b) cout << a; else cout << b;,其实本质一样。关键是要搞懂:条件写在圆括号里,比较运算符选对,结果就对了。

实战二:企业奖金提成——if的“多级分档”

再看一道稍微复杂的题:企业奖金根据利润分段提成。利润低于10万,提10%;10万到20万之间,低于10万部分提10%,高于10万部分提7.5%;20万到40万……以此类推,最后超过100万的部分提1%。

这道题考察的就是多条件判断的分段处理。利润是一个连续的数值,我们要把它切成若干段,每一段应用不同的提成比例。核心思路:计算总奖金时,把每一段利润分别计算,然后累加。

可以用一连串的if-else if语句,也可以直接用多个if(注意条件要互斥)。这里只展示关键判断逻辑的写法(假设利润为p,奖金为bonus):

double bonus = 0.0;
if (p <= 100000) {
    bonus = p * 0.1;
} else if (p <= 200000) {
    bonus = 100000 * 0.1 + (p - 100000) * 0.075;
} else if (p <= 400000) {
    // 低于20万的部分已经算好,加上高于20万的部分
    bonus = 100000 * 0.1 + 100000 * 0.075 + (p - 200000) * 0.05;
} ...

注意:每个条件后面都要仔细考虑边界——比如p <= 20万包含了10万到20万的情况,而p <= 10万已经排除了大于10万的,所以else if天然保证了互斥。如果不使用else if而用多个独立if,就要保证条件不重叠,比如if (p <= 10万)if (p > 10万 && p <= 20万)。实际上,这道题也可以用if嵌套,但用else if阅读起来更清晰。

这道题的难点不在于if语法本身,而在于如何把文字描述的分段规则转化成数学表达式。很多同学卡在“高于10万元的部分”怎么算,其实就是p - 100000。if语句就是帮我们把这种“如果……那么……”的逻辑写出来。

常见错误:花括号、分号、等于号,一个不小心就翻车

除了之前说的===混淆,还有两个“坑”:

  1. 花括号忘写或写错:if后面只有一行代码时可以省略花括号,但如果你写成下面这样:

    if (score >= 60)
        cout << "及格了" << endl;
        cout << "这句话不受if控制" << endl;
    

    第二行cout缩进了,但它并不属于if——因为它没在花括号里。程序会先根据条件决定是否执行第一行cout,但第二行永远会执行。初学者常被缩进迷惑,以为缩进一样就是if的一部分,其实C++只看花括号。

  2. 分号加错位置

    if (score >= 60);   // 这里多了一个分号
    {
        cout << "错了" << endl;
    }
    

    分号结束了if语句,花括号里的内容变成了一个独立的代码块,不受任何条件控制。这样的bug相当隐蔽,编译不会报错,但逻辑全错。

总结:if语句是程序决策的基石

从一个简单的判断,到复杂的奖金计算,if语句贯穿了所有分支逻辑。它的本质是:根据条件的真假,决定是否执行某段代码。掌握了if,你就能让程序“思考”了。

接下来你可以挑战更复杂的分支结构:if-else(非此即彼)、if-else if-else(多路分支),甚至switch-case。但无论多复杂的决策,底层都是这些基础的比较运算和if判断。

记住:写if的时候,先想清楚“什么情况下条件为真”,然后检查花括号、分号、等于号,最后再跑起来测试。养成习惯,bug就会绕着你走。


关于作者

我是赵老师,持有 NOI 信息学奥赛教练证书,拥有 15 年以上的软件开发经验,从事信息学少儿编程教学已有 8 年时间。

这些年累计帮助 多名 学生通过编程特长升入自己心仪的目标学校。

如果你在编程学习上有任何疑问,欢迎联系我:18620372957(微信同号)

这篇文章对你有帮助吗?

有用 100%没用 0%

想系统学习这个知识点?查看完整知识点 →