C++上机题目复习及答案2.docx

上传人:b****3 文档编号:4082701 上传时间:2022-11-27 格式:DOCX 页数:32 大小:39KB
下载 相关 举报
C++上机题目复习及答案2.docx_第1页
第1页 / 共32页
C++上机题目复习及答案2.docx_第2页
第2页 / 共32页
C++上机题目复习及答案2.docx_第3页
第3页 / 共32页
C++上机题目复习及答案2.docx_第4页
第4页 / 共32页
C++上机题目复习及答案2.docx_第5页
第5页 / 共32页
点击查看更多>>
下载资源
资源描述

C++上机题目复习及答案2.docx

《C++上机题目复习及答案2.docx》由会员分享,可在线阅读,更多相关《C++上机题目复习及答案2.docx(32页珍藏版)》请在冰豆网上搜索。

C++上机题目复习及答案2.docx

C++上机题目复习及答案2

第十周上机题目

题目:

1.建立一个矩阵类Array,存储一个n×n矩阵并能完成矩阵转置运算。

要求如下:

(1)私有成员数据

int*x:

指向存储一个n×n矩阵值的内存区域(二维数组作为一维数组存储)

intn:

存储矩阵行数

(2)公有成员函数

构造函数:

用参数指定的值或缺省值3初始化n,并用n的值为矩阵动态申请内存空间;

析构函数:

释放对象存储矩阵时占用的内存空间;

viodinput(int*a):

将一个矩阵赋值给对象中的数组。

voidprint():

按行输出矩阵的值。

voidchange():

转置矩阵。

编写一个程序测试该类。

定义对象A,将一个矩阵存入A中,并输出矩阵的值,转置对象A中的矩阵并输出,使用以下测试数据:

A=

A转置后的矩阵=

#include

#defineN3

classArray{

int*x;//指向存储一个n×n矩阵值的内存区域(二维数组作为一维数组存储)

intn;//存储矩阵行数

public:

Array(ints=3){

n=s;

x=newint[N*N];

}

voidinput(int*a);//将一个矩阵赋值给对象中的数组。

voidprint();//按行输出矩阵的值。

voidchange();//转置矩阵。

~Array(){

if(x)delete[]x;

}

};

