5.4循环控制
5.4.1for循环控制
5.4.1.1介绍
for循环可以让代码循环进行
5.4.1.2语法
for(1.循环变量初始化;2.循环条件;4.循环变量迭代){ 3.循环操作(多条语句); }
#include<stdio.h> void main() { int i; for (i = 1; i <= 7; i++) { printf("江南江南江南丶=%d\n", i); } }
5.4.1.3 for循环注意事项
- 循环条件是返回一个表示真(非0)假(0) 的表达式
- for(;循环判断条件;) 中的初始化和变量迭代可以不写(写到其它地方),但是 两边的分号不能省略
#include<stdio.h> void main() { int i=1; for (; i <= 7; ) { printf("江南江南江南丶=%d\n", i); i++; } }
3.循环初始值可以有多条初始化语句,但要求类型一样,并且中间用逗号隔开, 循环变量迭代也可以有多条变量迭代语句,中间用逗号隔开
#include<stdio.h> void main() { int a, b; for (a = 0, b = 0; a <= 7; a++, b += 7) { printf("a = %d\t b =%d\n", a, b); } }
5.4.1.4 for循环练习
- 打印1~100之间所有是9的倍数的整数的个数及总和
#include<stdio.h> void main() { int num; for (num = 1; num <= 100; num++) { if (num % 9 == 0) { printf("%d是9的倍数\n", num); } } }
2.完成下面的表达式输出
#include<stdio.h> void main() { int num1, num2, sum; printf("请输入一个整数:"); scanf_s("%d", &num1); for (num2 = 0; num1 >=0 ; num1--, num2++) { sum = num1 + num2; printf("%d+%d=%d\n", num1, num2, sum); } }
5.4.2 while循环
5.4.2.1基本语法
1.循环变量初始化; while(2.循环条件){ 3.循环体(多条语句); 4.循环变量迭代; }
#include<stdio.h> void main() { int a = 1; while (a <= 7) { printf("江南江南江南丶 %d\n", a); a++; } }
5.4.2.2 while注意事项
- 循环条件是返回一个表示真(非 0)假(0) 的表达式
- while 循环是先判断再执行语句
5.4.2.3 while练习
- 打印 1—100 之间所有能被 3 整除的数
#include<stdio.h> void main() { int a = 1; while (a <= 100) { if (a % 3 == 0) { printf("%d是3的倍数\n", a); } a++; } }
2.打印 40—200 之间所有的偶数
#include<stdio.h> void main() { int num = 40; while (num <= 200) { if (num % 2 == 0) { printf("%d是偶数\n", num); } num++; } }
3.不断输入姓名,直到输入 "exit" 为止[使用while 完成]
#include<stdio.h> #include<string.h> void main() { char name[20]=""; while (strcmp( name, "exit") != 0) { printf("请输入姓名\n"); scanf_s("%s", name, sizeof(name)); } printf("退出"); }
5.4.3 do while循环
5.4.3.1基本语句
1.循环变量初始化; do{ 2.循环体(多条语句); 3.循环变量迭代; }while(4.循环条件);//do – while 后面有一个分号,不能省略.
#include<stdio.h> void main() { int a = 0; do { printf("江南江南江南 %d\n", a); a++; } while (a <=7); }
5.4.3.2 do while注意事项
- 循环条件是返回一个表示真(非 0)假(0) 的表达式
- do..while 循环是先执行,再判断
5.4.3.3 do while 练习
1.打印 1—100
//打印 1—100 #include<stdio.h> void main() { int num = 1; do { printf("%d\n", num); num++; } while (num <= 100); }
2.计算 1—100 的和
//计算 1—100 的和 #include<stdio.h> void main() { int num = 1, sum = 0; do { sum = sum + num; num++; } while (num <= 100); printf("1-100的和为%d", sum); }
3.统计 1——200 之间能被 5 整除但不能被 3 整除的个数
//统计 1——200 之间能被 5 整除但不能被 3 整除的个数 #include<stdio.h> void main() { int count = 0, num = 1; do { if (num % 5 == 0 && num % 3 != 0) { count++; } num++; } while (num <= 200); printf(" 1——200 之间能被 5 整除但不能被 3 整除的个数为%d", count); }
4.如果老公同意老婆购物,则老婆将一直购物,直到老公说不同意为止
#include<stdio.h> void main() { char answer; do { printf("请输入是否同意:y/n\n"); scanf_s("%c", &answer, sizeof(answer)); getchar(); } while (answer == 'y'); printf("老公不同意老婆购物,请老婆停止购物"); }
5.4.4多重循环控制
5.4.4.1介绍
- 将一个循环放在另一个循环体内,就形成了嵌套循环。其中,for ,while ,do…while 均可以作为外层循环和内层循环。【建议一般使用两层,最多不要超过 3 层】, 如果嵌套循环过多,会造成可读性降低
- 实质上,嵌套循环就是把内层循环当成外层循环的循环体。当只有内层循环的循环条件为 false 时,才会完全跳出内层循环,才可结束外层的当次循环,开始下一次的循环
- 设外层循环次数为m次,内层为 n 次,则内层循环体实际上需要执行m*n 次
5.4.4.2 多重循环练习
- 统计 3 个班成绩情况,每个班有 5 名同学,求出各个班的平均分和所有班级的平均分[学生的成绩从键盘输入]
#include<stdio.h> void main() { int classNum = 1, studentNum = 1, count = 0; double score = 0.0, augClassScore = 0.0, totalScore = 0.0, augTotalScore = 0.0, sum = 0.0; for (classNum = 1; classNum <= 3; classNum++) {//用于控制输入成绩的班级 for (studentNum = 1; studentNum <= 5; studentNum++) {//用于控制输入成绩的学号 printf("请输入%d班%d号学生的成绩:\n", classNum, studentNum); scanf_s("%lf", &score); sum = sum + score;//计算该班级的总成绩 if (score >= 60) {//如果成绩大于60,则及格人数加1 count++; } } augClassScore = sum / 5;//计算该班级的平均成绩 totalScore = totalScore + sum;//计算所有班级的总成绩 printf("%d班的平均分为%f\n", classNum, augClassScore); sum = 0.0;//计算完该班级总成绩后,该班级的总成绩清零,方便计算下个班级的总成绩 } augTotalScore = totalScore / 15; printf("所有班级的平均分为%f,及格人数有%d人\n", augTotalScore, count); }
2.打印出九九乘法表
//打印出九九乘法表 #include<stdio.h> void main() { int firstNum, secondNum; for (firstNum = 1; firstNum <= 9; firstNum++) { for (secondNum = 1; secondNum <= firstNum; secondNum++) { printf("%d * %d = %d ", firstNum, secondNum, firstNum * secondNum); } printf("\n"); } }
3.请编写一个程序,可以接收一个整数,表示层数(totalLevel),打印出空心金字塔。
//空心金字塔 #include<stdio.h> void main() { int totalLevel, firstLevel, starCount, enterCount; printf("请输入层数:"); scanf_s("%d", &totalLevel); for (firstLevel = 1; firstLevel <= totalLevel; firstLevel++) {//控制层数 for (enterCount = 1; enterCount <= totalLevel - firstLevel; enterCount++) {//每行打印空格的数量 printf(" "); } for (starCount = 1; starCount <= 2 * firstLevel - 1; starCount++) { if (starCount == 1 || starCount == 2 * firstLevel - 1 || firstLevel == totalLevel) {//当第一层、最后一层、每行的一个和最后一个,打星 printf("*"); } else {//其余打空格 printf(" "); } } printf("\n"); } }