2001年度高级程序员级下午试题

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]

#includestdio.h

#includestdlib.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说明]

著名的四色定理指出任何平面区域图均可用四种颜色着色,使相邻区域着不同的颜色。本程序对给定的区域图找出所有可能的不超过四种颜色的着色方案。程序中用 14 表示四种颜色。要着色的 N 个区域用 0N1编号,区域相邻关系用 adj[][] 矩阵表示,矩阵的 i j 列的元素为 1 ,表示区域 i 与区域 j 相邻;矩阵的 i j 列的元素为 0 ,表示区域 i 与区域 j 不相邻。数组 color[] 用来存储着色结果, color[i] 的值为区域 i 所着颜色。

【程序5

#includestdio.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 ) ) ;

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值