1、国家二级 C语言机试(操作题)模拟试卷 105及答案与解析 一、程序填空题 1 下列给定程序中,函数 fun的功能是:在形参 ss所指字符串数组中,将所有串长超过 k的宁符串中后面的宁符删除,只保留前面的 k个字符。 ss所指字符串数组中共有 N个字符串,且串长小于 M。 请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。 注意:部分源程序给出如下。 不得增行或删行,也不得更改程序的结构 ! 试题程序: #include stdio h #include string h #define N 5 #define M 10 /*found*/ void fun(char(*S
2、S)【 1】 , int k) int i=0; /*found*/ while(i 【 2】 ) /*found*/ ssik=【 3】 ; i+; ) main() char xNM=“Create”, “Nodify”, “Sort”, “skip”, “Delete”; int i; printf(“ nThe original string nn”); for(i=0; i N; i+)puts(xi); printf(“ n”); fun(x, 4); printf(“ nThe string after deleted: nn”); for(i=0, i N; i+)puts(x
3、i); printf(“n”); 二、程序修改题 2 下列给定程序中函数 fun的功能是:计算 n!。 例如,给 n输入 5,则输出 120 000000。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! 试题程序: #include stdio h #include conio h double fun(int n) double result=1 0; /*found*/ if n=0 return 1 0; while(n 1 n 170) /*found*/ result=n一一; return result; mai
4、n() int n; printf(“Input N: ”); Scanf(“ d”, n); printf(“ n n d!= if nn”, n, fun(n); 三、程序设计题 3 编写函数 fun,其功能是:求 Fibonaeci数列中大于 t的最小的数,结果由函数返回。 Fibonacei数列 F(n)的定义为: F(0)=0, F(1)=1 F(n)=F(n1)+F(n一 2) 例如,当 t=1000时,函数值为 1597。 注意:部分源程序给出如下。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 试题程序: #include c
5、onio h #include math h #include stdio h int fun(int t) main() int n; n=1000; printf(“n= d, f= d n”, n, fun (n); 国家二级 C语言机试(操作题)模拟试卷 105答案与解析 一、程序填空题 1 【正确答案】 (1)M (2)N (3) 0 【试题解析】 填空 1:根据 main函数中的函数调用语句,确定函数定义时的形式参数,所以填入 M。 填空 2: while循环语句需要对所有字符串进行操作,因此循环条件是 i N。 填空 3:字符串结尾加入字符串结束标以 0。 二、程序修改题 2 【
6、正确答案】 (1)if(n=0) (2)result*=n一一;或 result*=n; n一一; 【试题解析】 (1)这里是一个简单的格式错误, if条件判断语句应该加括号。 (2)根据阶乘的概念,从 n开始, n!=n*(n一 1)!,直到 1,所以麻该为 result*=n一一;。 三、程序设计题 3 【正确答案】 int fun(int t) int f0=0, f1=1, f, do *根据 Fibonacci数列的定义求数值 * f=f0+f1; f0=f1; f1=f; while(f t); *如果求的数值小于 t则继续 * return f; 【试题解析】 根据所给数列定义不难发现,该数列最终的结果是由两个数列之和组成,所以可以在循环内部始终把 f看成是前两项之和,而 f0始终代表第 n一 2项, f1代表第 n 1项。退出循环时得到的数 f,就是大于指定数的最小的数。