![]() |
![]() |
|
| 关 于 站 长 | ||
| 收 藏 本 站 | ||
| 设 为 首 页 |
|
※ 最新动态 ∣ 考试简介 ∣ 历年试题 ∣ 编程工具 ∣ 在线考试 ∣ 考试论坛 ∣ 给我留言 ∣ 考试用书 ∣ 网上查分 ※ |
| 您的位置:首页——历年试题 |
|
2001年度高级程序员级下午试题 试题一 阅读下列说明和流程图,回答问题1至问题3,把解答填入答题纸的对应栏内。 [说明] 某计算机厂生产多种型号的计算机,通过分布在世界各地的销售点销售,销售点应在收到计算机商品后的规定时间内把货款汇给该计算机厂。 流程图 1 描述了该厂发货、收款、催款的处理过程。其中商品文件、销售点文件、发货文件和收款文件的记录格式如下: 商品文件 = 商品代号 + 计算机规格名称 + 单价 销售点文件 = 销售点代号 + 销售点名称 + 地址 发货文件 = 发货单号 + 发出日期 + 销售点代号 + 商品代号 + 数量 + 金额 收款文件 = 收款单号 + 收款日期 + 销售点代号 + 商品代号 + 数量 + 金额 + 发货单号 在流程图中,处理 1~处理 3 把当天的发货单合并到发货文件。处理 4~处理 6 把当天的收款单合并到收款文件。每天在处理 3 和处理 5 完成之后,由处理 7 在发货文件中当天已收款的记录上加上已收款标记。处理 8 在月末执行一次,它有三个功能: ①汇总输出本月发货清单; ②删除发货文件中已收款的所有记录,形成一个新的发货文件,作为下月初处理时的初始文件 ③产生催款通知单,以便对那些一个月以前已发货但至今仍未收到货款的销售点催款。 [问题1] 指出流程图 l 中应在哪几个处理框中检查发货单和收款单的错误,并分别说明它们各能指出什么错误。 [问题2] 如果把流程图 1 中从日收款分类文件到处理 7 的连线改成从日收款文件到处理 7 的连线,则有什么缺点,理由是什么? [问题3] 处理 9 每月末执行一次如流程图所示,利用收款文件产生月收款报告并更新收款文件。要求指出它对收款文件做什么更新操作。
试题二 阅读下列说明和流程图,回答问题 1 至问题 3 ,把解答填入答题纸的对应栏内。 [说明] 某考务处理系统具有以下功能: 1.输入报名单; 2.自动编制准考证号; 3.输出准考证; 4.输入成绩清单; 5.输出成绩通知单; 6.输出成绩分布表; 7.输入合格标准、输出录取通知单; 8.试题难度分析,并输出试题难度分析表。 这里给出了实现上述要求的部分不完整的数据流图,其中部分数据流的组成如下所示: 报名单 = 报名号 + 姓名 + 通信地址 考生名册 = 报名号 + 准考证号 + 姓名 + 通信地址 成绩册 = 准考证号 + { 课程号 + 成绩 } (其中{W}表示W重复多次) 准考证 = 报名号 + 姓名 + 准考证号 [问题1] 指出 0 层图中可以删去的部分。 [问题2] 在加工 1 子图中将遗漏的数据流添加在答题纸上。 [问题3] 加工 2 子图分解成如图所示的 4 个子加工及相关的文件(即数据存储)。试在此基础上将相关的DFD 成份添加在答题纸上,以完全该加工子图。 [数据流图]
顶层
试题三 在COMET型计算机上可以使用试卷上所附的 CASL 汇编语言。阅读程序说明和 CASL 程序,将应填入__(n)__处的字句,写在答题纸的对应栏内。 [程序3说明] 子程序 DEHZ 用来对 HZ 编码的字串做解码处理。 HZ 编码是海外华人创造的一种将含有高位为 1 的汉字双字节字串转换成易于在网络中传输的ASCII 字符串的变换方式。编码过程中,被转换字符串中的原汉字子字符串各字节高位作清零处理,使之成为 ASCII 子字符串,并在其前后两端分别添加 ~{ 和 ~} 作为标记;而对于原 ASCII 子字符串,则将其中的 ~ 改写为 ~~,其余字符不变。 DEHZ 解码子程序则是 HZ 编码的复原过程。复原 ASCII 子字符串过程中遇有 ~~ 字符则改写为一个 ~ ,遇有 ~{ 则将其后直至 ~} 标记前的各字节高位置1,复原为汉字子字符串,同时删除其前后标记。~的后续字符不属于以上情况均作为错误处理。 调用该子程序时, GR1 存放原始字符串首地址, GR2 存放还原后的目标字符串首地址。工作寄存器 GR3 用作处理汉字子字符串的识别标志,进入子程序时应初始化为处理 ASCII 子字符串。程序按照 CASL 语言的标准约定,字符串的每个字符只占用一个存储字的低八位。原始字符串和目标字符串均以 0 作为结束标志。 [程序3] START DEHZ PUSH 0,GR3 PUSH 0,GR2 PUSH 0,GR1 LEA GR3,0 LOOP __(1)__ CPA GR0,MARK0 JNZ GOON LEA GR1,1,GR1 LD GR0,0,GR1 CPA GR0,MARK0 __(2)__ CPA GR0,MARK1,GR3 JNZ ERROR __(3)__ LEA GR1,1,GR1 JMP LOOP ERROR OUT ERS1R,ERLEN JMP EXIT GOON __(4)__ ST GR0,0,GR2 LEA GR2,1,GR2 LEA GR1,1,GR1 CPA GR0,VO __(5)__ EXIT P0P GR1 P0P GR2 P0P GR3 RET V1 DC 1 V0 DC O DC #0080 MARK0 DC '~ ' MARK1 DC '{ }' ERSTR DC 'ERROR!' ERLEN DC 6 END 试题四 阅读下列程序说明和C代码,将应填入__(n)__处的字句写在答题纸的对应栏内。 [程序4说明] 设 M 叉树采用列表法表示,即每棵子树对应一个列表,列表的结构为:子树根结点的值部分 (设为一个字符) 和用“( )”,括起来的各子树的列表 (如有子树的话) ,各子列表间用“,”,分隔。例如下面的三叉树可用列表 a( b( c,d ),e,f( g,h,i ))表示。
本程序输入列表,生成一棵 M 叉树,并由 M 叉树输出列表。假定输入无错误。 [程序4] #include〈stdio.h〉 #include〈stdlib.h〉 #define M 3 typedef struct node{ char val; struct node *subTree[M]; } NODE; char buf[255] ,*str = buf NODE *d = NULL NODE *mackTree( ) /*由列表生成M叉树*/ { int k; NODE *s ; s = __(1)__ s -> val = *str++ ; for ( k = 0 ; k < M ; k++ ) s-> subTree[k] = NULL ; if(*str='( '){ k = 0; do { str++; s -> subTree[k] = __(2)__ ; if ( *str == ')' ) { str++; break ; } k = k+l ; } while ( __(3)__ ); } return s ; } void walkTree( NODE *t ) /*由 M 叉树输出列表*/ { int i ; if t != NULL ) { __(4)__ if ( t -> subTree[0] == NULL ) return ; putchar ( '( ' ) ; for ( i = 0 ; i < m ; i++) { __(5)__ if ( i! = M - l && t -> subTree[i+l] != NULL ) putchar ( ', ' ) ; } putchar ( ') ' ) ; } }
void main( ) { printf( "Enter exp:" ) ; scanf( "%S" , str ) ; d = makeTree() ; walkTree( d ) ; putchar( '\n') ; }
试题五 阅读下列程序说明和C代码,将应填入__(n)__处的字句写在答题纸的对应栏内。 [程序5说明] 著名的四色定理指出任何平面区域图均可用四种颜色着色,使相邻区域着不同的颜色。本程序对给定的区域图找出所有可能的不超过四种颜色的着色方案。程序中用 1~4 表示四种颜色。要着色的 N 个区域用 0~N一1编号,区域相邻关系用 adj[][] 矩阵表示,矩阵的 i 行 j 列的元素为 1 ,表示区域 i 与区域 j 相邻;矩阵的 i 行 j 列的元素为 0 ,表示区域 i 与区域 j 不相邻。数组 color[] 用来存储着色结果, color[i] 的值为区域 i 所着颜色。 【程序5】 #include〈stdio.h〉 #define N 10 void output(int color[])/*输出一种着色方案*/ { int i ; for ( i = 0 ; i < N ; i++ ) printf( "%4d" , color[i] ) ; printf( "\n" ) ; } int back( int *ip ,int color[] ) /*回溯*/ { int c = 4 ; while ( c == 4 ){ if ( *ip <= 0 ) return 0 ; --(*ip) ; c = __(1)__ ; color[*ip] = -1 ; } return c ; } /*检查区域i,对c种颜色的可用性*/ int color0k( int i , int c , int[][N] , int color[ ] } { int j ; for ( j = 0 ; j < i ; j++ } if ( __(2)__ ) return 0 ; return 1 ; }
/*为区域i选一种可着的颜色*/ int select( int i ,int c ,int adj[][N] , int color[ ] ) { int k ; for ( k = c ; k <= 4 ; k++ ) if ( colorOK( __(2)__ ) ) return k ; return 0 ; } int coloring( int adj[][N] ) /*寻找各种着色方案*/ { int color[N] , i , c , cnt ; for ( i = 0 ; i < N ; i++ ) color[i] = -1 ; i = c = 0 ; cnt = 0 ; while ( 1 ) { if ( ( c = __(4)__ ) == 0 ){ c = back( &i , color) ; if ( c == 0) return cnt ; } else { __(5)__ ; i++ ; if ( i == N ) { output(color) ; ++cnt ; c = back( &i , color ) ; } e1se c = 0 ; } } } void main() { int adj[N][N] = { {0,1,0,1,1,1,1,1,1,1}, {1,0,1,1,0,1,1,1,1,0}, {0,1,0,1,0,1,1,0,1,1}, {1,1,1,0,1,1,0,0,1,1}, {1,0,0,1,0,1,0,0,0,0}, {1,1,1,1,1,0,1,0,0,1}, {1,1,1,0,0,1,0,0,1,0}, {1,1,0,0,0,0,0,0,1,1}, {1,1,1,1,0,0,1,1,0,1}, {1,0,1,1,0,1,0,1,1,0} } ; printf( "共有%d组解.\n",coloring( adj ) ) ; }
老顽童校对整理 2002年4月 |
Copyright©IT考试网 2001