/*使用指向二维数组的指针输出二维数组元素中的素数*/ #include<stdio.h> #include<math.h> #define M 3 #define N 4 prime(int *p,int n)//判断素数 { int i,j,k,found,s; for(i=0;i<n;i++) {s=p[i]; for(i=0;i<n;i++) {s=p[i]; found=1; for(k=2;k<=sqrt(s)&&found;k++) if(s%k==0)found=0;//found=0非素数 if(found&&s!=1) printf("%3d",s); } } } int main() {int a[M][N],i,j; printf("Please input array:\n"); for(i=0;i<M;i++) scanf("%d",&a[i][j]);//输入数组元素 printf("array:\n"); for(i=0;i<M;i++) {for(j=0;j<N;j++) printf("%3d",a[i][j]);//输出数组元素 printf("\n");} printf("\nprime:"); prime(&a[0][0],M*N);//调用函数,判断素数 return 0; } 运行后我输入6 7 8 5,但是显示Please input array: 6 7 8 5 array: -1 6 36 0 1 74204025 0 0 8 36 0 prime: -1 0 7 0 0 0 -------------------------------- Process exited after 4.317 seconds with return value 0 请按任意键继续. . .
时间: 2023-12-08 11:07:00 浏览: 24
在主函数中,您输入了四个数字6、7、8、5,但是您的输入方式有问题,应该使用双重循环来输入二维数组的元素。另外,在prime函数中,您使用了变量i两次,第二次使用i的时候应该改为j。以下是修改后的代码:
```
#include <stdio.h>
#include <math.h>
#define M 3
#define N 4
int prime(int *p, int n) {
int i, j, k, found, s;
for (i = 0; i < n; i++) {
s = p[i];
found = 1;
for (k = 2; k <= sqrt(s) && found; k++) {
if (s % k == 0) {
found = 0;
}
}
if (found && s != 1) {
printf("%3d", s);
}
}
}
int main() {
int a[M][N], i, j;
printf("Please input array:\n");
for (i = 0; i < M; i++) {
for (j = 0; j < N; j++) {
scanf("%d", &a[i][j]);
}
}
printf("array:\n");
for (i = 0; i < M; i++) {
for (j = 0; j < N; j++) {
printf("%3d", a[i][j]);
}
printf("\n");
}
printf("\nprime:");
prime(&a[0][0], M * N);
return 0;
}
```
输入正确的二维数组后,程序可以正确输出素数。