一起答
主观

阅读下列程序说明和C++代码,将应填入(n)处。

【说明】

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

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

 【程序4.1】

 #include<stdio.h>

 #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("NO!\n");

 }

 【程序4.2】

 #include<stdio.h>

 #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=|;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;

 }

参考答案
查看试卷详情
相关试题
  1. 阅读以下说明和Visual Basic代码,将应填入(n)处的字名写在对应栏内。

     [说明]

     以下代码实现了当用户推出界面时,判断TextEdit中的文字是否发生改变,弹出对话框判断,让用户选择选择是否保存文件或取消退出界面操作。阅读下面代码,补充完整。

     [代码7-1]

     Begin VB.Form. Forml

     //...窗体描述(略)

      Begin VB.TextBox TextEdit

       Height    = 1830

       Left     = 180

       TabIndex   = 0

       Text     = "TextEdit"

       Top      = 360

       Width     = 3885

     End

    //...窗体描述(略)

     End

     [代码 7-2]

     Dim txtchange As Boolean

     Dim myval As String

     Private Sub Form. Load ( )

      TextEdit.Text = "CIU, 中国软考联盟!

      txtchange = False

     End Sub

     [代码 7-3]

     Private Sub TextEdit_Change ( )

      Static notchange As Boolean

      (1) 

      (2) 

     End Sub

     Private Sub Form_Unload ( Cancel As Integer )

      Dim myval As String

      If (3) Then

       myval = MsgBox ( "保存文件的更改吗?", vbYesNoCancel, "提示信息" )

       If (4) Then

         MsgBox "保存成功"

         End

       End If

       If (5) Then End

       If (6) Then Cancel = 1

      End If

     End Sub

  2. 阅读以下说明和C++代码,将应填入(n)处的字句写在对应栏内。

     [说明]

     下面代码实现class C对class A和B的protected成员和public成员的调用。仔细阅读[代码5-1]、[代码5-2],在(n)处写出正确的运行结果。

     [代码5-1]

     #include <iostream.h>

      class A {

        private:

         int a1;

      protected:

             int a2;

      public:

        A ( int v1,int v2,int v3 ): a1 ( v1 ) ,a2 ( v2 ) ,a3 ( v3 )

         {}

        int a3

      };

      class B : pubiic A{

      private:

         int b1;

      protected:

         int b2;

      public:

         B ( int v1,int v2,int v3,int v4,int v5,int v6 )

            : A(v1,v2,v3),b1 (v4),b2(v5),b3 (v6) {}

         int b3;

      };

      class C : public B{

      private:

         int c1;

      protected:

         int c2;

      public:

         int c3;

         C (int v1,int v2,int v3,int v4,int v5,int v6,int v7,int v8,int v9 )

                 : B ( v1,v2,v3,v4,v5,v6 ) ,c1 ( v7 ),c2 ( v8 ) ,c3 v9

         void disp ( )

         {

         cout << "a2 in class C =" << a2 << endl;

         cout << "a3 in class C =" << a3 << eudl;

         cout << "b2 in class C =" << b2 << endl;

         tout << "b3 in class C =" << b3 << endl;

         }

      };

     [代码5-2]

     voidmain()

     {

     Cdemo(10,20,30,40,50,60,70,80,90);

     cout<<"对象demo.a3="<<demo.a3<  cout<<"对象demo.b3="<<demo.b3<  cout<<"对象demo.c3="<<demo.c3<  demo.disp( );

     }

     [运行结果]

     对象demo.a3=(1) 

     对象demo.b3=(2) 

     对象demo.c3=(3) 

     a2 in class C=(4) 

     a3 in class C=(5) 

     b2 in class C=(6) 

     b2 in class C=(7)

  3. 阅读下列程序说明和C++代码,将应填入(n)处。

    【说明】

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

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

     【程序4.1】

     #include<stdio.h>

     #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("NO!\n");

     }

     【程序4.2】

     #include<stdio.h>

     #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=|;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;

     }

  4. 阅读以下说明和JAVA 2代码,将应填入(n)处的字句写在对应栏内。

     [说明]

    以下程序实现了在applet里移动图形文件,仔细阅读代码和相关注释,将程序补充完整。

    [代码6-1]

     import j ava. awt. *;

     import j ava.awt.event.*;

     import java.applet. Applet;

     public class AppCIU extends Applet implements MouseMotionListener, MouseListener

     {

       Image IMG nClick=over(this) title=放大;            // 声明 Image 类类型的变量 IMG nClick=over(this) title=放大

       int x=70,y=60,posX=70,posY=60,dx,dy;

       public void init ( )

       {

        IMG nClick=over(this) title=放大=getImage ( getCodeBase ( ) ,"mouse.gif" ); //载入影像

        addMouseListener ( this );

        addMouseMotionListener ( this );

     }

       public void mousePressed ( MouseEvent e )

       {

        dx=e.getX()-posX; //取得按下之点与基准点X方向的距离

        dy=e.getY()-posY; //取得按下之点与基准点Y方向的距离

       }

       public void mouseDragged ( MouseEvent e )

       {

         (1) 

         (2) 

        if ( dx>0 && dx<120 && dy>0 && dy<60 ) //如果指针落在图形上方

        {

         Graphics g=getGraphics ( );

          (3) 

        }

       }

       public void paint ( Graphics g )

       {

        (4) 

      (5) 

      (6) 

       }

       public void mouseMoved ( MouseEvent e ) {};

       public void mouseReleased ( MouseEvent e ) {};

       public void mouseEntered ( MouseEvent e ) {};

       public void mouseExited ( MouseEvent e ) {};

       public void mouseClicked ( MouseEvent e ) {};

     }

  5. 阅读下列程序说明和C代码,将应填入(n)处。

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

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

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

     试题程序:

     #include<stdio.h>

     #include<conio.h>

     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 strtng is:\%d\n",m);

     }

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

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

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

  9. 阅读下列程序和控制流图,将应填入(n)的字句。

     【程序】

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

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

     int k=0;

     for(int j=1;j<n;j++)

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

     k=j;

     return k;

     }

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

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