| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 799 人关注过本帖
标题:请教大家一个菜鸟问题,还请大家不吝赐教!
只看楼主 加入收藏
xiaoqing
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2004-11-3
收藏
 问题点数:0 回复次数:6 
请教大家一个菜鸟问题,还请大家不吝赐教!

有两个程序:

一:

#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也能循环,但是我不知道为什么,而且还和我现在的想法还有抵触,请大家多指点指点我这个小才鸟!多谢了!

搜索更多相关主题的帖子: 不吝 
2004-11-04 00:19
aniude
Rank: 2
等 级:新手上路
威 望:3
帖 子:231
专家分:0
注 册:2004-11-3
收藏
得分:0 
回复:(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,道理也大概是这样把!!

2004-11-04 03:28
lyn_gemini
Rank: 1
等 级:新手上路
帖 子:103
专家分:3
注 册:2004-9-15
收藏
得分:0 
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++没什么区别了,都产生一样的效果。^_^

欢迎访问我的博客--*IT一粟*-- : http://lyn_gemini.
2004-11-04 10:01
时空之蕊
Rank: 2
等 级:新手上路
威 望:3
帖 子:691
专家分:0
注 册:2004-10-31
收藏
得分:0 

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

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

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

但是有一点最重要的规则大家一般都不知道,我记得好像是一本美国人写的书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编辑过]


我渴望掌控时空的核心——用最先进的技术,打造无比美丽的世界!
2004-11-04 10:33
时空之蕊
Rank: 2
等 级:新手上路
威 望:3
帖 子:691
专家分:0
注 册:2004-10-31
收藏
得分:0 

由于在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);

}


我渴望掌控时空的核心——用最先进的技术,打造无比美丽的世界!
2004-11-04 10:41
时空之蕊
Rank: 2
等 级:新手上路
威 望:3
帖 子:691
专家分:0
注 册:2004-10-31
收藏
得分:0 

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

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

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

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


我渴望掌控时空的核心——用最先进的技术,打造无比美丽的世界!
2004-11-04 11:02
xiaoqing
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2004-11-3
收藏
得分:0 

十分感谢大家!

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


怒发冲冠,凭栏处潇潇雨歇。 抬望眼,仰天长啸,壮怀激烈。 三十功名尘与土, 八千里路云和月。 莫等闲白了少年头,空悲切。
2004-11-04 11:45
快速回复:请教大家一个菜鸟问题,还请大家不吝赐教!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.046701 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved