【计算机类职业资格】初级程序员下午试题-54及答案解析.doc
《【计算机类职业资格】初级程序员下午试题-54及答案解析.doc》由会员分享,可在线阅读,更多相关《【计算机类职业资格】初级程序员下午试题-54及答案解析.doc(8页珍藏版)》请在麦多课文档分享上搜索。
1、初级程序员下午试题-54 及答案解析(总分:90.00,做题时间:90 分钟)一、B试题一/B(总题数:1,分数:15.00)1.【说明】 在一个矩阵中,如果其零元素的个数远远多于其非零元素的个数时,称这样的矩阵为稀疏矩阵。稀疏矩阵通常采用三元组数组表示。每个非零元素用一个三元组来表示,即非零元素的行号、列号和它的值。然后按某种顺序将全部非零元素的三元组存于一个数组中。例如,对于以下二维数组: int x34=1,0,0,0,0,5,0,0),0,0,7,2; 可用以下数组 a来表示: int a3=3,4,4,0,0,1,1,1,5),2,2,7,2,3,2; 其中三元数组 a的第 1行元素
2、的值分别存储稀疏矩阵的行数、列数和非零元素的个数。 下面的流程图描述了稀疏矩阵转换的过程。 【流程图】 (分数:15.00)_二、B试题二/B(总题数:1,分数:15.00)2.【函数 2.1说明】 递归函数 sum(int a, int n)的返回值是数组 a的前 n个元素之和。 【函数2.1】 int sum (int a,int n) if(n0) returnU (1) /U; elseU (2) /U; 【函数 2.2说明】 有 3个整数,设计函数 compare(int a,int b,int c)求其中最大的数。 【函数2.2】 int compare (int a, int b
3、, int c ) int temp, max; U(3) /Ua:b; U(4) /Utemp:c; 【函数 2.3说明】 递归函数 dec(int a,int n)判断数组 a的前 n个元素是否是不递增的。不递增返回 1,否则返回 0。 【函数 2.3】 int dec( int a, int n ) if(n=1) return 1; if(a0a1) return 0; returnU (5) /U; (分数:15.00)_三、B试题三/B(总题数:1,分数:15.00)3.【说明】 以字符流形式读入一个文件,从文件中检索出 6种 C语言的关键字,并统计、输出每种关键字在文件中出现的次
4、数。本程序中规定:单词是一个以空格或/t、/n结束的字符串。其中 6种关键字在程序中已经给出。 【程序】 #include stdio.h #include stdlib.h FILE *cp; char fname20, buf100; int NUM; struct key char word10; int count; keyword= “if“, 0, “char“, 0, “int“, 0, “else“, 0, “while“, 0, “return“, 0; char *getword (FILE *fp) int i=0; char c; while(c=getc(fp)!=
5、EOF if(c=EOF) return (NULL); else bufi+=c; while(c=fgetc(fp)!=EOF bufi=/0; return(buf); void lookup(char *p) int i; char *q, *s; for(i=0; iNUM; i+) q=U (2) /U; s=p; while(*s break; return; void main() int i; char *word; printf(“lnput file name:“); scanf(“%s“, fname); if(cp=fopen(fname, “r“)=NULL) pr
6、intf(“File open error: %s/n“, fname); exit(0); NUM=sizeof(keyword)/sizeof(struct key); while(U (5) /U) lookup(word); fclose(cp); for(i=0;iNUM;i+) printf(“keyword:%-20s count=%d/n“,keywordi.word,keywordi.count); (分数:15.00)_四、B试题四/B(总题数:1,分数:15.00)4.【说明】魔方阵,又叫幻方,在我国古代称为“纵横图”。由 1N2共 N2个自然数构成每行、每列及两对角线上
7、各数之和都相等的 NN方阵,这样的方阵就叫做 N阶魔方阵。顾名思义,奇阶魔方阵就是 N为奇数的幻方。奇数阶魔方阵的生成方法如下:(1)第一个位置在第一行正中。(2)新位置应当处于最近一个插入位置右上方,但如果右上方位置已超出方阵上边界,则新位置取应选列的最下一个位置;如果超出右边界,则新位置取应选行的最左一个位置。(3)若最近一个插入元素为 N的整数倍,则选下面一行同列上的位置为新位置。本题要求输入一个数据n,然后打印由自然数 1到 n2的自然数构成的魔方阵(n 为奇数)。例如,当 n=3时,魔方阵为:8 1 63 5 74 9 2了解其生成方法后,就可以根据此方法来写出程序了。首先设置 in
8、t变量 i,j,m, n。其中 i标记魔方阵的行;j 标记魔方阵的列;n 表示魔方阵的维数,通过输入得到;通过 m递加得到插入的数据。数组aMAXMAX用于存放魔方阵元素。这里预定义了 MAX 的大小,没有采用动态分配,在此设置为 15,即最大求得 1515阶魔方阵。【程序】#include stdio.h#define MAX 15void main()int n;int m=1;int i,j;int aMAXMAX;printf(“Please input the rank of matrix:“);scanf(“%d“,i=0;U (1) /Uwhile(U (2) /U)aij=m;
9、m+;i-;j+;if(m-1)%n=0 if(j(n-1) /超出上界U (4) /Uif(j(n-1)U (5) /Ufor(i=0;in;i+) /输出魔方阵for(j=0;jn;j+)if(aij/10=0)printf(“%d “,aij); /对程序无影响,只是使输出的数每一列对齐elseprintf(“%d “,aij);if(j=(n-1)printf(“/n“);(分数:15.00)_五、B试题五/B(总题数:1,分数:15.00)5.【说明】 设计希赛 IT教育研发中心的工资管理系统,该中心主要有 3类人员:经理、销售员和销售经理。要求存储这些人员的编号、姓名和月工资,计算
10、月工资并显示全部信息。月工资计算办法是:经理拿固定月薪 8000元;销售员拿固定工资 1000元,然后再按当月销售额的 4%提成;销售经理既拿固定月工资也领取销售提成,固定月工资为 5000元,销售提成为所管辖部门当月销售总额的 5。 按要求设计一个基类 employee,销售员类 salesman,经理类 manager,销售经理类 salesmanager。 程序 5-1是类employee的模块内容,程序 5-2是类 salesman的类模块内容,程序 5-3是类 manager的模块内容,程序5-4是类 salesmanager的模块内容。在主测试程序中,输入张三所管部门月销售量 10
11、000后的输出结果如下: 张三所管部门月销售量:10000 销售经理:张三 编号:1001 本月工资:5050 #include iostream.h #include string.h class employee protected: int no; char *name; float salary; public: employee(int num,char *ch) no=num; name=ch; salary=0; virtual void pay()=0; virtual void display() cout“编号:“noendl; cout“本月工资:“salaryendl;
12、 ; 【程序 5-2】 class salesman:U (1) /U protected: float commrate, sales; public: salesman(int num,char *ch):employee(num,ch) commrate=0.04; void pay() coutname“本月销售额:“; cinsaies; salary=sales*commrate+1000; void display() cout“销售员:“nameendl; employee:display(); ; 【程序 5-3】 class manager:U (1) /U protect
13、ed: float monthpay; public: manager(int num,char *ch):employee(num,ch) monthpay=8000; void pay() salary=monthpay; void display() cout“经理:“nameendl; employee:display(); ; 【程序 5-4】 class salesmanager:U (2) /U public: salesmanager(int num,char *ch):U (3) /U monthpay=5000; commrate=0.005; void pay() cou
14、tname“所管部门月销售量:“; cinsales; U (4) /U void display() cout“销售经理:“nameendl; U (5) /U ; void main() /主测试函数 salesmanager p1 (1001,“张三“); p1.pay(); p1.display(); (分数:15.00)_六、B试题六/B(总题数:1,分数:15.00)6.【说明】 链表和栈对象的共同特征是:在数据上执行的操作与在每个对象中实体存储的基本类型无关。例如,一个栈存储实体后,只要保证最后存储的项最先用,最先存储的项最后用,则栈的操作可以从链表的操作中派生得到。程序 6-1
15、实现了链表的操作,程序 6-2实现了栈操作。 import java.io.*; class Node /定义结点 private String m_content; private Node m_next; Node(String str) m_content=str; m_next=null; Node(String str,Node next) m_content=str; m_next=next; String getData() /获取结点数据域 return m_content; void setNext(Node next /设置下一个结点值 m_next=next; Node
16、getNext() /返回下一个结点 return m_next; ) 【程序 6-1】 class List Node Head; List() Head=null; void insert(String str) /将数据 str的结点插入在整个链表前面 if(Head=null) Head=new Node(str); else U (1) /U void append(String str) /将数据 str的结点插入在整个链表尾部 Node tempnode=Head; it(tempnode=null) Heed=new Node(str); else white(tempnode
17、.getNext()!=null) U (2) /U U(3) /U String get() /移出链表第一个结点,并返回该结点的数据域 Srting temp=new String(); if(Head=null) System.out.println(“Errow! from empty list!“) System.exit(0); else temp=Head.getData(); U (4) /U return temp; 【程序 6-2】 class Stack extends List void push(String str) /进栈 U (5) /U String pop(
18、) /出栈 return get(); (分数:15.00)_初级程序员下午试题-54 答案解析(总分:90.00,做题时间:90 分钟)一、B试题一/B(总题数:1,分数:15.00)1.【说明】 在一个矩阵中,如果其零元素的个数远远多于其非零元素的个数时,称这样的矩阵为稀疏矩阵。稀疏矩阵通常采用三元组数组表示。每个非零元素用一个三元组来表示,即非零元素的行号、列号和它的值。然后按某种顺序将全部非零元素的三元组存于一个数组中。例如,对于以下二维数组: int x34=1,0,0,0,0,5,0,0),0,0,7,2; 可用以下数组 a来表示: int a3=3,4,4,0,0,1,1,1,5
19、),2,2,7,2,3,2; 其中三元数组 a的第 1行元素的值分别存储稀疏矩阵的行数、列数和非零元素的个数。 下面的流程图描述了稀疏矩阵转换的过程。 【流程图】 (分数:15.00)_正确答案:()解析:a02=W; (2)xij0; (3)ak2=xij; (4)k+; (5)i+; 分析 本题考查程序流程图及数组的操作。 根据题目的意思,本题的流程图是用来描述稀疏矩阵转换过程的。而三元数组 d的第 1行元素的值分别用来存储稀疏矩阵 x的行数、列数和非零元素个数,在第(1)空位置处,前面已经分别存储了稀疏矩阵 x的行数和列数,只差非零元素的个数没有存储进数组 a。因此,此空应该填 a02=
20、W。 在第(2)空的前面有两条判断语句,我们可以看出它们是为了保证取到的元素是稀疏矩阵中的元素,再往下我们应该判断此元素是否是 0,因此,此空应该填 xij0。 根据程序流程图,如果第(2)空中的条件为真,即取到的元素不为 0,那么我们应该将该元素存放到三元数组 a中,第(3)空的前面两条语句已经分别用于存储了稀疏矩阵非 0元素的行号和列号,那么接下来应该是保存其值。因此,此空的答案是 ak2=xij。 由题目中对三元数组 a的描述可以知道,三元数组 a的每一行只存储 3个元素。再看流程图,第(4)空的前面三条语句都表示向三元数组 a中存储一个元素。因此,如果再要往数组中添加元素,就需要存放到
21、另外一行。因此,第(4)空应该是将数组的行号加 1,即 k+。 结合流程图中三个判断语句的结构和作用来分析,第(5)空应该是 i+,它的作用是保证能取到稀疏矩阵中每一行的元素。二、B试题二/B(总题数:1,分数:15.00)2.【函数 2.1说明】 递归函数 sum(int a, int n)的返回值是数组 a的前 n个元素之和。 【函数2.1】 int sum (int a,int n) if(n0) returnU (1) /U; elseU (2) /U; 【函数 2.2说明】 有 3个整数,设计函数 compare(int a,int b,int c)求其中最大的数。 【函数2.2】
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
5000 积分 0人已下载
下载 | 加入VIP,交流精品资源 |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 职业资格 初级 程序员 下午 试题 54 答案 解析 DOC
