1、全国计算机二级 C语言上机试题 40+2015年及答案解析(总分:30.00,做题时间:90 分钟)1.给定程序中已建立一个带有头结点的单向链表,链表中的各结点按结点数据域中的数据递增有序链接。函数 fun的功能是:把形参 x的值放入一个新结点并插入到链表中,插入后各结点数据域的值仍保持递增有序。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANK1.C中。不得增行或删行,也不得更改程序的结构! 给定源程序: #include #include #define N 8 typedef struct list int data;
2、struct list *next; SLIST; void fun( SLIST *h, int x) SLIST *p, *q, *s; s=(SLIST *)malloc(sizeof(SLIST); /*found*/ s-data=_1_; q=h; p=h-next; while(p!=NULL p=p-next; s-next=p; /*found*/ q-next=_3_; SLIST *creatlist(int *a) SLIST *h,*p,*q; int i; h=p=(SLIST *)malloc(sizeof(SLIST); for(i=0; i q=(SLIST
3、*)malloc(sizeof(SLIST); q-data=ai; p-next=q; p=q; p-next=0; return h; void outlist(SLIST *h) SLIST *p; p=h-next; if (p=NULL) printf(“/nThe list is NULL!/n“); else printf(“/nHead“); do printf(“-%d“,p-data); p=p-next; while(p!=NULL); printf(“-End/n“); main() SLIST *head; int x; int aN=11,12,15,18,19,2
4、2,25,29; head=creatlist(a); printf(“/nThe list before inserting:/n“); outlist(head); printf(“/nEnter a number : “); scanf(“%d“, fun(head,x); printf(“/nThe list after inserting:/n“); outlist(head); (分数:10.00)_2.给定程序 MODI1.C中函数 fun的功能是:计算正整数 num的各位上的数字之积。 例如,若输入:252,则输出应该是:20。若输入:202,则输出应该是:0。 请改正程序中的
5、错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构! 给定源程序: (分数:10.00)_3.请编写一个函数 fun,它的功能是:计算 n门课程的平均分,计算结果作为函数值返回。 例如:若有5门课程的成绩是:90.5, 72, 80, 61.5, 55 则函数的值为:71.80。 注意: 部分源程序存在文件 PROG1.C中。请勿改动主函数 main和其它函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 给定源程序: #include float fun ( float *a , int n ) main() float scor
6、e30=90.5, 72, 80, 61.5, 55, aver; aver = fun( score, 5 ); printf( “/nAverage score is: %5.2f/n“, aver); NONO ( ); (分数:10.00)_全国计算机二级 C语言上机试题 40+2015年答案解析(总分:30.00,做题时间:90 分钟)1.给定程序中已建立一个带有头结点的单向链表,链表中的各结点按结点数据域中的数据递增有序链接。函数 fun的功能是:把形参 x的值放入一个新结点并插入到链表中,插入后各结点数据域的值仍保持递增有序。 请在程序的下划线处填入正确的内容并把下划线删除,使程
7、序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANK1.C中。不得增行或删行,也不得更改程序的结构! 给定源程序: #include #include #define N 8 typedef struct list int data; struct list *next; SLIST; void fun( SLIST *h, int x) SLIST *p, *q, *s; s=(SLIST *)malloc(sizeof(SLIST); /*found*/ s-data=_1_; q=h; p=h-next; while(p!=NULL p=p-next; s-next=p; /
8、*found*/ q-next=_3_; SLIST *creatlist(int *a) SLIST *h,*p,*q; int i; h=p=(SLIST *)malloc(sizeof(SLIST); for(i=0; i q=(SLIST *)malloc(sizeof(SLIST); q-data=ai; p-next=q; p=q; p-next=0; return h; void outlist(SLIST *h) SLIST *p; p=h-next; if (p=NULL) printf(“/nThe list is NULL!/n“); else printf(“/nHea
9、d“); do printf(“-%d“,p-data); p=p-next; while(p!=NULL); printf(“-End/n“); main() SLIST *head; int x; int aN=11,12,15,18,19,22,25,29; head=creatlist(a); printf(“/nThe list before inserting:/n“); outlist(head); printf(“/nEnter a number : “); scanf(“%d“, fun(head,x); printf(“/nThe list after inserting:
10、/n“); outlist(head); (分数:10.00)_正确答案:(第一处:在函数 fun的开始处,已经对结构指针 s分配了内存,其中 data是一个整型变量,实际要求填入一个整型数据。根据本题要求在一个链表插入一个整型数,该数已通过函数的形参 x传入,因此应填 x。 第二处:使用一个 while循环找出要插入一个数的位置,在循环体中 q实际上保留当前链表 p位置的临时变量,如果 xp-data时,那么再移动链表指针到下一个结果,再进行判断是否符合条件,如果仍大于,则仍 q保留链表 p的位置。因此,此处应填 p。 第三处:当找到结点位置后,就要插入这个数,完成插入过程。由于函数体中分配
11、了结构指针 s,s 的 next指针已经指向了 p,所以,当前位置 q的 next指针就应该指向指针 s完成链表的链接。因此,此处应填 s。)解析:2.给定程序 MODI1.C中函数 fun的功能是:计算正整数 num的各位上的数字之积。 例如,若输入:252,则输出应该是:20。若输入:202,则输出应该是:0。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构! 给定源程序: (分数:10.00)_正确答案:(第一处:由于在 k定义时没有赋初值,所以 k是一个随机数,根据试题要求,k 应赋值为 1。 第二处:整除的符号是/。)解
12、析:3.请编写一个函数 fun,它的功能是:计算 n门课程的平均分,计算结果作为函数值返回。 例如:若有5门课程的成绩是:90.5, 72, 80, 61.5, 55 则函数的值为:71.80。 注意: 部分源程序存在文件 PROG1.C中。请勿改动主函数 main和其它函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 给定源程序: #include float fun ( float *a , int n ) main() float score30=90.5, 72, 80, 61.5, 55, aver; aver = fun( score, 5 ); printf( “/nAverage score is: %5.2f/n“, aver); NONO ( ); (分数:10.00)_正确答案:(float fun ( float *a , int n ) int i; float ave=0.0; for(i=0; i ave=ave/n; return ave; )解析: