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

上传人:eastlab115 文档编号:1325676 上传时间:2019-10-17 格式:DOC 页数:5 大小:38KB
下载 相关 举报
【计算机类职业资格】二级C语言机试-175及答案解析.doc_第1页
第1页 / 共5页
【计算机类职业资格】二级C语言机试-175及答案解析.doc_第2页
第2页 / 共5页
【计算机类职业资格】二级C语言机试-175及答案解析.doc_第3页
第3页 / 共5页
【计算机类职业资格】二级C语言机试-175及答案解析.doc_第4页
第4页 / 共5页
【计算机类职业资格】二级C语言机试-175及答案解析.doc_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

1、二级 C语言机试-175 及答案解析(总分:100.00,做题时间:90 分钟)一、填空题(总题数:1,分数:30.00)在给定程序中,函数 fun的功能是:对形参 s所指字符串中下标为奇数的字符按 ASCII码大小递增排序,并将排序后下标为奇数的字符取出,存入形参 p所指字符数组中,形成一个新串。例如,形参 s所指的字符串为 BADCDBFGEDC;执行后 p所指字符串数组中的字符串应为 ABCDG。请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的 BLANK1.C中。不得增行或删行,也不得更改程序的结构。文件 BLANK1.C内容如下:

2、#includestdio.hvoid fun(char *s,char *p)int i,j,n,x,t;n=0;for(i=0;si!=/0;i+)n+;for(i=1;in-2;i=i+2)/*found*/(1) ;/*found*/for(j= (2) +2;jn;j=j+2)if(stsj)t=j;if(t!=i)x=si;si=st;st=x;for(i=1,j=0;in;i=i+2,j+)pj=si;/*found*/pj= (3) ;void main( )char s80=“BADCDBFGEDC“,p50;printf(“/nThe original string is:

3、%s/n“,s);fun(s,p);printf(“/nThe result is:%s/n“,p);(分数:30.00)填空项 1:_填空项 1:_填空项 1:_二、改错题(总题数:1,分数:30.00)1.给定程序 MODI1.C中函数 fun的功能是:根据整型形参 m的值,计算如下公式的值:(分数:30.00)填空项 1:_三、编程题(总题数:1,分数:40.00)2.学生的记录由学号和成绩组成,N 名学生的数据已在主函数中放入结构体数组 s中,请编写函数 fun,它的功能是:按分数的高低排列学生的记录,高分在前。注意:部分源程序在文件 PROG1.C中,请勿改动主函数 main和其他函

4、数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。文件 PROG1.C的内容如下:#includestdio.h#define N 16typedef structchar num10;int s;STREC;void fun(STREC a)void main( )STREC sN=“GA005“,85,“GA003“,76,“GA002“,69,“GA004“,85,“GA001“,91,“GA007“,72,“GA008“,64,“GA006“,87,“GA015“,85,“GA013“,91,“GA012“,64,“GA014“,92,“GA011“,66,“GA017“

5、,65,“GA018“,68,“GA016“,72;int i:fun(s);printf(“The data after sorted: /n“);for(i=0;iN;i+)if(i%4=0)printf(“/n“);printf(“%s%4d“,si.num,si.s):printf(“/n“);(分数:40.00)_二级 C语言机试-175 答案解析(总分:100.00,做题时间:90 分钟)一、填空题(总题数:1,分数:30.00)在给定程序中,函数 fun的功能是:对形参 s所指字符串中下标为奇数的字符按 ASCII码大小递增排序,并将排序后下标为奇数的字符取出,存入形参 p所指字

6、符数组中,形成一个新串。例如,形参 s所指的字符串为 BADCDBFGEDC;执行后 p所指字符串数组中的字符串应为 ABCDG。请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的 BLANK1.C中。不得增行或删行,也不得更改程序的结构。文件 BLANK1.C内容如下:#includestdio.hvoid fun(char *s,char *p)int i,j,n,x,t;n=0;for(i=0;si!=/0;i+)n+;for(i=1;in-2;i=i+2)/*found*/(1) ;/*found*/for(j= (2) +2;jn;

7、j=j+2)if(stsj)t=j;if(t!=i)x=si;si=st;st=x;for(i=1,j=0;in;i=i+2,j+)pj=si;/*found*/pj= (3) ;void main( )char s80=“BADCDBFGEDC“,p50;printf(“/nThe original string is:%s/n“,s);fun(s,p);printf(“/nThe result is:%s/n“,p);(分数:30.00)填空项 1:_ (正确答案:t=i)解析:填空项 1:_ (正确答案:i)解析:填空项 1:_ (正确答案:/0)解析:解析 函数 fun中利用选择排序法

