猿问

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

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

#include <stdio.h>

#define N 20

main()

{

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);

}

程序哪里出问题了?为什么会一直输入但是没有结果?

慕仰5061498
浏览 3051回答 1
1回答

guozhchun

程序写得太乱,很难看出想表达的意思。大概看了一下,发现一个问题。定义数组的长度为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]越界。
随时随地看视频慕课网APP
我要回答