第四课:条件语句与逻辑控制
本章将学习如何使用条件语句(如 if、else 和 switch)和逻辑操作符(如 &&、|| 和 !)来控制程序的执行路径。这是编写灵活程序的核心能力。
条件语句:if 和 else
条件语句通过布尔条件的真假来决定程序的执行路径。
语法结构:
c
if (条件) {
// 条件为真时执行的代码
} else if (另一个条件) {
// 另一个条件为真时执行的代码
} else {
// 所有条件均为假时执行的代码
}
示例:
c
#include <stdio.h>
int main(void) {
int age;
printf("请输入你的年龄:");
scanf("%d", &age);
if (age < 18) {
printf("你是未成年人。\n");
} else if (age < 60) {
printf("你是成年人。\n");
} else {
printf("你是老年人。\n");
}
return 0;
}
逻辑操作符
逻辑操作符用于组合或反转条件,形成更复杂的判断逻辑:
&&
(与):所有条件都为真时,结果为真。||
(或):只要一个条件为真,结果为真。!
(非):将条件的真假反转。
示例:
c
#include <stdio.h>
int main(void) {
int num;
printf("请输入一个整数:");
scanf("%d", &num);
if (num > 0 && num % 2 == 0) {
printf("这个数是正偶数。\n");
} else if (num > 0 && num % 2 != 0) {
printf("这个数是正奇数。\n");
} else if (num < 0) {
printf("这个数是负数。\n");
} else {
printf("这个数是零。\n");
}
return 0;
}
条件语句:switch
switch
是另一种条件分支控制方法,适合处理多个可能值的情况。
语法结构:
c
switch (表达式) {
case 值1:
// 当表达式等于值1时执行的代码
break;
case 值2:
// 当表达式等于值2时执行的代码
break;
default:
// 当所有 case 都不匹配时执行的代码
}
示例:
c
#include <stdio.h>
int main(void) {
int day;
printf("请输入一个数字(1~7):");
scanf("%d", &day);
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("输入无效!请输入1~7的数字。\n");
}
return 0;
}
综合示例:猜数字游戏
将 if
和 switch
结合在一个示例中。
c
#include <stdio.h>
#include <stdlib.h> // rand() 和 srand() 函数都定义在 <stdlib.h> 中
#include <time.h>
int main(void) {
int target, guess;
// 初始化随机数种子
srand((unsigned)time(NULL)); // 用当前时间初始化随机数种子,确保每次运行生成不同的随机数序列
target = rand() % 100 + 1; // 生成一个 1 到 100 的随机整数
printf("欢迎来到猜数字游戏!\n");
printf("系统已生成一个 1~100 的数字,请猜测:\n");
while (1) { // 创建一个无限循环,通常配合 break 控制语句结束
printf("请输入你的猜测:");
scanf("%d", &guess);
if (guess < target) {
printf("太小了,请再试一次!\n");
} else if (guess > target) {
printf("太大了,请再试一次!\n");
} else {
printf("恭喜你,猜对了!\n");
break;
}
}
return 0;
}
练习
- 编写程序,判断一个输入的年份是否是闰年。
- 修改猜数字游戏:
- 限制玩家最多猜 10 次。
- 如果猜错 10 次,显示游戏失败。