编写程序,由键盘输入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]越界。
- 1 回答
- 0 关注
- 3050 浏览
添加回答
举报
0/150
提交
取消