1、国家二级( C语言)机试模拟试卷 362及答案与解析 一、程序填空题( 30分) 1 给定程序中,函数 fun的功能是:在带有头结点的单向链表中,查找数据域中值为 ch的结点。找到后通过函数值返回该结点在链表中所处的顺序号;若不存在值为 ch的结点,函数返回 0值。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANKl C中。 不得增行或删行。也不得更改程序的结构 ! #include #include #define N 8 typedef struct list int data; struct list *next; SL
2、IST; SLIST *creatlist(char *); void outlist(SLIST *); int fun(SLIST *h, char ch) SLIST *p; int n=0; p=h-next; /*found*/ while(p!=【 1】 ) n+; /*found*/ if (p-data=ch) return 【 2】 ; else p=p-next; return 0; main() SLIST *head; int k; char ch; char aN=m,p,g,a,w,x,r,d; head=creatlist(a); outlist(head); p
3、rintf(“Enter a letter:“); scanf(“%c“, /*found*/ k=fun(【 3】 ); if (k=0) printf(“nNot found!n“); else printf(“The sequence number is : %dn“,k); SLIST *creatlist(char *a) SLIST *h,*p,*q; int i; h=p=(SLIST *)malloc(sizeof(SLIST); for(i=0; idata=ai; p-next=q; p=q; p-next=0; return h; void outlist(SLIST *
4、h) SLIST *p; p=h-next; if (p=NULL) printf(“nThe list is NULL!n“); else printf(“nHead“); do printf(“-%c“,p-data); p=p-next; while(p!=NULL); printf(“-Endn“); 二、程序修改题( 30分) 2 给定程序 MODll C中函数 fun的功能是:判断 ch中的字符是否与 str所指串中的某个字符相同;若相同,什么也不做,若不同,则将其插在串的最后。 请改正程序中的错误,使它能进行正确的操作。 注意:不要改动 main函数,不得增行或删行,也不得更改程
5、序的结构 ! #include #include /*found*void fun(char *str, char ch)*/ void fun(char str, char ch) while (*str /*found*if(*str !=ch)*/ while (*str !=ch) str 0 = ch; /*found*str1=0;*/ str1=0; main() char s81, c ; printf(“nPlease enter a string:n“); gets (s); printf (“n Please enter the character to search :
6、 “); c = getchar(); fun(s, c); printf(“nThe result is %sn“, s); 三、程序设计题( 40分) 3 编写函数 fun,它的功能是:求 Fiboncci数列中大于 t的最小的一个数,结果由函数返回。其中 Fibonacci数列 F(n)的定义为: F(0)=0, F(1)=1 F(n)=F(n 1)+F(n 2) 例如:当 t=1000时,函数值为: 1597。 注意:部分源程序在文件 PROGl C中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 #include #include
7、 int fun(int t) main() /* 主函数 */ int n; void NONO (); n=1000; printf(“n = %d, f = %dn“,n, fun(n); NONO(); void NONO () /* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */ FILE *fp, *wf ; int i, n, s ; fp = fopen(“in.dat“,“r“); wf = fopen(“out.dat“,“w“); for(i = 0 ; i data=ch)”成立,则已经找到数据域中值为 ch的结点,返回顺序号,即 “return n
8、;”。 第三空: fun函数的调用形式是: fun( SLIST *h, char ch),第一个参数是头结点地址,第二个参数是需要寻找的 ch值,因此第三空处应该 是 “k=fun(head,ch);”。 二、程序修改题( 30分) 2 【正确答案】 void fun(char *str, char ch) if(*str !=ch) str1=0; 【试题解析】 ( 1)第一个标识下, “void fun(char str, char ch)”根据主函数中的fun函数的调用 “fun(s,c)”,知道 s为数组名,传的应该是数组地址,所以应改为“void fun(char *str, ch
9、ar ch)”。 ( 2) while循 环中对 ch与 str进行匹配检查,第二个标识下,是当不同时执行连接操作,那么判断 *str与 ch是否不同的表达式应该是 “if(*str !=ch)”。 ( 3)第三个标识下,连接后的新串要添加结尾符,所以正确的表达是将“str1=0;”改为 “str1=0;”。 三、程序设计题( 40分) 3 【正确答案】 int f0=0, f1=1, f; do f=f0+f1; f0=f1; f1=f; while(ft); return f; 【试题解析】 ( 1)在 循环中求得数列,并对数列的值进行判断,看是否符合题干要求。 ( 2)如果求得的数列值不满足题干要求,将当前值赋值给前一项,将前一项赋给前一项的前一项,继续求下一项的数列值,直到满足条件。