循环嵌套:
含义:一个循环体内完整的包含另一个循环
用途:
1、打印行列数字
例:打印四行四列的数字
1 2 3 4
1 2 3 4
1 2 3 4
1 2 3 4
分析:
a、需要使用两个循环。一个循环控制行,一个循环控制列。
b、外层循环控制行,内层循环控制列
for (int i = 1; i <= 4; i++) {
for (int j = 1; j <= 4;j++) {
printf("%d ",j);
}
printf(" \n");
}
例:打印如下数字
1
1 2
1 2 3
1 2 3 4
1 2 3 4 5
分析:每一行打印的数字和所在的行数对应。第二层的循环条件即为 j<=i;
for (int i = 1; i <= 5; i++) {
for (int j = 1; j <= i;j++) {
printf("%d ",j);
}
printf("\n");
}
2、处理多位数
例:打印三个数字(0~9)的可能组合
分析:使用三层循环i,j,k分表表示百十个位上得数,其中百位数不能为0.
for (int i = 1; i <= 9; i++) {
for (int j = 0; j <= 9;j++) {
for (int k = 0; k<= 9; k++) {
printf("%d", i*100 + j*10 + k);
}
}
}
3、二维及多维数组
数组和循环是配套使用的,有数组必定要使用循环。
数组使用循环进行赋值或遍历,数组有几维就要使用基层循环。
对于二维数字来说:i代表行数,j代表列数。
对于三维数组需要增加层数,即多一层循环,代表层数。
例:遍历如下数组并打印所有字符
char names[3][30] = {"zhangsan","lisi", "wangwu"};
for (int i =0; i < 3; i++) {
for (int j = 0; j < 30; j++) {
printf("%c ", names[i][j]);
}
printf("\n");
}
例:
对如下字符串数组从小到大排序
char names[5][20] = {"zhangsan", "lisi","wangwu", "zhaoliu", "qianliu"};
for (int i = 0; i < 4; i++) {
for (int j = 0; j <4-i; j++) {
char temp[20] = {0};
if (strcmp(names[j],names[j+1]) ) > 0) {
strcpy(temp,names[j]);
strcpy(names[j],names[j+1]);
strcpy(names[j+1],temp);
}
}
}
for (int i =0; i < 5; i++) {
printf("%s\n",names[i]);
}
规律:
根据要实现的功能,内层循环的循环条件要进行相应的改变。
1、
内层循环的输出为每行的列数,即每行数字的表现形式。如:第一行打印一个数字,第二行打印2个数字,以此类推,此时内层循环的循环条件应为:j <= i , i
是从1开始。
外层循环负责输出的行数,在外层循环内打印换行。
2、
循环可以处理多位数字,如个位,十位,百位等。循环层数根据数字的位数确定。其中最内层循环表示个位,由最内层往外依次表示为个位,十位,百位等。
3、
多维数组有几维,就有几层循环。
如三维数组,需要用到三层循环。循环由外往内依次表示层数,行数,列数。