1、国家二级 C语言机试(操作题)模拟试卷 43及答案与解析 一、程序填空题 1 给定程序中,函数 fun的功能是:有 NxN矩阵,以主对角线为对称线,对称元素相加并将结果存放在左下三角元素中,右上三角元素置为 0。例如,若 N=3,有下列矩阵: 1 2 3 4 5 6 7 8 9 计算结果为 1 0 0 6 5 0 10 14 9 请在程序的下:划线处填入正确的内容并把下划线删除,使程序得 出正确的结果。 注意:源程序存放在考生文件夹下的 BLANKl C中。 不得增行或删行,也不得更改程序的结构 ! #include #define N 4 /*found*/ void fun(int(*t)
2、 _1_ ) int i, j; for(i=1; i VOid fun(char * s, int num5) int k, i=5; for (k=0; k=0) numi+; main() char s181; int huml5, i; printf(“ nPlease enter a string: ”); gets(s1); fun(s1, numl); for(i=0; i void fun(int a, int b, long *c) void NONO() *本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 * FILE *rf, *wf; int i , a,b
3、; long C; rf=fopen(“in dat”, “r”); wf=fopen(“out dat”, “W”); for(i=0; i10; i+) fscanf(rf, “ d, d”, a, b); fun(a, b, c); fprint: f(wf, “a= d, b= d, c= ld n”, a, b, c); fcloSe(rf); fclose(wf); main() int a, b; long c; void NONO(); printf(“Input a, b: ”); Scanf(“ d d”, (2)switch(*s) 【试题解析】 本题中函数的功能是统计字
4、符串中各元音字母 (即 A、 E、 I、 O、 U)的个数。其中,本题在 while循环中采用 switch-case条件判断字符串中的每一个字符并进行统计。 解题思路 (1)第一个标识下的 for循环过程是将 num数组中的变量初始值设置为 0,用来统计每一个元音字母出现的个数, for循环中的循环条件表达式中的变量是 k,所以第二个标识下 “numj=0; ”改为 “numk=0; ”。 (2)第二个标识下的 switch-case条件选择的功能应该是对 s指针指向的字符串中的每一个字符进行判断,不应该是 s的数组名,所以第三个标识下 “switch(s)”改为“switch(*s)”。 三、程序设计题 3 【正确答案】 *c=(a 10)*1000+(b 10)*100+(a 10)*10+(b 10); 【试题解析】 (1)分解两位数的正整数 n的个位和十位数,可用 n 10和 n 10实现。 (2)设 x0、 x1、 x2、 x3为一位数,则 x0、 x110、 x2100、 x31000,可以分别使 x0、 x1、 x2、 x3构成个、十、百、千带权数,而 x0+x110+x2100+x31000构成四位数。本题最多只考虑四位数。