如何解释这个程序的结果

来源:百度知道 编辑:UC知道 时间:2024/05/27 23:46:52
程序为
#include<stdio.h>
void main()
{
int i,j;
for(i=1;i<5;i++)
{j=i++;
printf("%d ",j);
}
printf("\n");
}
请将i和j在每次循环时的值的变化都解释一下
运行结果我可以运行程序得到,我只是不明白i和j的变化过程
请懂的人讲的详细一点

for(i=1;i<5;i++) //首先执行i=1(只执行第一次,第二次循环直接进入判断),再执行判断语句
{j=i++; //循环体
printf("%d ",j);//循环体
//最后执行i++
}
for循环语句首先运行第一个分号前的语句,然后运行第二个分号之前的判断语句,再执行循环体,每次循环体结束时执行第二个分号后的语句,第一个分号前的赋值语句只在进入循环时执行

j=i++;
等价于下面两条语句
j=i;
i=i+1;

明白了吧!

结果:
1
3

第一轮循环:i=1时,j=i++,运行后 j=1,i=2,
继续下轮循环:先i++,i就会=3,然后运行j=i++,则j=3,i=4
继续下轮循环:先i++,i就会=5,循环条件不满足,跳出循环
就是这样。

1,j=i++这句扰乱的循环的次数。
2,j的值,是在i发生自增之前的值。如果写成++i则会得到自增后的值。
3,执行完printf()后for()中的i++才会自增。
4, 理解for()中三个语句被执行到的时机是关键。

改以while循环会明白得多:

// 请自行验证代码正确性(不保证完全正确),应该与上面代码结果一致。

void main()
{
int i,j;

/*-------------------*/
i=1;
while(i<5)
{
j=i++;
printf("%d ",j);
i++;
}
/*-------------------*/

printf("\n");
}