在线等 C语言问题

来源:百度知道 编辑:UC知道 时间:2024/05/13 15:26:26
#define SQ(y) ((y)*(y))

main(){

int i=1;

while(i<=5)

printf("%d\n",SQ(i++));

}

运行结果不应该是2 12 30吗,为什么会是1 9 25呢?这是怎样执行的呢。谢谢 希望能得到解释!!!谢谢谢谢!!
我用的是 VC 6.0啊 不会是编译器坏了吧!运行别的程序怎么没事吗

这是在书中举的例子啊。那么VC 是具体怎样的执行的呢,与TC执行结果不相同是正常的吗。

按说结果是2 12 30啊,可我的编译器怎么总是1 9 25呢
谢谢

我不知道你是用什么编译的,我用WIN-C编译后结果就是2 12 30

main(){
int i=1;
while(i<=5)
printf("%d\n",(i++)*(i++));
}
第一次循环:1*2=2 /* i=3 */
第二次循环:3*4=12 /* i=5 */
第三次循环:5*6=30 /* i=6 */
这时退出循环

这取决与不同的编译工具了,你的代码相当于:
i=1;
printf("%d\n",(i++)*(i++));
printf("%d\n",(i++)*(i++));
printf("%d\n",(i++)*(i++));
对这样的代码不同的编译工具处理不同,象我用的它会等于
printf("%d\n",(1)*(2));
printf("%d\n",(3)*(4));
printf("%d\n",(5)*(6));
但是有的不这么处理,而是等同于:
printf("%d\n",1*1);
printf("%d\n",3*3);
printf("%d\n",5*5);

你这种写法是不规范的,要规范自己的代码,不要写一些连自己都很模糊的代码

每个编译器对这种写法的支持都是不一样的,所以不同的编译器可能给出不同的结果。如果这是考试或者练习题,自己随便看看就行了,没必要深究这些东西,实际中没人会这样写代码,如果写了,只会是自找麻烦。