1、国家二级 C语言机试(操作题)模拟试卷 77及答案与解析 一、程序填空题 1 用筛选法可得到 2 n(n int fun(int n) int a10000, i, j, count=0; for (i=2; i #include void fun(int a, int *b, int *c) int i, j, d, y; for(2=3; i double fun(int n) ) NONO() /*请在此函数内打开文件,输入测试数据,调用 fun函数,输出数据,关闭文件。 */ FILE*rf, *wf; int n, i; double s; rf=fopen(“in dat“, “r
2、“); wf=fopen(“out dat“, “w“); for(i=0; i1 0; i+) fscanf(rf, “ d“, &n); s=fun(n); fprintf(wf, “ lfkn“, s); fc10Se(rf); fclose(wf); main() int n; double s; printf(“nInput n: “); scanf(“ d“, &n); s=fun(n); printf(“nns= fn“, s); NONO(); 国家二级 C语言机试(操作题)模拟试卷 77答案与解析 一、程序填空题 1 【正确答案】 (1)ai (2)ai (3)0 【试题解析
3、】 fun函数的功能是用筛选法可得到 2 n(n10000)之间的所有素数。 第一空:循环 “for(j=ai*2; j=n; j+_1_)”中,循环变量 j的初始值从 ai的 2倍开始,下一次进入循环 j就是 ai的 3倍,第一空处是补充 j的变化情况,而 j每次都增加一个 ai,即第一空处应为 “ai”。 第二空:根据题意第二空处是从数表中找下一个非 0数,即在循环中比较 ai是否为 0,如果为 0的话, i+指向 后一个数表元素,故第二空处应为 “ai”。 第三空:根据语句 “count+; printf(count 15?“ 5 d“; “n 5 d“, ai); ”可知在满足条件之后
4、计数变量 count自增,并且输出 ai,可知 ai是一个素数,由审题分析可知,经过筛选之后数表中非 0的元素就是素数,故第三空处应为“0”,即 ai不为 0的话就是素数。 二、程序修改题 2 【正确答案】 (1)y=1; (2)d=a i; 【试题解析】 函数的功能是为一个偶数查找两个素数,这两个素数之和等于该偶数。 (1)第一标识下 “Y=1; ”变量 Y没有定义,编译时会提示出错。题中用标志 y区别 i是否是素数, y=1是素数, y=0不是素数。第一个标识下当 i是素数时, y最后的值就是进入循环结构前的初始化值 0,标识该值不是素数,所以 “Y=1; ”应该改为“y=1; ”。 (2
5、)在语句 “if(y=1)”中,应该是判断 (a-i)是否是素数,即 d应赋值 “a-i”而不是“d=a-i: ”,所以二个标识下 “(1=a-i; ”改为 “d=a-i: ”。 三、程序设计题 3 【正确答案】 int i; double sum=0 0; for(i=1; i=n; i+) if(i 5=0 | i 9=0) /*被 5或 9整除 * sum+=1 0/i; return sum; 【试题解析】 程序功能是计算并输出 n(包括 n)以内能被 5或 9整除的所有自然数的倒数之和。 (1)首先,通过循环,判断小于等于 n的每一个整数是否符合题干中的要求。其中的判断条件能否被 5或者被 9整除为 i 5=0|i 9=0。 (2)然后求得符合 (1)要求的数的倒数的累加和。