1、三级数据库技术机试-228 及答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.请编写函数 countValue(),其功能是:计算 500800 之间素数的个数 count,并按所求素数的值从小到大的顺序,再计算其间隔加、减之和,即第 1个素数第 2个素数+第 3个素数第 4个素数+第 5个素数的值 sum。函数 WriteData()负责把结果输出到 OUT.DAT文件中。注意:部分源程序已给出。请勿改动主函数 main()和写函数 WriteData()的内容。试题程序:#includestdio.hint count,sum;void
2、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);(分数:100.00)_三级数据库技术机试-228 答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.请编写函数 countValue(),其功能是
3、:计算 500800 之间素数的个数 count,并按所求素数的值从小到大的顺序,再计算其间隔加、减之和,即第 1个素数第 2个素数+第 3个素数第 4个素数+第 5个素数的值 sum。函数 WriteData()负责把结果输出到 OUT.DAT文件中。注意:部分源程序已给出。请勿改动主函数 main()和写函数 WriteData()的内容。试题程序:#includestdio.hint count,sum;void writeData();void countValue()void main()count=sum=0:countValue();printf(“count=%d,sum=%d
4、”,count,sum);writeData();void writeData()FILE*fp;fp=fopen(“OUT.DAT“,“w“);fprintf(fp,“%d%d“,count,sum);fclose(fp);(分数:100.00)_正确答案:(void countValue()int i,j,flag,temp;int outBuf300;for(i=500;i800;i+)flag=0;for(j=2;ji;j+)/判断否为素数if(i%j=O)flag=1;/如果当前数据可被除 1和其自身之外的整数整除的话,则将标志置 1,表明该数不是素数break;/一旦发现不是素数,
5、就退出循环if(flag=0)/如果是素数outBufcount=i;/将该数放到 outBuf中count+;/计数器加 1for(i=0;icount-1;i+)/以下是将数据进行从小到大排序的程序for(j=i+1;jcount;j+)if(outBufioutBufj)/如果第 i位比它后面的数大,则将两者进行交换,也即将更小的值放到第 i位temp=outBufi;outBufi=outBufj;outBufj=temp;for(i=0;icount;i+)if(i%2=0)sum+outBufi;/如果下标是偶数,则加上该数else sum=outBufi;/如果下标是奇数,则减去该数)解析:解析 本题主要考查素数的判断、排序和数组中指定下标元素的求和问题。判断是否为素数,素数的定义是,若一个数除了其自身和 1再没有其他的除数,则该数就是素数,故用其定义可以很容易判断,在 2到所判断数之问的数进行扫描,若有一个除数,则该数就不是素数;排序,排序的思想是(以从小到大为例),将当前数据与其后的各个数据相比较,如果当前的数据比其后的数据大,则将两数据进行交换,从而使得前面的数据小于后面的数据,达到从小到大排序的目的;计算其间隔加、减之和:判断下一位数的标号是奇数还是偶数,若下标为偶数则加,否则则减。