| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 935 人关注过本帖
标题:新人学习C语言,知识点没弄明白,求大神指教
只看楼主 加入收藏
sqgege000
Rank: 1
等 级:新手上路
帖 子:14
专家分:1
注 册:2012-12-3
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:12 
新人学习C语言,知识点没弄明白,求大神指教
1、自增自减
下面代码运行结果为什么是6,4,6,5,5,应该怎么理解,按书上的解释硬是没弄明白,求大神指教。
#include"stdio.h"
main()
{
 int a=5,b,c,d,e;
 b=a++;
 c=b--;
 d=++c;
 e=--d;
 printf("%d,%d,%d,%d,%d\n",a,b,c,d,e);
 return;
}
2、复合运算
a+=a*=a/=a-6,a=12,运算从右至左,我的理解依次运行12-6=6,6/6=1,6*6=36,36+36=72
可是编译执行的结果为什么是8,请大神指教
搜索更多相关主题的帖子: include return 知识点 
2012-12-05 23:39
weishen2011
Rank: 2
等 级:论坛游民
帖 子:92
专家分:70
注 册:2012-10-16
收藏
得分:10 
a=5
b=a++;得出b=5,a=6
c=b--;得出c=5,b=4
d=++c;得出c=6,d=6
e=--d;得出d=5,e=5
所以最后输出的结果为:6,4,6,5,5

第二题:12-6=6,a/=6也就是a=a/6,得到a=2,接着a*=2,得到a=a*a=4,然后就是a+=4,得到a=8
2012-12-05 23:51
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:0 
#include"stdio.h"
 main()
 {
 int a=5,b,c,d,e;
 b=a++; // 这个等价于b = a;a++; 也就是b = 5 a=6
 c=b--; // 这个等价于 c=b;b-- 也就是  c=5;b=4
d=++c;  // 这个等价于 c++;d=c ;也就是c=6;d=6
 e=--d; // 这个等价于d--;e=d;  也就是 d= 5;e = 5;
// 这时候 a = 6;b=4;c=6;d=5;e = 5
 printf("%d,%d,%d,%d,%d\n",a,b,c,d,e);
 return;
 }

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2012-12-05 23:53
cuqa
Rank: 2
等 级:论坛游民
帖 子:21
专家分:26
注 册:2012-10-10
收藏
得分:0 
++i是先自增后赋值;i++是先赋值后自增
所以很简单
a=5
b=a++,先赋值b=a,后自增a=a+1,所以b=5,a=6;
c=b--,先赋值c=b,后自减b=b-1,所以利用上一步的结果带入得c=5,b=4
d=++c,先自增c=c+1,后赋值d=c,所以c=6,d=6
e=--d,先自减d=d-1,后赋值e=d,所以d=5,e=5
最后结果就是a b c d e
          为6 4 6 5 5
2012-12-06 00:18
旋风之间
Rank: 2
等 级:论坛游民
帖 子:16
专家分:18
注 册:2012-12-2
收藏
得分:0 
楼上都是正解,只要弄明白i++和++i这些区别就行啦,好好研究吧
2012-12-06 00:34
sqgege000
Rank: 1
等 级:新手上路
帖 子:14
专家分:1
注 册:2012-12-3
收藏
得分:0 
回复 2楼 weishen2011
非常感谢,第一个已经明白了。小弟愚钝,第二个混合运算还有点不懂,a=a-6=12-6, 接着运行a=a/6,这个表达式里面的a为什么不是前面计算来的6,而是初值12.就这里一老弄不明白。
2012-12-06 09:34
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
以下是引用sqgege000在2012-12-6 09:34:53的发言:

非常感谢,第一个已经明白了。小弟愚钝,第二个混合运算还有点不懂,a=a-6=12-6, 接着运行a=a/6,这个表达式里面的a为什么不是前面计算来的6,而是初值12.就这里一老弄不明白。
实际写程序 谁会写那么复杂的代码   不过要是应付考试 那就没办法了

DO IT YOURSELF !
2012-12-06 09:37
sqgege000
Rank: 1
等 级:新手上路
帖 子:14
专家分:1
注 册:2012-12-3
收藏
得分:0 
回复 7楼 wp231957
本人自学c是想以后从事这方面的工作。这是在书上看到的,理解不了,特来求教。恳请大神指点迷津!不胜感谢!
2012-12-06 09:47
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
指点谈不上  我也在学习中。。。。。。
我觉得能理解1重赋值 就够用了

DO IT YOURSELF !
2012-12-06 10:09
bulubulukaka
Rank: 2
等 级:论坛游民
帖 子:19
专家分:40
注 册:2012-12-5
收藏
得分:10 
第二题你自己可以试着化简:
a = a + ( a *= a /= a-6 );
a = a + ( a = ( a * ( a /= a-6 ) ));
a = a + ( a = ( a * ( a = a / (a-6) ) ));
从最内层的开始,因为a=12,所以有 a = 12 / ( 12 - 6);
你赋值肯定是按照等号来计算的,不存在将 12-6赋值给a的可能。
2012-12-06 10:12
快速回复:新人学习C语言,知识点没弄明白,求大神指教
数据加载中...
 
   



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

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