控制结构是编程语言中用来控制程序执行流程的语句。条件语句允许程序根据不同的条件执行不同的代码块,这是实现程序逻辑判断的基础。本文将详细介绍C语言中的各种条件语句及其应用。
if语句 基本if语句 if语句是最基本的条件语句,用于在条件为真时执行特定的代码块。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #include <stdio.h> int main () { int age = 18 ; if (age >= 18 ) { printf ("你已经成年了!\n" ); } if (age >= 18 ) printf ("可以投票了!\n" ); return 0 ; }
if-else语句 if-else语句提供了两个执行路径:条件为真时执行一个代码块,条件为假时执行另一个代码块。
1 2 3 4 5 6 if (条件表达式) { } else { }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #include <stdio.h> int main () { int score = 85 ; if (score >= 60 ) { printf ("恭喜你,考试通过了!\n" ); printf ("你的分数是:%d\n" , score); } else { printf ("很遗憾,考试没有通过。\n" ); printf ("你的分数是:%d,需要达到60分\n" , score); } return 0 ; }
if-else if-else语句 当需要检查多个条件时,可以使用if-else if-else结构。
1 2 3 4 5 6 7 8 9 10 if (条件1 ) { } else if (条件2 ) { } else if (条件3 ) { } else { }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 #include <stdio.h> int main () { int score = 85 ; if (score >= 90 ) { printf ("优秀!等级:A\n" ); } else if (score >= 80 ) { printf ("良好!等级:B\n" ); } else if (score >= 70 ) { printf ("中等!等级:C\n" ); } else if (score >= 60 ) { printf ("及格!等级:D\n" ); } else { printf ("不及格!等级:F\n" ); } printf ("你的分数是:%d\n" , score); return 0 ; }
嵌套if语句 可以在if语句内部再使用if语句,这称为嵌套if语句。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 #include <stdio.h> int main () { int age = 20 ; int has_license = 1 ; if (age >= 18 ) { printf ("年龄符合要求\n" ); if (has_license) { printf ("有驾照,可以开车!\n" ); } else { printf ("没有驾照,不能开车!\n" ); } } else { printf ("年龄不够,不能开车!\n" ); } return 0 ; }
复杂嵌套示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 #include <stdio.h> int main () { int temperature = 25 ; int is_sunny = 1 ; int is_weekend = 0 ; printf ("今日天气决策系统\n" ); if (temperature > 20 ) { printf ("温度适宜(%d°C)\n" , temperature); if (is_sunny) { printf ("阳光明媚\n" ); if (is_weekend) { printf ("建议:去公园野餐!\n" ); } else { printf ("建议:午休时间到户外走走\n" ); } } else { printf ("天气阴沉\n" ); printf ("建议:室内活动\n" ); } } else { printf ("温度较低(%d°C)\n" , temperature); printf ("建议:在家休息,注意保暖\n" ); } return 0 ; }
switch语句 switch语句用于根据变量的值选择执行不同的代码块,特别适合处理多个离散值的情况。
基本switch语句 1 2 3 4 5 6 7 8 9 10 11 12 switch (表达式) { case 值1 : break ; case 值2 : break ; default : break ; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 #include <stdio.h> int main () { int day = 3 ; printf ("今天是星期" ); switch (day) { case 1 : printf ("一\n" ); break ; case 2 : printf ("二\n" ); break ; case 3 : printf ("三\n" ); break ; case 4 : printf ("四\n" ); break ; case 5 : printf ("五\n" ); break ; case 6 : printf ("六\n" ); break ; case 7 : printf ("日\n" ); break ; default : printf ("输入错误!\n" ); break ; } return 0 ; }
break语句的重要性 如果忘记写break语句,程序会继续执行下一个case,这称为”fall-through”。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 #include <stdio.h> int main () { int grade = 'B' ; printf ("没有break的情况:\n" ); switch (grade) { case 'A' : printf ("优秀!\n" ); case 'B' : printf ("良好!\n" ); case 'C' : printf ("中等!\n" ); case 'D' : printf ("及格!\n" ); default : printf ("评级完成\n" ); } printf ("\n有break的情况:\n" ); switch (grade) { case 'A' : printf ("优秀!\n" ); break ; case 'B' : printf ("良好!\n" ); break ; case 'C' : printf ("中等!\n" ); break ; case 'D' : printf ("及格!\n" ); break ; default : printf ("评级完成\n" ); break ; } return 0 ; }
利用fall-through特性 有时候fall-through特性是有用的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 #include <stdio.h> int main () { char ch = 'a' ; switch (ch) { case 'a' : case 'e' : case 'i' : case 'o' : case 'u' : case 'A' : case 'E' : case 'I' : case 'O' : case 'U' : printf ("'%c' 是元音字母\n" , ch); break ; default : printf ("'%c' 是辅音字母\n" , ch); break ; } return 0 ; }
复杂switch示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 #include <stdio.h> int main () { int choice; float num1, num2, result; printf ("简单计算器\n" ); printf ("1. 加法\n" ); printf ("2. 减法\n" ); printf ("3. 乘法\n" ); printf ("4. 除法\n" ); printf ("请选择操作(1-4):" ); scanf ("%d" , &choice); printf ("请输入两个数字:" ); scanf ("%f %f" , &num1, &num2); switch (choice) { case 1 : result = num1 + num2; printf ("%.2f + %.2f = %.2f\n" , num1, num2, result); break ; case 2 : result = num1 - num2; printf ("%.2f - %.2f = %.2f\n" , num1, num2, result); break ; case 3 : result = num1 * num2; printf ("%.2f * %.2f = %.2f\n" , num1, num2, result); break ; case 4 : if (num2 != 0 ) { result = num1 / num2; printf ("%.2f / %.2f = %.2f\n" , num1, num2, result); } else { printf ("错误:除数不能为零!\n" ); } break ; default : printf ("无效的选择!\n" ); break ; } return 0 ; }
条件运算符(三元运算符) 条件运算符是if-else语句的简化形式,适用于简单的条件判断。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 #include <stdio.h> int main () { int a = 10 , b = 20 ; int max = (a > b) ? a : b; printf ("最大值:%d\n" , max); int max2; if (a > b) { max2 = a; } else { max2 = b; } printf ("最大值(if-else):%d\n" , max2); int c = 15 ; int max_of_three = (a > b) ? ((a > c) ? a : c) : ((b > c) ? b : c); printf ("三个数的最大值:%d\n" , max_of_three); int score = 75 ; printf ("结果:%s\n" , (score >= 60 ) ? "及格" : "不及格" ); return 0 ; }
逻辑运算符在条件语句中的应用 逻辑与(&&) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #include <stdio.h> int main () { int age = 25 ; int income = 50000 ; if (age >= 18 && age <= 65 && income >= 30000 ) { printf ("符合贷款条件\n" ); } else { printf ("不符合贷款条件\n" ); } return 0 ; }
逻辑或(||) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 #include <stdio.h> int main () { char grade = 'A' ; if (grade == 'A' || grade == 'B' || grade == 'C' ) { printf ("成绩良好\n" ); } else { printf ("需要努力\n" ); } return 0 ; }
逻辑非(!) 1 2 3 4 5 6 7 8 9 10 11 12 13 #include <stdio.h> int main () { int is_logged_in = 0 ; if (!is_logged_in) { printf ("请先登录\n" ); } else { printf ("欢迎使用系统\n" ); } return 0 ; }
实际应用示例 示例1:学生成绩管理系统 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 #include <stdio.h> int main () { float score; char name[50 ]; printf ("请输入学生姓名:" ); scanf ("%s" , name); printf ("请输入成绩:" ); scanf ("%f" , &score); printf ("\n学生:%s\n" , name); printf ("成绩:%.1f\n" , score); if (score < 0 || score > 100 ) { printf ("错误:成绩应在0-100之间!\n" ); return 1 ; } if (score >= 90 ) { printf ("等级:A(优秀)\n" ); printf ("奖励:获得奖学金\n" ); } else if (score >= 80 ) { printf ("等级:B(良好)\n" ); printf ("评价:表现良好,继续努力\n" ); } else if (score >= 70 ) { printf ("等级:C(中等)\n" ); printf ("评价:还有提升空间\n" ); } else if (score >= 60 ) { printf ("等级:D(及格)\n" ); printf ("评价:刚好及格,需要加强学习\n" ); } else { printf ("等级:F(不及格)\n" ); printf ("建议:需要重修课程\n" ); } return 0 ; }
示例2:ATM机操作模拟 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 #include <stdio.h> int main () { int choice; float balance = 1000.0 ; float amount; int pin = 1234 ; int input_pin; printf ("欢迎使用ATM机\n" ); printf ("请输入PIN码:" ); scanf ("%d" , &input_pin); if (input_pin != pin) { printf ("PIN码错误,访问被拒绝!\n" ); return 1 ; } printf ("\nPIN码正确,欢迎使用!\n" ); printf ("请选择操作:\n" ); printf ("1. 查询余额\n" ); printf ("2. 存款\n" ); printf ("3. 取款\n" ); printf ("4. 退出\n" ); printf ("请输入选择(1-4):" ); scanf ("%d" , &choice); switch (choice) { case 1 : printf ("当前余额:%.2f元\n" , balance); break ; case 2 : printf ("请输入存款金额:" ); scanf ("%f" , &amount); if (amount > 0 ) { balance += amount; printf ("存款成功!当前余额:%.2f元\n" , balance); } else { printf ("存款金额必须大于0!\n" ); } break ; case 3 : printf ("请输入取款金额:" ); scanf ("%f" , &amount); if (amount > 0 ) { if (amount <= balance) { balance -= amount; printf ("取款成功!当前余额:%.2f元\n" , balance); } else { printf ("余额不足!当前余额:%.2f元\n" , balance); } } else { printf ("取款金额必须大于0!\n" ); } break ; case 4 : printf ("谢谢使用,再见!\n" ); break ; default : printf ("无效选择!\n" ); break ; } return 0 ; }
常见错误和注意事项 1. 赋值与比较的混淆 1 2 3 4 5 6 7 8 9 10 11 int x = 5 ;if (x = 10 ) { printf ("这总是会执行\n" ); } if (x == 10 ) { printf ("x等于10\n" ); }
2. 浮点数比较的问题 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 float a = 0.1 + 0.2 ;float b = 0.3 ;if (a == b) { printf ("相等\n" ); } else { printf ("不相等\n" ); } float epsilon = 0.000001 ;if (fabs (a - b) < epsilon) { printf ("近似相等\n" ); }
3. switch语句中忘记break 1 2 3 4 5 6 7 8 9 switch (grade) { case 'A' : printf ("优秀\n" ); case 'B' : printf ("良好\n" ); break ; }
4. 条件表达式的逻辑错误 1 2 3 4 5 6 7 8 9 10 11 int age = 25 ;if (age > 18 && age < 18 ) { printf ("这永远不会执行\n" ); } if (age >= 18 && age <= 65 ) { printf ("工作年龄\n" ); }
总结 条件语句是程序控制流程的重要工具。通过本文的学习,你应该掌握:
if语句 :基本的条件判断
if-else语句 :二选一的条件执行
if-else if-else语句 :多条件判断
嵌套if语句 :复杂条件的处理
switch语句 :多值选择的高效处理
条件运算符 :简单条件的简化写法
逻辑运算符 :复杂条件的组合
在实际编程中,要注意:
合理选择条件语句的类型
避免常见的语法错误
注意代码的可读性和逻辑性
处理边界条件和异常情况
掌握这些知识将为学习循环结构和编写更复杂的程序逻辑打下坚实的基础。
版权所有,如有侵权请联系我