收藏 分享(赏)

最全历年程序员软考考试下午真题合集.doc

上传人:精品资料 文档编号:10179189 上传时间:2019-10-16 格式:DOC 页数:321 大小:3.15MB
下载 相关 举报
最全历年程序员软考考试下午真题合集.doc_第1页
第1页 / 共321页
最全历年程序员软考考试下午真题合集.doc_第2页
第2页 / 共321页
最全历年程序员软考考试下午真题合集.doc_第3页
第3页 / 共321页
最全历年程序员软考考试下午真题合集.doc_第4页
第4页 / 共321页
最全历年程序员软考考试下午真题合集.doc_第5页
第5页 / 共321页
点击查看更多>>
资源描述

1、 WORD 格式 .可编辑 技术资料分享 申明:此为 2004 上半年至今的所有程序员软考下午试题真题并且每套后面均配有答案,接近 30 套,每年两套。由于文件过大,拆成上午试题和下午试题,在百度文库同样可以搜索“最全历年程序员软考考试上午真题合集“。此外还有模拟试题提供,百度文库搜索“最全程序员软考考试上午模拟试题合集”和“最全程序员软考考试下午模拟试题合集” 。注:如果图片显示不全,适当将图片缩小即可。过来人总结,多做做下午场试题,最好打印。上午场试题对着电脑即可,只要不是一点不懂基本上午场没问题。初级程序员 2004 上半年下午试题1、试题 1阅读下列说明、流程图和算法,将应填入_处。流

2、程图说明下面的流程图用 N-S 盒图形式描述了数组 A 中的元素被划分的过程。其划分方法是:以数组中的第一个元素作为基准数,将小于基准数的元素向低下标端移动,大于基准数的元素向高下标端移动。当划分结束时,基准数定位于 Ai,并且数组中下标小于 i 的元素的值均小于基准数,下标大于 i 的元素的值均大于基准数。设数组 A 的下界为 low,上界为 high,数组中的元素互不相同。例如,对数组(4,2,8,3,6),以 4 为基准数的划分过程如下:流程图算法说明WORD 格式 .可编辑 技术资料分享 将上述划分的思想进一步用于被划分出的数组的 2 部分,就可以对整个数组实现递增排序。设函数 int

