[计算机类试卷]2006年下半年软件水平考试(初级)程序员下午(应用技术)试题真题试卷及答案与解析.doc
《[计算机类试卷]2006年下半年软件水平考试(初级)程序员下午(应用技术)试题真题试卷及答案与解析.doc》由会员分享,可在线阅读,更多相关《[计算机类试卷]2006年下半年软件水平考试(初级)程序员下午(应用技术)试题真题试卷及答案与解析.doc(18页珍藏版)》请在麦多课文档分享上搜索。
1、2006年下半年软件水平考试(初级)程序员下午(应用技术)试题真题试卷及答案与解析 1 阅读以下说明和算法,完善算法并回答问题。【说明】 假设以二维数组G1m, 1n)表示一幅图像各像素的颜色,则 Gi, j表示区域中点 (i, j)处的颜色,颜色值为 0 k的整数。 下面的算法将指定点 (i0, j0)所在的同色邻接区域的颜色置换为给定的颜色值。约定所有与点 (i0, j0)同色的上、下、左、右可连通的点组成同色邻接区域。 例如,一幅 89像素的图像如图 2-1所示。设用户指定点 (3,5),其颜色值为 0,此时其 上方 (2, 5)、下方 (4, 5)、右方 (3, 6)邻接点的颜色值都为
2、 0,因此这些点属于点 (3, 5)所在的同色邻接区域,再从上、下、左、右四个方向进行扩展,可得出该同色邻接区域的其他点 (见图 2-1中的阴影部分 )。将上述同色区域的颜色替换为颜色值 7所得的新图像如图 2-2所示。 【算法】 输入:矩阵 G,点的坐标 (i0, j0),新颜色值 newcolor。 输出:点 (i0, j0)所在同色邻接区域的颜色置换为 newcolor之后的矩阵 G。 算法步骤 (为规范算法,规定该算法只在第七步后结束 )如下。 第一步:若点 (i0, j0)的颜色值与新颜色值 newcolor相同,则 (1); 第二步:点 (i0, j0)的颜色值 oldcolon
3、创建栈 S,并将点坐标 (i0, j0)入栈; 第三步;若 (2),则转第七步; 第四步;栈顶元素出栈 (x,y) ,并 (3); 第五步; 1)若点 (x,y-1)在图像中且 Gx, y-1等于 oldcolor,则 (x,y-1)入栈 S; 2)若点 (x, y+1)在图像中且 GIx, y+1等于 oldeolor,则 (x, y+1)入栈 S; 3)若点 (x-1, y)在图像中且 Gx-1, y)等于 oldcolor,则 (x-1, y)入 栈 S; 4)若点 (x+1, y)在图像中且 Gx+1, y)等于oldcolor,则 (x+1, y)入栈 S; 第六步:转 (4); 第
4、七步:算法结束。【问题】 是否可以将算法中的栈换成队列 ?回答; (5) 。 2 阅读以下说明和 C函数,将应填入 (n)处的字句写在答题纸的对应栏内。 【说明】 某单位准备进行一次选举,对指定的 n名 (n 80)候选人进行投票。为了简化选举工作,事先印制了写有这 n名候选人姓名的选票,投票者只需将选中者名下的圆圈涂黑即可。规定每张选票上被涂黑的圆圈数不得超过 3个,也不得少于 1个,否则视为无效选票。投票结束后,所有选票经计算机扫描处理,形成了描述选票状态的文本文件。例如, n=8时所形成的文件如下: 01011000 10010100 10011000 11111111 00000000
5、 00111000 其中,每行表示一张选票的数据,每列代表一位候选者的得票情况。第 i行第 j列为 1,表示第 i张选票上投了第 j名候选人 1票。 函数 statisdc()的功能是读入选票数据,并统计每位候选者的得票数,函数返回有效选票数。 【 C函数】 int statistic(FILE*fp, int candidatet, int n) /*从文件中读入选票数据, n为候选人数量 (n 80),从有效选票中统计每位候选者的得 票数并存入 candidate,函数返回有效选票数 */ char str80; /*str保存读入的一张选票数据 */ int i, tag=0; /* t
6、ag用于判断每张选票是否有效 */ int q=0; /*q用于计算有效选票数 */ for(i=0; i n; i+) candidatei=0; while(1) fgets(str, 80, fP); /*读入一张选票数据 */ for(tag=0, i=0; (2); i+) if (stri=1) tag+; if(3)/*若是有效选票,则进行统计 */ (4); for(i=0; i n; i+) if (stri=1) (5); return q; /*statistic*/ 3 阅读以下说明和 C函数,将应填入 (n)处的字句写在答题纸的对应栏内。【说明】 若一个矩阵中的非零元
7、素数目很少且分布没有规律,则称之为稀疏矩阵。对于 m行 n列的稀疏矩阵 M,进行转置运算后得到 n行 m列的矩阵 MT,如图 2-3所示。 为了压缩稀疏矩阵的存储空间,用三元组 (即元 素所在的行号、列号和元素值 )表示稀疏矩阵中的一个非零元素,再用一维数组逐行存储稀疏矩阵中的所有非零元素 (也称为三元组顺序表 )。例如,图 2-3所示的矩阵 M相应的三元组顺序表如表 2-1所示,其转置矩阵 MT的三元组顺序表如表 2-2所示。 表 2-1 表 2-1 函数TransposeMatrix(Matrix M)的功能是对用三元组顺序表表示的稀疏矩阵 M进行转置运算。 对 M实施转置运算时,为了将
8、M中的每个非零元素直接存入其转置矩阵MT三元组顺序表的相应位置,需先计算 M中每一列非零元素的数目 (即 MT中每一行非零元 素的数目 ),并记录在向量 num中;然后根据以卞关系,计算出矩阵 M中每列的第一个非零元素在转置矩阵 MT三元组顺序表中的位置。 cpot0=0 cpotj=cpotj-1)+numj-1/*j为列号 */ 类型 ElemType、 Triple和 Matnx定义如下: typedef int ElemType; typedef struct /*三元组类型 */ int r, c; /*矩阵元素的行号、列号 */ ElemType e; /*矩阵元素的值 */ Tr
9、iple; typedef struct /*矩阵的三元组顺序表存储结构 */ int rows, cols, elements; /*矩阵的行数、列数和非零元素数目 */ Triple data MAXSIZE; Matrix;【 C函数】 int TransposeMatrix (Matrix M) int j,q,t; int *num, *spot; Matrix MT; /* MT是 M的转置矩阵 */ num= (int *)malloc(M.cols*sizeof(int); cpot= (int *)malloc(M.cols*sizeof(int); if (!num | !
10、cpot) return ERROR; MT.rows =(1); /* 设置转置矩阵 MT行数、列数和非零元数目 */ MT.cols =(2); MT. elements = M. elements; if (M.elements 0) for(q = 0; q M.cols; q+) numq = 0; for(t = 0; t M.elements; +t) /*计算机阵 M中每一列非零元素数目 */ num.M.data t . c +; /*计算矩阵 M中第列第一个非零元素在其转置矩阵三元组顺序表中的位置 */ (3); for(j = 1;j M.cols; j+) spot j
11、 =(4); for(t = 0; t M.elements;t+) j =(5); /* 取矩阵 M的一个非零元素的列号存入 j*/ q = cpotj; MT.dataq.r = M.datat.c; MT.dataq.c = M.datat.r; MT.dataq.e = M.datat .e; +cpotj; /* 计算 M中第 j列的下一个非零元素的目的位置 */ /* for */ /* if */ free(num); free(cpot); /*此处输出矩阵元素,代码省略 */ return OK; )/*TransposeMatrix*/ 4 阅读以下说明和 C函数,将应填入
12、 (n)处的字句写在答题纸的对应栏内。【说明】 某班级有 N名学生,他们可根据自己的情况选修名称和数量不尽相同的课程。设 N等于 6,学生信息、所选课程及成绩用链表结构存储,如图 2-5所示。 程序中相应的类型定义如下: #define N 6 struct node char cname5; /*课程名 */ int grade; /*成绩 */ struct node *next; /*指针,指示某学生选修的下一门课程及成绩*/ ; struct student char xh5; /*学号 */ char name20; /*姓名 */ struct node*link; /*指针,指示
13、出选修的课程及成绩链表 */ stud_infoN; 图2-5 smd_mb为一个全局数组。 函数 func(char kc, int*num)的功能是统计选修了课程名为 kc的学生的人数,并返回该课程的平均成绩 (若无人选修该课程,则平均成绩为 0),参数 num带回选修课程比的学生人数。【 C函数】 double func(char kc, int*num) int i, count=0, sum=0; /*count用于记录选修课程名为 kc的学生的人数 */ double avg=0.0; struct node *p; for(i=0; i N; i+) p=(1); /*取第 i个
14、学生所修课程链表的头指针 */ while (p) if(2) sum=(3); count+; break; /*if*/ p=p- next; /*while*/ (4); if(5) avg=(double)sum/count; /*计算平均成绩 */ return avg; /*func*/ 5 阅读以下应用说明以及用 Visual Basic语言编写的程序代码,将应填入 (n)处的字句写在答题纸的对应栏内。【应用 4.1】 设应用程序的运行窗口内有一个文字标签(Label)以及一个框架,其中有三个复选框 (chk1, chk2, chk3),各个复选框单击事件过程的程序代码如下: P
15、rivate Sub chkl_Click() Label.fontBold=chkl.Value End Sub Private Sub chk2_Click() Label.fontltalic=chk2.Value End Sub Private Sub chk3_Click() Label.fontUnderLine=chk3.Value End Sub 三个复选框 chkl、 chk2、 chk3的功能分别是: (1)。【应用 4.2】 设应用程序的运行窗口 内有两个文本框 Txt1和Txt2,其初始内容为空。在 Txt1文本框中输入一个数值,当光标离开此文本框 (例如进入文本框 T
16、xt2)时,执行的程序代码如下: Private Sub Txt1_LostFocus() dim x aS double x=Val(Txtl Text) 工 f x 0 Or x 100 Then Txtl.Text =“ MsgBox$(“请重新输入 !“) Txtl.SetFocus Else Txt2.Text=Txt1.Text End If End Sub 该程序代码的功能是:若 在文本框 Txtl中输入的数值小于 0或大于 100,当光标离开此文本框时,(2);否则,将其值复制到文本框 Txt2中。【应用 4.3】 在下面的应用中,当窗口内发生 C1ick事件时,窗口内将显示如
17、图 2-4所示的杨辉三角 (每一行都是二项式展开的系数 )。请完善程序代码。 Private Sub Form Click() Dim i, j, c As Integer, StrTemp AS String Dim a(9)As Integer a(0)=0=a(1)=l: StrTemp=Str(a(1)+Space(3) CurrentX=(ScaleWidth-TextWidth(StrTemp)/2 Print StrTemp For j=2 TO 9 a(j)=1 For C=j-1 TO 2 Step-1 a(c) =(3) Next (4)=“ For c = 1 To j
18、StrTemp = StrTemp class SalesTicket public: (1) printTicket() cout “ 是票据正文 !“ endl; class Decorator : public SalesTicket SalesTicket *ticket; public: Decorator(SalesTicket *t) ticket = t; void printTicket() if(ticket != NULL) ticket- printTicket(); ; class HeadDecorator : public Decorator public: He
19、adDecorator(SalesTicket *t): (2) void printTicket() sour “这是票据的台头 !“ endl; Decorator:printTicket(); ; class FootDecorator :public Decorator public: FootDecorator(SalesTicket *t): (3) void printTicket() Decorator:printTicket(); cout “这是票据的脚注 !“ endl; ; void main(void) SalesTicket t; FootDecorator f(
20、HeadDecorator h( (4) ); h.printTicket(); cout “-“ endl; FootDecorator a(NULL); HeadDecorator b( (5) ); b.printTicket(); 8 阅读以下说明和 Java程序代码,将应填入 (n)处的字句写在答题纸的对应栏内。 【说明】 在下面的 Java程序代码中,类 SalesTicket能够完成打印票据正文的功能,类 HeadDecorator与 FootDecorator分别能够完成打印票据的台头和脚注的功能。 已知该程序运行后的输出结果如下所示,请填补该程序代码中的空缺。 这是票据的台头
21、 ! 这是票据正文 ! - 这是票据的脚注 ! 这是票据的台头 ! 这是票据的脚注 ! 【 tava程序代码】 public class SalesTicket public void printTicket() System. out. println ( “这是票据正文 ! “); public class Decorator extends SalesTicket SalesTicket ticket; public Decorator(SalesTicket t) ticket = t; public void printTicket() if(ticket != null) tick
22、et.printTicket(); public class HeadDecorator extends Decorator public HeadDecorator(SalesTicket t) (1) public void printTicket() System. out.println(“这是票据的台头 ! “); super.printTicket(); public class FootDecorator extends Decorator public FootDecorator(SalesTicket t) (2); public void printTicket() sup
23、er, printTicket (); System. out.println (“这是票据的脚注 !“); public class Main public static void main(String args) T = new HeadDecorator( (3); T=(4); System.out.println(“-“); T = new FootDecorator(5); T.printTicket (); 2006年下半年软件水平考试(初级)程序员下午(应用技术)试题真题试卷答案与解析 1 【正确答案】 (1)转第七步 (2)栈 S空,或等价的文 字描述 (3)Gx,ynew
24、color ,或 Gx,y=newcolor,或等价的文字描述 (4)第三步 (5)可以 【试题解析】 本题考查栈结构在算法中的应用。 栈或 (和 )队列常在某些应用中用来临时存储需要处理的元素,因此,其基本应用方式为:首先令一个 (或多个 )元素入栈 (队列 ),然后在栈 (队列 )非空的情况下,栈顶 (队头 )元素出栈 (队列 )并进行处理,然后令与该栈顶 (队头 )元素相关的其他元素入栈 (队列 ),再从判栈 (队列 )空开始重复以上过程。 根据题目说明部分的描述,所有与点 (i0, j0)同色的上、下、左、右可连通的点组成同色邻接区域。要置换一个同色邻接区域中所有点的颜色,可先将所有需
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
2000 积分 0人已下载
下载 | 加入VIP,交流精品资源 |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 试卷 2006 年下 半年 软件 水平 考试 初级 程序员 下午 应用技术 试题 答案 解析 DOC

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