| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 978 人关注过本帖
标题:用while写的程序有几个地方不明白
只看楼主 加入收藏
famo413
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2011-9-28
结帖率:0
收藏
 问题点数:0 回复次数:7 
用while写的程序有几个地方不明白
从键盘上输入若干个学生的成绩,统计并输出最高成绩,当输入负数时结束输入
#include "stdio.h"
void main()
{
    int x,max=-1;
    clrscr();
    printf("Input X:");
    while((scanf("%d",&x))==1&&x>=0)
    {
    if(x>max)
    max=x;
    }
    printf("max=%d",max);
}
1.为什么max=-1?
2. while((scanf("%d",&x))==1&&x>=0)这句什么意思?
3.程序是怎样判定最大值的?

搜索更多相关主题的帖子: 键盘 include 最大值 
2011-11-09 09:15
非死亡!
Rank: 8Rank: 8
来 自:四川
等 级:蝙蝠侠
帖 子:179
专家分:760
注 册:2011-10-31
收藏
得分:0 
听好了
1.max是-1就是要你后来输入的数比-1大才能将max给第一的数  max是-1000000都没关系
2.scanf返回正确个变量赋值的个数
3.和打擂台差不多 谁大就把max这个头衔给它 直到最后
4.要多看书 书上应该会说scanf的用法的
5.void main()是不规范的 详见
https://bbs.bccn.net/viewthread.php?tid=24305&extra=page%3D2%26amp%3Bfilter%3Ddigest
6.上机实验你就能解决的问题 不要问别人答案
7.思考才是硬道理
8.这个论坛不一定是来提问的  它还有个好处是,那些c长辈将他们的问题写在了精华区  多去看看精华区的东西 你会明白很多
9.希望你能成功 你有的是时间 但要将时间换成智慧

能力 技巧
2011-11-09 09:36
famo413
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2011-9-28
收藏
得分:0 
回复 楼主 famo413
这个程序我反复在试啊...
特别是在while((scanf("%d",&x))==1&&x>=0)这里
我认为这个意思应该是:输入的X等于1或大于等于0,然后执行循环语句
但我觉得直接大于等于0不是更好吗,于是我把while((scanf("%d",&x))==1&&x>=0)改成while(scanf("%d",&x)>=0)
但是改了之后会一直输入X,输负数也不会退出程序啊,究竟是怎么回事?
而且输入小数或者其他字符整个程序就卡住了,按什么键也退出不了,另外我是用TC2.0的

[ 本帖最后由 famo413 于 2011-11-9 10:24 编辑 ]
2011-11-09 10:11
luchar
Rank: 9Rank: 9Rank: 9
来 自:南京
等 级:蜘蛛侠
帖 子:279
专家分:1263
注 册:2011-11-3
收藏
得分:0 
while((scanf("%d",&x))==1&&x>=0)
这个(scanf("%d",&x))==1是确定你是否输入了数据,x>=0是判断输入的x是否大于0,&&这个是并(或和)不是或。
2011-11-09 10:33
紫冠流云
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2011-11-8
收藏
得分:0 
LZ,我们可以将这个语句分解一下:

scanf("%d",&x)

while(x==1&&x>=0)


1.max是我们要求的最大值,是个变量,会随着我们输入的分数的不同,max会变化,这里只是给max赋初值(也叫初始化)。也就是给max的值是最小的一个值。
 
你肯定会问,分数没有负值啊,但是我们不排除分数为0分啊,所以要比0还小而且是整形常量,所以就赋初值为-1了;

2.while语句的()中的表达式成立(“为真”)时,才执行循环语句。

我们知道“&&”这个标识符是表示“逻辑与”的,只有“&&”两端都为“真”时,结果才为真。

所以语句可以解释为:当输入的X满足X=1&&X>=0时,也就是说,&&两边都为真时,执行循环语句。

如果输入的X为负数,&&右侧的条件为“假”,则不再执行循环语句。

3.程序判断最大值MAX:

程序会把用户每次输入的X值与上一个max值进行比较,如果新输入的x比max大,则x变成新的max,原来的max值被覆盖。

客户继续输入的话,还是执行以上循环,直至用户输入的值使循环结束(假如用户输入负值的话)。

这时,当前的max即是最大的一个值。


希望以上皆是可以帮到你。







2011-11-09 11:13
无名小草
Rank: 2
等 级:论坛游民
帖 子:6
专家分:27
注 册:2011-6-30
收藏
得分:0 
scanf的返回值由后面的参数决定   返回值表示成功读入的数据的个数   如:   scanf("%d%d", &a, &b);   如果a和b都被成功读入,那么scanf的返回值就是2   如果只有a被成功读入,返回值为1   如果a和b都未被成功读入,返回值为0   如果遇到错误或遇到end of file,返回值为EOF。   且返回值为int型.
2011-11-09 13:10
koudong
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2011-10-29
收藏
得分:0 
回复 5楼 紫冠流云
我擦,你的分解是错得
2011-11-09 15:33
紫冠流云
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2011-11-8
收藏
得分:0 
回复 7楼 koudong
我知道分解是错的,分解开的目的只是为了让楼主看得明白而已,解释绝对没有错的。呵呵!

[ 本帖最后由 紫冠流云 于 2011-11-9 16:14 编辑 ]
2011-11-09 16:07
快速回复:用while写的程序有几个地方不明白
数据加载中...
 
   



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

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