试题与答案

请编写函数countValue(),其功能是:计算500~800之间素数的个数cou

题型:问答题

题目:

请编写函数countValue(),其功能是:计算500~800之间素数的个数count,并按所求素数的值从小到大的顺序,再计算其间隔加、减之和,即第1个素数—第2个素数+第3个素数—第4个素数+第5个素数……的值sum。函数WriteData()负责把结果输出到OUT.DAT文件中。
注意:部分源程序已给出。
请勿改动主函数main()和写函数WriteData()的内容。
试题程序:
#include<stdio.h>
int count,sum;
void writeData();
void countValue()


void main()

count=sum=0:
countValue();
printf("count=%d,sum=%d”,count,sum);
writeData();

void writeData()

FILE*fp;
fp=fopen("OUT.DAT","w");
fprintf(fp,"%d%d",count,sum);
fclose(fp);

答案:

参考答案:void countValue()
{
int i,j,flag,temp;
int outBuf[300];
for(i=500;i<800;i++)
{
flag=0;
for(j=2;j<i;j++)//判断否为素数
if(i%j==O)
{
flag=1;//如果当前数据可被除1和其自身之外的整数整除的话,则将标志置1,表明该数不是素数
break;//一旦发现不是素数,就退出循环
}
if(flag==0)//如果是素数
{
outBuf[count]=i;//将该数放到outBuf中
count++;//计数器加1
}
}
for(i=0;i<count-1;i++)//以下是将数据进行从小到大排序的程序
for(j=i+1;j<count;j++)
if(outBuf[i]>outBuf[j])//如果第i位比它后面的数大,则将两者进行交换,也即将更小的值放到第i位
{
temp=outBuf[i];
outBuf[i]=outBuf[j];
outBuf[j]=temp;
}
for(i=0;i<count;i++)
{
if(i%2==0)sum++outBuf[i];//如果下标是偶数,则加上该数
else sum==outBuf[i];//如果下标是奇数,则减去该数
}
}

解析: 本题主要考查素数的判断、排序和数组中指定下标元素的求和问题。
①判断是否为素数,素数的定义是,若一个数除了其自身和1再没有其他的除数,则该数就是素数,故用其定义可以很容易判断,在2到所判断数之问的数进行扫描,若有一个除数,则该数就不是素数;②排序,排序的思想是(以从小到大为例),将当前数据与其后的各个数据相比较,如果当前的数据比其后的数据大,则将两数据进行交换,从而使得前面的数据小于后面的数据,达到从小到大排序的目的;③计算其间隔加、减之和:判断下一位数的标号是奇数还是偶数,若下标为偶数则加,否则则减。

试题推荐
微信公众账号搜索答案