| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 761 人关注过本帖
标题:[讨论]一些小程序的结果(急!)
只看楼主 加入收藏
淡蓝光点
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2005-11-18
收藏
 问题点数:0 回复次数:10 
[讨论]一些小程序的结果(急!)
之所以说“急”是因为明天就考试了,可是今天居然还有想不通的地方。汗颜。希望大家帮帮忙,不胜感激。。。

第一题:
main()
{ int x=10,y=10,i;
for( i=0; x>8; y=++i)
printf("%d %d\n",x--,y);
}

这道题的运行结果是:10 109 1 其实结果是两组:第一组是10 10;第二组是:9 1。可是结果为什么是这个呢?我不明白的是for语句中的x>8这个表达式,for语句不是应该当x>8这个式子不成立的时候才退出循环执行打印吗?那么x是不变的,也就是说x>8始终都成立,这不就是死循环了么?为什么还能得出结果呢?

第二题:(其实这是一个很典型的题,可是我。。。。不说了,看题吧)

#indude(stdio.h)

main()

{ char c='A'; /*这里应该等于65*/

if('0'<=c<='9') /*这里应该是“48<=65<=57没错吧”*/

printf("YES"); /*可是,555,居然这个是输出结果??*/

else

printf(”NO”)"

}
win-TC和TC运行结果都是YES,老师给的答案也是YES。。可是我就是整不明白啊,'0'<=c<='9'明明不成立的不是么?还望大家狠狠的批评我啊,到底哪里错了呢。。。。>_< #

谢谢谢谢你们!!!

搜索更多相关主题的帖子: 结果 
2006-01-14 18:47
qyw_beijing
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2006-1-11
收藏
得分:0 
大哥!
printf("%d %d\n",x--,y);中的x--就是每执行一次减1阿


if('0'<=c<='9')
printf("YES");

不能这样写,应该写成 '0'<=c&&c<='9'

[此贴子已经被作者于2006-1-14 19:10:22编辑过]


Anything Is Possible !   Do ! Ringht now !
2006-01-14 18:58
淡蓝光点
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2005-11-18
收藏
得分:0 
谢谢回答!

if('0'<=c<='9'),卷子上就是这么写地呀,我没写错呢。。

main()
{
int x=10,y=10,i;
for( i=0; x>8; y=++i)
printf("%d %d\n",x--,y);
}


第一次打印:x=10(我懂了),而y,我怎么觉得这时候已经变成++i也就是等于0+2=2?
关于for语句是我记错了,它是每次判断表达式为真都执行一次循环体,直到为假的时候程序结束是吧,可是x>8永远成立,这程序为什么循环两次就停下来了呢?当第二次和第三次循环的时候表达式依然是x>8呀。。。5555
2006-01-14 19:26
spp509
Rank: 1
等 级:新手上路
威 望:1
帖 子:98
专家分:0
注 册:2005-11-23
收藏
得分:0 

你们考试考这个?羡慕~~~~~
第一题是这样的
#include <stdio.h>
void main()
{
int x=10,y=10,i;
for( i=0; x>8; y=++i)
printf("%d %d\n",x--,y);
}
第一次运行,x先把值打印出来,然后x的值变成9了,y的值不变,for循环里是这样运行的,先执行i=0;然后x>8,因为x=10为真,所以执行for里的程序,就是printf("%d %d\n",x--,y);最后上来执行y=++i;就是y=1了,第二次循环,x就会打印出9,y则是1,然后x--,就等于8了,所以再次判断x>8(8>8)时,就是假了


一听就懂,一看就会,一做就错……
2006-01-14 21:35
spp509
Rank: 1
等 级:新手上路
威 望:1
帖 子:98
专家分:0
注 册:2005-11-23
收藏
得分:0 
关于第二题嘛,我从来没有if('0'&lt;=c&lt;='9')这样写过,所以我认为是程序先执行if('0'&lt;=c,而后面的&lt;='9')它不认识,所以会打印出YES,这题难道是故意写成这样的?不知道说的对不对哦,因为我都是if('0'&lt;=c &amp;&amp; c&lt;='9')这样写的

