第四章:循环结构
一、循环的理解
- 循环:通过某个条件,重复并且有规律的执行一段代码。
- 循环的组成部分:循环变量的初始化、循环条件、循环变量的改变、循环体
- 循环分类:while循环、do...while循环、for循环
二、while循环
-
语法:
// 循环变量的初始化 while(循环条件){ // 循环体(重复执行的功能代码) // 循环变量的改变 }
-
执行原理:
先执行循环的初始化,接着判断循环条件,如果条件满足-结果为true,执行{}中循环体,从而执行循环变量改变,再次判断循环条件,如果满足-结果为true,执行{}中循环体,从而执行循环变量的改变,再次判断循环条件...直到循环条件不满足,结果为false,终止、结束整个循环结构,继续执行循环结构后续代码....
-
执行特点:
(1) while循环是先判断,再执行 (2) 执行次数为:0~n次
-
案例:
(1) 打印输出 100遍 "hello world" #include <stdio.h> void main(){ int n = 1; while(n<=100){ printf("hello world--%d\n",n); n++; } printf("\nending..."); } (2) 计算 1+2+3+44+...+100的和,并打印输出 #include <stdio.h> void main(){ int n = 1; int sum = 0; while(n<=100){ sum += n; n++; } printf("sum=%d",sum); printf("\nending..."); }
三、do...while循环
-
语法:
// 循环变量的初始化 do{ // 循环体 // 循环变量的改变 }while(循环条件); // 分号不能省略
-
执行原理:
先执行循环变量的初始化,接着执行循环体,同时循环变量改变,然后判断循环条件,条件满足,则再次执行循环体,循环变量的改变,再次的判断循环条件...直到循环条件不满足,结果为false,终止、跳出整个循环结构,继续执行循环结构后续内容。
-
执行特点:
(1) do..while循环先执行,再判断 (2) 执行次数:1~n次
-
案例:
(1) 打印输入 100遍 "hello world" #include <stdio.h> void main(){ int n = 1; do{ printf("hello world--%d\n",n); n++; } while(n<=100); printf("\nending..."); } (2) 计算 1+2+3+44+...+100的和,并打印输出 #include <stdio.h> void main(){ int n = 1; int sum = 0; do{ sum += n; n++; } while(n<=100); printf("sum=%d",sum); printf("\nending..."); }
四、for循环
-
语法:
for(①循环变量的初始化; ②循环条件 ; ③循环变量的改变){ // ④循环体 }
-
执行原理:
首先执行循环变量的初始化②,然后执行循环条件②,如果循环条件满足,结果为true,则执行循环体④,接着执行循环变量的改变③;然后再判断循环条件②,如果条件满足,结果为true,则执行循环体④,接着执行循环变量的改变③;再次判断循环条件.....直到循环条件不满足,结果为false,终止、结束循环结构,继续执行循环结构后续内容。
-
执行特点:
(1) for循环的特点:先判断,再执行 (2) 执行的次数:0~n次
-
案例:
(1) 打印输入 100遍 "hello world" #include <stdio.h> void main(){ int i; for(i=1;i<=100;i++){ printf("hello world--%d\n",i); } printf("\nending..."); } (2) 计算 1+2+3+44+...+100的和,并打印输出 #include <stdio.h> void main(){ int i; int sum = 0 ; for(i=1;i<=100;i++){ sum += i; } printf("sum=%d",sum); printf("\nending..."); } (3) 计算1~100之间能被3整除,但是不能被5整除的所有数据之和,并打印输出。 #include <stdio.h> void main(){ int i; int sum = 0 ; for(i=1;i<=100;i++){ if(i%3==0 && i%5!=0){ sum += i; } } printf("sum=%d",sum); printf("\nending..."); }
五、循环控制语句
-
break:结束、终止当前循环结构
(1) 从100开始计算累加和,当累加和大于500时,停止计算。 #include <stdio.h> void main(){ int i; int sum = 0 ; for(i=100; ;i++){ sum += i; if(sum>500) break; } printf("sum=%d",sum); printf("\nending..."); }
-
continue:中止、结束本次循环,从而进入下一次循环
(2) 打印输出 100~300之间所有的数据,遇到7的倍数跳过。 #include <stdio.h> void main(){ int i; for(i=100; i<=300 ;i++){ if(i%7==0 ) continue; printf("%d\n",i); } printf("\nending..."); }
六、循环的嵌套
-
循环的嵌套:在循环结构中又定义完整的循环结构
案例: #include <stdio.h> void main(){ int i; int j; // 外层循环 for(i=1; i<=3 ;i++){ // 内层循环 for(j=1;j<=4;j++){ printf("i=%d,j=%d\n",i,j); } } printf("\nending..."); } 打印输出结果: i=1,j=1 i=1,j=2 i=1,j=3 i=1,j=4 i=2,j=1 i=2,j=2 i=2,j=3 i=2,j=4 i=3,j=1 i=3,j=2 i=3,j=3 i=3,j=4
-
循环次数:外层循环的循环次数*内层循环的循环次数
-
利用循环打印图形时:通常利用外层循环控制行,内层循环控制列
案例:打印输出9行8列的矩形 #include <stdio.h> void main(){ int i; int j; // 外层循环:控制行数 for(i=1; i<=9 ;i++){ // 内层循环 :控制列数 for(j=1;j<=8;j++){ printf("*"); } printf("\n") ; } printf("\nending..."); } 打印输出结果: ******** ******** ******** ******** ******** ******** ******** ******** ********
-
还可以利用外层循环控制内层循环
打印一个直角三角形 #include <stdio.h> void main(){ int i; int j; // 外层循环:控制行数 for(i=1; i<=9 ;i++){ // 内层循环 :控制列数 for(j=1;j<=i;j++){ printf("* "); } printf("\n") ; } printf("\nending..."); } 打印输出结果: * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 输出以下 4X5 的矩阵。 1 2 3 4 5 2 4 6 8 10 3 6 9 12 15 4 8 12 16 20 #include <stdio.h> void main(){ int i; int j; // 外层循环:控制行数 for(i=1; i<=4 ;i++){ // 内层循环 :控制列数 for(j=1;j<=5;j++){ printf("%d\t",i*j); } printf("\n") ; } printf("\nending..."); } 打印输出结果: 1 2 3 4 5 2 4 6 8 10 3 6 9 12 15 4 8 12 16 20