当前位置: 代码迷 >> C语言 >> 请教大家一个菜鸟问题,还请大家不吝赐教!
  详细解决方案

请教大家一个菜鸟问题,还请大家不吝赐教!

热度:146   发布时间:2004-11-04 00:19:00.0
请教大家一个菜鸟问题,还请大家不吝赐教!

有两个程序:

一:

#include<stdio.h> main() { int sum=1;

while (sum<=5) { sum++;

}

printf("sum=%d\n",sum); return 0 ; }

二:

#include<stdio.h> main() { int sum=1;

while (sum<=5) { ++sum;

}

printf("sum=%d\n",sum); return 0 ; }

这两个程序唯一的不同的地方是 sum++ 和 ++sum ,sum++我知道是先给sum付1,然后在下次付值的时候再给第一次付的值加1;++sum是先给它付一个1+1的值,在下次付值的时候保持原值不变,但是经过我的上机实验发现两个程序结果都是一样的!说明++sum也能循环,但是我不知道为什么,而且还和我现在的想法还有抵触,请大家多指点指点我这个小才鸟!多谢了!

搜索更多相关的解决方案: 不吝  

----------------解决方案--------------------------------------------------------
回复:(xiaoqing)请教大家一个菜鸟问题,还请大家不吝...
#include &lt;stdio.h&gt;
int get(int c)
{
int d=0;
while(c&lt;5)
{
// c++;
  d=c++;
}
return d;
}
void main()
{
int sum=1,b=0;
int e;
while(sum&lt;5)
{
  b=++sum;
}
e=get(1);
printf("%d,%d",b,e);
}
返回值是5,4,道理也大概是这样把!!
----------------解决方案--------------------------------------------------------
1楼的,你对++的前缀和后缀还不是很理解呢,其实前缀和后缀的区别就在于那个表达式的返回值问题,
++sum,sum++本身是表达式,该表达式有自己的值,而同时,sum的值也会发生改变,都是让sum加了1,
区别就在与++sum这个表达式的值是sum+1,sum++这个表达式的值是sum,但不管怎样,sum本身都是被
加了1了。
比如,
i=sum++,意思是把sum++这个表达式的值赋给i,就是sum,
i=++sum意思是把++sum这个表达式的值赋给i,就是sum++,
但直接一个sum++;或++sum,虽然两个表达式返回值不同,
但对你的程序而言,需要并不是表达式的值,而是sum的值,
所以,在你程序里,++sum和sum++没什么区别了,都产生一样的效果。^_^

----------------解决方案--------------------------------------------------------

大家都没有搞清楚++ --的用法啊!!

我来解释解释――应该对的吧!!

++--他们的运算规则是:在一个表达式中出现++--那么按照大家都知道的处理++,和――的值。

但是有一点最重要的规则大家一般都不知道,我记得好像是一本美国人写的书Begining C++ the Complere language中说过,当然我看的是中译本!!这条规则就是计算训序各个编译其实不同的!!――所以各位如果使用++--的时候一定要注意不要在一个语句中多次对同一个变量自加自减,也不要将他们复制给自己!!

我自己总结的――就是对于++,--作为后缀的话,运算就不同了,它们是先计算完自加自减所在的这一级整个表达式的值然后再进行自加只减!!

请看看我的程序,如果大家不去编译运行,结果将超出大家的想象的!!

#include<stdio.h>

main()

{

int n=5,s;

s=++n*3+ ++n*5;//中间空格不能删除

printf("s=%d\tn=%d\n",s,n);

}

猜猜看会输出什么!!

[此贴子已经被作者于2004-11-04 10:52:02编辑过]


----------------解决方案--------------------------------------------------------

由于在C+预算符的计算训序没有指定就是说可能有些人的结果是53或者51,还有可能为5653为先计算+左边的,51说明先计算+右边的,而56说明同时计算+两边的,有趣吧!!!

VC6.0中输出:s=53 n=7

TC3.0中输出:s=56 n=7

这说明在VC是从左到右的!!

好了,按照上面的我们可以分析这个程序来验证了!!

#include<stdio.h>

main()

{

int n=5,s;

s=n++*3+n++*5;//中间空格不能删除

printf("s=%d\tn=%d\n",s,n);

}


----------------解决方案--------------------------------------------------------

上一贴子输出结果为:40,7(VC和TC中一样!!)

大家有没有兴趣做这个!!

i=10; i=i/++i; i=i/i++;

这个将会很有趣的vc和tc中输出:第一个:1第二个:2哈哈。


----------------解决方案--------------------------------------------------------

十分感谢大家!

你们的提示对我这个初学者很有帮助!


----------------解决方案--------------------------------------------------------