1、国家二级( C语言)机试模拟试卷 335及答案与解析 一、程序填空题( 30分) 1 人员的记录由编号和出生年、月、日组成, N名人员的数据已在主函数中存入结构体数组 std中。函数 fun的功能是:找出指定出生年份的人员,将其数据放在形参 k所指的数组中,由主函数输出,同时由函数值返回满足指定条件的人数。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANKl C中。 不得增行或删行,也不得更改程序的结构 ! #include #define N 8 typedef struct int num; int year,month,
2、day ; STU; int fun(STU *std, STU *k, int year) int i,n=0; for (i=0; i void fun(char *p) char max,*q; int i=0; max=pi; while(pi!=0) if(maxp) *q=*(q-1); q-; p0=max; main() char str80; printf(“Enter a string: “); gets(str); printf(“nThe original string: “); puts(str); fun(str); printf(“nThe string afte
3、r moving: “); puts(str); printf(“nn“); 三、程序设计题( 40分) 3 编写一个函数,该函数可以统计一个长度为 2的字符串在另一个字符串中出现的次数。例如,假定输入的字符串为: asd asasdfg asd as zx67 asd mklo,子字符串为: as,则应输出 6。 注意:部分源程序在文件 PROGl C中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 #include #include int fun(char *str,char *substr) NONO() /* 请在此函数内打开文件
4、,输入测试数据,调用 fun 函数,输出数据,关闭文件。 */ char str81,substr3, ch; int n,len, i = 0; FILE *rf, *wf ; rf = fopen(“in.dat“,“r“); wf = fopen(“out.dat“,“w“); while(i p) 【试题解析】 ( 1)在 C语言中语句以分号 “;”结束,在第一个标识下语句“q=p+i”没有用分号结尾,应改为 “q=p+I;”。 ( 2)根据题意第二标识下是利用循环来将移走的字符前的原字符向后顺序移动,第二标识下 “wihle(qp)”wihle不是 C语言关键字,应改成 “while
5、(qp)”,利用while循环来实现字符移动。 三、程序设计题( 40分) 3 【正确答案】 int cnt=0; char *p=str, *q; while(*p) q=strstr(p, substr); if(q=NULL) break; p=q+strlen(substr); cnt+; return cnt; 【试题解析】 ( 1)在 fun函数中, str接受主函数中的字符数组的首地址,另一个字符形参指针指向子串字符数组 substr的首地址。 ( 2)利用 strstr函数找到 substr出现的位置,设置两个指针变量 p和 q分别记录起始地址和 substr出现的地址。 ( 3)每次循环开始,使指针 p指向 str字符串首地址,使 q指向子 串 substr出现的地址, p的位置不断往后移,直到字符串尾,每次找到 substr对应统计加 1。