一起答

2011年软件设计师考试考前密卷(三)-下午试题

如果您发现本试卷没有包含本套题的全部小题,请尝试在页面顶部本站内搜索框搜索相关题目,一般都能找到。
  1. ●试题六

    【说明】

    下面是一个Applet程序,其功能是建立2个文本区域,一个为编辑区,一个为只读区;建立2个按钮,一个实现将编辑区中被鼠标选定的文本内容拷贝到只读区中,一个实现将只读区的全部文本内容清空。

    程序运行结果如图3所示。

     图3

    import javA.awt.*;

    import javA.applet.*;

    /*

    */

    public class ex3_6 extends Applet{

    private Button okBtn, clearBtn;

    private String strMessage;

    private TextArea tArea1, tArea2;

    public void init(){

    strMessage = "Hello! Welcome to the test!\n" +

    "Wish you good luck!";

    tArea1 = new TextArea( 10, 25 );

     (1) ;

    tArea2 = new TextArea( 10, 25 );

     (2) ;

    okBtn = new Button( "Copy" );

    clearBtn = (3) ;

    add( tArea1 );

    add( tArea2 );

    add( okBtn );

    add( clearBtn );

    }

    public boolean action( Event e, Object o ){

    if( e.target == okBtn )

    tArea2.setText( (4) );

    else if( e.target == clearBtn )

     (5) ;

    return true;

    }

    }

    ex3_6.html

    ex3_6

       code="ex3_6.class" width=800 height=400 >

     

  2. ●试题三

    请补充函数fun(),该函数的功能是:只保留字符串中的大写字母,删除其他字符,结果仍保存在原来的字符串中,由全局变量m对删除后字符串的长度进行保存。

    注意:部分源程序给出如下。

    请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。

    试题程序:

    #include

    #include

    int m;

    void fun(char *s)

    {

    int i=0,j=0;

    char *p=s;

    while(*(p+i))

    {

    if(*(p+i)>=′A′&&*(p+i)<=′Z′)

    {

     (1) ;

    }

     (2) ;

    }

    s[j]=′\0′;

     (3) ;

    }

    main()

    {

    char str[80];

    clrscr();

    printf("\nEnter a string:");

    gets(str);

    printf("\n\nThe string is:\%s\n",str);

    fun(str);

    printf("\n\nThe string of changing

    is:\%s\n",str);

    printf("\n\nThe length of changed string

    is:\%d\n",m);

    }

  3. ●试题五

    阅读下列程序说明和C++代码,将应填入(n)处的字句写在答卷的对应栏内。

    【说明】

    ①定义类Table的私有数据成员x和y,分别用于表示九九表中的两个乘数(x*y),它们都是int型的数据。

    ②完成类Table的成员函数print()的定义,该函数以"x*y=z"的格式打印出九九表中的一个乘法算式,请使用格式化输出函数printf实现。

    ③完成类Table9的成员函数print()的定义,该函数调用基类Table的print()函数,将九九表输出到屏幕。

    ④补充主函数,在屏幕上输出九九表,以便测试所定义的类的正确性。

    源程序文件test8_3.cpp清单如下:

    #include

    #include

    class Table

    {

     (1) 

    int z;

    public:

    void print(int x,int y,int z);

    };

    void Table::print (int x,int y,int z)

    {

     (2) 

    }

    class Table9:public Table

    {

    public:

    void print();

    };

    void Table9::print()    

    {

     (3) 

    int x,y,z;

    for (i=1;i<10;i++)

    {

    for(j=1;j

    {

    x=i;

    y=j;

    z=i*j;

    Table::print(y,x,z);

    }

    printf("\n");

    }

    }

    main()

    {

    //**4**  

    return 0;

    }

  4. ●试题四

    阅读下列程序说明和C代码,将应填入(n)处的字句写在答题纸的对应栏内。

    【程序4.1说明】

    "背包问题"的基本描述是:有一个背包,能盛放的物品总重量为S,设有N件物品,其重量分别为w1,w2,...,wn,希望从N件物品中选择若干件物品,所选物品的重量之和恰能放入该背包,即所选物品的重量之和等于S。

    如下程序均能求得"背包问题"的一组解,其中程序4.1是"背包问题"的递归解法,而程序4.2是"背包问题"的非递归解法。

    【程序4.1】

    #include

    #define N 7

    #define S 15

    int w[N+1]={0,1,4,3,4,5,2,7};

    int knap(int s,int n)

    { if(s==0)return 1;

    if (s<0||(s>0& &n<1))return 0;

    if( (1) )){

    printf(″%4d″,w[n]);return 1;

    }return (2) ;

    }

    main(){

    if( knap(S,N))printf(″OK!\n″);

    else printf(″N0!\n″);

    }

    【程序4.2】

    #include

    #define N 7

    #define S 15

    typedef struct {

    int s;

    int n:

    int job;

    } KNAPTP;

    int w[N+1]={0,1,4,3,4,5,2,7};

    int knap (int s,int n);

    main( ) {

    if (knap (S,N)) printf (″OK!\n″);

    else printf (″NO!\n″);}

    int knap (int s,int n)

    { KNAPTP stack[100],x;

    int top,k,rep;

    x.s=s;x.n=n;

    x.job=0;

    top=l;stack[top]=x;

    k=0;

    while( (3) ) {

    x=stack [ top ];

    rep=1;

    while ( !k && rep ) {

    if (x.s==0)k=1;/*已求得一组解*/

    else if (x.s<0 || x.n<=0)rep=0;

    else{x.s= (4) ;x.job=1;

     (5) =x;

    }

    }

    if(!k){

    rep=1;

    while(top>=1&&rep){

    x=stack[top--];

    if(x.job==1){

    x.s+=w[x.n+1];

    x.job=2;

    stack[++top]=x;

     (6) ;

    }

    }

    }

    }

    if(k){/*输出一组解*/

    while(top>=1){

    x=stack[top--];

    if(x.job==1)

    printf(″%d\t″,w[x.n+1]);

    }

    }

    return k;

    }

  5. ●试题二

    阅读下列程序和控制流图,将应填入(n)的字句写在答题纸的对应栏内。

    【程序】

    下面是一段求最大值的程序,其中datalist是数据表,n是datalist的长度。

    int GetMax(int n,int datalist[]){

    int k=0;

    for(int j=1;j

    if(datalist[j]>datalist[k])

     k=j;

    return k;

    }

    【控制流图】

    【问题1】

    该程序的控制流图中A~E分别是什么?

    【问题2】

    计算控制流图的McCabe环路复杂性。

    【问题3】

    用基本路径覆盖法给出测试路径。

    【问题4】

    为各测试路径设计测试用例。

  6. ●试题一

    阅读以下说明和流程图(如图1所示),回答问题1至问题4,将答案写在答卷的对应栏内。

    【说明】

    本流程图是将中缀表示的算术表达式转换成后缀表示。如中缀表达式

    (A-(B*C+D)*E)/(F+G))

    的后缀表示为

    ABC*D+E*-FG+/

    为了方便,假定变量名为单个英文字母,运算符只有+、-、*、/(均为双目运算符,左结合),并假定所提供的算术表达是非空且语法是正确的。另外,中缀表示形式中无空格符,但整个算术表达式以空格符结束。流程图中使用的符号的意义如下:

    数组IN[]存储中缀表达式;

    数组POLISH[]存储其后缀表达式;

    数组S[]是一个后进先出栈;

    函数PRIOR(CHAR)返回符号CHAR的优先级,各符号的优先级见表2:

    【问题1】

    填充流程图中①的判断条件。

    【问题2】

    写出子程序A的功能,并顺序写出实现该功能的操作

    【问题3】

    写出子程序B的功能,并顺序写出实现该功能的操作。

    【问题4】

    中缀表达式

    (A+B-C*D)*(E-F)/G

    经该流程图处理后的输出是什么?

    【流程图】

       图1