8、,将 s所指字符串的奇数下标的字符进行了升序排列,并将奇数下标的字符取出放入 p所指字符串中。函数 fun中,第一个循环求出了字符串 s的长度,放入变量 n中;第二个循环是一个两重循环,利用选择排序法进行排序,因为只对奇数下标的字符进行排序,所以 i从 1开始,i 每次加 2,确保每次取出奇数下标的元素。在第 1空处,应该对 t赋值,根据选择排序法的算法,可以得出 t=i。内层循环由变量 j控制,由于只对奇数下标的字符排序,所以 j从 i+2开始,也应该每次加 2,取出相应字符进行大小比较,所以第 2空处应填入 i。经过 j循环,可以求出当前数据中最小的字符的下标存入变量 t中。跳出 j循环,

9、将 st和 si互换,实现排序的操作。排序结束后,通过最后一个循环,将奇数下标的字符取出放入字符串 p中。由于字符串 p结尾没有字符串结束标记/0,所以第 3空处应该填入/0,对字符串 p赋予一个字符串结束标记。二、改错题(总题数:1,分数:30.00)1.给定程序 MODI1.C中函数 fun的功能是:根据整型形参 m的值,计算如下公式的值:(分数:30.00)填空项 1:_ (正确答案:第 1处:将“for(i=2;im;i+)”改为“for(i=2;i=m;i+)”。第 2处:将“y-=1/(i*i);”改为“y-=1.0/(i*i);”。)解析:解析 题目要求计算公式*的值,在程序中公

10、式的值存放在变量 y中,且 y的初值为 1,所以,循环是从公式的第二项开始,分母的变化规律是:从 2开始循环到 m(包括 m在内),所以循环控制变量 i的值应该从 2开始循环到 m结束。第 1处错误是循环条件出错,应该使用“=”。第 2处错误可能不太容易发现,由于变量 i是整型,1 也是一个整数,所以本程序中“1/(i*i)”的结果是 0,想要得到实除的结果,最简单的办法就是把“1”改为“1.0”。三、编程题(总题数:1,分数:40.00)2.学生的记录由学号和成绩组成,N 名学生的数据已在主函数中放入结构体数组 s中,请编写函数 fun,它的功能是:按分数的高低排列学生的记录,高分在前。注意

11、:部分源程序在文件 PROG1.C中,请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。文件 PROG1.C的内容如下:#includestdio.h#define N 16typedef structchar num10;int s;STREC;void fun(STREC a)void main( )STREC sN=“GA005“,85,“GA003“,76,“GA002“,69,“GA004“,85,“GA001“,91,“GA007“,72,“GA008“,64,“GA006“,87,“GA015“,85,“GA013“,91,“GA01

12、2“,64,“GA014“,92,“GA011“,66,“GA017“,65,“GA018“,68,“GA016“,72;int i:fun(s);printf(“The data after sorted: /n“);for(i=0;iN;i+)if(i%4=0)printf(“/n“);printf(“%s%4d“,si.num,si.s):printf(“/n“);(分数:40.00)_正确答案:(void fun(STREC a)i nf i,j;STREC t:for(i=0;iN-1;i+)for(j=0;jN-1-i;j+)if(aj.saj+1.s)t=aj;aj=aj+1;a

13、j+1=t;)解析:解析 参考答案中利用冒泡排序法对结构体数组进行了排序。程序中定义的结构体类型包含了两个成员学生的学号和成绩,题目要求按成绩进行降序排列,所以排序依据只是成绩这个成员,循环中需要做 aj.saj+1.s 的比较,而在进行元素交换时,一定要将整个结构体变量进行交换,不能只交换成绩部分。所以算法虽然是排序算法,但是数据结构发生了变化,考生在编写程序时一定要注意这些细节问题。归纳总结 本套试题的程序填空和程序设计题考查的是排序算法。排序算法通常要求掌握两种常用的算法:冒泡排序法和选择排序法。试题中除了要求对整型数组排序外,还要求对字符数组和结构体数组进行排序。常见程序如下(假设对整

14、型数组 a进行升序排列,数组 a长度为 n):(1)冒泡排序法程序段。for(i=0;in-1;i+)for(j=0;jn-1-i;j+)if(ajaj+1)t=aj; aj=aj+1; aj+1=t;(2)选择排序法程序段。for(i=0;in;i+)k=i:fbr(j=i+1;jn;j+)if(akaj)k=j;if(k! =i) t=ai; ai=ak; ak=t;如果只对奇数下标或只对偶数下标的元素进行排序,则需要对 i和 j变量的初值进行一定的处理,并且注意每次循环需要自加 2,而不能只加 1。如果是对结构体数组进行排序,则需要判断清楚排序依据是什么,并且一定要注意结构体变量的引用方法,交换时要对整个结构体变量进行交换,不能只交换其中的一个成员。

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

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

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