一. 程序执行流程
顺序: 从上向下, 顺序执行代码
分支: 根据条件判断, 决定执行代码的分支
循环: 让特定代码重复的执行
二. 分支语句
1. if 语句
语法格式
cs
if (条件) {
条件成立时,要做的事
......
}
案例
- 定义一个整数变量记录年龄
- 判断是否满 18 岁 (>=)
- 如果满 18 岁,允许进网吧嗨皮
cs
#include <stdio.h>
int main() {
// 定义一个整数变量记录年龄
int age;
printf("请输入年龄:");
scanf("%d", &age);
// 判断是否满 18 岁 (>=)
if (age >= 18) {
// 如果满 18 岁,允许进网吧嗨皮
printf("允许进网吧嗨皮\n");
}
return 0;
}
2. if...else...语句
语法格式
cs
if (条件) {
条件成立时,要做的事
......
} else {
条件不成立时,要做的事
......
}
案例
- 定义一个整数变量记录年龄
- 判断是否满 18 岁 (>=)
- 如果满 18 岁,允许进网吧嗨皮
- 否则,提示回家写作业
cs
#include <stdio.h>
int main() {
// 定义一个整数变量记录年龄
int age;
printf("请输入年龄:");
scanf("%d", &age);
// 判断是否满 18 岁 (>=)
if (age >= 18) {
// 如果满 18 岁,允许进网吧嗨皮
printf("允许进网吧嗨皮\n");
} else {
// 否则,提示回家写作业
printf("回家写作业\n");
}
return 0;
}
3. 三目运算符
|---------|--------|-----------|------------------------|
| 运算符 | 术语 | 示例 | 结果 |
| ?: | 三目运算符 | a>b?a:b; | 如果a>b,整体为结果a,否则整体结果为b |
案例
cs
#include <stdio.h>
int main() {
// 通过三目运算符求2个数的最大值
int a = 10;
int b = 20;
int c = a > b ? a : b;
printf("最大值:%d\n", c);
return 0;
}
4. if...else if...else语句
语法格式
cs
if (条件1) {
条件1成立时,要做的事
......
} else if(条件2) {
条件2成立时,要做的事
......
} else {
条件不成立时,要做的事
......
}
案例需求
- 天猫超市双 11 推出以下优惠促销活动:
-
- 购物满 50 元,打 9 折;
-
- 购物满 100 元,打 8 折;
- 购物满 200 元,打 7 折;
- 购物满 300 元,打 6 折;
- 编程计算当购物满 s 元时,实际付费多少?
cs
#include <stdio.h>
int main() {
// 1.定义变量记录购买金额 定义变量记录实际费用
float money, real_money;
// 2.输入购买金额
printf("请输入购买金额:");
scanf("%f", &money);
// 3.根据购买金额判断折扣
if (money >= 50 && money < 100) {
// 购物满 50 元,打 9 折;
real_money = money * 0.9;
} else if (money >= 100 && money < 200) {
// 购物满 100 元,打 8 折;
real_money = money * 0.8;
} else if (money >= 200 && money < 300) {
// 购物满 200 元,打 7 折;
real_money = money * 0.7;
} else if (money >= 300) {
// 购物满 300 元,打 6 折;
real_money = money * 0.6;
} else {
// 不满50 原价
real_money = money;
}
printf("购买金额: %f 实际价格: %f\n", money, real_money);
return 0;
}
优化后代码
cs
#include <stdio.h>
int main()
{
// 1.定义变量记录购买金额 定义变量记录实际费用
float money, real_money;
// 2.输入购买金额
printf("请输入购买金额:");
scanf("%f", &money);
// 3.根据购买金额判断折扣
if (money >= 300) {
// 购物满 300 元,打 6 折;
real_money = money * 0.6;
} else if (money >= 200) {
// 购物满 200 元,打 7 折;
real_money = money * 0.7;
} else if (money >= 100) {
// 购物满 100 元,打 8 折;
real_money = money * 0.8;
} else if (money >= 50) {
// 购物满 50 元,打 9 折;
real_money = money * 0.9;
} else {
// 不满50 原价
real_money = money;
}
printf("购买金额: %f 实际价格: %f\n", money, real_money);
return 0;
}
5. switch 语句
- 测试一个表达式是否等于一些可能的值,并根据表达式的值执行相应的代码块,可以使用switch语言实现
- switch可以支持数据类型:
-
- int
- 枚举类型
- char类型
switch和if区别
-
- 需要根据布尔条件来执行不同的代码块,则应使用if语句
- 需要根据表达式的值来执行不同的代码块,则应使用switch语句
案例
- 输入int类型的数据,根据结果输出不同的内容
-
- 输入1:输出Monday
- 输入2:输出Tuesday
- 输入3:输出Wednesday
- 输入4:输出Thursday
- 输入5:输出Friday
- 输入6:输出Saturday
- 输入7:输出Sunday
- 输入其它:输出error
cs
#include <stdio.h>
int main() {
// 1. 定义变量保存数据
int i;
// 2. 输入数据
printf("请输入1~7的数字:");
scanf("%d", &i);
// 3. 使用switch根据数据不同输出不同的结果
switch (i) {
case 1:
printf("Monday\n");
break;
case 2:
printf("Tuesday\n");
break;
case 3:
printf("Wednesday\n");
break;
case 4:
printf("Thursday\n");
break;
case 5:
printf("Friday\n");
break;
case 6:
printf("Saturday\n");
break;
case 7:
printf("Sunday\n");
break;
default:
printf("error\n");
}
return 0;
}
6. 分支综合案例
案例需求:
- 输入:年份(整数)和月份(整数)
- 输出:该月份的天数(整数)
思路分析
1.定义变量保存年份、月份、天数
2.输入年份和月份
3.根据月份输出天数
1、3、5、7、8、10、12月 31天
4、6、9、11月 30天
2月 非闰年 28天 闰年 29天
闰年判断:能被4整除,但不能被100整除的;或者能被400整除的年份
cs
#include <stdio.h>
int main() {
// 1.定义变量保存年份、月份、天数
int year, month, day;
// 2.输入年份和月份
scanf("%d %d", &year, &month);
// 3.根据月份输出天数
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
day = 31;
break;
case 4:
case 6:
case 9:
case 11:
day = 30;
break;
case 2:
// 2月 非闰年 28天 闰年 29天
// 闰年判断:能被4整除,但不能被100整除的;或者能被400整除的年份
if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
day = 29;
} else {
day = 28;
}
break;
default:
day = -1;
}
printf("%d 年 %d 月 有 %d 天\n", year, month, day);
return 0;
}
三. 循环语句
1. while语句(重点)
2. do...while语句
3. for语句(重点)
4. 死循环
5. 循环案例
5.1 实现1+2+3......100所有数字的累加
5.2 循环嵌套
四、跳转关键字
-
循环和switch专属的跳转:break
-
循环专属的跳转:continue
-
无条件跳转:goto
4.1 break(重点)
-
循环中break,某一条件满足时,不再执行循环体中后续重复的代码,并退出循环
4.2 continue
-
某一条件满足时,不再执行本次循环体中后续重复的代码,但进入下一次循环判断
-
-
while循环,continue 之前一定要修改计数器(条件变量),否则,导致死循环
-
4.3 goto
-
goto用于无条件跳转,尽量少用
-
-
在一种情况下可以使用goto语句:从一组嵌套的循环中跳出
-