C语言程序设计:这两个编程为什么输出结果不同?

#include<stdio.h>
int main()
{
int i=1;
for(;i<=4;i++)
printf("%d\t",i*i);
printf("\n");
return 0;
}

#include<stdio.h>
#define P(x) ((x)*(x))
int main()
{
int i=1;
while(i<=4)printf("%d\t",P(i++));//(i++)*(i++)
printf("\n");
return 0;
}

#include<stdio.h>
int main()
{
int i=1;
for(;i<=4;i++) // 循环4次,从1到4
printf("%d\t",i*i); // 所以分别是1 4 9 16
printf("\n");
return 0;
}
#include<stdio.h>
#define P(x) ((x)*(x)) //替换作用~
int main()
{
int i=1;
while(i<=4)
printf("%d\t",P(i++)); //(i++)*(i++) ,每一个循环都执行了2次i++,也就是每次循环后执行i=i+2
//所以i的取值只有1和3
printf("\n");
return 0;
}追问

printf("%d\t",P(i++)); //(i++)*(i++)

i=1, 输出1 ,然后i +1=2, 大神,接下来过程是怎样的?

追答

没看见是(i++)*(i++)
首先i为1,说明在这个语句中i的值为1.
然后分为两种情况(是因为编译器的不同结束,不同编译器不同)
第一种:第一次输出为1。
(i++)*(i++) 整个语句中i的值为1,所以最后的整个值为1.
然后执行2次i++,所以第一次循环后i=3
总结:输出1,然后i为3
第二种:
(i++)*(i++) 首先第一个i为1,然后i++,导致第二个i为2,然后接着i++为3.
总结:输出2,i为3

第二次循环:
按照第一种情况,同理输出9.随后i为5

按照第二种情况:第二个i为4,所以整个就是3*4为12。即输出12.最后i为5

所以,
第一种情况输出 : 1 9 最后i为5
第一种情况输出 : 2 12 最后i为5

追问

呃,我是初学者,大神。还有“然后执行2次i++,所以第一次循环后i=3”

这里的为什么是两次,并且它是怎么执行两次的?

追答

(i++)*(i++) 这是一次循环

这是2个i++ 你应该看得到吧·~~~~~~~~~
i++就是 i=i+1的简化版·~就是执行2次 i=i+1;

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-01-05
将#define P(x) ((x)*(x))改为#define P(x) (x*x) 结果就相同了,因为加了括号需要先算i++
相似回答