在随机生成的二维数组中寻找素数



在C中,我有一个随机生成的20x20数组。我可以很好地排序和显示它,但我需要从每一行中提取素数,并将它们放入自己的数组中。它需要使用main之外的函数来完成。

问题是,无论我尝试什么,我都找不到正确的语法来对数组执行算术运算以找到素数,我总是会得到"无效的二进制操作数%(有'int*'和'int'("错误。我不确定是否有一种方法可以取消引用数组来对其执行算术运算

#include <stdio.h>
#include <stdlib.h>
#define TOTAL_ROWS 20
#define TOTAL_COLUMNS 20
void fillMatrix(int A[TOTAL_ROWS][TOTAL_COLUMNS], int *set_rows, int *set_columns)
{
int rows = 20, columns = 20;
for(int i = 0; i < rows; i++)
for(int j = 0; j < columns; j++)
A[i][j] = rand() % 500;
*set_rows = rows;
*set_columns = columns;
}


void sortMatrix(int A[TOTAL_ROWS][TOTAL_COLUMNS], int rowsize, int colsize)
{
for(int r = 0; r < rowsize; r++)
qsort(A[r], colsize, sizeof(int), compare);
}

void displayArray(int A[TOTAL_ROWS][TOTAL_COLUMNS], int rows, int columns)
{
for(int i = 0; i < rows; i++)
{
for(int j = 0; j < columns; j++)
printf("%3i ", A[i][j]);
printf("n");
}
}
void findPrimes(int A[TOTAL_ROWS][TOTAL_COLUMNS], int rows, int columns)  
{
int n,c,sum,count;
for(int i = 0; i < rows; i++)
{
for(int j = 0; j < columns; j++){
for(i=0;i<n;i++)
{
c=0;
for(j=2;j<A[i];j++)
{
if(A[i]%j==0) //where "invalid operands to binary % (have 'int *' and 'int')" happens 
{
c=1;
break;
}
}
if(c==0)
{
printf("%dt",A[i]);
sum=sum+A[i];
count++;
}
}
}
}
}

int main(void)
{
int A[TOTAL_ROWS][TOTAL_COLUMNS];
int rows, columns;
fillMatrix(A, &rows, &columns);
sortMatrix(A, rows, columns);
displayArray(A, rows, columns);
findPrimes(A, rows, columns);
return  0;
}

问题是A[i]是2D阵列的一整行,因此它本身就是一个标准(1D(阵列(在大多数情况下使用时会衰减为int*,因此会出现消息(。

您希望使用A[i][j]来获取特定单元格的int值。

但是,尽管这允许您的代码进行编译,但它仍然无法正常工作。以下是需要解决的进一步问题列表:

  • 嵌套循环都在i上迭代。这显然是一个错误,会产生意想不到的结果
  • 使用未初始化的自动变量nsumcount。后两者应初始化为0;您需要明确地执行此操作。我不知道n想做什么
  • 代码样式。虽然这不会直接导致代码失败,但缩进不一致和缺乏封装的混乱会使出错变得容易得多

最新更新