C语言的两个问题 望高手详细解答!!!

问题一:
以下程序的运行结果是____:

main()
{
increment();
increment();
increment();
}

increment()

{
int x=0;
x+=1;
printf("%d",x);
}
我想了解下 为什么increment函数连续3次调用产生的结果不是分开显示??

问题二:
以下程序的运行结果是____:

int x1=30,x2=40;
main()
{
int x3=10,x4=20;
sub(x3,x4);
sub(x2,x1);
printf("%d,%d,%d,%d\n",x3,x4,x1,x2);
}

sub(int x,int y)
{
x1=x;
x=y;
y=x1;
}
带参函数在调用的时候,实参传递值给形参,而形参调用完毕后释放出来实参不变,但我用TC运行后得出的结果只有sub(x3,x4)是正确的,而sub(x2,x1)却不一样??
希望各位高手详细地给小弟解释下,帮忙我们这些初学者 谢谢

问题一:
运行结果是111
如果想让它们分开,应该写
printf("%d ",x);// 后面加一个空格,就用空格分开了
printf("%d\n",x);// \n是一个转义字符,意思就是回车,加上\n就用回车分开了

问题二:
sub函数的作用是把两个参数的值交换,但因为传入的不是指针,所以交换的结果并没有带出。
sub(x3,x4);执行完后x3和x4都还是原来的值,x1=10(因为x1和x2是全局变量,值在整个程序内都有效)
sub(x2,x1);执行时由于使用x1作为交换的中间变量,就不是简单的交换了,把x1赋值成了40,所以执行完了以后x1和x2的值都是40
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-01-16
printf("%d",x);
这个没回车吧,,打印不会换行!!

全局变量在全个程序中都有效吧,,SO
第2个回答  2010-01-16
问题一:
以下程序的运行结果是_1_:

main()
{
increment();
increment();
increment();
}

increment()

{
int x=0;
x+=1;
printf("%d",x);
}
//你main函数当中有连续3个increment(); 程序,就是我们所说的顺序执行,当执行完第一个时,再执行第二个,执行第二的时候就把第一个的数带到了第二了,依次类推……;实际的分析中,程序并不是这样执行的?苦恼中……望高人指点

问题二:
以下程序的运行结果是_10、20_:

int x1=30,x2=40;
main()
{
int x3=10,x4=20;
sub(x3,x4);
sub(x2,x1);
printf("%d,%d,%d,%d\n",x3,x4,x1,x2);
}

sub(int x,int y)
{
x1=x;
x=y;
y=x1;
}

我用KEIL C51验证过,此程序并不输出X1,X2的值,为什么呢?

看了上面各位高人的回答,我使用KEIL C51怎么验证不出来你们所说的情况呢
使用KEIL C51应该怎么设置?才能看到你们说的情况?
第3个回答  2010-01-16
第一个问题很简单 , 你用的是printf而不是printfln,所以没有换行,同时你的 printf("%d",x);中的"%d"如果改为"%d,"那么每个之间就会有逗号隔开,如果,"%d"变为"%d ",那么每个输出之间就有空格分开了.

第二个问题,我不明白你的"sub(x3,x4)是正确的"是什么意思,是不是两个值没有互换, 如果是的话,我的理解就对了.
x1,x2是全局变量所以当sub(x3,x4)时 x1=x; 这时x=x3,所以x1=10
然后, sub(x2,x1); 这时x=x2,所以x1=20;
其实,多花点时间,你也可以看出来的。

祝你学习顺利!
第4个回答  2010-01-16
1:你要加\n

2:x1,x2是全局变量
相似回答