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 }

 

posted @ 2020-02-22 16:54  shanlu  阅读(376)  评论(0编辑  收藏  举报