| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 741 人关注过本帖
标题:[求助] 循环语句中总是执行不需要的语句,怎么解决?
只看楼主 加入收藏
xfree007
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2007-9-13
收藏
 问题点数:0 回复次数:8 
[求助] 循环语句中总是执行不需要的语句,怎么解决?
题目:
从键盘输入一批整数,最后一个数为0,编程找出其中的最大数和最小数,并输出。
(要求:必须用的循环语句,while,do-while,for任选其一)


我自己写的代码:

#include<stdio.h>
main()
{
int max=0,min=0,i;
do
{
printf("Please Enter Number:");
scanf(" %d" ,&i);
if(max<i) max=i;
if(min>i&&i!=0) min=i;
}
while(i);
printf("MAX = %d , MIN = %d" ,max,min);
}

代码完成后,用TC2.0编译,输入正常,比较正常。
如:输入123,456,789,-123,-456,-789后,得到结果MAX = 789,MIN = -789,这是正确的。
但是,如果输入的数只是正数,最后输出的 MIN 就总是等于 0 ,意思就是 0 参与了数据比较。
本来按照题目的意思,0 应该只是作为结束符来使用,不参与比较的。
代码中我已经在这句中:
if(min>i&&i!=0) min=i;
加入了i!=0,但是很奇怪的,最后怎么运行结果MIN都是0

我以为是循环语句选用不正确,但是while,do-while,for都试过一遍,结果依然错误。

请高手帮我改正!!先谢过!
搜索更多相关主题的帖子: 语句 
2007-10-12 22:25
死了都要C
Rank: 4
来 自:四川成都
等 级:贵宾
威 望:13
帖 子:1582
专家分:116
注 册:2006-12-7
收藏
得分:0 
是这样的``

这里: int max=0,min=0,i;

这里: if(min>i&&i!=0) min=i;

再想想```



女施主``我给你``送茶来了```师太``你就从了老衲吧``
代码本天成~~~妙头偶得之```
2007-10-12 22:32
xfree007
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2007-9-13
收藏
得分:0 
多谢LS,忘记赋值的问题了。

不过如果不赋值,编译有问题,Turbo C 中可以编译,但是DOS版的TC不能编译,能建议下赋值弄个什么值合适

2007年9月3日开始学C,请大家多多关照。。。。
2007-10-12 22:37
emyhello
Rank: 1
等 级:新手上路
帖 子:43
专家分:0
注 册:2006-1-3
收藏
得分:0 

#include<stdio.h>
int main(void)
{
int max,min,i;
printf("Please Enter Number:");
scanf(" %d" ,&i);
if (i==0)
{
printf("input error\n");
getch();
return 0;
}
max=min=i;
while (i!=0)
{
if (max<i) max=i;
if (min>i) min=i;
printf("Please Enter Number:");
scanf(" %d" ,&i);

}
printf("MAX = %d , MIN = %d" ,max,min);
getch();
return 0;
}

max=min=0;已经对min赋了初值,而在do循环中,由于输入的都是正整数>0,不会执行min=i;即min始终都为0。

[此贴子已经被作者于2007-10-12 23:35:44编辑过]

2007-10-12 23:18
無邪的睡脸
Rank: 2
等 级:等待验证会员
威 望:1
帖 子:344
专家分:13
注 册:2007-9-11
收藏
得分:0 

看来楼主还是没把循环语句完全搞清楚啊!

2007-10-12 23:38
xfree007
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2007-9-13
收藏
得分:0 
再次感谢2楼

我又想了一下,其实MAX,MIN两个变量赋值都是错误的,应该把第一次输入的值赋给它们才对

#include<stdio.h>
main()
{
int max,min,i;
printf("Please Enter Number:");
scanf(" %d" ,&i);
max=i;min=i;
do
{
printf("Please Enter Number:");
scanf(" %d" ,&i);
if(max<i) max=i;
if(min>i&&i!=0) min=i;
}
while(i);
printf("MAX = %d , MIN = %d" ,max,min);
}


4楼的我看过,感觉没必要这么麻烦,如果第一次就输入结束符0,就让MAX和MIN都等于0算了,没必要报错的(虽然报错更严谨)。

同时也感谢4楼的,虽然我更喜欢2楼的启发式指导。。。。。

再次感谢 死了都要C

2007年9月3日开始学C,请大家多多关照。。。。
2007-10-13 09:57
lxm520910
Rank: 1
等 级:新手上路
帖 子:96
专家分:0
注 册:2007-10-3
收藏
得分:0 
94,一般要求输出MAX和MIN的话,  都是把第一个数值同时赋值给MAX和MIN,后面在去比较,在赋值。
2007-10-13 11:30
symos
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2007-9-15
收藏
得分:0 
6楼的程序的第 10、11 行移到后面两个 if 语句的后面比较好点,要不然做为结束符的 0 还是参与了比较。


2007-10-13 22:53
dingql
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2020-4-20
收藏
得分:0 
2007年的,哇,都十三年过去我们还在做这个题。do的语句里可以把printf删去更好
2020-04-20 21:13
快速回复:[求助] 循环语句中总是执行不需要的语句,怎么解决?
数据加载中...
 
   



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

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