1、国家二级( C语言)机试模拟试卷 191及答案与解析 一、程序填空题( 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的功能是:应用递归算法求形参 a的平方根。求平方根的迭代公式如下: 例如, a为 2时,平方根值为:1 414214。 请改正程序中的错误,使它能得出正确结果。 注意:不要改动 main函数,不得增行或删行,也不得更改
5、程序的结构。#include#include/*found*/double fun(double a, dounle x0)double x1, y; xl=(x0+a x0) 2 0;/*found*/ if(fabs(x1 x0)0 00001) y=fun(a, x1); else y=x1; return Y; main()double x; printf(“Enter x: “);scanf(“ 1f“, ”。 第三空: fun函数的调用形式是: fun( SLIST *h, char ch),第一个参数是头结点地址,第二个参数是需要寻找的 ch值,因此第三空处应该是 “k=fun(
6、head,ch);”。 二、 程序修改题( 30分) 2 【正确答案】 (1)double fun(double a, double x0) (2)if(fabs(x1 x0)0 00001) 【试题解析】 (1)主函数中 “fim(x, 1 0)“, x是 double型变量, 1 0是浮点数,可知 fun有两个 double型参数,而第一标识下 “dounle“不是 C语言关键字,所以应将 “double fun(doublea dounle x0)“改为 “double fun(double a, double x0)“。 (2)第二个 标识下的 if语句是判断进行递归运算的条件,第二标
7、识下变量 x0没有定义,根据题意,这里是判断 x1和 x0的差值的绝对值是否比 0 00001大,所以第二个标识下 “if(fabs(x1-xo)0 00001)“改为 “if(fabs(x1x0)0 00001)“。 三、程序设计题( 40分) 3 【正确答案】 STREC*p=h一 next; *由于头结点中没 有存放数据 * double av=0 0; *对计算成绩平均值 的变量进行初始化 * int n=0; while(p!=NULL) *判断链表是否结束 * av=av+p一 s; *对成绩进行累加 * p=p一 next; *到下一个结点位置 * n+; *人数加 1* av =n; *计算成绩平均值 * return av; *返回成绩平均值 * 【试题解析】 (1)首先定义存放平均值的变量,并对其初始化。 (2)在循环中,依次取链表中存放的成绩,并对其求和。 (3)最后计算平均值,并返回值。