1、三级数据库技术机试-188 及答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.程序 test.c 的功能是:计算 100 以内满足以下条件的所有整数 i 的个数 cnt 以及这些 i 之和 sum。条件:i,i+4,i+10 都是素数,同时 i+10 小于 100。请考生编写函数 countValue()实现程序要求,最后调用函数 writeDAT()把结果 cnt 和 sum 输出到文件 out.dat 中。(数值 1 不是素数)注意:部分源程序存放在 test.c 文件中。请勿改动主函数 main()和输出数据函数 writeDAT()的
2、内容。#include stdio.h /include 语句说明各程序中包含 vc6.0 中的标准输入输出库函数 stdio.hvoid writeDAT(); /函数 writeDAT()的声明语句int cnt,sum; /定义全局整型变量 cnt,sumint isPrime (int number) /函数 isPrime (number)判断 number 是否是素数,如果是素数,则返回 tag的值等于 1,否则返回 tag 的值等于 0int i,tag=1; /定义变量 i 和 tag,并且赋变量 tag 的初值等于 1if(number=1)return 0; /如果 num
3、ber 的值等于 1,则返回 0for (i=2; tag 1+) /变量 i 从 2 开始,每次加 1,直到其值小于等于 number/2 并且变量 tag 的值等于 1 时,退出循环if(number %i=0)tag=0; /如果 number 能被 i 整除,则变量 tag 的值等于 0return tag; /返回变量 tag 的值void countValue()void main()icnt=sum=0; /给全局变量 cnt,sum 赋初值 0countValue(); /调用函数进行计算printf(“满足条件的整数个数=%d/n“,cnt); /在屏幕上输出满足条件的整数个
4、数 cntprintf(“满足条件的整数的和值=%d/n“,sum); /在屏幕上输出满足条件的整数的和 sumwriteDAT();/把计算结果写入到文件 out.dat 中void writeDAT()FILE *fp; /定义文件指针 fpfp=fopen(“out.dat“,“w“); /以只写的方式的打开文件 out.dat,并且 fp 指向此文件fprintf(fp,“%d/n%d/n“,cnt,sum); /把素数的个数值 cnt,和的值 sum 写入到文件 out.datfclose(fp); /关闭文件 out.dat(分数:100.00)_三级数据库技术机试-188 答案解
5、析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.程序 test.c 的功能是:计算 100 以内满足以下条件的所有整数 i 的个数 cnt 以及这些 i 之和 sum。条件:i,i+4,i+10 都是素数,同时 i+10 小于 100。请考生编写函数 countValue()实现程序要求,最后调用函数 writeDAT()把结果 cnt 和 sum 输出到文件 out.dat 中。(数值 1 不是素数)注意:部分源程序存放在 test.c 文件中。请勿改动主函数 main()和输出数据函数 writeDAT()的内容。#include stdio.
6、h /include 语句说明各程序中包含 vc6.0 中的标准输入输出库函数 stdio.hvoid writeDAT(); /函数 writeDAT()的声明语句int cnt,sum; /定义全局整型变量 cnt,sumint isPrime (int number) /函数 isPrime (number)判断 number 是否是素数,如果是素数,则返回 tag的值等于 1,否则返回 tag 的值等于 0int i,tag=1; /定义变量 i 和 tag,并且赋变量 tag 的初值等于 1if(number=1)return 0; /如果 number 的值等于 1,则返回 0fo
7、r (i=2; tag 1+) /变量 i 从 2 开始,每次加 1,直到其值小于等于 number/2 并且变量 tag 的值等于 1 时,退出循环if(number %i=0)tag=0; /如果 number 能被 i 整除,则变量 tag 的值等于 0return tag; /返回变量 tag 的值void countValue()void main()icnt=sum=0; /给全局变量 cnt,sum 赋初值 0countValue(); /调用函数进行计算printf(“满足条件的整数个数=%d/n“,cnt); /在屏幕上输出满足条件的整数个数 cntprintf(“满足条件的
8、整数的和值=%d/n“,sum); /在屏幕上输出满足条件的整数的和 sumwriteDAT();/把计算结果写入到文件 out.dat 中void writeDAT()FILE *fp; /定义文件指针 fpfp=fopen(“out.dat“,“w“); /以只写的方式的打开文件 out.dat,并且 fp 指向此文件fprintf(fp,“%d/n%d/n“,cnt,sum); /把素数的个数值 cnt,和的值 sum 写入到文件 out.datfclose(fp); /关闭文件 out.dat(分数:100.00)_正确答案:(int i; /定义变量 ifor (i=3; i90;
9、i+) /循环变量 i 从 3 开始,依次递增,直到小于 90if (isPrime (i) sum+=i; /变量 cnt 加 1,变量 i 累加到 sum)解析:解析 100 以内(含 100)满足 i、i+4、i+10 都是素数的整数的个数以及这些 i 之和。解题思路首先定义循环变量 i,然后将 i 的值赋初值为 3,每循环一次则将 i 的值加 1,直到 i90。在 for 循环中,每执行一次循环则调用函数 isPrime()(该函数具体的算法已经在源程序中给出,直接调用即可),对 i、i+4、i+10 是否同时是素数进行判断,如果这三个数同时为素数,则计数变量 cnt 值加1,同将时将变量 i 的值累加到 sum 上。