3、 p(intA,int low,int high)实现了上述流程图的划分过程并返回基准数在数组 A 中的下标。递归函数 void sort(int A,int L,int H)的功能是实现数组A 中元素的递增排序。算法void sort(int A,int L,int H)if(LH)k=p(A,L,H); /*p()返回基准数所在数组 A 中的下标 */sort( (4) ); /*小于基准数的元素排序 */sort( (5) ); /*大于基准数的元素排序 */;2、试题 2阅读下列函数说明和 C 函数,将应填入_处的语句写在答题纸的对应栏内。函数 2.1 说明函数 palindrome(

4、char s)的功能是:判断字符串 s 是否为回文字符串,若是,则返回 0,否则返回-1。若一个字符串顺读和倒读都一样,称该字符串是回文字符串,例如,“LEVEL”是回文字符串,而“LEVAL”不是。函数 2.1int palindrome(char s)char *pi, *pj;pi=s;pj=s+strlen(s)-1;while(pipj /*完成的题目数量*/int time; /*完成题目的总用时*/int d8; /*di用于记录提交第 i 个题目错误答案的次数*/int a8; /*ai用于记录第 i 个题目是否已经提交正确答案*/Info;void Statistic() c

5、har ch,pass;int i,j,k,h,m,t,time,Maxlndex;Info RMAXN+1 ;for(i=1; i=MAXN; i+) /*数组 R 的元素置初值 0*/Ri.no = 0;Ri.num = 0; Ri.time = 0;for(j=0; j8; j+) Ri.dj = 0; Ri.aj = 0;/*for*/MaxIndex = 0;while (1)/*录入一名选手提交答案的信息(小时:分钟,选取手编号,题目号,是否正确)*/scanf(“%d:%d,%d,%c,%c“,if(h=0) break;Rk.no = k; /*k 为选手编号码*/time=

6、(1) ; /*计算答题时间,以分钟为单位*/if(isupper(ch) ch = a + ch- A;if(pass != Y continue;if (Rk.ach-a=1) continue;Rk.ach-a = 1;Rk .num+;Rk.time += (2) ;if (k MaxIndex) Maxlndex = k;/*while*/for(i=l; iMaxIndex; i+) /*选取择排序*/for(t=i,j=i+1; j=Maxlndex; j+)if(Rt.numRj.num| (3) )t=j;if( (4) ) R0=Rt;Rt=Ri;Ri=R0;/*for*/

7、k=1; R0 = Rl;for(i=1; i=Maxlndex; i+) /*输出排名情况*/if (R,i.num 0) if(Ri.num!=R0.num|Ri.time!=R0.time) k+;R0= (5) ;printf(“%d:%3d %4d %5dn“,k,Ri.no,Rinum,Ritime);WORD 格式 .可编辑 技术资料分享 )/*if*l/*Statistic*/5、试题 5阅读以下应用说明及 Visual Basic 程序代码,将应填入 (n) 处的字句写在答题纸的对应栏内。应用说明某单位举办了一场知识竞赛,有 300 名选手参加竞赛,依次从 1300 为选手编

8、号。竞赛时间为 9:0011:00。8 道竞赛题目依次从“A”“H”编号,选手可按任意次序答题,每完成一道题目,可立即提交答案。若答案正确(Y),则选择其他题目进行解答,否则,可继续做该题目或选择其他题目进行解答,直至竞赛结束。选手提交答案的情况及判定结果由专人即时录入,录入数据包括提交答案的时间、选手编号、题目编号(AH)、是否正确(Y/N)。对竞赛情况进行统计和排名的规则如下:1若选手 X 在竞赛时提交的题目 P 解答正确,则解答该题目所用时间如下计算:解答题目 P 的用时=提交题目 P 正确的时间-竞赛的开始时间+罚时罚时;提交题目 P 错误解答的次数20例如:设 14 号选手在 10:

9、27 提交了题目 A 的正确解答,则该选手正确解答该题目所用时间为 87 分钟,由于他在 09:37 和 09:52 两次提交了题目 A 的错误解答,因此罚时为220=40 分钟,所以 14 号选手解答题目 A 的用时=87+40=127(分钟)。2已经提交正确答案的题目再次提交时不再计算。3竞赛结束时,选手的总用时为所有解答正确的题目用时累加所得,解答不正确的题目不计时。4排名时,完成题目数量多者排名靠前;若完成的题目数相同,则用时少者排名靠前:若完成的题目数和所用时间均相等,则名次相同;完成题目数为 0 的选手不参加排名。本应用程序的运行窗口如下图所示:窗口中的两个文本框为 Txt_tim

10、e 和 Txt_player,分别用于录入提交答案的时间和选手编号。组合列表框 Combol 提供题目编号(AH),录入时从中选择。检查框 Chk yn 用于输入解答是否正确信息。当单击“确定”按钮(Cmd_comfirrn)时,录入的提交信息加入组合列表框 Listl 中,排名情况在列表框 List2 输出。单击“关闭”按钮时退出应用程序。在开发过程中,需要编写的部分程序代码如下:程序代码Private Tyve InfoWORD 格式 .可编辑 技术资料分享 no As Integer 选手编号hum As Integer 完成的题目数量time As Integer 完成题目的总用时d(

11、8) As Integer di用于记录提交第 i 个题目错误答案的次数a(8) As Boolean aCi用于记录第 i 个题目是否已经提交正确答案End TypeDim R(301) As Info Rj用于统计编号为 j 的选手提交答案的情况Dim Maxlndex As Integer MaxIndex 记录提交答案的选手中编号最大者Private Sub Form_Load()For i=1 To 8Combol.Addltem Chr( (1) )NextCombol.Text = Combol.List(0): Txt_time. Text= “: Txt_player. Te

12、xt= “For i = 1 To 300R(i).num=0: R(i).time = 0: R(i).no = IForj = 1 To 8R(i).d(j) = 0: R(i).a(j) = FalseNext j, iEnd SubPrivate Sub Crud_confirm_Click()Dimh, m, k, time As Integer, ch, pass, sl As Stringk = InStr(Txt_time.Text, “:“): If k 2 Then GoTo errorlh = Val(Left(Txt_time. Text, k - 1 ): m = V

13、al(Mid(Txt_time. Text, k + 1 )Ifh 11 Or h = 11 And m 0 Or m = 60 Then GoTo errorltime= (2) 计算答题时间,以分钟为单位If Txt player. Text 1 Or Txt_player. Text 300 Then GoTo errorlch= (3) 取题目编号pass = llf(Chk_yn. (4) = 0, “N“, “Y“)s1 = Txt_time. Text+ Space(4)+ Txt_player. Texts1 = s1 + Space(10 - Len(Txt_player.

14、Text)+ ch + Space(8) + passListl .Addltem s1k = Val(Txt_player. Text) k 为选手编号R(k).no = k 编号为 K 的选手的提交信息记录在下标在 K 的数组元素中If k Maxlndex Then Maxlndex = km = Asc(ch) - Ase(“A“)Ifpass “Y“ Then 编号为 K 的选手提交第 m 个题目的解答不正确R(k).d(m) = R(k).d(m) + 1Elself R0(k).a(m) True Then 已经提交正确的题目的解答不再计算R(k).a(m) = True: R(

15、k).num = R(k).num + IR(k).time = R(k).time + (5) Call Statistic 调用过程 Statistic 进行实时排名和输出End IfWORD 格式 .可编辑 技术资料分享 Exit Suberrorl: MsgBox “录入信息有误!“, vbOKOnlyEnd Sub6、试题 6阅读以下说明和 C+程序,将应填入 (n) 处的字句写在答题纸的对应栏内。说明以下程序的功能是计算三角形、矩形和正方形的面积并输出。程序由 4 个类组成:类 Triangle、Rectangle 和 Square 分别表示三角形、矩形和正方形;抽象类 Figur

16、e 提供了一个纯虚拟函数 getArea(),作为计算上述三种图形面积的通用接口。c+程序#include iostream.h#inclule math.hclass Figure public:virtual double getArea()= 0; / 纯虚拟函数;class Rectangle: (1) protected:double height;double width;public:Rectangle() ;Rectangle(double height, double width) this-height = height;this-width = width;double

17、getArea() return (2) ;class Square: (3) public:Square(double width) (4) ;class Triangle: (5) double la;double lb;double lc;public:Triangle(double la, double lb, double lc) WORD 格式 .可编辑 技术资料分享 this-la = la; this-lb =lb; this-lc = lc;double getArea() double s = (la+lb+lc)/2.0;return sqrt(s*(s-la)*(s-l

18、b)*(s-lc); ; void main() Figure* figures3 = new Triangle(2,3,3), new Rectangle(5,8), new Square(5);for (int i = 0; i 3; i+) com “figures“ i “ area =“ (figuresi)-getArea0 endl;7、试题 7阅读以下应用说明及 Visual Basic 部分程序代码,将应填入 (n) 处的字句写在答题纸的对应栏内。应用说明设一个简单的“通讯录”存储在一个 ACCESS 类型的数据库表中,包括姓名、电话和email 三个字段。下面的应用程序实现

19、对“通讯录”数据库表中的记录进行增加、删除及修改处理,其运行界面如下:(1)数据控件(datal)与“通讯录”数据库表相连接,用户可通过“ ”和“ ”按钮指定表中的当前记录。(2)文本框 Txt name、Txt phone 和 Txt email 分别与数据库表中的“姓名” 、 “电话”和“email”字段绑定,用于显示当前记录的内容。(3)应用程序启动时, “确定”按钮(Cmd ok)和“取消”按钮(Cmd cancel)不可操作,文本框中显示表中的第一条记录,这时文本框处于不可操作状态。(4)单击“增加”按钮(Cmd_add)或“修改”按钮(Cmd_modify)后,方可以编辑记录内容,

20、同时“增加” 、 “删除” 、 “修改”和“退出”按钮变为不可操作状态。 “增加”和“修改”操作需通过“确定”和“取消”按钮确认。(5)单击“删除”按钮(Cmd del)后,弹出对话框,再单击“确定”按钮,当前记录被删除。WORD 格式 .可编辑 技术资料分享 程序代码Private Sub enableop(isEnabled As Boolean)Txt_name.Enabled=isEnabled: Txt_phone.Enabled=isEnabledTxt_email.Enabled=isEnabledCmd_ok.Enabled=isEnabled: Cmd_eancel.Enab

21、led=isEnabledCmd_add.Enabled=Not isEnabled: Cmd_del.Enabled=Not isEnabledCmd_end.Enabled=Not isEnabled: Cmd_modify.Enabled=Not isEnabledEndSubPrivate Sub Form_Load()Call enableop(False)Data1.RefreshIf Data1 .Recordset. RecordCount = 0 ThenCmd_del. Enabled= False: Cmd_modify. Enabled= (1) End If End

22、Sub Private Sub Cmd_add_Cliek() 单击“增加”按钮的代码Call enableop( (2) )Datal .Recordset. AddNew 在数据库表中添加一个新记录 Txt name. (3) End Sub Private Sub Crud_del_Click() 单击“删除”按钮的代码On Error GoTo error3arts = MsgBox(“确定删除吗?“, vbYesNo + vblnformafion, “操作提示!“)If (ans = vbYes) ThenDatal.Recordset. (4) Datal .Recordset.

23、 MoveNextIf Datal .Recordset. EOF Then Data l.RefieshEnd IfExit Sub error3:MsgBox Err. Description, vbOKOnly, “错误提示!“ End Sub Private Sub Cmd_ok_Click() 单击“确定”按钮的代码On Error GoTo errorlDatal.Recordset. (5) Call enableop(False)Exit Sub error 1:MsgBox Err. Description, vbOKOnly, “错误提示!“Datal.UpdateCont

24、rolsCall enableop(False) End Sub “修改”和“取消”按钮的程序代码(略)8、试题 8阅读以下说明和 Java 源程序,将应填入 (n) 处的字句写在答题纸的对应栏内。说明以下程序的功能是计算三角形、矩形和正方形的面积并输出。程序由 5 个类组成:AreaTest 是主类,类 Triangle、Rectangle 和 Square 分别表示三角形、矩形和正方形,抽象类 Figure 提供了一个计算面积的抽象方法。程序WORD 格式 .可编辑 技术资料分享 public class AreaTestpublic static void main(String arg

25、s)Figurefigures=new Triangle(2,3,3),new Rectangle(5,8), new Square(5);for(int i=0;ifigures1ength;i+)System.out.println(figuresi+“area=“+figuresigetArea();public abstract class Figurepublic abstract double SetAJea();public class Rectangle extends (1) double height;double width;public Rectangle(double

26、 height,double width)this.height=height;this.width=width;public String toString()return “Rectangle:height=“+height+“,width=“+width+“:“;public double getArea() return (2) ; public class Square extends (3) public Square(double width) (4) ;public String toString() return “Square:width=“+width+“:“; publ

27、ic class Triangle extends (5) . double la;double lb;double lc;public Triangle(double la,double lb,double lc) this.la=la; this.lb=lb; this.lc=lc;public String toString()return “Triangle: sides=“+la+“,“+lb+“,“+lc+“:“;public double getArea() double s=(la+lb+lc)/2.0;return Math.sqrt(s*(s-la)*(s-lb)*(s1c

28、);WORD 格式 .可编辑 技术资料分享 答案:1、i:1,1;8(2)1SW,或 ksw 且 k0(3)0BITi(4)NOP,或空操作(5)1BITi解析 本题考查的是流程图。由于题目中给出了对 8 位二进制整数求补的算法,并且指明将 8 位二进制整数中的各位,从低位到高位,依次存放在整型数组 BIT 的 BIT1BIT8中,因此,循环控制变量的初值应该为 1(从二进制数中的最低位开始)、终值为 8(二进制数中的每一位都要检查)、增量为 1(每次检查 1 位),按照“循环变量名:循环初值,增量,循环终值”格式描述,则为:i:1,1,8。由题目中给出的算法可知,从最右位开始向左找到的第一个

29、“1”及其右边的各位是不取反的,因此需要一个标志,sw 起的就是这个作用。由于 SW 的初始值为 0,所以在找到从右边数的第 1 个“1”之前,当 BITi等于“0”且 sw 等于 o,则说明这些二进制位无需取反,因此相应的流程图中空(4)处的操作应为空操作。当某个 BITi的值等于“1”且 SW 的值等于 0,则说明找到了从右边数的第 1 个“1”,此时应将 SW 的值置为非“0” ,因此流程图中空(2)处的操作为 sw 赋值。最后,应将其余各位取反,即 BITi等于 1 时,在流程图中的空(3)处将其赋值 0;反之,则在流程图中的空(5)处将其赋值 1。2、j%2,及其等价形式(2)i+=

30、2,及其等价形式(3)tag2,或 tag=3 或 tag=3,及其等价形式(4) 9(5) 45解析 本题考查的是交换排序。根据题目中给出的排序过程可知,第一趟比较的是 a0与 a1、a2与 a3、a4与 a5等,第二趟比较的是 a1与 a2、a3与 a4、a5与 a6等,第三趟从 a0与 a1开始进行比较,第四趟再从 a1与 a2开始,因此,内循环控制变量 i 的初始值随着外循环控制变量,i 的每一次变化而在 0 和 1 之间交替取值,因此函数中的空(1)处应填入“j% 2”或其等价形式。显然,i 的递增量应为 2,空(2)处应填入“i+=2”或其等价形式。排序时,只要在内循环中发生了元素

31、的交换,则 tag 的值被置为 0,通过外循环中的“tag+”操作又会将其变为 1;若在内循环中始终没有进行过相邻元素的交换处理,则tag 的值将在外循环中不断递增,因此,当 tag 达到一定值时排序过程即可终止。下面,考查相邻两趟没有发生交换的排序过程。对于偶数下标,则有 a0a1、a2a3、a4a5等等。WORD 格式 .可编辑 技术资料分享 对于奇数下标,则有 a1a2、a3a4、a5a6等等。综上,则有 a0a1a2a3an-2an-1。因此,函数中的空(3)处应填入“tag=3”或其等价形式。对于 10 个元素的数组 a,当元素已经呈非递减排列时,先进行了 aO与 a1、a2与 a3

32、、a4与 a5、a6与 a7、a8与 a9的比较,又进行了 a1与 a2、a3与 a4、 a5与 a6、a7与 a8的比较,未发生交换,因此共进行 9 次元素间的比较后完成排序。相反地,当排序前元素已经呈递减排列时,要进行最多次数的比较才能完成排序,同时每次比较操作都伴随着交换处理。从题目中外循环次数为 10 可知,每相邻两趟内循环进行 9 次比较,所以总的比较次数为 45。3、p&ki,及其等价形式(2)!p-next,及其等价形式(3)q-next(4)prep-next(5)q-next=p解析 本题考查的是指针运算和链表操作。在函数中,通过语句“p=La-next;prep=La;”可

33、知,若链表不空,则 p 指向链表的第一个元素结点且 prep 直接指向其前趋结点,同时计数器 k 的值为 1。因此,只要计数器 k 的值小于 i 且链表长度大于 i(即 p 指向的结点存在),则指针 p 将随着 while 循环,向表尾方向扫描下去。因此,函数中空(1)处应填入“p&ki”或其等价形式。显然,当找到第 i 个结点时,p 指向该结点,且 prep 指向其前趋结点,如下图(a)所示。因此, p-next 为空指针表明第 i 个元素结点已经在表尾,无需移动,即函数中空(2)处应填入“!p-next” 。反之,若第 i 个结点不是表尾,则可通过“prep-next=p-next操作将其

34、从链表中删除,如下图(b)所示。为了将 p 指向的结点链接到表尾,则需找到表尾结点并令 q 指向该结点(通过函数中的注释得知),此时 q-next 应等于空指针。因此空(3)处应填入“q-next” 。由于在空(4)处将 p 指向的结点从链表中删除,因此,空(5)处应将其接在表尾,即填入“q-next=p” 。4、(h-9)*60+m,及其等价形式(2)time+Rk.dch-a*20其中 ch-a可以表示为 ch-97,Rk可以表示为 RRk.no(3)Rrq.num=Rjnum & Rt.timeRj.time,及其等价形式(4)t!=i 及其等价形式(4)Ri,及其等价形式解析 本题考查的是通过阅读程序说明,在限定条件下进行程序设计的能力。在函数 Statistic()中,h:m 表示竞赛选手提交解答的时间。根据注释,空(1)处用于

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

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报