求问
为什么一下代码会有a+b+c不等于20的结果?
#include
#include
int main(){
int i,a,b,c;
a=0;b=0;c=0;
srand((unsigned)time(NULL));
int n[20];
for(i=1;i<=20;i++){
n[i]=rand()%21-10;
//printf("%d",num20[i]);
if(n[i]>0) a++;
else if(n[i==0]) b++;
else if(n[i]<0) c++;
}
printf("%d\n%d\n%d\n",a,b,c);
return 0;
}
该回答引用GPT:
上述代码中,当i等于20时数组n[20]会出现越界,导致程序崩溃。需要将数组n的大小定义为21。此外,第7行中rand()函数生成的随机数范围是[-10,10],加1后变为[-9,11],而这个范围包括了0,因此会导致代码不准确。应该将rand()%21-10改为rand()%20-10,使得随机数的范围变为[-10,9],不包括0。另外,在第12行中if语句的条件n[i==0]应该改为n[i]==0,否则也会导致不准确。最终可以得到如下代码:
#include<stdlib.h>
#include<time.h>
int main(){
int i,a=0,b=0,c=0;
srand((unsigned)time(NULL));
int n[21];
for(i=1;i<=20;i++){
n[i]=rand()%20-10;
if(n[i]>0)
a++;
else if(n[i]==0)
b++;
else if(n[i]<0)
c++;
}
printf("%d\n%d\n%d\n",a,b,c);
return 0;
}
如还有疑问,可留言帮助解决。
else if(n[i==0]) b++;
->
else if(n[i]==0) b++;