1、国家二级 C语言机试(操作题)模拟试卷 667及答案与解析 一、程序填空题 1 使用 VC+2010打开考生文件夹下 blank1中的解决方案。此解决方案的项目中包含一个源程序文件 blank1 c。在此程序中,函数 fun的功能是:将形参 s所指字符串中的所有数字字符顺序前移,其他字符顺序后移,处理后新字符串的首地址作为函数值返回。 例如, s所指字符串为: asd123fgh543df,处理后新字符串为: 123543asdfghdf。请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。 注意:部 分源程序在文件 BLANK1 C中。 不得增行或删行,也不得更改程序的结构
2、 ! 试题程序: #2nclude stdio h #include string h #include stdlib h #inc2ude ctype h char*fun(char*s) inti, j, k, n; char*p, *t; n=strlen(s)+1; t=(char*)malloc(n*sizeof (char); p=(char*)malloc(b*sizeof (char); j=0; k=0; for(i=0; i n; i+) if(isdigit(si) *found* p【 1】 =si; j+; ) else tk=si; k+; ) *found* fo
3、r(i=0; i 【 2】 ; i+) pj+i=ti; pj+k=0; *found* return【 3】 ; main() char s80; printf(“Please input: “); Scanf(“ s“, s); printf(“ nThe result is: s n“, fun(s); 二、程序修改题 2 使用 VC+2010打开考生文件夹下 modi1中的解决方案。此解决方案的项目中包含一个源程序文件 modi1 c。在此程序中,函数 fun的功能是:根据形参 m的值(2m9),在 m行 m列的二维数组中存放如下所示规律的数据,由 main函数输出。 请改正程序中的错
4、误,使它能得出正确的结果。 注意:部分源程序在文件 MODI1 c中,不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! 试题程序: #include conio h #include stdio h #define M10 int aMM=0); *found* void fun(int*a, int m) int j, k; for(j=0; j m; j+) for(k=0; k m; k+) *found* ajk=k*j; main() int i, j, n; printf(“Enter n: “); scanf(“ d“, &n); fun(a, n); for(i
5、=0; i n; i+) for(j=0; j n; j+) printf(“ 4d“, aij); printf(“ n“); 三、程序设计题 3 使用 VC+2010打开考生文件夹下 prog1中的解决方案。此解决方案的项目中包含一个源程序文件 prog1 c。在此程序中,编写一个函数,其功能是:从传入的num个字符中找出最长的一个字符串,并通过形参指针 max传回该串地址 (用 *作为结束输入的标识 )。 注意:部分源程序在文件 PROG1 C中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 试题程序: #inclucte conio
6、 h #include stdio h #include string h #include stdlib h char*fun(char(*a)81, int num, char*max) void ma2n() FILE*wf; char ss1081, *ps=NULL; char s381=“abcd“, “deg“, “diegns“, *p=NULL; int i=0, n; system(“CLS“); printf(“输入若干个字符串: “); gets(ssi); puts(ssi); while(!strcmp(ssi, “*“)=0)术用 4个星号作为结束输入的标志 *
7、i+; gets(ssi); puts(ssi); n=i; ps=fun(ss, n, ps); printf(“ nmax= s n“, ps); *found* wf=fopen(“out dat“, “w“); p=fun(s, 3, p); fprintf(wf, “ s“, p); fclose(wf); *found* 国家二级 C语言机试(操作题 )模拟试卷 667答案与解析 一、程序填空题 1 【正确答案】 (1)j (2)k (3)p或 (p) 【试题解析】 填空 1:函数中申请了两个内存空间,其中 p存放数字字符串, t存放非数字字符串,根据条件可知, p依次存放数字字符
8、串,其位置由 j来控制,所以应填 j。 填空 2:利用 for循环再把 t中的内容依次追加到 p中,其中 t的长度为 k,所以应填 k。 填空 3:处理之后的字符串存放到 p中,最后返回 p的首地址即可,所以应填 p。 二、程序修改题 2 【正确答案】 (1)void fun(int aM, int m) (2)ajk=(k+1)*(j+1); 【试题解析】 (1)在函数体 fun中可知, a是一个二维整型数组变量,设置实参时,用 *a表示是错误的,所以应改为 void fun(int aM, int m)。 (2)根据输出的结果可知,应改为 ajk=(k+1)*(j+1);。 三、程序设计题 3 【正确答案】 char*fun(char(*a)81, int num, char*max) int i=0; max=a0; for(i=0; i num; i+) *找出最长的一个字符串 * if(strlen(max) strlen(a i) msx=ai; return max; *传回最长字符串的地址 * 【试题解析】 解答本题之前,首先应该明白 ss是一个指向一维数组的指针变量, max是指向指针的变量,所以引用变量时要注意加上 *。本程序使用循环语句遍历字符串数组,使用条件语句判断该字符串是否最长。