循环语句
- 什么是循环
- 重复执行代码
- 为什么需要循环
- 循环的实现方式
- while
- do...while
- for
while语句
语法格式:
while (条件) {循环体……
}
需求:跑步5圈
示例代码:
#include <stdio.h>int main() {// 需求跑步5圈// 1. 条件变量的定义int i = 1;// 2. while 控制重复的次数while (i <= 5) {// 3. 打印跑步第几圈printf("跑步第 %d 圈\n", i);// 4. 条件改变i++;}return 0;
}
do...while语句
语法格式:
do {循环体……
} while (条件);
- do-while 循环语句是在执行循环体之后才检查 条件 表达式的值
- 所以 do-while 语句的循环体至少执行一次,do…while也被称为直到型循环
需求:跑步5圈
示例代码:
#include <stdio.h>int main() {// 需求跑步5圈// 1. 条件变量的定义int i = 1;do {// 2.1 打印跑步第几圈printf("跑步第 %d 圈\n", i);// 2.2 条件改变i++;} while ( i <= 5 ); // 3. 控制重复的次数return 0;
}
for语句
语法格式:
for ( init; condition; increment ) {循环体
}
- init会首先被执行,且只会执行一次
- 接下来,会判断 condition,如果条件condition为真
- 在执行完 for 循环主体后,控制流会跳回上面的 increment 语句
- 条件再次被判断
需求:跑步5圈
示例代码:
#include <stdio.h>int main() {// 需求跑步5圈for (int i = 1; i <= 5; i++) {printf("跑步第 %d 圈\n", i);}return 0;
}
死循环
- 条件永远为真的循环就是死循环
- 示例代码
#include <stdio.h>int main() {// while (1) {// printf("根本停不下来\n");// }for(;;) {printf("根本停不下来\n");}return 0;
}
循环案例
实现1+2+3……100所有数字的累加
#include <stdio.h>int main() {// 需求:实现1+2+3……100所有数字的累加// 定义条件变量初始值为1int i = 1;// 定义累加变量,初始值为0int sum = 0;// 循环控制100次while (i <= 100) {// 累加sum += i;// 条件改变i++;}// 循环外面,打印最终的累加和printf("sum = %d\n", sum);// for循环实现int temp = 0;for (int i = 1; i <= 100; i++) {temp += i;}printf("temp = %d\n", temp);return 0;
}
循环嵌套
需求如下:
通过for循环嵌套打印内容:
* * * * *
* * * * *
* * * * *
* * * * *
* * * * *
说明:
1)每行有5个*,总共有5行
2)*之间有空格隔开
3)printf()1次只能打印1个*
示例代码:
#include <stdio.h>int main() {for (int i = 0; i <= 4; i++) {for (int j = 0; j <= 4; j++) {printf("* ");}printf("\n");}return 0;
}
跳转关键字
- 循环和switch专属的跳转:break
- 循环专属的跳转:continue
- 无条件跳转:goto
break
- 循环的break说明
- 某一条件满足时,不再执行循环体中后续重复的代码,并退出循环
- 需求:一共吃5碗饭, 吃到第3碗吃饱了, 结束吃饭动作
示例代码:
#include <stdio.h>int main() {// 需求: 一共吃5碗饭, 吃到第3碗吃饱了, 结束吃饭动作// 1. 定义条件变量,为了查看方便, 计数器从 1 开始int i = 1;while (i <= 5) { // 2. 控制条件if (i == 3) {printf("吃饱了,不吃了\n");break; // 结束循环,退出循环}printf("吃第 %d 碗饭\n", i);// 3. 条件变量改变i++;}return 0;
}
continue
- 某一条件满足时,不再执行本次循环体中后续重复的代码,但进入下一次循环判断
- while循环,continue 之前一定要修改计数器(条件变量),否则,导致死循环
- 需求:一共吃5个苹果,吃到第3个遇到虫子,这个跳过不吃,下一个继续
示例代码:
#include <stdio.h>int main() {// 需求: 一共吃5个苹果,吃到第3个遇到虫子,这个跳过不吃,下一个继续// 1. 定义条件变量,为了查看方便, 计数器从 1 开始int i = 1;while (i <= 5) { // 2. 控制条件if (i == 3) {printf("这个有虫子,不吃了\n");i++; // continue 之前一定要修改计数器(条件变量),否则,导致死循环continue;; // 跳过本次循环,下次继续}printf("吃第 %d 个苹果\n", i);// 3. 条件变量改变i++;}return 0;
}
goto
- goto用于无条件跳转
- 在一种情况下可以使用goto语句:从一组嵌套的循环中跳出
- goto语句可以导致代码不易理解和维护,并且容易引入不必要的错误。因此,除非必要,最好不要使用goto语句
示例代码:
#include <stdio.h>int main() {int i = 0;while (i < 3) {if(i == 1) {goto End; // 跳转到End标签}printf("i = %d\n", i);i++;}End:printf("this is ending!\n");return 0;
}