问答题 使用VC6打开 下的源程序文件modi2.cpp。
阅读下列函数说明和代码,完成空出部分程序。函数sum(int A[NUM][NUM],int n)实现的功能是计算矩阵中所有非质数数字的和。
提示:函数isPrime(int n)的功能是判定当前数字是否为质数,如果是则返回true。
注意:不能修改程序的其他部分,只能修改sum()函数。
#include <ioStream.h>
#include <cmath>
#define NUM 50
int A[NUM] [NUM]
{
{10,13,59,70,6},
{2,40,89,92,9},
{14,55,71,11,19},
{79,68,83,97,101},
{102,10001,23,45}
};
bool isPrime(int n)
{
if(n==1)
return false;
if(n==2)
return true;
for(int i=2; i<n/2; i++)
{
if(n%i==0)
return false;
}
return true;
}
int sum(int A[NUM] [NUM],int n)
{
}
int msin()
{
cout < < sum(A,5) < < endl;
return 0;
}
【正确答案】
【答案解析】int re=0;
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(!isPrime(A[i][j]))
//判断是否是素数,不是素数则累加
{
re=re+A[i][j];
}
}
}
return re;
答案考生文件夹 [解析] 函数sum(int A[NUM][NUM],int n)的功能是实现计算矩阵A[NUM][NUM]中所有非质数数字的和,在计算累加和之前需先判断该数是否是质数,不是质数则累加起来,可用循环来实现累加求和。
(1)矩阵A[NUM][NUM]是2维矩阵,sum函数的参数n给出了矩阵A的具体维数,因此矩阵A中共含有n×n个有效数。
(2)A[NUM][NUM]中元素可表示为A[i][j],其中i表示元素所在行数,j表示元素所在的列数,i、j分别从0到n-1范围内变化,因此设置内外两层循环可逐个遍历整个矩阵寻找非质数。
(3)函数isprime提供了判断质数的方法,对每个元素A[i][j],调用函数isprime(A[i][j]),判断函数的返回值是否为假,如果为假说明不是质数,应该累加起来。