编写函数 int encode(int a[][4]),对二维数组中左下三角的全部元素(包含对角线上的元素)作如下变化
1.若概数不是素数则保持不变。2.若是素数则大于他的最小素数替换概数
如下面这个例子
3 6 4 17
8 5 9 10
12 19 7 20
4 14 21 23经过变化后为
5 6 4 17
8 7 9 10
12 23 11 20
4 14 21 29
以下程序是我自己编的 但运行起来有问题 希望帮忙纠正,若有其他号方法也希望能写一下 不胜感激
#include <stdio.h>
int main()
{
int encode(int a[4][4]);
int prime(int x);
int a[4][4],i,j;
printf("请输入数组A:\n");
for(i=0;i<=3;i++)
for(j=0;j<=3;j++)
scanf("%d",&a[i][j]);
printf("数组A为:\n");
for(i=0;i<=3;i++)
{
for(j=0;j<=3;j++)
printf("%d ",a[i][j]);
printf("\n");
}
encode(a);
printf("变化后为:\n");
for(i=0;i<=3;i++)
{
for(j=0;j<=3;j++)
printf("%d",a[i][j]);
printf("\n");
}
return 0;
}
int prime(int x)
{
int i;
for(i=2;i<=(x-1);i++)
if(x%i==0) break;
if(i>=x) return 1;
else return 0;
}
int encode(int a[4][4])
{
int i,j,b;
for(i=0;i<=3;i++)
for(j=0;j<=i;j++)
if(prime(a[i][j]))
while(1)
{
b=a[i][j]+1;
if(prime(b)) return b;
}
for(i=0;i<=3;i++)
for(j=1;j<=3;j++)
return a[i][j];
}
不好意思,再麻烦一下,能在我原来的基础上改一下在运行吗
追答重点在while循环的判断上,这里的作用和上面程序中的NextPrime()函数类似,并省去了下面不必要的for循环语句,关于代码的可读性,你自己来个对比吧。
#include
int main()
{
int encode(int a[4][4]);
int prime(int x);
int a[4][4],i,j;
printf("请输入数组A:\n");
for(i=0;i=x) return 1;
else return 0;
}
int encode(int a[4][4])
{
int i,j,b;
for(i=0;i<=3;i++)
for(j=0;j<=i;j++)
if(prime(a[i][j]))
while(!prime(++a[i][j]))
{
b=a[i][j]+1;
}
return b;
}
参考资料:楼上
本回答被提问者采纳