voidmain(){

inta[N][3];

inti,j;

cout<<"请输入"<

for(i=0;i

for(j=0;j

cin>>a[i][j];

}

Arrayd(N);

d.input(a[0]);

cout<<"原始数组为:

\n";

d.print();

d.change();

cout<<"转置后的数组为:

\n";

d.print();

}

voidArray:

:

input(int*a){

for(inti=0;i

x[i]=*a++;

}

voidArray:

:

print(){

for(inti=0;i

((i+1)%3)?

cout<

cout<

}

voidArray:

:

change(){

inttemp;

for(inti=0;i

for(intj=0;j

temp=x[i*N+j];

x[i*N+j]=x[j*N+i];

x[j*N+i]=temp;

}

}

2.编程题

模拟人脑神经网络的神经元结构模型如下图所示:

其中,xi表示输入信号,wi表示输入信号的加权系数,y表示神经元的输出,它们的之间的关系为:

这里,∑表示各项的和,exp(z)为求z的自然指数值ex的函数,包含在头文件math.h中,其函数原型为doubleexp(doublez)。

试定义一个NN类实现上述模型。

具体要求如下:

1)私有成员

●floatx[5],dt:

数组x和数组w分别存放输入信号xi及其加权系数wi;dt存放非零参数σ。

●doubley:

神经元的突出。

2)公有成员:

●NN(floatt[],floatd)用数组t初始化加权系统wi,用d初始化dt。

●voidfun(floatt[]):

用数组t初始化xi,并根据上述公式计算y的值。

●voidprint():

输出输入信号和输出信号的值

在主函数中,用输入信号{1.2,3.5,2.3,3.2,2.8}以及加权系数{o.5,0.8,1.2,1.8,1.1}对该类进行测试。

#include

#include

classNN{

floatx[5],w[5],dt;

doubley;

public:

NN(floatt[],floatd);//用数组t初始化加权系统wi,用d初始化dt。

voidfun(floatt[]);//用数组t初始化xi,并根据上述公式计算y的值。

voidprint();//输出输入信号和输出信号的值

};

voidmain(){

floata[5]={1.2,3.5,2.3,3.2,2.8};

floatb[5]={0.5,0.8,1.2,1.8,1.1};

NNt(b,0.2);

t.fun(a);

t.print();

}

NN:

:

NN(floatt[],floatd){

for(inti=0;i<5;i++)

w[i]=t[i];

dt=d;

}

voidNN:

:

fun(floatt[]){

for(inti=0;i<5;i++)

x[i]=t[i];

doublen=0.0;

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

n+=(x[i]-w[i])*(x[i]-w[i]);

y=exp(-n/(2*dt*dt));

}

voidNN:

:

print(){

cout<<"x[i]=";

for(inti=0;i<5;i++)

cout<

cout<

cout<<"y="<

}

附加题:

3.面向对象编程:

几何图形类

【要求】按以下描述和要求建立两个类:

基类Rectangle和派生类Cube:

Rectangle

私有成员:

doublex1,y1;//左下角的坐标

doublex2,y2;//右上角的坐标

公有成员

Rectangle(doublea=0,doubleb=0,doublec=0,doubled=0);

//带缺省值的构造函数

doublegetwidth();//计算并返回矩形的宽

doublegetlength();//计算并返回矩形的长

virtualvoiddisplay();//输出矩形的各坐标及长宽

注:

正立方体Cube的底面矩形从基类继承

Cube:

私有成员:

stringname;//立方体名称(字符串对象)

doubleh;//立方体高度

公有成员:

Cube(string="",double=0,……);//带缺省值的构造函数

voidset(string,double);//修改立方体标识符和高度值

voiddisplay();//输出立方体全部信息,并计算输出体积

Cubeadd(Cube&S);//将参数对象S的高度加到this对象上。

以上成员函数的参数名如有未给出的则自已命名。

头文件包含语句为:

#include

#include

主函数要求:

(1)定义Rectangle类对象A{坐标:

10,10,30,40};

定义Cube类对象B{坐标:

20,10,30,40;名称和高度:

Box,60}、C(C数据由B拷贝生成)和D(D数据暂无)。

(2)调用函数set修改对象C的名称和高度值。

数据为{Trunk,95}。

(3)调用函数display及相关函数输出对象A、B和C的全部数据,计算输出B和C的体积。

每个对象的信息占一行。

(4)调用add函数,计算D=B+C。

输出D的全部数据,计算并输出D的体积。

#include

#include

classRectangle{

doublex1,y1;//左下角的坐标

doublex2,y2;//右上角的坐标

public:

Rectangle(doublea=0,doubleb=0,doublec=0,doubled=0){

x1=a,y1=b;x2=c,y2=d;

}

doublegetwidth(){return(x2-x1);}//计算并返回矩形的宽

doublegetlength(){return(y2-y1);}//计算并返回矩形的长

voiddisplay();//输出矩形的各坐标及长宽

};

classCube:

publicRectangle{

charname[10];//立方体名称(字符串对象)

doubleh;//立方体高度

public:

Cube(doublea=0,doubleb=0,doublec=0,doubled=0,

char*s=0,doubleh1=0):

Rectangle(a,b,c,d){//带缺省值的构造函数

if(s)strcpy(name,s);

h=h1;

}

voidset(char*,double);//修改立方体标识符和高度值

voiddisplay();//输出立方体全部信息,并计算输出体积

Cubeadd(Cube&S);//将参数对象S的高度加到this对象上。

};

voidmain(){

RectangleA(10,10,30,40);

CubeB(20,10,30,40,"Box",60),C(B),D;

B.set("Trunk",95);

A.display();

B.display();

C.display();

D=B.add(C);

D.display();

}

voidRectangle:

:

display(){

cout<<"矩形:

";

cout<<"左下角的坐标:

"<

"<

cout<<"长:

"<<(x2-x1)<<",宽:

"<<(y2-y1)<

}

voidCube:

:

set(char*s,doubleh1){

h=h1;

strcpy(name,s);

}

voidCube:

:

display(){

doublemj=getwidth()*getlength();

cout<<"长方体:

";

cout<<"底面积为:

"<

cout<<"体积为:

"<

}

CubeCube:

:

add(Cube&S){

h+=S.h;

return*this;

}

第十一周上机题目

题目:

1.建立一个类NUM,求指定范围内的所有素数(质数)。

具体要求如下:

1)私有数据成员。

●intdata[25];依次存放指定范围内的所有素数。

●intspanl,span2;存放要求计算的素数的范围。

●intnum;存放span1与span2之间的素数个数。

2)公有成员函数。

