1、国家二级 C语言机试(操作题)模拟试卷 148及答案与解析 一、程序填空题 1 给定程序中,函数 fun的功能是建立一个 NxN的矩阵。矩阵元素的构成规律是:最外层元素的值全部为 1;从外向内第 2层元素的值全部为 2;第 3层元素的值全部为 3, 依次类推。例如,若 N=5,生成的矩阵为: 1 1 1 1 1 1 2 2 2 1 1 2 3 2 1 1 2 2 2 1 1 1 1 1 1 请在 程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANK1 C中。 不得增行或删行,也不得更改程序的结构 ! #nclude #define N
2、 7 *found* void fun(int(*a)_1_) ( int i, j, k, m; if(N 2=0) n=N 2; else m=N 2+1; for(i=0; i #include void fun(int m, int k) int aa20, i; for (ii=0; m; i+) *found* aai=m k, m =k; for(; i; i-) *found* printf(“ d“, aai); main() int b, n; printf(“ nPlease enter a number and a base: n“), scanf(“ d d“, n,
3、 &b); fun(n, b); printl(“ n“); 三、程序设计题 3 编写一个函数,从 num个字符串中找出最长的一个字符串,并通过形参指针max传回该串地址。 (注意:主函数中用 *作为结束输入的标志。 ) 注意:部分源程序在文件 PROG1 C中。 请勿改动主函数 main和其他函数中的任 何内容,仅在函数 fun的花括号中填入你编写的若干语句。 #include #include void fun(char(*a)81, int num, char *max) main() char ss1081, *ps; void NONO(); int n, i=0; printf(“
4、输入若干个字符串: “), gets(ssi); puts(ssi); while(!strcmp(ssi, “*“)=0) i+; gets(ssi); puts(ssi); n=i; fun(ss, n, &ps); printf(“ nmax= sin“, ps); NONO(); VOid NONO() *请在此函数内打开文件,输入测试数据,调用 fun函数,输出数据,关闭文件。 * char ss2081, *ps; int n, i=0; FILE *rf, *wf; rf=fopen(“in dat“, “r“); wf=fopen“out dat“, “w“); fgets(s
5、si, 81, rf); while(!strncmp(ssi, “*“, 4)=0) i+; fgets(SSi, 81, rf); n=i; fun(ss, n, &ps); fprintf(wf, “ s“, ps); fclose(rf); fclose(wf); 国家二级 C语言机试(操作题)模拟试卷 148答案与解析 一、程序填空题 1 【正确答案】 (1)N (2)i (3)i+1 【试题解析】 函数 fun的功能是按照指定的规律建立一个 NxN的矩阵。 第一空:第一空处是补充函数定义,在主函数内 fun的调用形式是: fun(x), x是二维数组名,因此 fun函数的参数是一个
6、二维数组指针,故第一空处应为“N”。 第二空: i等于 0时,此时第二空下的循环内 a0j=aN-1i=1,显然这是对最外围的两列赋值为 1; i等于 1时,对外向内第 2列元素的值全部赋值为 2,依此类推,故第二空处 i的初值应为 “i”。 第三空: “aki=akN-i-1=_3_; ”是对矩阵的两行进行操作,题干要求矩阵每一圈上的值都相等,故这里和上一个循环的列上的值相同,也为 “i+1”。 二、程序修改题 2 【正确答案】 (1)aai=m k; (2)printf(“ d“, aai-1); 【试题解析】 函数的功能是将十进制正整数 m转换成 k(2k9)进制数。 (1)第二个标识下
7、的 “aaim k; ”是进制的转换,应该是取余,所以第二个标识下 “aaim k; ”应该改为 “aai=m k; ”。 (2)数制转换处理过程中所得的结果,和实际要输出的结果顺序是相反的,所以必须对存放余数的数组反向输出。原题中 “printf(“ d“, aai); ”的下标有误。因为下标 i的起始值为 0,故反向输出时应该从 i-1开始,因此改为 “printf(“ d“,aai-1); ”。 三、程序设计题 3 【正确答案】 int i, k=0, maxlen; *k为 a数组中最长串所在元素的下 标, 初始为 0, maxlen为其串长 * maxlen=strlen(ak); for(i=1; imaxlen) maxlen=strlen(ai); k=i; *max=ak; 【试题解析】 该程序功能是找出最长的一个字符串。解题思路,首先指定第一个字符串为长度最大的字符串,然后在循环过程中将其与其他的所有串的长度进行比较,求出最长的串。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1