1、国家二级( C语言)机试模拟试卷 357及答案与解析 一、程序填空题( 30分) 1 给定程序中,函数 fun的功能是:计算出带有头结点的单向链表中各结点数据域中值之和作为函数值返回。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANKl C中。 不得增行或删行,也不得更改程序的结构 ! #include #include #define N 8 typedef struct list int data; struct list *next; SLIST; SLIST *creatlist(int *); void outlis
2、t(SLIST *); int fun(SLIST *h) SLIST *p; int s=0; p=h-next; while(p) /*found*/ s+= p-【 1】 ; /*found*/ p=p-【 2】 ; return s; main() SLIST *head; int aN=12,87,45,32,91,16,20,48; head=creatlist(a); outlist(head); /*found*/ printf(“nsum=%dn“, fun(【 3】 ); SLIST *creatlist(int a) SLIST *h,*p,*q; int i; h=p=
3、(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!n“); else printf(“nHead “); do printf(“-%d“, p-data); p=p-next; while(p!=NULL); printf(“-Endn“); 二、程序修改题( 30分) 2 给定程序 MODll c中函数 fun的功能
4、是:找出一个大于形参 m且紧随 m的素数,并作为函数值返回。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! #include int fun(int m) int i, k ; for (i = m + 1 ; ; i+) for (k = 2 ; k data;”。 第二空: p是循环变量, p不断指向下一个结点,故第二空处 应为 “p=p-next;”。 第三空: fun函数的声明为: int fun( SLIST *h),参数是 SLIST结构体指针,表示头结点地址,因此第三空处的函数调用应为 “printf(“nsu
5、m=%dn“, fun(head);”。 二、程序修改题( 30分) 2 【正确答案】 if (i%k=0) if (k=i) 【试题解析】 ( 1) “if (i%k !=0) break;” 说明 k是 i的因子的情况, i肯定不是素数可直接跳出循环,因此第一标识下应改成 “if (i%k=0 )”。 ( 2) “if (k=i时 i是素数,故第二标识下应改为 “if (k=i)”。 三、程序设计题( 40分) 3 【正确答案】 int i; double sum=0.0; if (n1 i=n; i+) sum+=1.0/(2*i-1)-1.0/(2*i); return sum; 【试题解析】 ( 1)根据题干中给出的数列,推出每一项是 (1.0/(2*i- 1)-1.0/(2*i)。 ( 2)在循环中求得每一项,然后对其进行累加求和。