●构造函数NUM(inta,intb);初始化所要求的素数的范围span1、span2及num(值为0)。

●voidprocess():

求出指定范围内的所有素数,把它们依次存放在数组data中,并将求出的素数的个数赋给num。

●voidprint():

输出求出的所有素数。

3)在主程序中对该类进行测试。

使用测试数据span1=100,span2=200。

即求100~200之间的所有素数。

#include

#include

classNUM{

intdata[25];//依次存放指定范围内的所有素数。

intspan1,span2;//存放要求计算的素数的范围。

intnum;//存放span1与span2之间的素数个数。

public:

NUM(inta,intb);

voidprocess();

voidprint();

};

voidmain(){

NUMa(100,200);

a.process();

a.print();

}

NUM:

:

NUM(inta,intb){

span1=a;

span2=b;

num=0;

}

voidNUM:

:

process(){

inti,n,f=0;

for(i=span1;i<=span2;i++){

for(n=2,f=0;n<=sqrt(i);n++)

if(i%n==0){f=1;break;}

if(f==1)continue;

data[num++]=i;

}

}

voidNUM:

:

print(){

for(inti=0;i

cout<

if(++i%6==0)cout<

}

cout<

}

2.编程题

已知由一个数组派生出另一个数组的派生规则如下:

假定原始数组为a[10],新数组为b[10],则b[i]的值为数组a中大于a[i]的元素的个数。

例如,对于说明“inta[]={1,2,3,4,5};intb[5];”,其中a[1]=2,数组a中有3个元素比a[1]大,则b[1]=3。

试建立一个实现此功能的类ARRAY。

具体要求如下:

1)私有数据成员。

●inta[10],b[10];a存放原始数组,b存放派生数组。

2)公有成员函数。

●构造函数ARRAY(intdata[10]);初始化成员数组a。

●voidprocess();由数组a根据上述派生类规则,用循环语句计算数组b的各元素。

●voidprint();屏幕显示数组a和b。

#include

classARRAY{

inta[10],b[10];

public:

ARRAY(intdata[10]);//初始化成员数组a。

voidprocess();//由数组a根据上述派生类规则,用循环语句计算数组b的各元素。

voidprint();//屏幕显示数组a和b。

};

voidmain(){

inta[]={7,4,9,23,56,44,18,33,21,17};

ARRAYarray(a);

array.process();

array.print();

}

ARRAY:

:

ARRAY(intdata[10]){

for(inti=0;i<10;i++){

a[i]=data[i];

b[i]=0;

}

}

voidARRAY:

:

process(){

for(inti=0;i<10;i++){

for(intk=0;k<10;k++)

if(a[k]>a[i])b[i]++;

}

}

voidARRAY:

:

print(){

cout<<"a[10]=";

for(inti=0;i<10;i++)

cout<

cout<

cout<<"b[10]=";

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

cout<

cout<

}

附加题:

3.面向对象编程:

物品保管箱管理应用程序

【要求】按以下描述和要求建立一个类Boxes,执行主函数对其测试。

私有成员:

int*box;//指向保管箱数组,下标为箱号,元素值为0表示空箱;大于0表示该箱中存入的物品数量。

char*flag;//指向客户标识符数组(下标为箱号,与box数组配对使用)

staticintsum;//累计存入物品数量

intxh;//保管箱的个数

公有成员:

Boxes(intnum=10);//构造函数,动态分配box和flag数组空间,长度为num。

~Boxes();//析构函数,释放分配的内存

voidput(intn,charm);//选择一个空箱存入n件物品,填写客户标识符,并将物品数量累加到sum;若找不到空箱则输出提示信息。

voidget(charm);//根据客户标识符(元素下标)查找存储的物品,找到后取出并清空保管箱(置0)。

若找不到指定则输出提示信息。

voiddisplay();//输出保管箱类所有数据,统计占用箱个数和空闲箱个数。

最后输出存入物品数量

头文件包含语句为:

#include

在类定义外面对静态成员做定义性说明并赋初值为零:

intBoxes:

:

sum=0;

