1、国家二级 C语言机试(操作题)模拟试卷 216及答案与解析 一、程序填空题 1 下列给定程序中,函数 fun的功能是:在带头结点的单向链表中,查找数据域中值为 c结点。找到后通过函数值返回该结点在链表中所:顺序号;若不存在值为ch的结点,函数返回 0值。 请在程序的下画线处填入正确的内容并将一线删除,使程序得出正确的结果。 注意:部分源程序给出如下。 不得增行或删行,也不得更改程序的结构 ! 试题程序: 1 #include stdio h 2 #include stdlib.h 3 #define N 8 4 typedef struct list 5 int data; 6 struct
2、list * next; 7 SLIST; 8 SLIST * creatiist(char*); 9 void outlist(SLIST * ); 10 int fun(SLIST * h, char ch) 11 SLIST * p; int n=0; 12 p=h- next ; 13 *found* 14 while(p!=【 1】 ) 15 n+; 16 *found* 17 if(p- data=ch) 18 return【 2】 ; 19 else p=p- next; 20 21 return 0; 22 23 msin() 24 SLIST * head; int k; c
3、har ch; char aN=m, p , g, a, w, x, r,d: 25 head=creatiist(a); 26 outlist(head); 27 printf(Enter a letter: ); 28 scanf( c, ch); 29 *found* 30 k=fun(【 3】 ); 31 if(k=: 0) 32 printf( nNot found! n); 33 else 34 printf(The sequence number is: d n”, k); 35 36 SLIST*creatlist(char*a) 37 SLIST*h *p, *q; int
4、i; 38 h=p=(SLIST*)malloc(si-zeof(SLIST); 39 for(i=0; i N; i+) 40 q=(SLIST*)malloc(si-zeof(SLIST); 41 q- data=ai; p- next=q; 42 p=q; 43 44 p- next=0; 45 return h; 46 47 void outlist(SLIST*h) 48 SLIST*p; 49 p=h- next ; 50 if(p=NULL) 51 printf( nThe list is NULL! n); 52 else 53 printf( nHead); 54 do 55
5、 printf(- c, 56 p- data); p=p- next; 57 while(p!=NULL); 58 printf(- End n); 59 60 二、程序修改题 2 下列给定程序中,函数 fun的功能是:先将 s所指字符串中的字符按逆序存放到t所指字符串中,然后把 S所指串中的字符按正序连接到 t所指串之后。 例如,当 s所指的字符串为 “ABCDE”时, t所指的字符串应为“EDCBAABCDE”。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! 试题程序: 1 #include stdlib h 2 #i
6、nclude conio h 3 #include stdio h 4 #include(string h 5 void fun(char * s, char*t) 6 7 *found* 8 int i; 9 s1=strlen(s); 10 for(i=0; is1; i+) 11 *found* 12 ti=ss1-i; 13 for(i=0; i=s1; i+) 14 ts1+i=si; 15 t2*s1= 0; 16 17 void main() 18 19 char s100, t100; 20 system(CLS); 21 printf( n Please enter stri
7、ng s: ); 22 scanf( s, s); 23 fun(s, t); 24 printf(The result is: s n, t); 25 三、程序设计题 3 请编写函数 fun,函数的功能是查找 x在 s所指数组中下标的位置,并作为函数值返回,若 X不存在,则返回 -1。 注意:部分源程序在文件 PROG1 C文件中,请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 试题程序: 1 #include stdio h 2 #include stdlib h 3 #define N 15 4 void NONO(); 5 int fu
8、n(int*s, int x) 6 7 8 9 main() 10 int aN=29, 13, 5, 22, 10, 9, 3, 18, 22, 25, 14, 15, 2, 7, 27, i,x, index; 11 printf(a数组中的数据: n); 12 for(i=0; iN; i+) 13 printf( 4d, ai); 14 printf( n); 15 printf(给 x输入待查找的数: ); 16 scanf( d, 26 wf=fopen(out dat, w); 27 for(i=0; i1 0 ; i+) 28 for(j=0; j10; j+) 29 fsca
9、nf(fp, d, aj); 30 31 fscanf(fp, d, x); 32 index=fun(a, x); 33 fprintf(wf, d n, index); 34 35 fclose(fp); 36 fclose(wf); 37 国家二级 C语言机试(操作题)模拟试卷 216答案与解析 一、程序填空题 1 【正确答案】 (1)NULL (2)n (3)head, ch 【试题解析】 填空 1: while循环语句用来判断是否到达链表结尾,链表结尾结点指针域是 NULL。 填空 2:若找到指定字符,则通过 return语句将该结点在链表的顺序号返回给main函数。 填空 3:函数
10、调用语句,其形式是:函数名 (实际参数表 ),因此根据函数定义语句,填入 head, ch。 二、程序修改题 2 【正确答案】 (1)int i, sl; (2)ti=ssl-i-1; 【试题解析】 (1)变量 sl没有定义。 (2)该循环 实现将 s串中的字符逆序存入 t串中, ti对应 s串中的 ssl-i-1。 三、程序设计题 3 【正确答案】 1 int fun(int*s, int x) 2 int i; 3 for(i=0; iN; i+) 4 if(x=si)return i; 5 return -1; 6 【试题解析】 要找出数组中指定数据的下标,首先定义变量 i用于存放数组下标,然后使用循环语句对数组进行遍历,依次取出一个数组元素与指定的数进行比较,若相等,则返回该元素的下标,否则继续判断下 一个元素,直到数组结束。若数组结束时仍没有找到与指定数相等的元素,则返回 -1。