一听就懂,一看就会,一做就错……
2006-01-14 21:44
淡蓝光点
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2005-11-18
收藏
得分:0 
呵呵,我K书已经K晕了。明天考试去,有点信心了。多谢大家呀,非常感谢!

第二题,我忽然记起来了,老师好像是说过类似“a<b<c”这样的式子在C语言中是不识别的,可是老师似乎没说过这样就等于执行a<b而跳过b<c呀。。莫非真的是故意出这样的题,考试真黑啊!!!

第一题,我明白了,谢谢你,还有一点,就是程序不是从上到下执行的么,为什么第一次打印的时候y没有先变成1呢?而是执行一次打印后才从for语句里转换?
2006-01-15 00:40
时空之蕊
Rank: 2
等 级:新手上路
威 望:3
帖 子:691
专家分:0
注 册:2004-10-31
收藏
得分:0 
关于第二题嘛,我从来没有if('0'<=c<='9')这样写过,所以我认为是程序先执行if('0'<=c,而后面的<='9')它不认识,所以会打印出YES,这题难道是故意写成这样的?不知道说的对不对哦,因为我都是if('0'<=c && c<='9')这样写的
答疑:中国的软件教育阿,嘿嘿,搞笑,老实说个人认为考的是查错能力的问题:
'0'<=c<='9' <= 运算从左到右 c='A'= 65, '0' =48,显然:
'0'<=c<='9'<=>('0'<=c)<='9'<=> 1<='9' <=> 1
解答完毕!

我渴望掌控时空的核心——用最先进的技术,打造无比美丽的世界!
2006-01-15 11:58
spp509
Rank: 1
等 级:新手上路
威 望:1
帖 子:98
专家分:0
注 册:2005-11-23
收藏
得分:0 
你好象没有弄明白for循环里是怎样执行的for( i=0; x>8; y=++i)
是要先做i=0;然后判断x>8如果为真,就做{ }里的语句,做完后,再上来做y=++i,然后再判断x>8,如果为真就走{ },再上来做y=++i,再判断x>8,直到为假,跳出循环,不知道这样讲你能明白不,还是多看看书为好

一听就懂,一看就会,一做就错……
2006-01-15 12:01
spp509
Rank: 1
等 级:新手上路
威 望:1
帖 子:98
专家分:0
注 册:2005-11-23
收藏
得分:0 
以下是引用时空之蕊在2006-1-15 11:58:00的发言:
关于第二题嘛,我从来没有if('0'<=c<='9')这样写过,所以我认为是程序先执行if('0'<=c,而后面的<='9')它不认识,所以会打印出YES,这题难道是故意写成这样的?不知道说的对不对哦,因为我都是if('0'<=c && c<='9')这样写的
答疑:中国的软件教育阿,嘿嘿,搞笑,老实说个人认为考的是查错能力的问题:
'0'<=c<='9' <= 运算从左到右 c='A'= 65, '0' =48,显然:
'0'<=c<='9'<=>('0'<=c)<='9'<=> 1<='9' <=> 1
解答完毕!

受教了,茅塞顿开
但我没看懂你的,大概是第一次'0'<=c后值为1,所以……,呵呵,见笑了

[此贴子已经被作者于2006-1-15 12:09:47编辑过]


一听就懂,一看就会,一做就错……
2006-01-15 12:07
feng1256
Rank: 4
等 级:贵宾
威 望:14
帖 子:2899
专家分:0
注 册:2005-11-24
收藏
得分:0 
直接说这个吧(48&lt;=65&lt;=57)→48〈=65  为真,值为1,那么1〈=57也为真,完毕!

叁蓙大山:工謪、稅務、嗣發 抱歉:不回答女人的问题
2006-01-16 10:46
快速回复:[讨论]一些小程序的结果(急!)
数据加载中...
 
   



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

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