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