1、国家二级( C语言)机试模拟试卷 368及答案与解析 一、程序填空题( 30分) 1 给定程序中,函数 fun的功能是将不带头结点的单向链表逆置。即若原链表中从头至尾结点数据域依次为: 2、 4、 6、 8、 10,逆置后,从头至尾结点数据域依次为: 10、 8、 6、 4、 2。 请在程序的下划线处填入正确的内容并把下划线删除。使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANKl C中。 不得增行或删行,也不得更改程序的结构 ! #include #include #define N 5 typedef struct node int data; struct node *
2、next; NODE; /*found*/ 【 1】 fun(NODE *h) NODE *p, *q, *r; p = h; if (p = NULL) return NULL; q = p-next; p-next = NULL; while (q) /*found*/ r = q-【 2】 ; q-next = p; p = q; /*found*/ q = 【 3】 ; return p; NODE *creatlist(int a) NODE *h,*p,*q; int i; h=NULL; for(i=0; idata=ai; q-next = NULL; if (h = NULL
3、) h = p = q; else p-next = q; p = q; return h; void outlist(NODE *h) NODE *p; p=h; if (p=NULL) printf(“The list is NULL!n“); else printf(“nHead “); do printf(“-%d“, p-data); p=p-next; while(p!=NULL); printf(“-Endn“); main() NODE *head; int aN=2,4,6,8,10; head=creatlist(a); printf(“nThe original list
4、:n“); outlist(head); head=fun(head); printf(“nThe list after inverting :n“); outlist(head); 二、程序修改题( 30分) 2 三、程序设计题( 40分) 3 假定输入的字符串中只包含字母和 *号。请编写函数 fun,它的功能是:删除字符串中所有的 *号。在编写函数时,不得使用 C语言提供的字符串函数。 例如,字符串中的内容为: *A*BC*DEF*G*,删除后,字符串中的内容应当是: ABCDEFG。 注意:部分源程序在文件 PROGl C中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 f
5、un的 花括号中填入你编写的若干语句。 #include void fun(char *a) main() char s81; void NONO(); printf(”Enter a string: n”); gets(s); fun(s); printf(”The string after deleted: n”); puts(s); NONO(); void NONO() *本函数用于打开文件,输入数据,调用函 数,输出数据,关闭文件。 * FILE*in, *out; int i; char s81; in=fopen(”in daL”, ”r”); out=fopen(”out dat”, ”w”); for(i=0; i=2)”。 三、程序设计题( 40分) 3 【正确答案】 int j=0; char *p=a; while(*p) if(*p !=*)aj+=*p; p+; aj=0; 【试题解析】 ( 1)首先利用工作指针指向字符串,当指针不指向串尾时,就对字符串进行循环判断。 ( 2)在循环中利用 if判断表达式,判断是字符是否为 “*”,如果不是 “*”将其拷贝到字符串,否则跳过 “*”字符。 ( 3)所有字符处理完后,记得在新串 s的末尾加上结束符 “0”。