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

编写程序,由键盘输入20个整数,分别找出其中的最大正整数、最小正整数、最大负整数、最小负整数

编写程序,由键盘输入20个整数,分别找出其中的最大正整数、最小正整数、最大负整数、最小负整数

C
慕仰5061498 2016-03-30 12:56:08
编写程序,由键盘输入20个整数,分别找出其中的最大正整数、最小正整数、最大负整数、最小负整数#include <stdio.h>#define N 20main(){int i,num[N],a,b,c,d;for(i=1;i<=N;i++)   scanf("%d",&num[i]);if(num[i]>0){a=num[1];b=num[1];for(i=2;i<N;i++)if(num[i]>a)a=num[i];else if (num[i]<b)b=num[i];}    else if(num[i]<0)    {c=num[i];    d=num[i];    for(i=2;i<N;i++)    if(num[i]>c)    c=num[i];    else if (num[i]<d);    d=num[i];}printf("最大正整数:%d,最小正整数:%d,最大负整数:%d,最小负整数:%d",a,b,c,d);}程序哪里出问题了?为什么会一直输入但是没有结果?
查看完整描述

1 回答

?
guozhchun

TA贡献103条经验 获得超76个赞

程序写得太乱,很难看出想表达的意思。大概看了一下,发现一个问题。定义数组的长度为20,数组下标从0开始,这样数组下标只能是0~19,num[20]就会造成数组越界。所以以下语句是错误的。

for(i=1;i<=N;i++)
   scanf("%d",&num[i]);

要么 i 从0开始,要么数组定义大一点。

另外

if(num[i]>0)

从程序上看,这个语句不包含在循环语句中,而上面for循环执行结束后 i 变为21,此时num[i]越界。

查看完整回答
反对 回复 2016-03-30
  • 1 回答
  • 0 关注
  • 3050 浏览

添加回答

举报

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