1. if条件语句

if语句是C++中最基本的条件判断语句,就像我们生活中做决定一样:“如果满足某个条件,就做某件事”

大白话解释: 如果今天下雨(条件),我就带伞(执行的操作)。在C++中,if语句也是类似的逻辑。

基本语法:

if (条件) { // 条件为真时执行的代码 }

代码示例:

int score = 85; if (score >= 60) { cout << "恭喜你考试及格了!" << endl; }

注意: 条件必须放在圆括号()中,如果条件为真(true),则执行大括号{}中的代码。

2. if-else语句

if-else语句在if的基础上增加了"否则"的情况,就像:"如果下雨,我带伞;否则,我带太阳帽"。

大白话解释: 如果条件成立,执行A操作;如果条件不成立,执行B操作。

基本语法:

if (条件) { // 条件为真时执行的代码 } else { // 条件为假时执行的代码 }

代码示例:

int age = 17; if (age >= 18) { cout << "你已成年,可以进入。" << endl; } else { cout << "对不起,未成年人禁止入内。" << endl; }

3. else if语句

当需要判断多种情况时,可以使用else if,就像考试评级:90分以上是A,80-89是B,70-79是C...

大白话解释: 如果条件1成立,做A;如果条件1不成立但条件2成立,做B;如果都不成立,做C。

基本语法:

if (条件1) { // 条件1为真时执行 } else if (条件2) { // 条件2为真时执行 } else if (条件3) { // 条件3为真时执行 } else { // 以上条件都不满足时执行 }

代码示例:

int score = 85; if (score >= 90) { cout << "优秀" << endl; } else if (score >= 80) { cout << "良好" << endl; } else if (score >= 70) { cout << "中等" << endl; } else if (score >= 60) { cout << "及格" << endl; } else { cout << "不及格" << endl; }

重要: else if语句会从上到下检查条件,一旦某个条件满足,就会执行对应的代码块,然后跳过其他所有条件检查。

4. switch语句

switch语句适用于当变量有多个固定取值需要判断的情况,类似于"根据星期几决定做什么事"。

大白话解释: 根据一个变量的值,选择不同的执行路径。比多个if-else更简洁清晰。

基本语法:

switch (表达式) { case 值1: // 代码块1 break; case 值2: // 代码块2 break; // 可以有多个case default: // 所有case都不匹配时执行 }

代码示例:

int day = 3; switch (day) { case 1: cout << "星期一" << endl; break; case 2: cout << "星期二" << endl; break; case 3: cout << "星期三" << endl; break; // ... 其他天 default: cout << "输入的不是有效星期" << endl; }

注意:

  1. 每个case后面都要加break,否则会继续执行下一个case的代码(称为"case穿透")
  2. switch只能用于整数类型(int, char, enum等),不能用于字符串或浮点数
  3. default是可选的,用于处理所有case都不匹配的情况

5. 三元运算符 (?:)

三元运算符是if-else的简化形式,适合简单的条件赋值。

大白话解释: 问一个问题,如果答案为是,选第一个值;答案为否,选第二个值。

基本语法:

变量 = (条件) ? 值1 : 值2;

代码示例:

int a = 10, b = 20; int max = (a > b) ? a : b; // 如果a大于b,max=a,否则max=b // 相当于: int max; if (a > b) { max = a; } else { max = b; }

注意: 三元运算符虽然简洁,但过度使用或嵌套使用会降低代码可读性。只适合简单的条件判断。

6. 逻辑运算符

逻辑运算符用于组合多个条件,就像我们生活中的"并且"、"或者"、"非"。

运算符 名称 描述 示例
&& 逻辑与 两个条件都为真时结果为真 (age > 18) && (height > 160)
|| 逻辑或 至少一个条件为真时结果为真 (score >= 90) || (attendance > 95)
! 逻辑非 反转条件的结果 !(isRaining) // 如果没下雨

代码示例:

int age = 20; bool isStudent = true; if (age >= 18 && isStudent) { cout << "成年学生可以享受折扣" << endl; } if (age < 12 || age > 65) { cout << "儿童或老人免票" << endl; } if (!isStudent) { cout << "非学生不享受折扣" << endl; }

7. 比较运算符

比较运算符用于比较两个值,结果为真(true)或假(false)。

运算符 名称 示例
== 等于 a == b
!= 不等于 a != b
> 大于 a > b
< 小于 a < b
>= 大于等于 a >= b
<= 小于等于 a <= b

常见错误: 混淆赋值(=)和比较(==)运算符。在条件判断中,如果写成 if(a = 5) 会变成赋值而不是比较!

8. 常见错误

1. 忘记大括号 {}

当if/else后只有一行代码时,可以省略大括号,但这是不好的习惯:

// 错误示例: if (score >= 60) cout << "及格" << endl; cout << "可以参加补考" << endl; // 这行代码总是会执行! // 正确写法: if (score >= 60) { cout << "及格" << endl; cout << "可以参加补考" << endl; }

2. 在if条件后加分号

// 错误示例: if (score > 90); { // 分号结束了if语句 cout << "优秀"; // 这行代码总是会执行! } // 正确写法: if (score > 90) { cout << "优秀"; }

3. 混淆=和==

// 错误示例: int a = 5; if (a = 10) { // 这里将a赋值为10,条件永远为真 // ... } // 正确写法: if (a == 10) { // ... }

4. switch中忘记break

int day = 1; switch (day) { case 1: cout << "星期一"; // 忘记break case 2: cout << "星期二"; // 当day=1时,会输出"星期一星期二" break; }

9. 最佳实践

遵循这些实践可以让你的代码更清晰、更易维护:

1. 始终使用大括号

即使只有一行代码,也使用大括号{},这样可以避免很多错误。

2. 保持条件简单

复杂的条件可以拆分成多个变量或函数:

// 复杂条件 if ((age > 18 && hasLicense) || (age > 16 && withParent)) { // ... } // 拆分成: bool canDrive = (age > 18 && hasLicense) || (age > 16 && withParent); if (canDrive) { // ... }

3. 使用有意义的变量名

// 不好的命名: if (a > b) { ... } // 好的命名: if (userAge > minimumAge) { ... }

4. 避免深层嵌套

过多的if-else嵌套会使代码难以阅读。可以使用提前返回或拆分函数。

5. 浮点数比较要小心

由于浮点数的精度问题,不要直接比较浮点数:

// 错误方式: double d1 = 0.1 + 0.2; if (d1 == 0.3) { // 可能不成立 // ... } // 正确方式: double epsilon = 0.0001; // 足够小的误差范围 if (fabs(d1 - 0.3) < epsilon) { // ... }

总结

C++中的判断结构是编程的基础,就像生活中的决策过程。关键知识点包括:

  • if语句:处理单个条件
  • if-else:处理两种可能性
  • else if:处理多个条件
  • switch:基于固定值的多分支选择
  • 三元运算符:简单的条件赋值

记住要避免常见错误,遵循最佳实践,你的代码会更健壮、更易读。编程就像学习一门新语言,多练习是关键!