文章目录
选择语句与循环语句
C语言是结构化的程序设计语言
- 顺序结构
- 选择结构
- 循环结构
一、选择语句(分支语句)
1.1 if
语句
-
语句结构
if(逻辑表达式) { 语句体1; } else { 语句体2; }
解释: 如果逻辑表达式成立,就执行语句体1;否则,执行语句体2(else可以省略)
-
应用举例
if else
语句#include <stdio.h> int main(void) { int choose = 0; printf("是否将开关打开(0/1):"); scanf("%d", &choose); if (choose == 1) { printf("打开\n"); } else if(choose == 0) { printf("关闭\n"); } else { printf("错误输入\n"); } return 0; }
if(表达式) { 语句列表; }
- 如果表达式的结果为真,则语句执行
- 0表示假,非0表示为真
if else(表达式) { 语句列表; }
if else
语句,是紧接在if
语句后的带有选择条件的else
语句- 如果表达式的结果为真,则语句执行
else { 语句列表; }
- 一般位于
if else
语句的最后,作用于其它未被选择的条件,类似于集合与其补集的关系else
遵循就近原则,即else与离其最近的if匹配
例1:if
语句实现判断奇偶数
int main() { while(1) { int num = 0; printf("输入一个数:"); scanf("%d", &num); if (num % 2 == 1) printf("%d为奇数\n", num); else printf("%d为偶数\n", num); } return 0; }
输出结果
输入一个数:1 1为奇数 输入一个数:12 12为偶数 输入一个数:123 123为奇数
例2:if
语句输出1-100之间的奇数
//定义一个可返回奇数的函数 int Retu_J(int Num) { if (1 == Num % 2) { return Num; } else return 0; } int main() { int i = 0; int num = 0; while (i <= 100) { num = Retu_J(i); if (num) { printf("%d ", num); } i++; } return 0; }
输出结果
1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61 63 65 67 69 71 73 75 77 79 81 83 85 87 89 91 93 95 97 99
此处运用了外部函数的调用来实现函数功能,当然除此之外还有更加简便的写法,此处不过多赘述。
1.2 switch
语句
switch语句也是一种分支语句,但通常用于多分支的情况。
-
语句结构
switch(整形变量) { case 常量1 : 语句体1 ; break; case 常量2 : 语句体2 ; break; ...... default : 语句体x ; break; }
含义: 将变量与case后的各个常量对比,若有相等,则执行相应的语句;若全不等,则执行
default
后面的语句。 -
switch
应用举例int main() { int day; while (1) { 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("没有这一天\n"); break; } } return 0; }
- 输出结果:
5 星期五 6 星期六 9 没有这一天
-
switch
应用举例:case穿透使用switch实现的代码功能:
当输入1~5时,输出工作日;
当输入6~7时,输出周末;
int main() { int day = 1; while(1) { scanf("%d", &day); switch (day) { case 1: case 2: case 3: case 4: case 5: printf("工作日\n"); break; case 6: case 7: printf("周末\n"); break; default: printf("输入错误\n"); break; } } return 0; }
- 输出结果:
1 工作日 6 周末 9 输入错误
case穿透可以实现多个case匹配同一个执行语句
二、循环语句
2.1 while
循环
-
语句结构
while(逻辑表达式) { 循环体; }
解释: 如果逻辑表达式成立,则执行循环体,执行后再次判断,直至不成立时才停止执行。
-
while
循环执行流程图 -
while
应用举例代码实现功能: 打印数字1~10
int main() { int a = 1; while (a <= 10) { printf("%d ", a); a++; } return 0; }
- 输出结果:
1 2 3 4 5 6 7 8 9 10
-
break
中止while
循环break
可以永久的中止整个循环int main() { int a = 1; while (a <= 10) { if (5 == a) break;//此代码执行时,会直接跳出while循环 printf("%d ", a); a++; } return 0; }
- 输出结果:
1 2 3 4
-
continue
跳过本次while
循环continue
被执行时,会跳过continue后面的语句(结束本次循环),直接去判断部分,进行下一次循环的判断int main() { int a = 0; while (a <= 9) { a++; if (5 == a) continue; printf("%d ", a); } return 0; }
因此在
a=5
时,continue被执行,程序将直接结束本次循环,开始下一次循环,故而等于5时的a没有被打印- 输出结果:
1 2 3 4 6 7 8 9 10//输出结果中的5被直接跳过
注意:变量
a
的变化应在continue之前,否则会陷入死循环
2.2for
循环
-
语句结构
for(初始化;逻辑表达式;更改条件) { 循环体; }
解释: 先执行初始化,再判断逻辑表达式。若逻辑表达式成立,则执行循环体,执行后更改条件,再判断逻辑表达式,以此往复,直至逻辑表达式不成立才停止循环。
- 初始化: 用于初始化循环变量
- 逻辑表达式: 条件判断,不满足循环条件则停止循环
- 更改条件: 用于循环条件的调整
-
for
循环执行流程图 -
for
循环应用举例*代码实现功能:*打印数字1~10
int main() { int i = 1; for (i = 1; i <= 10; i++) { printf("%d ", i); } return 0; }
- 输出结果:
1 2 3 4 5 6 7 8 9 10
-
break
中止for
循环int main() { int i = 0; for (i = 1; i <= 10; i++) { if (i == 7) break; printf("%d ", i); } return 0; }
- 输出结果:
1 2 3 4 5 6
当
i==7
时,执行break
命令,直接结束整个循环。因此输出结果中只打印了1至6。 -
continue
跳过本次while
循环continue
被执行时,会跳过continue后面的语句(结束本次循环),直接去判断部分,进行下一次循环的判断。因此在输出中跳过了7的打印。int main() { int i = 0; for (i = 1; i <= 10; i++) { if (i == 7) continue; printf("%d ", i); } return 0; }
- 输出结果:
1 2 3 4 5 6 8 9 10
-
注意事项
尽量别在
for
循环体内修改循环变量,防止for
循环失去控制。
2.2.1 for
循环的一些变种
-
for
循环的初始化部分、判断部分、调整部分是可以省略的int main() { for (;;) { printf("1 "); } return 0; }
此时程序会陷入死循环
-
for
循环的嵌套int main() { int i = 0; int j = 0; for (i = 0; i < 3; i++) { for (j = 0; j < 3; j++) { printf("A "); } } return 0; }
-
输出:
A A A A A A A A A
此时将打印
3x3=9
个A
若将for循环的初始化部分省略掉:
int main() { int i = 0; int j = 0; for (; i < 3; i++) { for (; j < 3; j++) { printf("A "); } } return 0; }
-
输出:
A A A
此时只打印3个A
-
-
多变量控制
for
循环int main() { int x = 0; int y = 0; for (x = 0, y = 0; x < 4 && y < 9; x++, y++) { printf("A "); } return 0; }
-
输出:
A A A A
-
2.2.2 例题
#include <stdio.h> int main() { int i = 0; int k = 0; for (i = 0, k = 0; k = 0; i++, k++) k++; return 0; }
问: 循环多少次?
解释:
for循环
的逻辑表达式k=0
是赋值,可理解为:k为假。因此这里不会进入循环,循环次数为0次。【要区分清
=
和==
的不同】
2.3 do...while
循环
-
语句结构
do 循环体; while(表达式);
**解释:**先执行循环体,再判断表达式,如若表达式成立,则继续循环,反之则跳出循环。
do...while
语句的特点:循环体至少会执行一次 -
do...while
循环执行流程图 -
do...while
循环应用举例*代码实现功能:*打印数字1~10
int main() { int i = 0; do { i++; printf("%d ", i); } while (i < 10); return 0; }
-
输出结果:
1 2 3 4 5 6 7 8 9 10
-
-
break
中止do...while
循环int main() { int i = 0; do { i++; if (i == 7) break; printf("%d ", i); } while (i < 10); return 0; }
-
输出结果:
1 2 3 4 5 6
-
-
continue
跳过本次do...while
循环int main() { int i = 0; do { i++; if (i == 7) continue; printf("%d ", i); } while (i < 10); return 0; }
-
输出结果:
1 2 3 4 5 6 8 9 10
-