【计算机类职业资格】初级程序员下午试题-87及答案解析.doc
《【计算机类职业资格】初级程序员下午试题-87及答案解析.doc》由会员分享,可在线阅读,更多相关《【计算机类职业资格】初级程序员下午试题-87及答案解析.doc(22页珍藏版)》请在麦多课文档分享上搜索。
1、初级程序员下午试题-87 及答案解析(总分:106.00,做题时间:90 分钟)一、试题一(总题数:1,分数:15.00)1.【说明】喜迎 2008年北京奥运会!以下【C 程序】能将一个给定汉字(例如,奥运会的“会”字)的点阵逆时针旋转90,并输出旋转前后的点阵数据及字形。图 1-15是汉字“会”字的 1616点阵字形,用数字 0表示空白位置,用数字 1表示非空白位置,“会”字的第 1行即可表示成如下的 0,1 序列:0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0如果把它看做一个字的 16个位,“会”字的第 1行可以用十六进制数 0100来表示。同理,“会”字的第2行可以用十六
2、进制数 0240表示,第 3行可以用十六进制数 0420表示依此类推,用 16个双字节整型数即可存放一个汉字点阵字形。“会”字的点阵数据及字形如图 1-15的左半部分所示。将一个汉字逆时针旋转 90,就是把该汉字点阵的最右列作为旋转后新点阵的第 1行,次最右列作为旋转后新点阵的第 2行依此类推来形成一个旋转后的点阵字形。图 1-15的右半部分就是将“会”字逆时针旋转 90后的点阵数据和字形(提示:读者可将书本顺时针旋转 90,以查看旋转 90后的点阵字形)。在【C 程序】中,数组 old存放着“会”字的 16个双字节整型点阵数据。函数 turnleft能将该点阵数据逆时针旋转 90,旋转后的点
3、阵数据存放在数组 new中。函数 display能将旋转前后的点阵数据加以编辑,用字符“.”表示值为 0的位,用字符“x”表示值为 1的位,从而将旋转前后的点阵按行输出其十六进制的数据和字形,如图 1-15所示。(分数:15.00)_二、试题二(总题数:1,分数:15.00)【说明】某大学城图书馆需要在无线阅览厅的某些位置上放置无线接入点 AP(Access Poin)。假设每个无线 AP覆盖范围的半径是 6米,因此必须使得每台笔记本电脑上的无线网卡到某个无线 AP的直线距离不超过 6米。为了简化问题,假设所有无线网卡在同一直线上,并且无线 AP沿该直线放置。该问题可以建模为如图 1-16所示
4、,其中直线表示无线网卡所在的直线,实心正方形表示无线网卡。现利用贪心策略实现用尽可能少的无线 AP覆盖所有的无线网卡。实现贪心算法的流程如图 1-17所示。其中,di(1iN)表示第 i张无线网卡到通道 A端的距离,N表示无线网卡的总数,无线网卡的编号按照无线网卡到通道 A端的距离从小到大进行编号;sk表示第k(k1)个无线 AP到通道 A端的距离。算法结束后 k的值为无线 AP的总数。(分数:15.00)_三、试题三(总题数:1,分数:15.00)2.【说明】以下【C 程序】的功能是从文件 text_01.ini中读入一篇英文短文,统计该短文中不同单词和它的出现次数,并按词典编辑顺序将单词及
5、它的出现次数输出到文件 word_xml.out中。该 C程序采用一棵有序二叉树存储这些单词及其出现的次数,一边读入一边建立。然后中序遍历该二叉树,将遍历经过的二叉树上节点的内容输出。程序中的外部函数int getword(FILE *fpt,char *word)从与 fpt所对应的文件中读取单词置入 word,并返回 1;若已无单词可读,即到文件尾部时,则函数返回0。【C 程序】#include stdio.h#include malloc.h#include ctype.h#include string.h#define INF “TEXT_01.INI“#define OUTF “WO
6、RD_XML.OUT“typedef struct treenode char *word;int count;struct treenode *left, *right;BNODE;int getword(FILE *fpt,char *word);void binary tree(BNODE *t,char *word)BNODE *ptr, *p;int cmpres;p = NULL;(1) ;while (ptr) /*寻找插入位置*/cmpres = strcmp(word, (2) ); /* 保存当前比较结果*/if (!cmpres) (3) return;else (4)
7、;ptr = cmpres 0 ? ptr-right : ptr-left;ptr = (BNODE *)malloc(sizeof(BNODE);ptr-right = ptr-left = NULL;ptr-word = (char *)malloc(strlen(word)+1);strcpy(ptr-word,word);ptr-count = 1;if (p = NULL)(5) ;elseif (cmpres 0)p-right = ptr;elsep-left = ptr; void midorder(FILE *fpt, BNODE *t)if ( (6) )return;m
8、idorder(fpt , t-left);fprintf(fpt , “ %s %d/n “ , t-word , t-count);midorder(fpt , t-right); void main()FILE *fpt;char word40;BNODE *root = NULL;if (fpt = fopen(INF , “r“) = NULL) printf(“Cant open file %s/n“,INF);return;while (getword(fpt,word) = 1)binary_tree( (7) );fclose(fpt);fopen(OUTF,“w“);mid
9、order(fpt, root);fclose(fpt);(分数:15.00)_四、试题四(总题数:1,分数:15.00)【说明】【算法 4-1】的功能是用来检查文本文件中的圆括号是否匹配。若文件中存在圆括号而没有对应的左括号或者右括号,则给出相应的提示信息,如图 1-18所示。(分数:15.00)_五、试题五(总题数:1,分数:16.00)【说明】某学期成绩管理系统的“增、删、改数据表中的记录”对话框如图 1-19所示。(分数:16.00)_六、试题六(总题数:1,分数:15.00)3.【说明】以下【C+程序】用于实现两个多项式的乘积运算。多项式的每一项由类 Item描述,而多项式由类 Li
10、st描述。类 List的成员函数主要有:createList():创建按指数降序链接的多项式链表,以表示多项式:reverseList():将多项式链表的表元链接顺序颠倒:multiplyList(ListL1,ListL2)计算多项式 L1和多项式 L2的乘积多项式。【C+程序】#include iostream.hclass List;class Item friend class List;private:double quot ;int exp ;Item *next;Public:Item(double_quot,int_exp)(1) ;class Listprivate:Item
11、 *list;Public:List()list=NULL:void reverseList();void multiplyList(List L1,List L2);void createList();void List:createList()Item *p,*U,*pre;int exp;double quot;list = NULL;while (1) cout “输入多项式中的一项(系数、指数) :“ endl;cin quot exp:if ( exp0 )break ; /指数小于零,结束输入if ( quot=0 )continue;p = list;while ( (2) )
12、 /查找插入点pre = p;p = p-next;if ( p != NULL continue ;u = (3) ;if (p = list)list = u;elsepre-next = u;u -next = p;void List:reverseList()Item *p, *u;if ( list=NULL )return;p = list -next;list - next = NULL;while ( p != NULL) u = p - next;p -next = list;list = p;p = u;void List:multiplyList ( List L1, L
13、ist L2 )Item *pL1,*pL2,*u;int k, maxExp;double quot;maxExp = (4) :L2.reverseList();list=NULL;for ( k = maxExp;k = 0;k- )pL1 = L1.list;while ( pL1 != NULL pL2 = L2.1ist;while (pL2 NULL quot = 0.0;while (pL1 != NULL pL2 = pL2 - next;else if ( pL1 - exp + pL2 - exp k )pL1 = pL1 - next;elsepL2 = pL2 - n
14、ext;if ( quot !=0.0 ) u = new item( quot, k );u - next = list;list = u;reverseList ();L2. reverseList ():void main()List L1,L2,L;cout “创建第一个多项式链表/n“;L1.createList();cout “创建第二个多项式链表/n“;L2.createList();L.multiplyList (L1,L2);(分数:15.00)_七、试题七(总题数:1,分数:15.00)4.【说明】用创建 Thread类的子类的方法实现多线程,判断一个数是否是素数。如果是,
15、打印“是素数”,如果不是,则打印“不是素数”;如果没有参数输入,显示“请输入一个命令行参数”。【Java 程序】import java.io.* ;public class TestThread /Java Application主类public static void main(Sting args )if (args lengthl) /要求用户输入一个命令行,否则程序不能进行下去system.out.println(“请输入一个命令行参数“);system.exit(0) ;/创建用户 Thread子类的对象实例,使其处于 NewBorn状态primeThread getPrimes =
16、 new primeThread (Integer.parseInt(args0);getPrimes.start () ; /启动用户线程,使其处于 Runnable状态while(getPrimes.isAlive() /说明主线程在运行try Thread. sleep (500); /使主线程挂起指定毫秒数,以便用户线程取得控制权,/sleep是 static的类方法Catch(InterruptedException e) /sleep方法可能引起的异常,必须加以处理return ;/while循环结束System.out.println (“按任意键继续“) ; /保留屏幕,以便观
17、察try (1) ;Catch(IOException e) /main方法结束class primeThread extends Thread /创建用户自己的 Thread子类 run()中实现程序子线程操作boolean m_bContinue=true; /标志本线程是继续int m_nCircleNum ; /循环的上限prime Thread(int Num) /构造函数m_nCircleNum =Nam;boolean ReadyToGoOn () /判断本线程是否继续执行return ( (2) );public void run () /继承并重载父类 Thread的 run
18、 ()方法,在该线程被启动时自动执行int number =3;boolean flag=true;while (true) /无限循环for( (3) ; i+) /检查 number是否为素数if(number %i=0)(4) ;system, out. println (flag);if (flag) /打印该数是否为素数的信息system,out.print in (number+ “是素数“) ;elsesys rem.out.print In (number+ “是素数“) ;number+ ; /修改 number的数值,为下一轮素数检查做准备if (number m_nCir
19、cleNum) /到达要求检查数值的上限m_bCont inue= false ; /则准备结束此线程return ; /结束 run()方法,结束线程(5) ;try /经过一轮检查之后,暂时休眠一段时间sleep(500); /使主线程挂起指定毫秒数,以便父线程取得控制权Catch(InterruptedException e) Return;/for循环结束/while循环结束/run()方法结束/primeThread类定义结束(分数:15.00)_初级程序员下午试题-87 答案解析(总分:106.00,做题时间:90 分钟)一、试题一(总题数:1,分数:15.00)1.【说明】喜迎
20、2008年北京奥运会!以下【C 程序】能将一个给定汉字(例如,奥运会的“会”字)的点阵逆时针旋转90,并输出旋转前后的点阵数据及字形。图 1-15是汉字“会”字的 1616点阵字形,用数字 0表示空白位置,用数字 1表示非空白位置,“会”字的第 1行即可表示成如下的 0,1 序列:0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0如果把它看做一个字的 16个位,“会”字的第 1行可以用十六进制数 0100来表示。同理,“会”字的第2行可以用十六进制数 0240表示,第 3行可以用十六进制数 0420表示依此类推,用 16个双字节整型数即可存放一个汉字点阵字形。“会”字的点阵数据及字
21、形如图 1-15的左半部分所示。将一个汉字逆时针旋转 90,就是把该汉字点阵的最右列作为旋转后新点阵的第 1行,次最右列作为旋转后新点阵的第 2行依此类推来形成一个旋转后的点阵字形。图 1-15的右半部分就是将“会”字逆时针旋转 90后的点阵数据和字形(提示:读者可将书本顺时针旋转 90,以查看旋转 90后的点阵字形)。在【C 程序】中,数组 old存放着“会”字的 16个双字节整型点阵数据。函数 turnleft能将该点阵数据逆时针旋转 90,旋转后的点阵数据存放在数组 new中。函数 display能将旋转前后的点阵数据加以编辑,用字符“.”表示值为 0的位,用字符“x”表示值为 1的位,
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
5000 积分 0人已下载
下载 | 加入VIP,交流精品资源 |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 职业资格 初级 程序员 下午 试题 87 答案 解析 DOC
