关于多重for循环中赋初值位置的注意事项
程序员文章站
2024-03-15 22:00:54
...
我们都知道,for语句中可以为变量进行赋值,有时因需要,要对一个变量每次循环都赋同一个初值,但这个变量不是随便就可以放到任何一个for语句中的,如果赋值位置不对,容易导致逻辑错误,而编译又没报错,很难找到根源。
-
for语句里对变量的赋值是在最开始进入循环(包括跳出循环后又重新运行本循环)才赋的值;在for循环开始执行时,除第一次循环,在没跳出循环情况下,后面每次循环都不会再运行for里的赋值语句。
-
我们可以通过如下例子来理解:
现有x个学生、y门课程,求每个学生的各门课成绩的平均数。
#include<stdio.h>
int a1(int a[10][10], int x, int y)//计算每个学生的各门成绩平均数
{
for (int i = 0; i < x; i++)
{
int j, b;
for (j = 0, b = 0; j < y; j++)//对b赋初值
b += a[i][j];
printf("第%d个学生的%d门课平均成绩为%d\n", i + 1, j, b / j);
}
return 0;
}
int main()
{
int x, y;
printf("输入学生数和课程数\n");
scanf_s("%d%d",&x,&y);
int a[10][10];
for (int i = 0; i < x; i++)
{
printf("输入第%d个学生的各门课成绩\n",i+1);
for (int j = 0; j < y; j++)
scanf_s("%d",&a[i][j]);
}
a1(a,x,y);
fflush(stdin);
getchar();
}
如上代码是正确的,当i满足第一个for,就进入下一个for循环,对b赋初值为0,当j不满足第二个for,而i+1满足第一个for,又再次循环第一个for,重新进入第二个for,再次为b赋初值为0。
- 如果调换b的赋值位置:
for (int i = 0,int b = 0; i < x; i++)
{
int j;
for (j = 0; j < y; j++)
b += a[i][j];
printf("第%d个学生的%d门课平均成绩为%d\n", i + 1, j, b / j);
}
那么第一个for语句循环第二次时b就是第一次循环的b的结果,而不是0了,就会造成结果错误。
推荐阅读