23 多重循环控制
1,将一个循环放在另一个循环中,就形成了嵌套循环,其中,for while do...while 都可以作为外层循环和内层循环。建议一般使用两层,最多不要超过3层,如果嵌套循环过多,会造成可读性降低
2,实质上,嵌套循环就是把内层循环当成外层循环的循环体,当只有内层循环的循环条件为 false 时,才会完全跳出内层循环,才可结束外层的当次循环,开始下一次的循环
3,设外层循环次数为 m 次,内层循环为 n 次,则内层循环体实际上需要执行 m*n 次。
4,练习,
统计3个班成绩情况,每个班有5名同学,求出各个班的平均分,以及所有班级的平均分,学生的成绩从键盘输入。
统计三个班的及格人数。
①先求出一个班的平均分
②再求出各个班级的平均分
注意,若不对变量清零,即若缺少 61 行代码,第二个班级的总分在第一个班级的总分上累加
③求出所有班级的平均分
注意,统计所有学生的成绩,变量 allscore+=total 不能放在 67 行下面,
这样 allscore 第一次统计的是第一次total(第一个班级第一个成绩),第二次统计的是第一次total (第一个班级第一个成绩)和第二次 total (第一个班级第一个成绩 和第一个班级第二个成绩之后),就会将前一次成绩累计统计。应当在 total 处理完一个班级,即结束内层 for 循环之后,把每个班级的 total 类加到 allscore上
④统计及格人数
1 #include<stdio.h> 2 3 void main() { 4 int stuNum = 5; //定义一个变量保存学生的人数 5 double score = 0.0; //定义一个变量保存输入的学生成绩 6 double total = 0.0; //定义一个变量保存班级总分 7 double avg = 0.0; //定义一个变量保存班级平均分 8 int classNum = 3;//定义一个变量用来保存班级人数 9 double allscore = 0.0; //定义一个变量用来保存所有学生的分数 10 double allavg = 0.0; //定义一个变量用来保存所有班级的平均分 11 int count = 0; //定义一个变量统计及格人数 12 for (int j = 1;j <= classNum;j++) { 13 total = 0; //每循环一个班级之后,班级总分需要清零 14 for (int i = 1;i <= stuNum;i++) { 15 printf("请输入第%d个班级的第%d个学生的成绩:",j,i); 16 scanf("%lf", &score); 17 if (score >= 60) { 18 count++; 19 } 20 total += score; 21 } 22 allscore += total; 23 avg = total / stuNum; 24 printf("第%d个班级的平均分是:%.2f\n", j, avg); 25 } 26 allavg = allscore / (stuNum * classNum); 27 printf("所有班级的平均分是:%.2f\n", allavg); 28 printf("及格人数是%d人", count); 29 }