【计算机类职业资格】二级C语言机试-126及答案解析.doc

上传人:figureissue185 文档编号:1325637 上传时间:2019-10-17 格式:DOC 页数:7 大小:34.50KB
下载 相关 举报
【计算机类职业资格】二级C语言机试-126及答案解析.doc_第1页
第1页 / 共7页
【计算机类职业资格】二级C语言机试-126及答案解析.doc_第2页
第2页 / 共7页
【计算机类职业资格】二级C语言机试-126及答案解析.doc_第3页
第3页 / 共7页
【计算机类职业资格】二级C语言机试-126及答案解析.doc_第4页
第4页 / 共7页
【计算机类职业资格】二级C语言机试-126及答案解析.doc_第5页
第5页 / 共7页
点击查看更多>>
资源描述

1、二级 C语言机试-126 及答案解析(总分:100.00,做题时间:90 分钟)一、填空题(总题数:1,分数:30.00)1.请补充函数 fun(),该函数的功能是把数组 aa中的奇数元素按原来的先后顺序放在原数组后面。例如,输入“33,67,42,58,25,76,85,16,41,56”,输出结果“42,58,76,16,56,33,67,25,25,41。注意:部分源程序给出如下。请勿改动主函数 main和具他函数中的任何内容,仅在函数 fun()的横线上填入所编写的若干表达式或语句。试题程序:#include stdio.h#define N 10void fun(int aa)int

2、 i, j=0,k 0;int bb IN;for (i 0; iN; i+)if ( 【1】 )bbk+ aai;elseaa j+ =aa Ii;for(i=0; ik; 【2】 )aaj bbi;main ( )int i;int aaN=33, 67, 42,58,25, 76, 85, 16,41,56;clrscr ();printf(“/n* original list */n“);for (i=0; iN; i+)printf(“%4d“, aai);fun (aa);printf(“/n* new list */n“);for (i=0; iN; i+)printf(“%4d

3、“, aai);(分数:30.00)填空项 1:_二、改错题(总题数:1,分数:30.00)2.下列给定程序中,函数 fun()的功能是:用递归算法计算斐波拉契级数列中第 n项的值。从第一项起,斐波拉契级数序列为 1, 1,2,3,5,8,13,21,例如,若给 n输入 7,该项的斐波拉契级数值为 13。请改正程序中的错误,使它能得出正确的结果。注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include stdio.hlong fun(int g)/*found*/switch(g);case 0:return 0;switch(g)case 1; case

