有两个原因可能导致结尾出现一串其他数字,一是数组下标100越界,超过了数组的最大下标99,访问了其他内存位置的数据;然后判断是否为素数的函数judge()的实现,没有对参数检查是否小于2,如果这个越界的位置的数据小于2,则可能会被认定为素数,所以就可能出现如图片中一个负数被判断为素数,根据这两点修改如下:
参考链接:
#include <stdio.h>
int judge(int * p){
// https://baike.baidu.com/item/%E8%B4%A8%E6%95%B0/263515
if(*p<2){ // 小于2的其他数字不是素数
return 0;
}
int i;
int prime=1;
for(i=2;i<*p;i++){
if(*p%i==0){
prime=0;
break;
}
}
if(prime==1){
return 1;
}
return 0;
}
int main(void){
int i;
int a[100];
for(i=0;i<100;i++){
a[i]=i+1;
}
for(i=0;i<100;i++){ // 数组最大下标为99
if(judge(&a[i])){
printf("%d是素数",a[i]);
}
}
}