| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 748 人关注过本帖
标题:3道题,怎么想不通了?
只看楼主 加入收藏
我叫小杜
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:54
专家分:105
注 册:2011-6-11
结帖率:90.91%
收藏
已结贴  问题点数:30 回复次数:10 
3道题,怎么想不通了?
1   #define f(x) x*x
main()
{int a=6,b=2,c;
c=f(a)/f(b);
printf(%d\n",c);
}
结果为什么是36,不是9
2  设有如下定义:
int x=10,y=3,z;
则语句printf("%d/n",z=(x%y,x/y);
的输出为3。
3  char *p1="abcd",*p2="ABCD",
str【50】="xyz";
strcpy(str+2,strcat(p1+2,p2+1));
printf("%s",str);
答案为什么是xycdBCD
搜索更多相关主题的帖子: str 
2011-07-10 15:38
季末的寂寞
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2011-6-19
收藏
得分:0 
第二题肯定是3啊,逗号运算符从左到右,10%3=1,10/3=3,(1,3)=3啊
2011-07-10 15:49
loveshuang
Rank: 9Rank: 9Rank: 9
来 自:湖北武汉
等 级:蜘蛛侠
帖 子:270
专家分:1198
注 册:2010-11-14
收藏
得分:10 
1、宏定义只是个预编译的命令,所以你的f(a)/f(b)=6*6/2*2,按照顺序计算结果是36
2、那个是逗号表达式取最后式子的值,所以z被赋值为x/y=10/3=3;
3、strcat把p2+1指向的B之后的字符链接到p1+2指向的cd后面就是cdBCD,再把这个字符串复制到str+2之后的内存中;结果就是xycdBCD
2011-07-10 15:49
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:10 
1.6*6/2*2 36乘2再除2等于几? 应该写成#define f(x) (x*x)

2.逗号表达式返回后面的值

3.strcat返回的"cdBCD"你有用strcpy把它覆盖了str[2]开始的字符串  那么z当然就被覆盖了  str就是xycdBCD

                                         
===========深入<----------------->浅出============
2011-07-10 15:51
季末的寂寞
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2011-6-19
收藏
得分:0 
第一道是6*6!2*2了你,肯定是等于36啊,你在x*x打个括号就可以了啊
2011-07-10 16:10
无语的小虾米
Rank: 1
等 级:新手上路
帖 子:10
专家分:4
注 册:2011-4-16
收藏
得分:0 
学习来的!
2011-07-10 16:19
我不会抽烟
Rank: 1
等 级:新手上路
帖 子:13
专家分:8
注 册:2010-11-29
收藏
得分:0 
p1+2 是从*p1"abcd"中第3个开始算起
依次类推~~~
2011-07-11 11:00
博士无双
Rank: 2
等 级:论坛游民
帖 子:32
专家分:65
注 册:2011-7-5
收藏
得分:0 
(1)中要加括号,
(3)中p1+2是从c开始,p2+1是从B开始,str+2是从z开始复制
2011-07-11 19:24
heimodao
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:88
专家分:172
注 册:2011-4-8
收藏
得分:5 
第一题:c=f(a)/f(b)不能如你所愿,你的想法是:c=(a*a)/(b*b) == 9
         可惜实际上是:c=a*a/b*b == 36 乖乖从左到右计算在送给c了。。可以去翻翻电子书本或书本。
第二题呢:书本的逗号运算符那一节你可以再去看看呀,z=(x%y,x/y)这条语句,z只接受了逗号运算符括号内的最后一句,前面无视,所以z=x/y == 10/3 == 3。。
第三题: 我编译不过呀老兄,段错误??
2011-07-12 23:19
weiwei555
Rank: 5Rank: 5
来 自:中国
等 级:职业侠客
帖 子:179
专家分:323
注 册:2011-3-4
收藏
得分:5 
第一题 根据你的宏定义 #define f(x) x*x  
c=f(a)/f(b);式子展开后为c=6*6/2*2  所以结果就为 36了,你应该加上括号的
第二题 是逗号表达式,x%y,x/y这个表达式的值 是x/y的值,所以输出为3
第三题由p2+1知 字符"ABCD"是从第一个 即为B开始与字符 "abcd"连接,对照后面p1+2和str+2的可以得到结果
2011-07-13 01:43
快速回复:3道题,怎么想不通了?
数据加载中...
 
   



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

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