题目内容 (请给出正确答案)
[主观题]

阅读下列程序说明和C++代码,将应填入(n)处。 【说明】 “背包问题”的基本描述是:有一个背包,能盛放的

阅读下列程序说明和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;

}

提问人:网友shmlove520 发布时间:2022-01-06
参考答案
查看官方参考答案
如搜索结果不匹配,请 联系老师 获取答案
更多“阅读下列程序说明和C++代码,将应填入(n)处。 【说明】 …”相关的问题
第1题
阅读以下说明和C++代码,将应填入____处的语句或语句成分写在答题纸的对应栏内。

某数据文件students.txt的内容为100名学生的学号和成绩,下面的程序将文件中的数据全部读入对象数组,按分数从高到低进行排序后选出排名前30%的学生。【C++代码】

阅读以下说明和C++代码,将应填入____处的语句或语句成分写在答题纸的对应栏内。	某数据文件stu

点击查看答案
第2题
阅读下列说明和c++代码,将应填入(n)处的字句写在答题纸的对应栏内。【说明】某灯具厂商欲生产一个灯

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

【说明】

某灯具厂商欲生产一个灯具遥控器,该遥控器具有7个可编程的插槽,每个插槽都

有开关按钮,对应着一个不同的灯。利用该遥控器能够统一控制房间中该厂商所有品牌

灯具的开关,现采用Command(命令)模式实现该遥控器的软件部分。Command模式

的类图如图5-1所示。

阅读下列说明和c++代码,将应填入(n)处的字句写在答题纸的对应栏内。【说明】某灯具厂商欲生产一个灯

【c++代码】

阅读下列说明和c++代码,将应填入(n)处的字句写在答题纸的对应栏内。【说明】某灯具厂商欲生产一个灯

阅读下列说明和c++代码,将应填入(n)处的字句写在答题纸的对应栏内。【说明】某灯具厂商欲生产一个灯

}

点击查看答案
第3题
●试题五 阅读下列程序说明和C++代码,将应填入(n)处的字句写在答卷的对应栏内。 【说明】 ①定义类

●试题五

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

【说明】

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

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

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

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

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

#include<iostream.h>

#include<stdio.h>

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<i+1;j++)

{

x=i;

y=j;

z=i*j;

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

}

printf("\n");

}

}

main()

{

//**4**

return 0;

}

点击查看答案
第4题
阅读以下说明C++代码,将应填入(n)处的字句写在对应栏内。[说明] 以下程序的功能是实现堆栈的一些

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

[说明]

以下程序的功能是实现堆栈的一些基本操作。堆栈类stack共有三个成员函数:empty判断堆栈是否为空;push进行人栈操作;pop进行出栈操作。

[C++程序]

include "stdafx. h"

include <iostream, h>

eonst int maxsize = 6;

class stack {

float data[ maxsize];

int top;

public:

stuck(void);

~ stack(void);

bool empty(void);

void push(float a);

float pop(void);

};

stack: :stack(void)

{ top =0;

cout < < "stack initialized." < < endl;

}

