1、国家二级 C语言机试(操作题)模拟试卷 159及答案与解析 一、程序填空题 1 给定程序中,函数 fun的功能是:在带有头结点的单向链表中,查找数据域中值为 ch的结点。找到后通过函数值返回该结点在链表中所处的顺序号;若不存在值为 ch的结点,函数返回 0值。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANKl C中。 不得增行或删行,也不得更改程序的结构 ! #include #include #define N 8 typedef struer list inL data; struct list *next; SLIST
2、; 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; inL k; char ch; char aN=(m, p, q, a, w, x, r, d; head=creatlist(a); outlist(head); printf(“Ent
3、er a letter: “); scanf(“ c“, ch); *found* k=fun(_3_); if(k=0)printf(“ nNot found! n“); else printf(“The sequence number is: d n“, 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*h) SLIST*p
4、; 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(“-End n“); 二、程序修改题 2 给定程序 MODIl C中函数 fun的功能是:将 s所指字符串中位于奇数位置的字符或 ASCII码为偶数的字符放入 t所指数组中 (规定第一个字符放在第 0位中 )。 例如,字符串中的数据为: AABBCCDDEEFF,则输出应当是: ABBCDDEFF。 请改正函数 fun中指
5、定部位的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行 或删行,也不得更改程序的结构 ! #include #include #defime N 80 void fun(char*s, char t) int i, j=0; for(i=0; i void fun(char*a) msin() char s81; void NONO(); printf(“Enter a string: n“); gets(s); fun(s); printf(“The string after deleted: n“); puts(s); NONO(); void NONO() *本函数
6、用于打开文件,输入数据,调用函数,输出数据,关闭文件。 * FILE *in, *out; int i ; char s81 ; in=fopen(“in dat“, “r“); out=fopen(“out dat“, “w“); for(i=0; idata=ch)”成立,则已经找到数据域中值为 ch的结点,返回顺序号,即 “return n; ”。 第三空: fun函数的调用形式是: fun(SLIST *h, char ch),第一个参数是头结点地址,第二个参数是需要寻找的 ch值,因此第三字处应该是“k=fun(head,ch); ”。 二、程序修改题 2 【正确答案 】 (1)if
7、(i 2 si 2=0) 或 if(i 2 !=0 si 2=0) (2)tj= 0; 或 tj=0; 【试题解析】 (1)第一个错误标识下的 if条件应该是判定字符是奇数位置或者ASCII码是偶数,原题中给出的是字符是奇数位置并且 ASCII码为偶数,逻辑关系表达式不对,应该是或的关系,所以 “if(i 2 si 2=0)”,改为 “if(i2si 2=0)”或 “if(i 2!=0si 2=0)”。 (2)第二个标识符下 应该是新生成的串尾加尾符标志,新串的位置标志变量是 i,原题给出的 i是原串的位置标志变量,所以 “ti= 0; ”改为 “tj= 0: ”或“tj=0; ”。 三、程序设计题 3 【正确答案】 int j=0; char*p=a; while(*p=*)p+; while(*p) aj+=*p; p+; aj= 0; 【试题解析】 (1)首先,使用 个指针 P指向串的起始化置,然后对指针 p指向的字符进行判断,并且如果是 “*”,那么跳过该字符,这样确定了 由头开始的第一个非 “*”的位置。 (2)然后,在循环过程中将第一个非 “*”字符起始到串尾的字符拷贝到字符串 a。 (3)最后,在新生成的字符串尾加 0。