主函数要求:

1)定义Boxes类对象A,B

(2)。

数组元素初始值为零。

2)调用函数put为对象A和B做存储操作:

A.put(5,‘R’);B.put(9,’K’);

A.put(8,‘P’);

B.put(15,‘H’);

B.put(40,‘F’);

调用函数display输出对象A和B的全部数据。

3)调用函数put和get为对象A和B做存储和取出操作:

B.get(‘H’);

B.put(40,‘F’);

A.get(‘S’);

A.get(‘R’);

A.put(12,‘M’);

4)调用函数display输出对象A和B的全部数据。

#include

classBoxes{

int*box;//指向保管箱数组,下标为箱号,元素值为0表示空箱;大于0表示该箱中存入的物品数量。

char*flag;//指向客户标识符数组(下标为箱号,与box数组配对使用)

staticintsum;//累计存入物品数量

intxh;

public:

Boxes(intnum=10);//构造函数,动态分配box和flag数组空间,长度为num。

~Boxes();//析构函数,释放分配的内存

voidput(intn,charm);//选择一个空箱存入n件物品,填写客户标识符,并将物品数量累加到sum;若找不到空箱则输出提示信息。

voidget(charm);//根据客户标识符(元素下标)查找存储的物品,找到后取出并清空保管箱(置0)。

若找不到指定则输出提示信息。

voiddisplay();//输出保管箱类所有数据,统计占用箱个数和空闲箱个数。

最后输出存入物品数量

};

intBoxes:

:

sum=0;

voidmain(){

BoxesA,B

(2);//数组元素初始值为零。

A.put(5,'R');

B.put(9,'K');

A.put(8,'P');

B.put(15,'H');

B.put(40,'F');

cout<<"A库:

\n";A.display();

cout<<"B库:

\n";B.display();

B.get('H');

B.put(40,'F');

A.get('S');

A.get('R');

A.put(12,'M');

cout<<"A库:

\n";A.display();

cout<<"B库:

\n";B.display();

}

Boxes:

:

Boxes(intnum){

box=newint[num];

flag=newchar[num];

xh=num;

for(inti=0;i

box[i]=flag[i]=0;

}

Boxes:

:

~Boxes(){

delete[]box;

delete[]flag;

}

voidBoxes:

:

put(intn,charm){

inti=0;

while(box[i]!

=0&&i++

if(i

box[i]=n;flag[i]=m;sum+=n;

}

elsecout<<"无空箱存放客户"<

\n\n";

}

voidBoxes:

:

get(charm){

inti=0;

while(flag[i]!

=m&&i

if(flag[i]!

=m)

cout<<"没有找到客户"<

\n\n";

else

{

sum-=box[i];

box[i]=0;

}

}

voidBoxes:

:

display(){

intn=0;

for(inti=0;i

if(box[i]>0)

cout<<"客户"<

存放物品数量:

"<

\n";

elsen++;

cout<<"占用箱个数:

"<

"<

\n存入物品总数量有:

"<

}

第十二周上机题目

一.编程题

【程序功能】找出给定范围内的和亲数。

对于两个正整数,如果其中的一个整数是另一个整数的全部真因子之和,反之亦然,则称这两个数为“和亲数”。

例如,220有真因子“1,2,4,5,10,11,20,22,44,55,110”,其和为284,而284有真因子“1,2,4,71,142”,其和为220,因此220和284就是一对和亲数。

【编程要求】

1.试建立一个类NNM

●私有数据成员

intn1,n2;//查找数据的范围

inta[10][2];//存储m~n(m

intnum;//统计和亲数对的个数

●公有成员函数

1)缺省构造函数:

初始化数据成员n1,n2为0。

2)带参构造函数NNM(intm,intn):

用参数初始化数据成员n1,n2。

3)voidfind()函数用于查找n1~n2之间的所有和亲数对并存储到数组中

4)打印函数voidprint(),将结果输出到屏幕

#include

classNNM{

intn1,n2;

inta[10][2];

intnum;

public:

NNM(){n1=0;n2=0;num=0;}

NNM(inta,intb){

n1=a,n2=b,num=0;

}

voidfind();

voidprint();

};

voidmain(){

NNMa(2,500);

a.find();

a.print();

}

voidNNM:

:

find(){

intsum1=0,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 工作总结汇报

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1