Appearance
判断
在C语言中,判断语句用于根据条件的真假来执行不同的代码块。这些语句使程序能够根据不同的情况做出不同的决策,是实现程序逻辑的重要组成部分。在本章节中,我们将学习C语言中的各种判断语句及其使用方法。
1. if语句
if语句是C语言中最基本的判断语句,用于当条件为真时执行特定的代码块。
1.1 语法
c
if (条件) {
// 条件为真时执行的代码
}1.2 说明
- 条件:一个表达式,其结果为真(非0)或假(0)
- 代码块:当条件为真时执行的语句,用花括号
{}包围 - 如果代码块只包含一条语句,可以省略花括号
1.3 示例
c
#include <stdio.h>
int main() {
int age = 18;
if (age >= 18) {
printf("你已经成年了!\n");
}
// 省略花括号的情况
if (age > 0)
printf("年龄是正数\n");
return 0;
}2. if-else语句
if-else语句用于当条件为真时执行一个代码块,当条件为假时执行另一个代码块。
2.1 语法
c
if (条件) {
// 条件为真时执行的代码
} else {
// 条件为假时执行的代码
}2.2 示例
c
#include <stdio.h>
int main() {
int num = 5;
if (num % 2 == 0) {
printf("%d是偶数\n", num);
} else {
printf("%d是奇数\n", num);
}
return 0;
}3. if-else if-else语句
if-else if-else语句用于处理多个条件的情况,可以根据不同的条件执行不同的代码块。
3.1 语法
c
if (条件1) {
// 条件1为真时执行的代码
} else if (条件2) {
// 条件2为真时执行的代码
} else if (条件3) {
// 条件3为真时执行的代码
} else {
// 所有条件都为假时执行的代码
}3.2 说明
- 条件会按顺序逐个检查,一旦找到第一个为真的条件,就执行对应的代码块,然后跳过整个if-else if-else结构
- 如果所有条件都为假,则执行else代码块
- else部分是可选的
3.3 示例
c
#include <stdio.h>
int main() {
int score = 85;
if (score >= 90) {
printf("优秀\n");
} else if (score >= 80) {
printf("良好\n");
} else if (score >= 60) {
printf("及格\n");
} else {
printf("不及格\n");
}
return 0;
}4. 嵌套if语句
嵌套if语句是指在一个if语句的代码块中包含另一个if语句,用于处理更复杂的条件逻辑。
4.1 语法
c
if (条件1) {
// 条件1为真时执行的代码
if (条件2) {
// 条件1和条件2都为真时执行的代码
} else {
// 条件1为真但条件2为假时执行的代码
}
} else {
// 条件1为假时执行的代码
}4.2 示例
c
#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;
}5. switch语句
switch语句是一种多分支选择语句,用于根据表达式的值选择执行不同的代码块,比if-else if-else语句更简洁。
5.1 语法
c
switch (表达式) {
case 值1:
// 表达式等于值1时执行的代码
break;
case 值2:
// 表达式等于值2时执行的代码
break;
case 值3:
// 表达式等于值3时执行的代码
break;
default:
// 表达式不等于任何case值时执行的代码
break;
}5.2 说明
- 表达式:通常是一个整型或字符型表达式
- case:每个case后面跟一个常量值
- break:用于跳出switch语句,防止执行下一个case的代码
- default:可选的,当表达式不等于任何case值时执行
5.3 示例
c
#include <stdio.h>
int main() {
char grade = 'B';
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;
}5.4 注意事项
- case值必须是常量:case后面的值必须是常量表达式,不能是变量
- break语句:如果没有break语句,会发生"穿透"现象,即执行完当前case后会继续执行下一个case的代码
- default的位置:default可以放在switch语句的任何位置,但通常放在最后
5.5 穿透现象示例
c
#include <stdio.h>
int main() {
int month = 2;
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
printf("该月有31天\n");
break;
case 4:
case 6:
case 9:
case 11:
printf("该月有30天\n");
break;
case 2:
printf("该月有28或29天\n");
break;
default:
printf("无效的月份\n");
break;
}
return 0;
}在这个例子中,我们利用了穿透现象来处理多个case值对应相同操作的情况。
6. 条件运算符(三元运算符)
条件运算符(三元运算符)是一种简洁的条件判断表达式,可以替代简单的if-else语句。
6.1 语法
c
条件 ? 表达式1 : 表达式26.2 说明
- 如果条件为真,执行表达式1并返回其结果
- 如果条件为假,执行表达式2并返回其结果
6.3 示例
c
#include <stdio.h>
int main() {
int a = 10, b = 20;
int max;
// 使用条件运算符
max = (a > b) ? a : b;
printf("最大值: %d\n", max); // 20
// 直接在printf中使用
printf("%d是%s\n", a, (a % 2 == 0) ? "偶数" : "奇数"); // 偶数
return 0;
}7. 逻辑运算符与判断语句
逻辑运算符(&&、||、!)常用于组合多个条件,使判断语句更加灵活。
7.1 示例
c
#include <stdio.h>
int main() {
int age = 25;
int has_id = 1;
int has_ticket = 1;
// 使用逻辑与&&
if (age >= 18 && has_id) {
printf("你可以进入\n");
}
// 使用逻辑或||
if (has_ticket || age < 5) {
printf("你可以免费进入\n");
}
// 使用逻辑非!
if (!has_id) {
printf("请出示身份证\n");
}
return 0;
}8. 注意事项
- 条件表达式的结果:在C语言中,任何非零值都被视为真,零被视为假
- 花括号的使用:即使代码块只有一条语句,也建议使用花括号,提高代码可读性和可维护性
- 嵌套层级:避免过多的嵌套if语句,以免代码难以理解
- switch vs if-else if-else:对于多个固定值的判断,switch语句通常比if-else if-else语句更高效
9. 示例:综合运用
让我们看一个综合运用各种判断语句的例子:
c
#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);
if (choice >= 1 && choice <= 4) {
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;
}
} else {
printf("无效的选择\n");
}
return 0;
}小结
C语言提供了多种判断语句,用于根据条件执行不同的代码块:
- if语句:用于单一条件的判断
- if-else语句:用于两个互斥条件的判断
- if-else if-else语句:用于多个条件的判断
- 嵌套if语句:用于复杂的条件逻辑
- switch语句:用于多分支选择,特别是当条件是固定值时
- 条件运算符:用于简洁的条件判断
这些判断语句使程序能够根据不同的情况做出不同的决策,是实现程序逻辑的重要工具。在实际编程中,应根据具体情况选择合适的判断语句,以提高代码的可读性和效率。