[计算机类试卷]2007年下半年软件水平考试(初级)程序员下午(应用技术)试题真题试卷及答案与解析.doc
《[计算机类试卷]2007年下半年软件水平考试(初级)程序员下午(应用技术)试题真题试卷及答案与解析.doc》由会员分享,可在线阅读,更多相关《[计算机类试卷]2007年下半年软件水平考试(初级)程序员下午(应用技术)试题真题试卷及答案与解析.doc(16页珍藏版)》请在麦多课文档分享上搜索。
1、2007年下半年软件水平考试(初级)程序员下午(应用技术)试题真题试卷及答案与解析 1 阅读以下说明和流程图,填补流程图中的空缺 (1) (5)。 【说明】 某单位动态收集的数据中常包含重复的数据,所以需要进行处理,使得重复的数据仅出现一次。下面流程图的功能是:在 n(n1)个数据 D1、 D2、 、 Dn中,选出其中所有不重复的 k个数据,置于原来前 k个数据的位置上。 该流程图的算法如下:第 1个数据必然被选出,然后从第 2个数据开始,逐个考查其余的数据。假设 D1、D2、 、 Dm(m1)是已经选出的、不重复的数据, 则对于数据 Di(m in),将其依次与 DmDm-1、 、 D1进行
2、比较,若没有发现与之相同者,则 Di被选出并置于 Dm+1的位置上;否则对 Di不做处理。 例如,如下 10个数据: 5, 2, 2, 7,4, 4, 7, 1, 9, 1 (n=10) 经过上述算法处理后的结果为: 5, 2, 7, 4, 1, 9 (k=m=6) 【流程图】 注:循环开始的说明按照 “循环变量名:循环初值,循环终值,增量 ”格式描述。 2 阅读以下说明和 C语言函数,将应填入 (n)处。 【说明】 已知 1900年 1月 1日是星期一,下面 的函数 count_5_13(int year)用于计算给定的年份 year中有几个 “黑色星期五 ”。 “黑色星期五 ”指既是 13
3、日又是星期五的日期。 函数 count_5_13(int year)首先算出年份 year的 1月 13日是星期几,然后依次计算每个月的 13日是星期几,若是星期五,则计数。 程序中使用了函数 isLeapYear(int year),其功能是判断给定年份是否为闰年,返回值为 1(或 0)表示 year是 (或不是 )闰年。 【 C语言函数】 int count_5_13(int year) int date; /*date为 0表示星期日,为 1 6分别表示星期一至星期六 */ long days=0; /*days记录天数 */ int m, y, c=0; /*c用于表示黑色星期五的个数
4、 */ if (year 1900) return-1; /*计算从 1900年 1月 1日起至给定年份 year的 1月 13日间隔的天数 */ days=12; for (y= 1900; y year; y+) days +=365; if (isLeapYear(y)(1); date=(days%7) +1) %7; /*算出给定年份 year的 1月 13日是星期几 */ c=(2) ?1: 0; for(m=1; (3); m+) switch (m) case 1: case 3: case 5: case 7: case 8: case 10: case 12: days=3
5、1; break; case 4: case 6: case 9: case 11: days=30; break; case 2: days=28; if(4) days=29; break; /*end of switch*/ date=(days%7)+ (5) )%7; if (date=5) c+; /*end of for*/ return c; 3 阅读以下说明和 C语言程序,将应填入 (n)。 【说明】 某电信公司记录了每个用户的详细通话情况 (每次通话数据记录在一行 ),现将某用户某月的通话数据存入一个文本文件 dial.txt,其数据格式如下: 拨入或拨出标记通话开始时间通
6、话结束时间对方号码 注 1:数据字段以一个空格作为分隔符。 注 2:拨入和拨出标记均为小写字母。拨入标记为 i,表示其他用户呼叫本机,本机用户不需付费:拨出标记为 o,表示本机呼叫其他用户,此时本机用户需要付费。 注 3:通话开始和结束时间的格式均为 HH: MM: SS。其中 HH表示小时,取值00 23; MM表示分钟,取值 00 59; SS表示秒,取值 00 59。从通话开始到结束这段时间称为通话时间,假定每次通话时间以秒为单位,最短为 1秒,最长不超过 24小时。 注 4:跨月的通话记录计入下个月的通话数据文件。 例如 “o23: 01: 1200: 12: 15” 表示本次通话是本
7、机呼叫其他用户,时间从 23时 01分 12秒至次日的 0时 12分 15秒,通话时间为 71分 03秒。 下面程序的功能是计算并输出该用户本月电话费 (单位:元 )。 通话计费规则为: 1月通话费按每次通话费累加; 2每次的通话费按通话时间每分钟 0.08元计算,不足 1分钟时按 1分钟计费。 对于每次的拨出通话,程序中先分别计算出通话开始和结束时间相对于当日 0点0分 0秒的时间长度 (以秒为单位 ),然后算出本次通话时间和通话费。 例如,若输入 文件 dial.txt的数据如下所示,则输出 fee=7.44。 o 14: 05: 23 14: 11: 25 82346789 i 15:
8、10: 00 16: 01: 15 13890000000 o 10: 53: 12 11: 07: 05 63000123 o 23: 01: 12 00: 12: 15 13356789001 【 C程序代码】 #include stdio.h FILE *fin; Int main() char str80; int h1, h2, m1, m2, s1, s2; long t_start, t_end, interval; int c; double fee=0; fin=fopen(“dial.txt“, “r“); if (!fin) return-1; while (!feof(
9、fin) if (!fgets(str, 80, fin) break; if ( (1) ) continue; h1= (str2 -48) *10+str3 -48; m1= (str5 -48) *10+str6 -48; s1= (str8 -48) *10+str9 -48; h2= (str11 -48) *10+str12 -48; m2= (str14 -48) *10+str15 -48; s2=(str17-48)*10+str18-48; t_start=h1*60*60+m1*60+s1; /*通话开始时间 */ t_end=h2*60*60+m2.60+s2; /*
10、通话结束时间 */ if( (2) ) /*若通话开始和结束时间跨日 */ interval; (3)-t_start+t_end; else interval=t_end-t_start; c= (4) ; /*计算完整分钟数表示的通话时间 */ if (interval % 60) (5); fee+=c*0.08; fclose(fin); printf(“fee=%.2lfn“, fee); return 0; 4 阅读以下说明和 C语言函数,将应填入 (n)。【说明】 已知包含头结点 (不存储元素 )的单链表的元素已经按照非递减方式排序,函数 compress(NODE*head)的
11、功能是去掉其中重复的元素,使得链表中的元素互不相同。 处理过程中,当元素重复出现时,保留元素第一次出现所在的结点。 图 2-1(a)、 (b)是经函数 compress()处理前后的链表结构示例图。 链表的结点类型定义如下: typedef struct Node int data; struct Node *next; NODE; 【 C语言函数】 void compress(NODE *head) NODE *ptr, *q; ptr= (1); /*取得第一个元素结点的指针 */ while( (2)& ptr- next) q=ptr- next; while(q&(3) /*处理重复
12、元素 */ (4)q- next; free(q); q=ptr- next; (5) ptr- next; /*end of while */ /*end of compress*/ 5 阅读以下应用说明以及 Visual Basic程序代码,将应填入 (n)。 【应用说明】 某电视台拟开发应用程序来显示戏曲大赛中 1 4号四位选手决赛的现场投票情况。该程序从现场观众中 (不超过 2000人 )每 0.5秒收集一次对这四位选手的支持票数,并在屏幕上动态显示这四位选手的票柱 (以高度反映票数 )与累计得票数,如图 2-3所示。投票过程限时 30秒 ,每名观众最多为 1名选手投票。投票结束后系统
13、通过比较各位选手的累计得票数,显示决赛结果: “*号胜出 ”(如有单个冠军 )或 “继续进行PK”(如有多人获得相同的最高票数 )。 在开发该程序的过程中创建的主要控件及其初始属性值说明如下: 该程序中设置公共变量 T动态记录投票时间。四个形状 ShpM(1 to 4)动态增长的底线固定。 【 Visual Basic程序代码】 Dim T As Integer 声明全局变量 Private Sub Form_Load() For i=1 To 4 ShpM(i).Top=2000 : ShpM(i).Height=0 初始票柱高度为 0 TxtM(i).Text=0 Next i Timl.
14、Enabled=False : Timl.Interval=500 : T=0 End Sub Private Sub CmdStart Click() Timl.Enabled=True 开始投票 CmdStart.Enabled=False End Sub Private Sub Timl Timer() Dim n(1 To 4) As Integer n(1 to 4)为每次收集的票数 Dim i As Integer, j As Integer Dim G As Integer G用于计算最高票数 Dim ng As Integer ng用于计算冠军个数 For i=1 To 4 n
15、(i)=. 收集 i号选手的票数,此处省略 TxtM(i).Text=TxtM(i).Text+n(i) 累计票 (VB能进行自动转换 ) ShpM(i).Top=ShpM(i).Top-n(i) ShpM(i).Height=ShpM(i).Height+(1) 算出票柱高度 Next i T=T+1 计时 If T=60 Then 投票时间到 (2) 停止数据收集处理 ng = 1 G=TxtM(1).Text For i=2 To 4 If G TxtM(i).Text Then G=TxtM(i).Text ng=(3) j = i Else If G=TxtM(i).Text The
16、n ng=(4) 计算冠军个数 End If Next i If ng=1 Then txtResult. Text=(5) 单个冠军结果 Else txtResult. Text=“继续进行 PK“ End If End If End Sub 6 阅读下列说明、图和 C+代码,回答问题 1至问题 3。 【说明】 已知四个类之间的关系如图 2-2所示,分别对每个类的方法进行编号,例如 Shape的 perimeter()方法为 1号,表示为 1: perimeter(), Rectangle类的 perimeter()为 2号,表示为 2:perimeter(),依此类推,其中,每个类的 pe
17、rimeter方法都为虚函数且方法签名相同。 【 C+代码】 Triangle *tr=new Triangle(); Square *sq=new Square(); Shape *sh =tr; 6 关于上述 C+代码中 sh和 tr的以下叙述中,哪两个是正确的 (写出编号 )。 sh和 tr分别引用同一个对象; sh和 tr分别引用同一类型的不同的对象: sh和 tr分别引用不同类型的不同对象; sh和 tr分别 引用同一个对象的不同备份: sh和 tr所引用的内存空间是相同的。 7 写出下面消息对应的方法编号 (如果该消息错误或者没有对应的方法调用,请填写 “无 ”)。 tr- hei
18、ght() (1) sh- perimeter() (2) sq- height() (3) sq- perimeter() (4) sh- height() (5) tr- perimeter() (6) 8 不考虑内存释放问题,下列赋值 语句中哪两个是合法的 (写出合法赋值语句的编号 )。 sq=sh; sh=tr; tr=sq; sq=tr; sh=sq; 9 阅读下列说明、图和 Java代码,回答问题 1至问题 3。 【说明】 已知四个类之间的关系如图 2-4所示,分别对每个类的方法进行编号,例如 Shape的 perimeter()为 1号,表示为 1: perimeter(), R
19、ectangle类的 perimeter()为 2号,表示为 2:perimeter(),依此类推,其中,每个类的 perimeter方法签名相同。 【 Java代码】 Triangle tr=new Triangle(); Square sq=new Square(); Shape sh=tr; 9 关于上述 Java代码中 sh和 tr的以下叙述中,哪两个是正确的 (写出编号 )。 sh和 tr分别引用同一个对象; sh和 tr分别引用同一类型的不同的对象: sh和 tr分别引用不同类型的不同对象: sh和 tr分别引用同一个对象的不同拷贝; sh和 tr所引用的内存空间是相同的。 10
20、写出下面消息对应的方法编号 (如果该消息错误 或者没有对应的方法调用,请填写 “无 ”)。 tr.height() (1) sh.perimeter() (2) sq.height() (3) sq.perimeter() (4) sh.height() (5) tr.perimeter() (6) 11 下列赋值语句中哪两个是合法的 (写出合法赋值语句的编号 )。 sq=sh; sh=tr; tr=sq; sq=tr; sh=sq; 2007年下半年软件水 平考试(初级)程序员下午(应用技术)试题真题试卷答案与解析 1 【正确答案】 (1)1(2)2(3)m(4)Dm+1(5)mm+1 ,或
21、其等价表示 【试题解析】 本题涉及信息处理工作中常用的算法。动态收集得到的一批记录中,常包含有某些重复的记录。在做进一步处理前,应当删除这些重复记录。所谓重复记录,通常是指那些具有相同关键词的记录。注意,从经验上看,重复记录往往出现在比较临近的记录中。为了删除重复记录,可以采用本题中的算法思想。 对于题中给出的例子,该算法执行的动态情况如下表: 具体做法如下: 逐个考查 D1, D2, , D10的内容。 首先,保留 D1中的内容 5,将其作为已经选出的不重复数据,此时 m应是 1。 考查 D2时,将其与 D1 进行比较,发现不同,所以保留,形成不重复数据 D1、 D2,此时 m=2。 考查
22、D3时,分别将其与 D2、 D1 进行比较,发现有重复,不做处理。 考查 D4时,分别将其与 D2、 D1进行比较,发现不同,将 D4 的内容放到 D3中,形成不重复数据 D1、D2、 D3,此时 m=3。 考查 D5时,分别将其与 D3 D1进行比较,发现不同,将 D5的内容放到 D4中,形成不重复数据 D1 D4,此时 m=4。 考查 D6时,分别将其与 D4 D1 进行比较,发现有重复,不做处理。 考查 D7时,分别将其与 D4 D1 进行比较,发现有重复,不做处理: 考查 D8时,分别将其与 D4 D1进行比较,发现不同,将 D8 的内容放到 D5中,形成不重复数据 D1D5,此时 m
23、=5。 考查 D9时,分别将其与 D5 D1进行比较,发现不同,将D9的内容放到 D6 中,形成不重复数据 D1 D6,此时 m=6。 考查 D10时,分别将其与 D6 D1进行比较,发现有重复,不做处理。 考查结束,形成不重复数据 D1 D6,此时 m=6。 对于一 般的情况,就要逐个考查 D1,D2, , Dn 的内容。 首先 保留 D1 中的内容,作为已选出的不重复数据,此时设置 m=1。 对于已经选出的不重复数据 D1, D2, , Dm,考查 Di(min),将其与 Dm, Dm-1, , D1逐一比较。若发现有重复,则不做处理;发现完全不同时,应将 Di 的内容放入 Dm+1,然后
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
2000 积分 0人已下载
下载 | 加入VIP,交流精品资源 |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 试卷 2007 年下 半年 软件 水平 考试 初级 程序员 下午 应用技术 试题 答案 解析 DOC

链接地址:http://www.mydoc123.com/p-492678.html