stack:: ~stack(void) {

cout < <" stack destoryed." < < endl;

bool stack:: empty (void) {

return (1);

void stack: :push(float a)

if(top= =maxsize) {

cout < < "Stack is full!" < < endl;

return;

data[top] =a;

(2);

}

float stack:: pop (void)

{ if((3)){

cout< < "Stack is undcrflow !" < < endl;

return 0;

(4);

return (5);

}

void main()

{ stack s;

coat < < "now push the data:";

for(inti=l;i< =maxsize;i+ +) {

cout< <i< <" ";

s. push(i);

}

coat < < endl;

cout< < "now pop the data:";

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

cout< <s. pop()< <" ";

}

点击查看答案
第5题
●试题六 阅读下列程序说明和C++代码,将应填入(n)处的字句写在答卷的对应栏内。 【说明】 ①为类Ci

●试题六

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

【说明】

①为类Circle增加一个构造函数,该函数有一个参数,并在构造时将该参数值赋给成员radius。将该函数实现为一个非内联函数,并且使用参数列表的方式将类成员赋值。

②为类Circle增加一个成员函数print(),使得可以输出有关圆的信息,比如下列程序

Circle c;

C.SetRadius (5) ;

C.Print();

将输出:The circle has radius of 5!

③完成友元函数void CompareR(Circle *c1,Circle *c2)的定义,在屏幕中输出c1与c2比较radius大小结果,要求使用if-else结构完成。

输出结果如下:

The circle has radus of 5!

The circle has radius of 10!

c1<c2

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

#include<iostream.h>

class Circle{

public:

Circle():radius (5) {}

(1)

void SetRadius(int r) { radius=r; }

int GetRadius() { return radius; }

(2)

friend void CompareR(Circle *c1,Circle *c2);

private:

int radius;

};

void CompareR(Circle *c1,Circle *c2)

{

(3)

cout<<"c1>c2"<<endl;

else

if ((c1->GetRadius())==(c2->GetRadius()))

cout<<"c1=c2"<<endl;

else

if ((c1->GetRadius())<(c2->GetRadius()))

cout<<"c1<c2"<<endl;

}

void main()

{

Circle c1;

c1.SetRadius (5) ;

c1.Print();

Circle c2 (10) ;

c2.Print();

CompareR(&c1,&c2);

}

点击查看答案
第6题
阅读下列程序说明和C++代码,将应填入(n)处。【说明】 ①在类体中添加函数move(double ax,double ay)

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

【说明】

①在类体中添加函数move(double ax,double ay)的定义,使得点的坐标x和y分别移动 ax和ay个单位。

②在类定义外完成重载的两个构造函数CPosition()和CPosition(double dx,double dy),其中前者为不带参数的构造函数,使CPosition对象的默认值为x=0,y=0,后者为带参数的构造函数,把数据成员x和y分别初始化为参数dx和dy的值。

③完成函数double distance(double bx,double by)的定义,该函数返回*this和点(bx, by)的距离。

注意:除在指定的位置添加语句外,请不要改动程序中的其他语句。

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

include<iostream.h>

include<math.h>

class CPosition

{

public:

CPosition();

CPosition(double dx,double dy);

double getx();

double gety();

(1)

double distance(double bx,double by);

private:

double x;

double y;

};

(2)

{

x=0;y=0;

}

CPosition::CPosition(doub,e dx,doub,e dy)

{

x=dx; y=dy;

}

double CPosition::getx()

{

return x;

}

double CPosition::gety()

{

return y;

}

double CPosition::distance(double bx,double by)

{

(3)

}

vold main()

{

double a,b;

cout<<"|nput x,y position of a point:";

cin >> a >> b;

CPosition psA(a,b);

cout<<"Input x,y position of another point:";

cin >>a >> b;

cout <<"The distance is" <<psA.distance(a,b) <<end1;

}

点击查看答案
第7题
阅读以下说明和C++程序代码,将应填入(n)处的字句写在答题纸的对应栏内。【说明】 在下面的C++代码中

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

【说明】

在下面的C++代码中,类SalesTicket能够完成打印票据正文的功能,类HeadDec- orator与FootDecorator分别能够完成打印票据的台头和脚注的功能。

已知该程序运行后的输出结果如下所示,请填补该程序代码中的空缺。

这是票据的台头!

这是票据正文!

这是票据的脚注!

---------------

这是票据的台头!

这是票据的脚注!

【C++程序代码】

#include

using namespace std;

class SalesTicket {

public:

(1) printTicket() { cout << " 是票据正文!" << endl;}

class Decorator : public SalesTicket{

SalesTicket *ticket;

public:

Decorator(SalesTicket *t){ ticket = t; }

void printTicket(){

if(ticket != NULL)

ticket->printTicket();

}

};

class HeadDecorator : public Decorator{

public:

HeadDecorator(SalesTicket *t): (2) { }

void printTicket() {

sour << "这是票据的台头!" << endl;

Decorator::printTicket();

}

};

class FootDecorator :public Decorator{

public:

FootDecorator(SalesTicket *t): (3)

void printTicket() {

Decorator::printTicket();

cout << "这是票据的脚注!" << endl;

}

};

void main(void) {

SalesTicket t;

FootDecorator f(&t);

HeadDecorator h((4) );

h.printTicket();

cout << "-------------------------"<< endl;

FootDecorator a(NULL);

HeadDecorator b((5) );

b.printTicket();

}

点击查看答案
第8题
阅读下列程序说明和C++代码,将应填入(n)处的字句写在对应栏内。 [说明] ①定义私有数据成员code、en

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

[说明]

①定义私有数据成员code、english分别用于表示考生的编号、英语成绩,它们都是int型的数据。

②完成成员函数void Student::inputinformation()的定义,该函数用于用户输入一个考生对象的信息,输入格式如下:

输入编号:

英语成绩:

计算机成绩:

③利用已实现的类Student的成员函数,完成函数void firstname(Student *A[],int uum)的定义,该函数根据考生信息A[],输出num个考生中总分最高者的编号及其相应的总分,在此不考虑总分相同的情况。

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

include < iostream. h >

class Student

(1)

int computer;

int total;

public

void getinformation();

void computesum();

int getcode();

int gettotalscore();

~Student();

};

void Student: :getinformation()

{

(2)

cout <<"英语成绩:";

cin> >english;

cout <<"计算机成绩:";

cin > > computer;

void Student:: computesum ()

total = english + computer;

cout <<"编号" << code <<"总分:" <<total << endl;

int Student::getcode()

return code;

}

int Student:: gettotalscore ()

{

return total;

}

void firstname(Student * A[] ,int num)

{

(3)

tempsum = (* A[0] ). gettotalscore();

for(int i=1; i <num; i++)

{

if (((* A[i] ). gettotalscore() ) > tempsum)

{

tempcode = (* A[i] ). getcode();

tempsum = (* A[i] ). gettotalscore();

}

}

cout <<"总分最高者--" << tempcode <<":" << tempsum <<endl;

}

void main()

{

Student * A[3];

int i,n =3

for(i=0;i<n;i ++)

A[i] = new Student;

A[i] -> getinformation()

for(i=0;i<n;i ++)

{

A[i] -> computesum()

firstname (A,3 );

}

点击查看答案
第9题
●试题一 阅读下列函数说明和C代码,把应填入其中n处的字句写在答卷的对应栏内。 【函数1.1说明】

●试题一

阅读下列函数说明和C代码,把应填入其中n处的字句写在答卷的对应栏内。

【函数1.1说明】

函数strcpy(char*to,char*from)将字符串from复制到字符串to。

【函数1.1】

void strcpy(char*to,char*from)

{while((1 ) );}

【函数1.2说明】

函数merge(int a[ ],int n,int b[ ],int m,int *c)是将两个从小到大有序数组a和b复制合并出一个有序整数序列c,其中形参n和m分别是数组a和b的元素个数。

【函数1.2】

void merge(int a[ ],int n,int b[ ],int m,int *c)

{ int i,j;

for(i=j=0;i<n && j<m;)

*c++=a[i]<b[j]? a[i++]:b[j++];

while((2) )*c++=a[i++];

while((3) )*c++=b[j++];

}

【函数1.3说明】

递归函数sum(int a[ ],int n)的返回值是数组a[ ]的前n个元素之和。

【函数1.3】

int sum(int a[ ],int n)

{ if(n>0)return (4) ;

else (5) ;

}

点击查看答案
第10题
阅读以下说明和C++代码,将应填入_____处的字句写在答题纸的对应栏内。

【说明】现需要统计某企业员工的月平均工资,即该企业本月发给员工的工资总和除以员工数。假设企业本月发给员工的工资总和为sumSalary,该企业的员工总数为employeeNumber,下面的程序代码计算该企业员工本月的平均工资,其中需要处理employNumber为0的情况。【C++代码】

阅读以下说明和C++代码,将应填入_____处的字句写在答题纸的对应栏内。	【说明】现需要统计某企业

【问题1】程序运行时,若输入的员工工资总和为6000,员工数为5,则屏幕输出为:请输入当月工资总和与员工数:阅读以下说明和C++代码,将应填入_____处的字句写在答题纸的对应栏内。	【说明】现需要统计某企业

【问题2】若程序运行时,第一次输入的员工工资总和为6000,员工数为0,第二次输入的员工工资总和为0,员工数为0,则屏幕输出为:请输入当月工资总和与员工数:阅读以下说明和C++代码,将应填入_____处的字句写在答题纸的对应栏内。	【说明】现需要统计某企业

点击查看答案
第11题
阅读以下说明和C++代码,将填入(n)处的字句在应栏内。[说明] 现需要统计某企业员工的月平均:[资,

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

[说明]

现需要统计某企业员工的月平均:[资,即该企业本月发给员工的工资总和除以员工数。假设企业本月发给员工的工资总和为sumSalary,该企业的员工总数为employeeNumber,下面的程序代码计算该企业员工本月的平均工资,其中需要处理employNumber为0的情况。

[C++代码]

include

using namespace std;

class Department {

protected:

float average(float x, int y){

if(Y==O) throw (1)______ ;

return x/y;

}

public:

void caculate(void){

float sumSalary;

int employeeNumber;

try{

cout <<"请输入当月工资总和与员工数:"<<endl;

cin >> sumSalary >> employeeNumber:

float k=average(sumSalary,employeeNumber);

cout <<"平均工资:"<<k<<endl;

}

(2)______ (int e){

if(e==0){

cout <<"请重新输入当月工资总和与员工数:"<<endl;

cin>>sumSalary>>employeeNumber;

float k=average(sumSalary,employeeNumber);

cout<<"平均工资:"<<k<<endl;

}

}

}

};

VOid msin(){

try {

(3)______ ;

d.caculate();

}

(4)______ (int e){

if(e==0)

cout<<"程序未正确计算平均工资!"<<endl;

}

}

[问题1]

程序运行时,若输入的员工工资总和为6000,员工数为5,则屏幕输出为:

请输入当月工资总和与员工数:

6000 5

(5)______

[问题2]

若程序运行时,第一次输入的员工工资总和为6000,员工数为0,第二次输入的员工工资总和为0,员工数为0,则屏幕输出为:

请输入当月工资总和与员工数:

6000 0

(6)______

0 0

(7)______

点击查看答案
账号:
你好,尊敬的用户
复制账号
发送账号至手机
密码将被重置
获取验证码
发送
温馨提示
该问题答案仅针对搜题卡用户开放,请点击购买搜题卡。
马上购买搜题卡
我已购买搜题卡, 登录账号 继续查看答案
重置密码
确认修改
欢迎分享答案

为鼓励登录用户提交答案,简答题每个月将会抽取一批参与作答的用户给予奖励,具体奖励活动请关注官方微信公众号:简答题

简答题官方微信公众号

警告:系统检测到您的账号存在安全风险

为了保护您的账号安全,请在“简答题”公众号进行验证,点击“官网服务”-“账号验证”后输入验证码“”完成验证,验证成功后方可继续查看答案!

微信搜一搜
简答题
点击打开微信
警告:系统检测到您的账号存在安全风险
抱歉,您的账号因涉嫌违反简答题购买须知被冻结。您可在“简答题”微信公众号中的“官网服务”-“账号解封申请”申请解封,或联系客服
微信搜一搜
简答题
点击打开微信