1、国家二级 C语言机试(操作题)模拟试卷 238及答案与解析 一、程序填空题 1 给定程序中,函数 fun的功能是:用函数指针指向要调用的函数,并进行调用。规定在【 2】处使 f指向函数 f1,在【 3】处使 f指向函数 f2。当调用正确时,程序输出: x1=5 000000, x2=3 000000, x1*x1+x1*x2=40 000000。 注意:部分源程序在文件 BLANK1 C中。 不得增行或删行,也不得更改程序的结构 ! 试题程序: 1 #include stdio h 2 double f1(double x) 3 return x*x; 4 double f2(double x
2、, double y) 5 return x*y; 6 double fun(double a, double b) 7 8 *found* 9 【 1】 (*f)(); 10 double r1, r2; 11 *found* 12 f=【 2】 ; 13 r1=f(a); 14 *found* 15 f=【 3】 ; 16 r2=(*f)(a, b); 17 return r1+r2; 18 19 main() 20 double x1=5, x2=3, r ; 21 r=fun(x1 , x2); 22 printf( nx1= f, x2= f, x1*x1+x1*x2= f n, x
3、1, x2, r); 23 二、程序修改题 2 下列给定程序中, fun函数 的功能是:分别统计字符串中大写字母和小写字母的个数。 例如,给字符串 s输入: AAaaBBbb123CCcccd,则应输出: upper=6, lower=8。请改正程序中的错误,使它得出正确的结果。 注意:部分源程序在文件 MODI1 C中,不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! 试题程序: 1 #include stdio h 2 *found* 3 void fun(char*s, int a, int b) 4 5 while(*s) 6 if(*s=A *s = a *s = z
4、) 10 *found* 11 *b=b+1; 12 s+; 13 14 15 main() 16 char s100; int upper=0, lower=0 ; 17 printf( nPlease a string: ); 18 gets(s); 19 fun(s, upper, lower); 20 printf( n upper=% d lower= d n, upper, lower); 21 三、程序设计题 3 请编写函数 fun,其功能是分别统计形参 t所指二维数组中字母 A和 C的个数。 注意:部分源程序存在 PROG1 C中,请勿改动主函数 main和其他函数中的任何内容
5、,仅在函数 fun的花括号中填入所编写的若干语句 。 试题程序: 1 #include stdio h 2 #include stdlib h 3 #defihe M 14 4 void NONO(); 5 void fun(char(*t)M, int *a, int*c) 6 7 8 9 void cjet(char(*s)M) 10 int i, j; 11 for(i=0; iM; i+) 12 for(j=0 ; jM ; j+) 13 sij=65+rand()%12; 14 printf( c, sij); 15 printf( n); 16 17 18 main() 19 ch
6、ar aMM; 20 int x, y; 21 qet(a); 22 fun(a, x, y); 23 printf(A= d C= d n, x, y); 24 NONO(); 25 26 void NONO() *本函数用于打开文件,输入数据, 27 调用函数, 输出数据,关闭文件。 * 28 FILE *fp, *wf; 29 int i, j, x, y; 30 char aMM; 31 fp=fopen(c; test in dat, r); 32 wf=fopen(c: test out dat, w); 33 for(i=0; iM; i+) 34 for(j=0; jM; j+
7、) 35 fscanf(fp, c, aij); 36 37 fun(a, x, y); 38 fprintf(wf, A= d n, x); 39 fprintf(wf, C= d n, y); 40 fclose(fp); 41 fclose(wf); 42 国家二级 C语言机试(操作题)模拟试卷 238答案与解析 一、程序填空题 1 【正确答案】 (1)double (2)f1 (3)f2 【试题解析】 填空 1: (*f)()代表一个指向函数的指针变量,而本题所被调用的f1、 f2两函数的返回值均为 double型,因而 此空应该填写 double。 填空 2:因为在给函数指针变量赋值
8、时,只需给出函数名而不必给出参数,因而此空应该填写 f1。 填空 3:同填空 2,此空应该填写 f2。 相关知识点: (1)指向函数的指针变量的一般定义形式为:数据类型 (*指针变量名 )(); (2)函数的调用可以通过函数名调用,也可以通过函数指针调用。 (3)在给函数指针变量赋值时,只需给出函数名而不必给出参数。 二、程序修改题 2 【正确答案】 (1)void fun(char*s, int*a, int*b) (2)* a=*a+1; (3)* b=*b+1; 【试题解析】 (1)由主函数中调用。 fun函数的语句 fun(s, 循环统计的下标 2 *a=0;初始化 a字符统计的个数 3 *c=0;初始化 c字符统计的个数 4 for(i=0 ; iM; i+)行 5 6 for(j=0; jM; j+)列 7 8 if(tij=A)字符是 a,计数 9 (*a)+; 10 if(tij=c)字符是 c,计数 11 (*c)+; 12 13 【试题解析】 对二维数组的行列分别循环,行优先,查找数组中元素为 A或者C,分别对其进行计 数。