1、国家二级 C语言机试(操作题)模拟试卷 657及答案与解析 一、程序填空题 1 使用 VC+2010打开考生文件夹下 blank1中的解决方案。此解决方案的项目中包含一个源程序文件 blank1 c。在此程序中,函数 fun的功能是:把形参 a所指数组中的最小值放在元素 a0中,接着把 a所指数组中的最大值放在 a1元素中;再把 a所指数组元素中的次小值放在 a2中,把 a所指数组元素中的次大值放在a3,依此类推。 例如,若 a所指数组中的数据最初排列为: 9, 1, 4, 2, 3, 6, 5, 8, 7;则按规则移动后,数据 排列为: 1, 9, 2, 8, 3, 7, 4, 6, 5。形
2、参 n中存放 a所指数组中数据的个数。 规定 fun函数中的 max存放当前所找的最大值, px存放当前所找最大值的下标。 请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。 注意:部分源程序给出如下。 不得增行或删行,也不得更改程序的结构 ! 试题程序: #include stdio h #define N9 void fun(int a, int n) int i, j, max, min, pxr, pn, t; for(i=0; i n-1; i+=2) *found* max=min=【 1】 px=pn=i; for(j=i+1; j n; j+) *found
3、* if(max 【 2】 ) max=aj; px=j; ) *found* if(min 【 3】 ) min=aj; pn=j; ) if(pn!=i) t=ai; ai=min; apn=t; if(px=i)px=pn; if(px!=i+1) t=ai+1; ai+1=max; apx=t; ) void main() int bin=9, 1, 4, 2, 3, 6, 5, 8, 7, i; printf(“ nThe original data: n“); for(i=0; i N; i+) printf(“ 4d“, bi); printf(“ n“); fun(b, N);
4、 printf(“ nThe data after moving: n“); for(i=0; i N; i+) printf(“ 4d“, bi); printf(“ n“); 二、程序修改题 2 使用 VC+2010打开考生文件夹下 modi1中的解决方案。此解决方案的项目中包含一个源程序文件 modi1 c。在此程序中, fun函数的功能是:分别统计字符串中大写字母和小写字母的个数。 例如,给字符串 s输入: AAaaBBbb123CCcccd,则应输出: upper=6, lower=8。请改正程序中的错误,使它得出正确的结果。 注意:部分源程序在文件 MODI1 C中,不要改动 ma
5、in函数,不得增行或删行,也不得更改程序的结构 ! 试题 程序: #include stdio h *found* void fun(char*s, int a, int b) while(*s) if(*s =A&*s =Z) *found* *a=a=a+1; if(*s =a*&s =z) *found* *b=b+1; s+; main() char s100; int upper=0, lower=0; printf(“ nPlease a string: “); gets(s); fun(s, &upper, &lower); printf(“ nupper= d lower= d
6、 n“, upper, lower); 三、程序设计题 3 使用 VC+2010打开考生文件夹下 prog1中的解决方案。此解决方案的项目中包含一个源程序文件 prog1 c。在此程序中,编写函数 fun,其功能是:根据以下公式计算 S,并将计算结果作为函数值返回, n通过形参传入。例如,若 n的值为 11时,函数的值为1 833333。注意 :部分源程序给出如下。请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。试题程序: #includestdlib h #include conio h #include stdio h #include st
7、ring 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: f n“, s); 国家二级 C语言机试(操作题)模拟试卷 657答案与解析 一、程序填空题 1 【正确答案】 (1)ai (2)aj (3)aj 【试题解析】 填空 1: for循环语句循环体中将数组元素 ai赋值给变量 max和变量 min。 填空 2:通过一次 for循环,找到数组中的最大值, if语句的
8、条件表达式是 maxaj。 填空 3:同理,此处 if语句的条件表达式是 min ai。 二、程序修改题 2 【正确答案】 (1)void fun(char*s, int*a, int*b) (2)*a=*a+1; (3)*b=*b+1; 【试题解析】 (1)由主函数中调用 fun函数的语句 fun(s, &upper, &lower)可知,函数的后两个变量为指针的形式,所以用 *a和 *b。 (2)*a的作用是用来记录大写字母的个数,此处的作用是对 *a累加 1,所以此处应改为 *a=*a+1。 (3)*b的作用是用来记录小写字母的个数,此处的作用是对 *b累加 1,所以此处应改为 *b=*
9、b+1。 三、程序设计题 3 【正确答案】 float fun(int n) inti, 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=