1、国家二级 C语言机试(操作题)模拟试卷 259及答案与解析 一、程序填空题 1 下列给定程序中,函数 fun的功能是:计算如下公式直到 10 3,并且把计算结果作为函数值返回。例如,若形参 e的值为 1e一 3,则函数返回值为 0 551690。请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构 !试题程序: #includestdio h double fun(double e) int i, k; double s, t, x; s=0; k=1; i=2;*found* x=【 1】 4; *found*
2、while(x【 2】 e) s=s+k*x; k=k*(一 1); t=2*i; *found* x=【 3】(t*t); i+; return s; main()double e=1e一 3; printf(“ nThe result is: fn“, fun(e); 二、程序修改题 2 下列给定程序中,函数 tim的功能 是:先将字符串 s中的字符按正序存放到字符串 t中,然后把 s中的字符按逆序连接到字符串 t的后面。 例如,当 s中的字符串为 “ABCDE”时,则 t中的字符串应为 “ABCDEEDCBA”。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main函数,
3、不得增行或删行,也不得更改程序的结构 ! 试题程序: #include stdlib h #include conio h #include stdio h #include string h void fun(char*s, char*t) int i, s1; s1=strlen(s); *found* for(i=0; i =s1; i+) ti=Si; for(i=0; i s1; i+) ts1+i=Si; *found* ts1= 0; void main() char s100, t100; system(“CLS“); printf(” nPlease enter string
4、 s: “); scanf(“ S“, S); fun(S, t); printf “The result is: s n“, t); 三、程序设计题 3 请编写一个函数 int fun(int*s, int t, int*k),用来求出数组的最大元素在数组中的下标并存放在 k所指向的存储单元中。 例如,输入如下整数: 876 675 896 101 301 401 980 431 451 777 则输出结果为 6, 980。 注意:部分源程 序在文件 PROG1 C中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 试题程序: #inclu
5、de conio h #include stdio h #include stdlib h int fun(int *s, int t, int*k) void main() FILE*wf; int a10=876, 675, 896, 101, 301, 401, 980, 431, 451, 777), k; system(“CLS“); fun(a, 10, &k); printf(“ d, d n“, k, ak); * wf=fopen(“out dat“, “W“); fprintf(wf, “ d, d“, k, ak); fclose(wf); * 国家二级 C语言机试(操作
6、题)模拟试卷 259答案与解析 一、程序填空题 1 【正确答案】 (1)3 0或 (double)3 (2) (3)(t+1) 【试题解析】 本题考查: 基本算术运算的类型转换。其转换规则如下:如果双目运算符两边运算数的类型一致,则所得结果的类型与运算数的类型一致。如果双目运算符两边运算数的类型不一致,系统将自动进行类型转换,使运算符两边运算数的类型达到一致后,再进行运算。其类型转换规律见下表。while循环语句,一般考查如何根据题意确定循环条件,以及如何通过循环变量的变化实现循环操作。填空 1:变量 x定义为 double类型,而运算符 “ ”后面是整型数,因此给 x赋值时,需要注意数据类型
7、,此处不能将 3 0写成 3。填空 2: while循环语句的循环条件。根据题意确 定循环变量应大于 1e一 3,因此此处应填 “ ”。填空 3:表达式的通项是 (2*i+1)(2*i)2,由于程序中已定义 t=2*i,所以此处应该填写 (t+1)。本题填空 1还可以运用强制类型转换来实现。强制类型转换是通过类型转换运算来实现的,其一般形式为 “(类型说明符 )(表达式 )”。其功能是:把表达式的运算结果强制转换成类型说明符所表示的类型。例如: (float)a 把 a转换为实型 (int)(x+y) 把 x+y的结果转换为整型 二、程序修改题 2 【正确答案】 (1)for(i=0; i s
8、l; i+) (2)t2*sl= 0; 【试题解析】 (1)字符串长度为 sl,但数组下标从 0 sl 1,因此 不包括 sl。 (2)正序和逆序字符串都加入了 t串中,此时 t 串中最后一个元素的下标为 2*sl一1,所以在 2* sl下标处加入字符串结束标识 0。 三、程序设计题 3 【正确答案】 int fun(int*s, int t, int*k) int i; *k=0; *k所指的数是数组的下标值 * for(i=0; i t; i+) if(s*k si) *k=i; *找到数组的最大元素,把该元素的下标赋给 k所指的数* return s*k; *返回数组的最大元素 *| 【试题解析】 本题中直接使用指针变量 k,使用时要注意对 k进行指针运算。程序一开始让 k指向数组中的第一个元素,即 *k=0。