4、 2:return 1;return (fun(g-1)+fun(g-2);main()long fib; int n;printf(“Input n:“);scanf(“%d“,printf(“n-%d/n“,n);fib=fun(n);printf(“fib=%d/D/n“,fib);(分数:30.00)填空项 1:_三、编程题(总题数:1,分数:40.00)3.学生的记录由学号和成绩组成,N 名学生的数据已在主函数中放入结构体数组 s中,请编写函数 fun(),它的功能是:按分数的高低排列学生的记录,高分在前。注意:部分源程序给出如下请勿改动主函数 main和其他函数中的任何内容,仅在函

5、数 fum的花括号中填入所编写的若啡:语句。试题程序:#include stdio.h#define N 16typedef structchar num10;int s ;STREC;int fun (STREC a)main ()STREC s IN = “GA005“, 85 , “GA003“, 76,“GA002“, 69, “GA004“, 85, “GA001“, 91,“GA007“, 72, “GA008“, 64, “GA006“, 87,“GA015“, 85, “GA013“, 91, “GA012“, 64,“GA014“, 91, “GA011“, 66, “GA0

6、17“, 64,“GA018“, 64, “GA016“, 72 ;int i;FILE *out;fun (s);printf(“The data after sorted :In“);for (i=0; iN; i+)if (i) %4=-0)/*每行输出 4个学生记录*/ printf (“/n“);printf(“%s %4d“,si.num, si.s);printf (“/n“);out=fopen ( “out 16. dat“, “w“ );for(i=0; iN; i+);if (i) %4=0fprintf(out, “%4d“,si.s);fprintf(out, “/n

7、“);fclose (out);(分数:40.00)_二级 C语言机试-126 答案解析(总分:100.00,做题时间:90 分钟)一、填空题(总题数:1,分数:30.00)1.请补充函数 fun(),该函数的功能是把数组 aa中的奇数元素按原来的先后顺序放在原数组后面。例如,输入“33,67,42,58,25,76,85,16,41,56”,输出结果“42,58,76,16,56,33,67,25,25,41。注意:部分源程序给出如下。请勿改动主函数 main和具他函数中的任何内容,仅在函数 fun()的横线上填入所编写的若干表达式或语句。试题程序:#include stdio.h#defi

8、ne N 10void fun(int aa)int i, j=0,k 0;int bb IN;for (i 0; iN; i+)if ( 【1】 )bbk+ aai;elseaa j+ =aa Ii;for(i=0; ik; 【2】 )aaj bbi;main ( )int i;int aaN=33, 67, 42,58,25, 76, 85, 16,41,56;clrscr ();printf(“/n* original list */n“);for (i=0; iN; i+)printf(“%4d“, aai);fun (aa);printf(“/n* new list */n“);fo

9、r (i=0; iN; i+)printf(“%4d“, aai);(分数:30.00)填空项 1:_ (正确答案:1 aai%2!=0 或 aai%2=12 i+,j+)解析:解析 填空 1:如果一个数对 2求余,结果不为 0,也就是等于 1,则这个数为奇数,就把这个数先暂时存在数组 bb中。否则这个数为偶数,就存在数组 aa中。填空 2:最后,将数组 bb中的奇数都拷贝到数组 aa中偶数的后面。每执行一次循环休,数组 aa的下标 j和数组 bb的下标 i都要加 1。二、改错题(总题数:1,分数:30.00)2.下列给定程序中,函数 fun()的功能是:用递归算法计算斐波拉契级数列中第 n项

10、的值。从第一项起,斐波拉契级数序列为 1, 1,2,3,5,8,13,21,例如,若给 n输入 7,该项的斐波拉契级数值为 13。请改正程序中的错误,使它能得出正确的结果。注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include stdio.hlong fun(int g)/*found*/switch(g);case 0:return 0;switch(g)case 1; case 2:return 1;return (fun(g-1)+fun(g-2);main()long fib; int n;printf(“Input n:“);scanf(“%d

11、“,printf(“n-%d/n“,n);fib=fun(n);printf(“fib=%d/D/n“,fib);(分数:30.00)填空项 1:_ (正确答案:错误:switch(g); 正确:去掉分号(2)错误:case 1;case 2:return 1: 正确:case 1:case 2:return 1;)解析:解析 C 语言中,Switch 语句之后不能有分号,并且 Case语句常量后应用的是冒号。三、编程题(总题数:1,分数:40.00)3.学生的记录由学号和成绩组成,N 名学生的数据已在主函数中放入结构体数组 s中,请编写函数 fun(),它的功能是:按分数的高低排列学生的记录

12、,高分在前。注意:部分源程序给出如下请勿改动主函数 main和其他函数中的任何内容,仅在函数 fum的花括号中填入所编写的若啡:语句。试题程序:#include stdio.h#define N 16typedef structchar num10;int s ;STREC;int fun (STREC a)main ()STREC s IN = “GA005“, 85 , “GA003“, 76,“GA002“, 69, “GA004“, 85, “GA001“, 91,“GA007“, 72, “GA008“, 64, “GA006“, 87,“GA015“, 85, “GA013“, 9

13、1, “GA012“, 64,“GA014“, 91, “GA011“, 66, “GA017“, 64,“GA018“, 64, “GA016“, 72 ;int i;FILE *out;fun (s);printf(“The data after sorted :In“);for (i=0; iN; i+)if (i) %4=-0)/*每行输出 4个学生记录*/ printf (“/n“);printf(“%s %4d“,si.num, si.s);printf (“/n“);out=fopen ( “out 16. dat“, “w“ );for(i=0; iN; i+);if (i)

14、%4=0fprintf(out, “%4d“,si.s);fprintf(out, “/n“);fclose (out);(分数:40.00)_正确答案:(int fun (STREC a)int i,j;STREC t;for (i=1; iN; i+) /*用冒泡法进行排序,进行 N-1次比较*/for (j =0; jN-1; j+) / *在每一次比较中要进行 N-1次两两比较*/if(aj.saj+1.s)t=a j; a j =a j+1; a j+1 =t; /*按分数的高低排列学生的记录,高分在前*/)解析:解析 冒泡法算法思路:如果有 N个数,则要进行 N-1次比较,在每一次

15、比较中要进行 N-1次两两比较(这种算法较好理解但不是最精的)。所谓两两比较就是从头到尾依次将相邻两个数进行比较并将其中大的数放在前或在后(若要求从小到大排序,则大的数要放在后。反之则对调),即两两比较后这两个数要形成题中所要求的顺序。由于总是从头到尾进行比较,所以第 1次比较结束后,最大(或最小)数肯定在最后,第 2次比较结束后,次最大(或次最小)数肯定在倒数的第 2个数,依次类推,所以进行第一次比较时必须比较到最后一个数,而进行第 2次比较时只要比较到倒数的第 2个数即可,所以进行第 i次比较时只需比较 N-i次即可(这种算法较难理解,但它是最好的)。选择法算法思路:如果有 N个数则从头到

16、倒数的第 2个数一个一个往后走动,每走动 1个数总是将这个数与其后的所有数进行比较并找出它们的最大(或最小)数,找出最大(或最小)数后再将所得的最大(或最小)数与该数进行交换,交换后再走到下一个数依次交换到结束。此外,选择法还可用如下思路:如果有 N个数,则从头到倒数的第 2个数个一个往后走动,每走动一个数总是将这个数与其后的所有数进行两两比较,在比较时按顺序将进行比较的这两个数排序(即交换)。插入法算法思路:先对头两个数进行排序。然后把第 3个数插入到前两个数中,插入后前 3个数依然有序;再把第 4个数插入到前 3个数中,插入后前 4个数依然有序;依次插完所有的数。具体执行方式(假设从小到大

17、排序):从第 2个数开始往后一个一个走动直到最后。每走到 1个数总是将该数(先将其存到 1个临时变量中)与其前面的数进行比较(比较的顺序总是从后往前进行),在比较时只要发现该数比被比较的数小,就将被比较的数往后移 1位,然后该数还要冉与前 1个数进行比较,亢到发现该数比被比较的数大或己比较到头(即第 1个数的前面),并将该数存入当前被比较数的后 1位(存储空间)。如果有整型一维数组 a其有 N个元素,要求将其按从小到大排序。注意元素下标是从 0始的。冒泡法:for (i=1; iN; i+)for (j=0;N-1; j+)if (ajaj+1)t=aj ;a j=aj+1 ;aj+1=aj; 选择法for (i=0 iN-1; i+)p=i;for(j i+1; jN; j+)if (apaj) p=j;ifp!=i)t=ai;ai=ap;ap=t;插入法for i=1; iN; i+t=ai;for j=i-1; a jt j-)aj+1=aj;aj+1=t;

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

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

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