多重循环
1)将一个循环放在另一个循环体内,就形成了嵌套循环。其中,for ,while ,do…while 均可以作为外层循环和内层 循环。【建议一般使用两层,最多不要超过 3 层】, 如果嵌套循环过多,会造成可读性降低
2)实质上,嵌套循环就是把内层循环当成外层循环的循环体。当只有内层循环的循环条件为 false 时,才会完全 跳出内层循环,才可结束外层的当次循环,开始下一次的循环, 举例说明。
3)设外层循环次数为 m 次,内层为 n 次,则内层循环体实际上需要执行 m*n 次
应用实例
1)统计 3 个班成绩情况,每个班有 5 名同学,求出各个班的平均分和所有班级的平均分[学生的成绩从键盘输入]。统计三个班及格人数,每个班有 5 名同学。
#include<stdio.h>
#include<string.h>
void main(){
//1) 统计 3 个班成绩情况,每个班有 5 名同学,求出各个班的平均分和所有班级的平均分[学生的成绩从键盘输入]。
//2) 统计三个班及格人数,每个班有 5 名同学。
// 编程技巧 1. 先死后活 2. 先简单再复杂(分解) 3. 根据需要增加或修改相应的代码
//1. 各个班的平均分
//2. 所有班级的平均分, 得到所有班级的总分 allClassTotalScore
//3. 定义变量表示 班级个数 classNum , 定义变量表示 学生个数 stuNum
//4. 定义变量 classTotalScore 每个班级总分
//5. 定义变量 score , 接收学生成绩
//6. 使用两层 for 循环
//增加新功能 统计三个班及格人数,每个班有 5 名同学
//分析
//1. 定义一个变量 count ,保存及格人数
//2. 当接收到一个学生成绩后,就看看是否及格,如果及格,则累计到 count
int stuNum = 5;
int classNum = 3;
double classTotalScore = 0.0;
double score = 0.0;
double allClassTotalScore = 0.0;
int count;
int i,j; //内层外层循环
for(i = 1;i<= classNum;i++){
classTotalScore = 0.0; //清空一个循环的分数
for(j=1;j<=stuNum;j++){
printf("\n请输入第%d个班的第%d个学生的成绩:",i,j);
scanf("%lf",&score);
if(score > 60){
count++;
}
classTotalScore += score; //累计成绩
}
allClassTotalScore += classTotalScore; //累计所有班级成绩
printf("\n第%d个班级的平均分 = %.2f", i, classTotalScore / stuNum);
}
printf("\n所有班级的平均分 = %.2f", allClassTotalScore / (stuNum * classNum));
printf("\n所有班级的及格人数 = %d", count);
getchar();
getchar();
}
2)打印出九九乘法表
#include<stdio.h>
void main() {
int i,j;
for(i = 1; i<=9; i++) {
for(j = 1; j <= i;j++){
printf("%d * %d = %d ",j,i,j*i);
}
printf("\n");
}
}