| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2168 人关注过本帖
标题:C语言问题请教
只看楼主 加入收藏
ljr8
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2004-8-6
收藏
 问题点数:0 回复次数:19 
C语言问题请教

各位朋友你们好!

我是个新手,C语言上有个新问题想请教一下,谢谢了!问题如下:

设a=1,b=2,c=3,d=4,则表达式: a<b?a: c<d?a: d的结果为( )。

我想知道这题的解析过程??谢谢大家帮忙!

[此贴子已经被忆楠于2004-10-01 22:41:05编辑过]

搜索更多相关主题的帖子: C语言 
2004-08-06 09:11
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
收藏
得分:0 

告诉你表达式 ?: 如何使用就可以了

d=(a?b:c) 这句的意思是:如果a=0,那么d的值就为c 如果a!=0,那么d的值就为b


淘宝杜琨
2004-08-06 15:28
ljr8
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2004-8-6
收藏
得分:0 
不好意思,你给我的表达式我还是看不懂,能不能把过程也说一下啊!谢谢!

还有我又遇到一题不会的想请指教如下:

下列程序执行后的输出结果是( )

main ( )

﹛ char x=0xFFFF; printf("% \n",x--) ; ﹜

答案有:A。-32767 B。FFFF C。-1 D。-32768

不过我想要解析过程谢谢各位高手朋友!!

2004-08-07 11:25
ljr8
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2004-8-6
收藏
得分:0 

对了,请大家不要误会啊1我不是说你们讲的不详细,

只是我个人的问题,请各位高手帮帮忙啊!谢谢了!

再问一句,怎样才能学好 c 语言啊?有没有迷经啊,请指教指教!

2004-08-07 19:24
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
收藏
得分:0 

惭愧啊,最近实在太忙了,回答的问题都是敷衍了事,真是对不起大家!在此向大家道歉~~你没理解是我没讲清楚~此乃寡人之过也~

好,现在我们来解决第一个问题:

设a=1,b=2,c=3,d=4,则表达式: a<b?a: c<d?a: d的结果为

解析: a=1,b=2,c=3,d=4 这是程序一开始就赋的初值 因为<的优先级别要比?:的优先级要高,所以程序先运算a<b 和 c<d,所以

a<b?a:c<d?a:d 就变为: 1?a:1?a:d

继续。因为?: 与 ?:是同一优先级,根据运算时从左到右的原则,表达式继续变为: (1?a:1)?a:d => a?a:d => a

所以表达式子最终的结果就是 a,也就是1啦

第二个问题:

你的题目少打一个d吧?我想应该是 printf("%d\n",x--); 才有答案符合

0xffff是个十六进制的数据,转换成无符号的整形变量(%ud)就是65535 转换成有符号的整形变量(%d)就是-1

原因:因为有符号整形变量的范围是:-32768~+32767 如果超过了范围将会从另一头溢出,也就是从另一头开始。比如:32767+1 你也许会认为答案是32768,但是实际上因为32768超过了变量的最大值,他将会从最小值溢出,所以你将会得到的答案是-32768

同理,0xffff转成 %ud 的值为65535,肯定超过了 %d 的范围,所以他将会溢出,然后从-32768开始算起。所以结果为-1。

你听明白了吗?我想也许我讲得还不够很详细,如果还不明白,继续问,我会一一解答。

附:学C没捷径,指针最关键。


淘宝杜琨
2004-08-07 21:51
ljr8
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2004-8-6
收藏
得分:0 

谢谢这位c高手帮我这样一一的详解真是麻烦了。

第一道题我看懂了非常感谢!!

不好意思,第二道却实是少了一个d ,但还是看不懂。

(1)在这个问题上 0xFFFF是怎样转成65535的?为什么是65535而不是0~65535之间的数?

(2)然后有符号整型变量好像是-32767~+32767 (我从书上看的,不过好像我这书真是垃圾,许多解析都是错的)。

关于溢出的问题我看懂了。

(3) 但( 0xffff转成 %ud 的值为65535,肯定超过了 %d 的范围,所以他将会溢出,然后从-32768开始算起。所以结果为-1)?无符号整型的变量是从0~65535的啊 ,为什么从-32768开始算呢?是怎样算到-1的呢?

望指点,谢谢!

2004-08-08 09:15
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
收藏
得分:0 

哦~~数据在硬盘上的最终存储形态是0101010101010111之类的,这个叫做二进制度。但是二进制实在是太麻烦了,于是我们就用十进制、十六进制等等来表示这些数。

[1] x0ffff就正是一个十六进制数,但为什么0XFFFF转成无符号整形就变成65535了呢?这个我自己是明白的,但是表达能力有限,说不出~~

当然,你也可以自己编写个程序 main() { int a; scanf("%d",&a); /*输入一个十进制数值*/ printf("<10> %d\n",a); /*转换成一个有符号十进制数值*/ printf("<Unsign10> %ud\n",a); /*转换成一个有符号十进制数值*/ printf("<16> 0x%x\n",a); /*转换成一个十六进制数值*/ getch(); }

[2] 有符号的整形变量的范围是-32768~+32767 你的书上是错误的!

[3] 哦,我说得不够清楚。这题的转换我为了让你看清楚,是这样转的:

十六进制 =》 无符号十进制 =》 有符号十进制 0xffff => 65535 => -1

65535已经超过了有符号的上限+32767,所以要发生溢出

[此贴子已经被作者于2004-08-08 10:13:00编辑过]


淘宝杜琨
2004-08-08 10:07
ljr8
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2004-8-6
收藏
得分:0 

谢谢这位c 高手替我逐一解析,只是我能力不够。

顺便问一下,学c语言初中文化可以吗?是不是很难?

还有学c语言有没有什么好的学习方法?可不可以给我讲讲!谢谢!

还有学c语言作用是什么?是编软件还是。。。?

你可以讲讲你学c语言的目的是什么吗?

2004-08-10 16:28
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
收藏
得分:0 

可以,只要你能接受函数这个概念,我想过2级应该没什么问题,但绝对得不到优秀! 而且你要是遇到了一些很专业的问题,比如矩阵之类的就要避开了.

什么叫好的学习方法,适合自己的才叫好的! 我的方法很简单,把数据看成长短不一的积木,然后用工具把他们按我的意愿搭起来.这样就是个程序了. 很抽象是不是?

学C语言的作用是什么? 反问一句,学数学的作用是什么? 我学C语言是听说C语言就像 九阳神功 那样,学会后以后学什么武功都快. 这好象有点夸张呵呵,目前我学C语言是为了上大学就不用学了,空出来的时间去找女孩子.......


淘宝杜琨
2004-08-10 21:40
ljr8
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2004-8-6
收藏
得分:0 

不好意思这位c高手,你上次给我的那个程序(第7楼)有个地方好你有点问题,

就是:printf("<16> 0x%x\n",a); /*转换成一个十六进制数值*/

就是加下划线的地方是不是应该改成 %0x\n",a

对不对啊?

2004-08-14 08:59
快速回复:C语言问题请教
数据加载中...
 
   



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

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