1、国家二级 C语言机试(操作题)模拟试卷 47及答案与解析 一、程序填空题 1 给定程序中,函数 fun的功能是:统计出带有头结点的单向链表中结点的个数,存放在形参 n所指的存储单元中。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANKl C中。 不得增行或删行,也不得更改程序的结构 ! #include #include #define N 8 typedef struct list int data; Struct list *next; SLIST; SLIST *creatlist(int *a); void outli
2、St(SLIST*); void fun(SLIST *h, int *n) SLIST *P; /*found*/ _1_ =0; p=h一 next; while(p) (*n)+; /*found*/ p=p一 _2_ ; main() SLIST *head; int aN=12, 87, 45, 32, 91, 16, 20, 48), num; head=creatlist(a); outlist(head); /*found*/ fun( _3_ , num); printf(“ nnumber= d n”, num); SLIST *crearlist(int a) SLIST
3、 *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; p=h一 next ; if(p=NULL)printf(“The list is NULL!in”); else printf(“inHead”); do printf(“一 d”, P一 data); p=p一 next; ) while(P!=NULL); printf(“一 Endin”); 二、程序修改题
4、 2 给定程序 MODll C中函数 fun的功能是:用冒泡法对 6个字符串按由小大的顺序进行排序。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! #include #include #define MAXLINE 20 fun(char *pstr6) int i, j; char *P ; for(i=0 ; i0) P=*(pstr+i); /*found*/ *(pstr+i)=pstr+j; *(pstr+j)=P; main() int i; char *pstr6, str6IvlAXLINE; for(i=0
5、 ; i #include #define N 8 struct slist double s; Struct slist *next; ; typedef struct slist STREC; double fun(STREC *h) STREC * creat(double *s) STREC *h, *P, *q; int 2=0; h=p=(STREC*)malloc(sizeof(STREC); P一 s=0; while(is=si; i+; P一 next=q; P=q; P一 next=0; return h; outliSt(STREC *h) STREC *P; P=h一
6、 next; printf(“head”); do printf(“一 4 1f”, p-s); p=p- next ; while(P!=0); printf(“ n n”); main() double SN=85, 76, 69, 85, 91, 72, 64, 87, ave; void NONO(); STREC *h; h=creat(S); outliSt(h); ave=fun(h); printf(“ave= 6 3f n”, ave), NONO(); void NONO() *本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 * FTLE *in, *out;
7、 int i, j; double SN, ave; STREC *h; in=fopen(“in dat”, “r”); out=fopen(“out dat”, “W”); for(i=0; inext: ”。 第三空: fun函数的声明为: void fun(SLIST*h, int*n),第一个参数是头结点地址,第二个参数要存放链表长度的整型变量地址,故第三窄处应为 “fun(head, *对成绩进行累加 * p=p一 next; *到下一个结点位置 * n+; *人数加 1* av =n; *计算成绩平均值 * return av; *返回成绩平均值 * 【试题解析】 (1)首先定义存放平均值的变量,并对其初始化。 (2)在循环中,依次取链表中存放的成绩,并对其求和。 (3)最后计算平均值,并返回值。