请高手帮我分析一下这个循环程序,我被弄糊涂了,请看补充:

来源:百度知道 编辑:UC知道 时间:2024/09/21 08:38:50
程序如下:
#include <stdio.h>
#define p(x) x*x
void main()
{int i=1;
while(i<4)
printf("%4d",p(i++));
while(i<8)
printf("%4d",p(++i+3));
printf("\n");
getch();
}
它会输出什么结果,通过分析得出呢,呵呵!
这是书后的题目啦,它就是这样写的,呵呵!
再次谢谢两位,输出结果是2 12 28 36.

谢谢,但这printf("%4d",x1+3*x2+3);看不懂,什么意思?

这个在机器上测试,不同的编译器得到的答案是不一样的;
VC6.0下结果是 1 9 31 39
tc2.0下就是你的答案 2 12 28 36
为什么结果会不一样呢??
其实归根到底是因为编译器的问题,
他们把 i++ ++i 组合的表达式 解释为不同的式子

下面就具体分析下:
【下面的代码是依据tc2.0转换过来的】
先分析这些代码
int i=1;
while(i<4)
printf("%4d",p(i++)); //在这里我们把代码变形一下 如下:

/*****************/

int i=1;
while(i<4)
{
x1=i;
x2=i++; //因为 i++*i++ 这样的表达式存在 i++解释问题,tc就是解析为 类似上面那样
printf("%4d",x1*x2); // p(x)简单的替换为 x*x
i++;
}
循环了2次,
第一次循环:x1=1; x2=2; 故x*x=2;
第二次循环: x1=3;x2=4; 故 x*x=12;
循环结束后,i=5

这样的代码相信你是明白的

下面这个代码同理可以变形的:
到了这步,i=5
while(i<8)
printf("%4d",p(++i+3));

变形为:
while(i<8)
{
x2=++i;
x1=++i; //因为,TC在解析 ++i+3*++i+3 的时候 是这么解释的
printf("%4d",x1+3*x2+3);
}
这里也循环了2次;
第一次循环:x1=7;x2=6 ;故 x1+3*x2+3的结果为 28
第二次循环:x1=9;x2=8