[计算机类试卷]2007年上半年软件水平考试(初级)程序员下午(应用技术)试题真题试卷及答案与解析.doc
《[计算机类试卷]2007年上半年软件水平考试(初级)程序员下午(应用技术)试题真题试卷及答案与解析.doc》由会员分享,可在线阅读,更多相关《[计算机类试卷]2007年上半年软件水平考试(初级)程序员下午(应用技术)试题真题试卷及答案与解析.doc(16页珍藏版)》请在麦多课文档分享上搜索。
1、2007年上半年软件水平考试(初级)程序员下午(应用技术)试题真题试卷及答案与解析 1 阅读以下说明和流程图,回答问题 1和问题 2。【说明】 为便于管理,每本正式出版的图书都印有国际标准书号。标准书号由 “ISBN”和 10个数字组成,其格式为: ISBN组号 -出版者号 -书名号 -校验码。其中,校验码是根据前面 9个数字计算得到的,用于计算机自动校验。假设标准书号的 10个数字依次是 a(1), a(2), ,a(10),则校验码 a(10)的设置应使 S=10*a(1)+9*a(2)+8*a(3)+1*a(10) 能被 11整除。如果校验码 a(10)应设置成 10,则规定以 “X”表
2、示之。例如,信息处理技术员考试大纲的标准书号为: ISBN 7-302-11191-X。第 1段上的数字 “7”是国际 ISBN中心分配给中国 ISBN中心管理的组号。第 2段上的 “302”表示清华大学出版社。标准书号的校验过程如图 1-1所示,计算校验码的过程如图 1-2所示,其中,Mod(S, 11)表示 S除以 11得到的余数。【流程图】1 请填补流程图中的空缺 (1) (4)。 2 设 “程序员考试大纲 ”标准书号前 9个数字为 7-302-08493,请写出 其校验码。 3 阅读以下说明和 C语言函数,将解答填入对应栏内。 【说明】 下面待修改的 C程序完成的功能是:对于给定的一个
3、长正整数,从其个位数开始,每隔一位取一个数字 (即取其个位、百位、万位等数字 ),形成一个新的整数并输出。例如,将该程序修改正确后,运行时若输入 “14251382”,则输出的整数为“4532”。 下面给出的 C程序代码中有五个错误,请指出所有的错误。 【 C程序代码】 01 #include stdio.h 02 03 int main() 04 05 long n, num; 06 int i; 07 08 do 09 printf(“请输入一个正整数: “); 10 scanf(“%ld“, n); 11 while(n = 0); 12 k = 1; 13 for (i = 1; n
4、= 0; i+) 14 if (i % 2 = 1) 15 num= num+ (n % 10) * k; 16 k = k * 10; 17 18 n = n / 10; 19 20 printf(“新数据为 : %d n“,num); 21 return 0; 22 4 阅读以下说明和 C语言函数,将应填入 (n)处的字句写在对应栏内。【说明】 函数 count months(DATE start, DATE end)的功能是:计算两个给定日期之间所包含的完整月份数。 该函数先算出起止日期中所含的完整年数,再计算余下的完整月份数。 规定两个相邻年份的同月同日之间的间隔为 1年。例如, 20
5、07.5.302008.5.30的间隔为 1年。若相邻两年中前一年是闰年,并且日期是 2月 29日,则到下一年的 2月 28日为 1年,即 2008.2.292009.2.28的间隔为 1年。 规定两个相邻月份的相同日之间的间隔为 1个月,但需要特别考虑月末的特殊情况。例如,2007.1.292007.2.28的间隔为 1个月,同理, 2007.1.302007.2.28、 2007.1.312007.2.28的间隔都是 1个月。 计算起止日期间隔不足一年的完整月份数时,分如下两种情况。 (1)起止日期不跨年度。先用终止日期的月号减去起始日 期的月号得到月份数,然后再根据情况进行修正。例如,起
6、止日期为 2008.3.312008.9.20,通过月号算出月份数为 6。修正时,通过调用函数 makevalid将 2008.9.31改为2008.9.30,与终止日期 2008.9.20比较后,将月份数修正为 5。 (2)起止日期跨年度。计算方法如下例所示:对于起止日期 2008.7.252009.3.31,先计算2008.7.252008.12.25的月份数为 5,再算出 2008.12.252009.3.25的月份数为 3,因此 2008.7.252009.3.31之间的完整月份数为 8。 日期数据类型定义如下: typedef struct int year; int month;
7、int day; /*日期的年号 (4位 )、月和口号 */ DATE; 程序中使用的函数 cmp_date()、 isLeap Year()和 makevalid()说明如下。【 C语言函数】 int count_months (DATE start, DATE end) int years = 0, months = 0; DATE r; if (cmp_date(start,end) 0) r = start; start = end; end = r; years = end.year - start.year; /*计算年数 */ r = start; r.year = end.ye
8、ar; if (cmp_date(r, end) 0) /*修正年数 */ (1); r.year-; if (r.year end.year) /*跨年度时,先计算到 12月的月份数 */ months =(2); r.month = 12; months += (end.month + 12 - r.month) % 12; r.year = end.year; r.month = end.month; makevalid (3); /*将日期 r修正为有效日期 */ if (cmp_date(r,end) 0) /*修正月份数 */ (4); months +=(5); /*计算总月份数
9、 */ return months; 使用的函数 cmp_date()、 isLeap Year()和 makevalid()说明如下。 5 阅读以下说明和 C语言函数,将应填入 (n)处 的字句写在对应栏内。【说明】 函数 sort (NODE *head)的功能是;用冒泡排序法对单链表中的元素进行非递减排序。对于两个相邻结点中的元素,若较小的元素在前面,则交换这两个结点中的元素值。其中, head指向链表的头结点。排序时,为了避免每趟都扫描到链表的尾结点,设置一个指针 endptr,使其指向下趟扫描需要到达的最后一个结点。例如,对于图 4-1(a)的链表进行一趟冒泡排序后,得到图 4-1(
10、b)所示的链表。 链表的结点类型定义如下: typedef struct Node int data; struct Node *next; NODE;【 C语言函数】 void sort (NODE *head) NODE *ptr,*preptr, *endptr; int tempdata; ptr = head - next; while (1) /*查找表尾结点 */ ptr = ptr - next; endptr = ptr; /*令endptr指向表尾结点 */ ptr =(2); while(ptr != endptr) while(3) if (ptr- data ptr-
11、 next- data) tempdata = ptr- data; /*交换相邻结点的数据 */ ptr- data = ptr-next- data; ptr- next- data = tempdata; preptr =(4); ptr = ptr - next; endptr =(5); ptr = head- next; 6 阅读以下应用说明以及用 Visual Basic开发过程中所编写的程序代码,将应填入(n)处的字句写在对应栏内。【应用说明】 某应用的登录界面 如下: 登录界面中的文本框 txtUserID和txtPassword分别用于接受用户输入的用户名和口令,命令按钮为
12、 “确定 (cmdOk)”和“取消 (cmdCancel)”。 ADO数据控件 Adodc1与数据库 EmployeeData连接。在EmployeeData中,表 “Users”的字段 “UserID”和 “Pswd”分别记录了所有的合法用户名和口令。 在登录界面中,输入正确的用户名和口令并单击 “确定 ”按钮后,就会打开应用程序的主窗口 fxmApp。用户名或密码输入错误时,给出提示信息并返回登录界面。【 Visual Basic程序代码】 Private Sub cmdOK Click() Adodcl.ConnectionString = “Provider=Microsoft.Jet
13、.OLEDB.4.0;Data Source=D:dataEmployeeData.mdb;Persist Security Info=False“ Adodcl.RecordSource = “select *(1)“ Adodcl.Refresh Do usrname =(2) pwd = Adodc1.Recordset(“Pswd“) Adodc1.Recordset.MoveNext Loop Until (usrname =(3) Or (Adodc1.Recordset.EOF) If usrname txtUserID.Text Then MsgBox “无效的用户 ID, 请
14、重新输入 !“, , “提示信息 “ Else If (4)Then MsgBox “欢迎进入系统主界面 !“, , “提示信息 “ Unload me (5) Else MsgBox “无效的用户密码 , 请重新输入 !“, , “提示信息 “ End If End If End Sub 7 阅读以下应用说明、 Visual Basic开发说明以及程序代码,将应填入 (n)的字句写在对应栏内。 【应用说明】 某交通灯演示程序启动后,其运行窗口中包括红绿灯标志以及当前红绿灯状态剩余秒数的动态显示 (如下图 )。红灯与绿灯持续的时间分别为 30秒与 40秒。持续时间结束时,立即变更红绿灯,并重新
15、显示剩余秒数。【 Visual Basic开发说明】 在开发过程中,先在窗体内制作形状 “红绿灯框架 ”(长方形,透明 ),在该框架中,上部制作形状 “红灯 ”(ShpRed,圆形 ),默认属性为透明;下部制作形状 “绿灯 ” (ShpGreen,圆形 ),初始设置其填充方式属性 FillStyle为实心,填充颜色属性 FillColor为绿色。 再设置两个图像框 (Image1在左, Image2在右 ),使其能分别装入数字图像文件,以显示当前红绿灯状态剩余的秒数。 10个数字图像文件 N0.bmp N9.bmp分别用于显示数字 0、 1、 、 9,这些文件存放在该应用程序所在目录中,以便在
16、程序运行时按需要选择装入这两个图像框。为使图像文件装入图像框时能自动改变大小以适应图像框,这些图像框的 Stretch属性 都应设置成 (1)。为使这些数字能每秒变化一次,开发窗体中设置了计时器 Timcr1,其 Enable属性设置成 True,其 Interval属性设置成 1000。 程序中,全局变量 Light用以标志当前红灯 (0)或绿灯状态 (1),RedT和 GreenT分别表示红灯或绿灯状态剩余的秒数。 计时器 Timer1的定时过程是在该程序启动 1秒后首次执行的,以后每隔 1秒执行 1次。开发者应考虑对以下四种情况的处理:绿灯持续、绿灯转红灯、红灯持续、红灯转绿灯。 过程L
17、oadNumber的功能是:将红绿灯剩余秒数 N(2位整数 )分离出 两个一位数 i与 i,再将其变换成字符,删除前面可能产生的空格,再将数字图像文件 Ni.bmp与Nj.bmp装入两个图像框 (其中 i与 j应以相应的数字字符代替 )。【 Visual Basic程序代码】 Public Light AS Integer, RedT As Integer, GreenT As IntegerPrivate Sub Form_Load() Light = 1 : GreenT = 40 : RedT - 0 初始化设置 End SubPrivate Sub Timer1_Timer() 计 时
18、器定时过程 If Light = 1 Then 绿灯状态时 (2) If GreenT 0 Then 绿灯持续时 Call LoadNumber (GreenT) 调用过程,显示数字 GreenT Else 绿灯转红灯时 ShpRed.FillStyle = 0 置红灯形状实心 ShpRed.FillColor = vbRed 为红灯形状填充红色 ShpGreen.FillStyle = 1 置绿灯形状透明 Call LoadNumber(30) Light = 0 : RedT = 30 End IfElse 红灯状态时 RedT = RedT - 1 If RedT 0 Then 红灯持续
19、时 Call LoadNumber(RedT) Else 红灯转绿灯时 ShpRed.FillStyle = 1 ShpGreen.FillStyle = 0 ShpGreen.FillColor = vbGreen (3) Light = 1 : GreenT = 40 End IfEnd IfEnd SubSub LoadXumber (N As Integer) 根据剩余秒数 N将数字图 象装入图像框 Dim i As Integer, j As Integer i = Int( (4) ) j = (5) Image1.Picture = LoadPicture(“N“ 03 clas
20、s Stock 04 protect: 05 (1) ; 06 Stock(iht n, int pr=1) 07 shares = n; share_val=pr; 08 ; 09 void Stock(); 10 public: 11 /成员函数 12 void output() 13 (2) shares “:“ share val endl; 14 15 private: 16 /成员变量 17 int shares; 18 int share_val; 19 ; 20 21 void main() 22 Stock a(1); a.output(); 23 Stock b; b.ou
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
2000 积分 0人已下载
下载 | 加入VIP,交流精品资源 |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 试卷 2007 上半年 软件 水平 考试 初级 程序员 下午 应用技术 试题 答案 解析 DOC

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