为了账号安全,请及时绑定邮箱和手机立即绑定

从键盘输入一批整数,最后一个数为0,编程求出其中的最大数和最小数。请问我的哪里不妥吗?

从键盘输入一批整数,最后一个数为0,编程求出其中的最大数和最小数。请问我的哪里不妥吗?

C C# C++
liaoexiang 2017-11-16 17:03:59
#include<stdio.h>int main() { int max,min,n; printf("Input a siries of number,and the last one is 0:"); scanf("%d",&n); max=n;min=n;do{ if(n>=max) max=n; else if(n<=min) min=n; else  scanf_s("%d",n);}while(n==0);printf("max is %d,min is %d",max,min);getchar();getchar();}
查看完整描述

1 回答

?
慕哥8595403

TA贡献5条经验 获得超0个赞

假设程序运行后,第一个输入的整数n是1。则根据你的程序,max和min初始化为1,进入循环,n>=max成立,又再次max=n,这部分显然是多余的,程序继续执行,由于第一个if成立,所以,后面两个else都不执行。循环判断条件是n==0,然而此时n==1,因此不执行循环内容,输出max is 1, min is 1。


根据上面的演示可以知道,if判断条件里,应该改为n>max,n<min,这样可以去除多余的赋值操作;明确if判断语句的含义,即一个条件成立后,其余的相关else 和 else if语句不再执行,为保证第二个scanf函数的执行,第二个else应当去掉;另外,循环条件如果写n==0,则意味着只有在n被赋值为0的时候,循环体才执行,而根据题意,应该是n为0的时候结束循环,所以改为n!=0。

综上,代码修改如下:

#include<stdio.h>
int main()
{ int max,min,n;
printf("Input a siries of number,and the last one is 0:");
scanf("%d",&n);
max=n;min=n;
do{
if(n>max) max=n;
else if(n<min) min=n;
scanf_s("%d",n);
}while(n!=0);
printf("max is %d,min is %d",max,min);
getchar();
getchar();
}

望采纳,谢谢。

查看完整回答
反对 回复 2017-11-17
  • 1 回答
  • 0 关注
  • 4220 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信