C++上机题目复习及答案2Word文档格式.docx
- 文档编号:19682994
- 上传时间:2023-01-08
- 格式:DOCX
- 页数:32
- 大小:37.60KB
C++上机题目复习及答案2Word文档格式.docx
《C++上机题目复习及答案2Word文档格式.docx》由会员分享,可在线阅读,更多相关《C++上机题目复习及答案2Word文档格式.docx(32页珍藏版)》请在冰豆网上搜索。
<
"
请输入"
N<
'
*'
的矩阵"
endl;
for(i=0;
i<
N;
i++){
for(j=0;
j<
j++)
cin>
>
a[i][j];
Arrayd(N);
d.input(a[0]);
原始数组为:
\n"
;
d.print();
d.change();
转置后的数组为:
}
voidArray:
:
input(int*a){
for(inti=0;
N*N;
i++)
x[i]=*a++;
print(){
((i+1)%3)?
cout<
x[i]<
\t'
change(){
inttemp;
for(intj=0;
i;
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}对该类进行测试。
math.h>
classNN{
floatx[5],w[5],dt;
doubley;
NN(floatt[],floatd);
//用数组t初始化加权系统wi,用d初始化dt。
voidfun(floatt[]);
//用数组t初始化xi,并根据上述公式计算y的值。
voidprint();
//输出输入信号和输出信号的值
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){
5;
w[i]=t[i];
dt=d;
voidNN:
fun(floatt[]){
x[i]=t[i];
doublen=0.0;
n+=(x[i]-w[i])*(x[i]-w[i]);
y=exp(-n/(2*dt*dt));
x[i]="
cout<
'
y="
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<
string.h>
主函数要求:
(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的体积。
classRectangle{
doublex1,y1;
doublex2,y2;
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;
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);
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(){
矩形:
"
左下角的坐标:
x1<
'
y1<
右上角的坐标:
x2<
y2<
长:
(x2-x1)<
宽:
(y2-y1)<
voidCube:
set(char*s,doubleh1){
h=h1;
strcpy(name,s);
doublemj=getwidth()*getlength();
长方体:
底面积为:
mj<
体积为:
mj*h<
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。
输出求出的所有素数。
3)在主程序中对该类进行测试。
使用测试数据span1=100,span2=200。
即求100~200之间的所有素数。
classNUM{
intdata[25];
//依次存放指定范围内的所有素数。
intspan1,span2;
//存放要求计算的素数的范围。
intnum;
//存放span1与span2之间的素数个数。
NUM(inta,intb);
voidprocess();
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;
=span2;
for(n=2,f=0;
n<
=sqrt(i);
n++)
if(i%n==0){f=1;
break;
if(f==1)continue;
data[num++]=i;
print(){
num;
){
data[i]<
if(++i%6==0)cout<
已知由一个数组派生出另一个数组的派生规则如下:
假定原始数组为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。
●inta[10],b[10];
a存放原始数组,b存放派生数组。
2)公有成员函数。
●构造函数ARRAY(intdata[10]);
初始化成员数组a。
●voidprocess();
由数组a根据上述派生类规则,用循环语句计算数组b的各元素。
●voidprint();
屏幕显示数组a和b。
classARRAY{
inta[10],b[10];
ARRAY(intdata[10]);
//初始化成员数组a。
voidprocess();
//由数组a根据上述派生类规则,用循环语句计算数组b的各元素。
voidprint();
//屏幕显示数组a和b。
inta[]={7,4,9,23,56,44,18,33,21,17};
ARRAYarray(a);
array.process();
array.print();
ARRAY:
ARRAY(intdata[10]){
10;
a[i]=data[i];
b[i]=0;
voidARRAY:
for(intk=0;
k<
k++)
if(a[k]>
a[i])b[i]++;
a[10]="
a[i]<
b[10]="
b[i]<
物品保管箱管理应用程序
【要求】按以下描述和要求建立一个类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)。
若找不到指定则输出提示信息。
//输出保管箱类所有数据,统计占用箱个数和空闲箱个数。
最后输出存入物品数量
在类定义外面对静态成员做定义性说明并赋初值为零:
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’);
A.get(‘S’);
A.get(‘R’);
A.put(12,‘M’);
4)调用函数display输出对象A和B的全部数据。
classBoxes{
int*box;
char*flag;
staticintsum;
intxh;
Boxes(intnum=10);
~Boxes();
voidput(intn,charm);
voidget(charm);
BoxesA,B
(2);
//数组元素初始值为零。
A.put(5,'
R'
);
B.put(9,'
K'
A.put(8,'
P'
B.put(15,'
H'
B.put(40,'
F'
A库:
A.display();
B库:
B.display();
B.get('
A.get('
S'
);
A.put(12,'
M'
Boxes:
Boxes(intnum){
box=newint[num];
flag=newchar[num];
xh=num;
box[i]=flag[i]=0;
~Boxes(){
delete[]box;
delete[]flag;
voidBoxes:
put(intn,charm){
inti=0;
while(box[i]!
=0&
&
i++<
xh);
if(i<
xh&
box[i]==0){
box[i]=n;
flag[i]=m;
sum+=n;
elsecout<
无空箱存放客户"
m<
的物品!
\n\n"
get(charm){
while(flag[i]!
=m&
i<
xh)i++;
if(flag[i]!
=m)
没有找到客户"
物品!
else
{
sum-=box[i];
box[i]=0;
intn=0;
xh;
if(box[i]>
0)
cout<
客户"
flag[i]<
:
存放物品数量:
box[i]<
件。
elsen++;
占用箱个数:
xh-n<
个,空闲箱个数:
个。
\n存入物品总数量有:
sum<
第十二周上机题目
一.编程题
【程序功能】找出给定范围内的和亲数。
对于两个正整数,如果其中的一个整数是另一个整数的全部真因子之和,反之亦然,则称这两个数为“和亲数”。
例如,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];
//存储mn(m<
n)之间的所有和亲数对,并存储到a数组中
intnum;
//统计和亲数对的个数
●公有成员函数
1)缺省构造函数:
初始化数据成员n1,n2为0。
2)带参构造函数NNM(intm,intn):
用参数初始化数据成员n1,n2。
3)voidfind()函数用于查找n1n2之间的所有和亲数对并存储到数组中
4)打印函数voidprint(),将结果输出到屏幕
classNNM{
intn1,n2;
inta[10][2];
NNM(){n1=0;
n2=0;
num=0;
NNM(inta,intb){
n1=a,n2=b,num=0;
voidfind();
NNMa(2,500);
a.find();
voidNNM:
find(){
intsum1=0,su
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 上机 题目 复习 答案