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