1、国家二级 C语言机试(操作题)模拟试卷 452及答案与解析 一、程序填空题 1 下列给定程序中,函数 fun的功能是:在形参 s所指字符串中寻找与参数 c相同的字符,并在其后插入一个与之相同的字符,若找不到相同的字符则不做任何处理。 例如,若 s所指字符串为 “baacda”, c中的字符为 a,执行后 s所指字符串为“baaaacdaa”。 请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。 注意:部分源程序给出如下。 不得增行或删行,也不得更改程序的结构 ! 试题程序: #include stdio h voicl fun(char*s, char c) int i,
2、j, n; /*found*/ for(i=0; si!=【 1】 ; i+) if(si=c) /*found*/ n=【 2】 ; while(si+1+n!=0) n+; for(j=i+n+l; j i; j一一 ) sj+1=sj; /*found*/ sj+1一 m; i=i+l; main() char s80=“baacda“, c; printf(“inThe string: sn“, s); printf(“nInput a character: “); scani(“ c“, &c); fun(s, c); printf(“nThe result is: sn“, s);
3、 二、程序修改题 2 在主函数中从键盘输入若干个数放入数组中,用 0结束输入并放在最后一个元素中。 下列给定程序中,函数 fun的功能是:计算数组元素中所有值为正数的平均值 (不包括 0)。 例如,数组中元素的值依次为: 39、一 47、 21、 2、一 8、 15、 0,则程序的运行结果为 19 250000。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! 试题程序: #inclucte conio h #2nclucle stdio h double fun(int x) /*found*/ int sum=0 0; i
4、nt c=0, i=0; while(xi!=0) f if(xi 0) sum+=xi; c+; i+; /*found*/ sum=c; return sum; main() int x1 0 00; int i=0; printf f“nPlease enter some ctat a(end with 0): “); do scanf(“ d“, &xi); while(xi+!=0); printf(“ lfn“, fun(x); 三、程序设计题 3 编写函数 fun,其功能是:根据以下公式计算 S,并将计算结果作为函数值返回, n通过形参传入。 例如,若 n的值为11时,函数的值为
5、 1 833333。 注意:部分源程序给出如下。 请勿改动主函数main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 试题程序: #include stcllib h #include conio h #include stctio h #include string h float fun(int n)void main() int n; float s; system(“CLS“); printf(“nPlease enter N: “); scanf(“ d“, &n); s=fun(n); printf(“The result is: fn“, s); 国家
6、二级 C语言机试(操作题)模拟试卷 452答案与解析 一、程序填空题 1 【正确答案】 (1)0 (2)0 (3)c 【试题解析】 填空 1: for语句循环条件是判断是否到达字符串结尾,即当前字符是否为 0。 填空 2: while语句用以确定字符串的长度,所以变量 n赋初值为 0。 填空 3:题目要求如果找到与参数 c相同的字符,就在后面插入一个相同的字 符,且找到后应该给数组元素赋值,本题目给出参数为 c。 二、程序修改题 2 【正确答案】 (1)double sum =0 0; (2)sum/=c; 【试题解析】 (1)变量定义错误,变量 sum存放所有数据的和,应定义为 double
7、型。 (2)C语言中的除法运算符是 “/”。 三、程序设计题 3 【正确答案】 float fun (int n) int i,s1 =0; float s=0 0; for(i=1; i =n; i+) s1=s1+i; /*求每一项的分母 */ s=s+1 0/s1; /*求多项式的值 */ return s; 【试题解析】 此类计算表达式值的程序,首先需要根据题意分析表达式的规律,得出通项,然后再完成程序语句。 本题中表达式的规律是 1+2+n 的倒数之和,那么可以通过 for循环语句来实现第 1项到第 n项的变化。其实就是累加算法,方法是先根据题目要求定义变量,注意该变量的数据类型,然后对其进行初始化操作,因为该变量的作用是累加器,所以初始值应为 0(或 0 0,根据变量数据类型来确定),再通过 for循环语句来完成累加过程。 本题中 s1用来表示 每一项的分母,每一项的分母都是由前一项分母加项数。注意,由于 s1定义成一个整型,所以在 s=s+1 0/s1语句中不能把 1 0写成 1。