1、国家二级( C语言)机试模拟试卷 187及答案与解析 一、程序填空题( 30分) 1 给定程序中,函数 fun的功能是:在形参 ss所指字符串数组中,将所有串长超过 k的字符串中右边的字符删除,只保留左边的 k个字符。 ss所指字符串数组中共有 N个字符串,且串长小于 M。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANK1 C中。 不得增行或删行,也不得更改程序的结构 ! #include #include #define N 5 #define M 10 *found* void fun(char(*ss) 【 1】 ,
2、int k) ( int i=0 ; /*found*/ while(i #define M 5 *found* int fun(int n, int xx) int i, j, sum=0; prLntf(“ nThe d x d matrix: n“, M, M); for(i=0; i void fun(char *a, char *h,char *p) main() char s81,*t, *f; void NONO (); printf(“Enter a string:n“);gets(s); t=f=s; while(*t)t+; t-; while(*t=*)t-; while
3、(*f=*)f+; fun(s , f,t); printf(“The string after deleted:n“);puts(s); NONO(); void NONO() /* 本函数用于打开文件,输入 数据,调用函数,输出数据,关闭文件。 */ FILE *in, *out ; int i ; char s81, *t, *f ; in = fopen(“in.dat“,“r“); out = fopen(“out.dat“,“w“); for(i = 0 ; i 10 ; i+) fscanf(in, “%s“, s); t=f=s; while(*t)t+; t-; while(
4、*t=*)t-; while(*f=*)f+; fun(s, f, t); fprintf(out, “%sn“, s) ; fclose(in); fclose(out); 国家二级( C语言)机试模拟试卷 187答案与解析 一、程序填空题( 30分) 1 【正确答案】 【 1】 M 【 2】 N 【 3】 0或 0 【试题解析】 第一空:第一空补充函数定义,在主函数内 fun函数的调用形式是“fun(x,4)“, x是二维数组名,故 fun函数的第一参数是指向二维数组的指针 ,因此第一空为 “M“。 第二空: “while(i2)“是填循环终止条件,根据题意, fun函数是将所有串长超过
5、k的字符串中右边的字符删除,因此循环次数为 N,故第二空处为 “N“。 第三空: “ssik=【 3】; i+; “是将串长超过 k的字符串中右边的字符删除,即在 ssik位置为 0或 “0“。 二、程序修改题( 30分) 2 【正确答案】 (1)int fun(int n, int xxM (2)printf(“ 4d“, xxij); 【试题解析 】 (1)第一个标识下 fun函数的定义中对于二维数组的定义在原题中并没有给出空间,所以将 “intfun(intn,intxx)“改为 “inl fun(int n,int xxM)“。 (2)fun函数中 n是 int型, C语言输出语句中整
6、型应该是 d,所以第二个标识下 “printf“ f“, xxij); “应该改为 “print(“ 4d“, xxij); “。 三、程序设计题( 40分) 3 【正确答案】 int j=0; char *q=a; while(*q while(*h h+; while(*p)aj+=*p+; aj=0; 【试题解析】 ( 1)首先,设置一个指针变量 q指向字符串的头位置,并使用循环,将从字符串头开始到第一个字母的 “*”拷贝到字符串 a。 ( 2)然后对第一个字母到最后一个字母之间的字符进行循环判断是否为 “*”,如果是则跳过,否则拷贝到字符串 a。 ( 3)最后,将最后一个字母到串尾的 “*”拷贝到 a,然后在 新生成的字符串尾加0。