1、国家二级 C语言机试(操作题)模拟试卷 587及答案与解析 一、程序填空题 1 下列给定程序中,函数 fun的功能是:计算如下公式直到 10-3,并且把计算结果作为函数值返回。 例如,若形参 e的值为 1e一 3,则函数返回值为 0 551690。 请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。 注意:部分源程序给出如下。 不得增行或删行,也不得更改程序的结构 ! 试题程序:#include stdio h double fun(double e) int i, k; double s, t, x; s=0; k=1;i=2; *found* x=【 1】 4; *fo
2、und* while(x【 2】 e) s=s+k*x; k=k*(一 1); t=2: l: i; *found* x=【 3】 (t*t); i+; return s; main() double e=1e一 3; printf f“ nThe result is: f n“, fun(e); 二、程序修改题 2 下列给定 程序中,函数 fun的功能是:求出如下分数序列的前 n项之和,和值通过函数值返回。 例如,若 n=5,则应输出 8 391667。 请改正程序中的错误,使其得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! 试题程序: #inclu
3、de stdlib h #includeconio h #include stdio h *found* void fun(int n) int a=2, b=1, c, k; double s=0 0; for(k=1; k =n; k+) *found* s=s+(Double)a b; c=a; a=a+b; b=c; return(s); void main() int n=5; system(“CLS“); printf(“ nThe value of function is: 1f n“, fun(n); 三、程序设计题 3 请编写函数 fun,其功能是:找出 2M整型二维数组中最
4、大元素的值,并将此值返回调用函数。 注意:部分源程序给出如下。 请勿改动主 函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 试题程序: #define M 4 #include stdio h int fun(int aM) void main() int arr2M=5, 8, 3, 45, 76,一 4, 12, 82; printf(“max= d n“, fun (arr); 国家二级 C语言机试(操作题)模拟试卷 587答案与解析 一、程序填空题 1 【正确答案】 (1)3 0或 (double)3 (2) (3)(t+1) 【试题解析】 本题
5、考查:基本算术运算的类型转换。其转换规则如下:如果双目运算符两边运算数的类型一致,则所得结果的类型与运算数的类型一致。如果双目运算符两边运算数的类型不一致,系统将自动进行类型转换,使运算符两边运算数的类型达到一致后,再进行运算。其类型转换规律见下表。while循环语句,一般考查如何根据题意确定循环条件,以及如何通过循环变量的变化实现循环操作。填空 1:变量 x定义为 double类型,而运 算符 “ ”后面是整型数,因此给 x赋值时,需要注意数据类型,此处不能将 3.0写成 3。填空 2: while循环语句的循环条件。根据题意确定循环变量应大于 1e一 3,因此此处应填 “ ”。填空 3:表
6、达式的通项是(2*i+1) (2*i)2,由于程序中已定义 t=2*i,所以此处应该填写 (t+1)。本题填空 1还可以运用强制类型转换来实现。强制类型转换是通过类型转换运算来实现的,其一般形式为 “(类型说明符 )(表达式 )”。其功能是:把表达式的运算结果强制转换成类型说明符所表示的类型。例如: (noat)a 把 a转换为实型 (int)(x+y) 把 x+y的结果转换为整型 二、程序修改题 2 【正确答案】 (1)double fun(int n) (2)s=s+(double)a b; 【试题解析】 本题考查:函数定义,函数定义的一般形式为 “类型标识符函数名(形式参数表列 )”,其
7、中类型标识符用来说明函数值的类型,函数的类型实际上是函数返回值的类型。 (1)由语句 “: return(s); ”和变量 s定义为 double型可知,该函数定义时其类型标识符为 double类型。 (2)注意数据类型 double的书写格式。 确定函数类型标 识符在填空和改错题中经常考到,如果函数没有返回值,则函数定义为 void型;如果函数有返回值,则函数类型应与返回值类型一致;如果不定义函数类型标识符,则系统默认为 int型。 三、程序设计题 3 【正确答案】 int fun(int aM) int i, j, mex=a00; *对二维数组进行遍历 * for(i=0; i 2; i
8、+) for(j=0; j M; j+) if(max aij) *将最大值保存在 mex中 * max=aij; return max; 【试题解析】 本题考查:求数组的最大值,需运用循环语句。 因为数组是二维数值,所以应使用二层加 for循环嵌套。使用 for循环语句时需注意循环变量的取值范围。 此类求最大值或最小值的问题,可以采用逐个比较的方式,对数组中所有元素遍历一遍,从中找出数组最大值或最小值。首先定义变量 max用来存放数组的第一个元素的值,然后利用 for循环逐个找出数组中的元素,并与 max比较,如果元素值大于 max,则将该值赋予 max,循环结束后 max的值即为数组最大值,最后将该值返回。 该类题目考查较多,需要掌握逐个比较的方法。 对于 m*n二维数组,如果采用逐个查找方法,代码实现如下: for(i=0; i m; i+) for(j=0; j n; j+)