[计算机类试卷]国家二级C语言机试(操作题)模拟试卷662及答案与解析.doc

上传人:unhappyhay135 文档编号:498637 上传时间:2018-11-29 格式:DOC 页数:6 大小:35KB
下载 相关 举报
[计算机类试卷]国家二级C语言机试(操作题)模拟试卷662及答案与解析.doc_第1页
第1页 / 共6页
[计算机类试卷]国家二级C语言机试(操作题)模拟试卷662及答案与解析.doc_第2页
第2页 / 共6页
[计算机类试卷]国家二级C语言机试(操作题)模拟试卷662及答案与解析.doc_第3页
第3页 / 共6页
[计算机类试卷]国家二级C语言机试(操作题)模拟试卷662及答案与解析.doc_第4页
第4页 / 共6页
[计算机类试卷]国家二级C语言机试(操作题)模拟试卷662及答案与解析.doc_第5页
第5页 / 共6页
点击查看更多>>
资源描述

1、国家二级 C语言机试(操作题)模拟试卷 662及答案与解析 一、程序填空题 1 使用 VC+2010打开考生文件夹下 blank1中的解决方案。此解决方案的项目中包含一个源程序文件 blank1 c。在此程序中,函数 fun的功能是:将不带头结点的单向链表结点数据域中的数据从小到大排序。即若原链表结点数据域从头至尾的数据为 10、 4、 2、 8、 6,排序后链表结点数据域从头至尾的数据为 2、 4、 6、 8、10。 请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。 注意:部分源程序给出如下。 不得增行或 删行,也不得更改程序的结构 ! 试题程序: #include s

2、tdio h #include stdlib h #define N6 typedef struct node int data; struct node*next; NODE; void fun(NODE*h) NODE*p, *q; int t; p=h; while(p) *found* q=【 1】 ; *found* while(【 2】 ) if(p- data q- data) t=p- data; p- data=q- data; q- data=t; ) q=q- next; *found* p=【 3】 ; NODE*creatlist(int a) NODE*h, *p,

3、 *q; int i; h=NULL; for(i=0; i N; i+) q=(NODE*)malloc(sizeof (NODE); q- data=ai; q- next=NULL; if(h=NULL)h=p=q; elsep- next=q; p=q; ) return h; void outlist(NODE*h) NODE*p; p=h; if(p=NULL) printf(“The list is NULL! n“); else printf(“ nHead“); do printf(“- d“, p- data); P=p- next; ) while(p!=NULL); p

4、rintf(“- End n“); main() NODE*head; int aN=0, 10, 4, 2, 8, 6); head=creatlist(a); printf(“ nThe original list: n“); outlist(head); fun(head); printf(“ nThe list after inverting: n“); outlist(head); 二、程序修改题 2 使用 VC+2010打开考生文件夹下 modi1中的解决方案。此解决方案的项目中包含一个源程序文件 modi1 c。在此程序中,函数 fun的功能是:根据整型形参m,计算如下公式的值

5、: 例如,若 m的值为 5,则应输出 1 463611。请改正程序中的错误,使它能得出正确的结果。注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构 !试题程序: #includeconio h #include stdio h double fun(int m)double y=1 0; int i;*found* for(i=2; i m; i+) *found*y+=1 (i*i); return(y); main()int n=5; printf(“ nThe result is lf n“, fun(n); 三、程序设计题 3 使用 VC+2010打开考生文件夹下 p

6、rog1中的解决方案。此解决方案的项目中包含一个源程序文件 prog1 c。在此程序中,请编写函数 fun,其功能是:将一组得分中,去掉一个最高分和一个最低分,然后求平均值,并通过函数返回。函数形参a指向存放得分的数组,形参 n中存放得分个数 (n 2)。 例如,若输入 9 9 8 5 7 6 8 5 9 3 9 5 8 9 7 8 8 6 8 4十个得分,则输出结果为: 8 687500。 注意:部分源程序存在 PROG1 C中,请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入所编写的若干语句。 试题程序: #include stdio h void NONO(

7、); double fun(double a, int n) main() double b10, r; int i; printf(“输入 10个分数放入 b数组中: “); for(i=0; i 10; i+) scanf(“ lf“, &bi); printf(“输入的 10个分数是: “); for(i=0; i 10; i+) printf(“ 4 1lf, bi); printf(“ n“); r=fun(b, 10); printf(“去掉最高分和最低分后的平均分: f n“, r); NONO(); voidNONO() *本函数用于打开文件,输入数据。调用函数,输出数据,关闭

8、文件。 * FILE*fp, *wf; int i, j; double b10, r; fp=fopen(“in dat“, “r“); wf=fopen(“out dat“, “w“); for(i=0; i 10; i+)f for(j=0; j 10; j+) fscanf(fp, “ if“, &bj); r=fun(b, 10); fprintf(wf, “ f n“, r); fclose(fp); fclose(wf); 国家二级 C语言机试(操作题)模拟试卷 662答案与解析 一、程序填空题 1 【正确答案】 (1)p- next (2)q (3)p- next 【试题解析】

9、 填空 1:从第 2个 while循环可知, q的初值应该为 p的 next,故此空应该填写 p- next。 填空 2:第 2个 while循环表示的是每次从链表剩下的树中找出最小的数,因此此空应该以 q是否为空来判断循环是否结束,所以此空应该填写 q。 填空 3:当找到一个最小的数时 p应该向后移,因此此空应该填写 p- next。 二、程序修改题 2 【正确答案】 (1)for(i=2; i =m; i+) (2)y+=1 0 (i*i); 或 y+=(double)l (i*i); 【试题解析】 (1)根 据公式可以知道 for循环语句中变量 i的取值范围应该包括m。 (2)变量 y是

10、一个 double型变量,而 i是整型变量,所以要进行类型转换,改为y+=1 0 (i*i);或 y+=(double)1 (i*i);。 三、程序设计题 3 【正确答案】 double fun(double a, int n) double sum=0, max, min; int i; max=min=a0; for(i=0; i n; i+) sum=sum+ai; if(max ai)max=ai; if(min ai)min=ai; sum=sum-max-min; return(sum (n-2); 【试题解析】 设定三个变量 sum存放合值, max存放最大值, min存放最小值。 max和 min都赋为数组中第一个元素的值。利用循环将数组中元素累加到sum中,并找出最大值和最小值, sum值减去最大值和最小值。函数返回 sum除以元素个数一 2得平均值。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试资料 > 职业资格

copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1