北邮小学期c++实验报告and程序文件Word文档下载推荐.docx
《北邮小学期c++实验报告and程序文件Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《北邮小学期c++实验报告and程序文件Word文档下载推荐.docx(33页珍藏版)》请在冰豆网上搜索。
price<
."
endl;
//获得正确答案
system("
pause"
);
return0;
}
2、计算N以内的所有素数
(1)提示用户输入N;
(2)计算出从2到N之间的所有素数;
(3)将结果保存在一个文本文件中。
cmath>
fstream>
//两种输入流
intisprime(inta)
{intb=2;
while(a%b!
=0&
&
b<
sqrt(a))
{b++;
if(a%b==0)
if(a%b!
=0)
return1;
}//判断是否为素数的函数定义
intnum,a;
ofstreammyFile("
d:
\\result.txt"
Pleaseinputthenumber:
num;
myFile<
2"
;
for(a=2;
a<
=num;
a++)//例举所有数,并对其进行判断,是否为素数
{if(isprime(a)==1)
a<
}//向文件内输出数据
system("
return0;
3、袋中取球
编写C++程序完成以下功能(使用enum):
(1)袋子中有red,yellow,blue,white,black五种颜色的球多个;
(2)一次从袋子里取出3个颜色不同的球,有几种取法;
(3)将每种方法的所有取法输出到屏幕上。
iomanip>
enumcolors{red=1,yellow,blue,white,black};
voidprint(inta)//设置一个打印函数,根据数字得到颜色
{switch(a){
case1:
cout<
setw(7)<
red"
break;
case2:
yellow"
break;
case3:
blue"
case4:
white"
case5:
black"
{intcolor1,color2,color3;
//设置三个记录颜色的变量
Theresultis:
for(color1=red;
color1<
=blue;
color1++)
for(color2=color1+1;
color2<
=white;
color2++)
for(color3=color2+1;
color3<
=black;
color3++)//三次循环迭代出所有情况
{
print(color1);
print(color2);
print(color3);
cout<
}
system("
4、乘法口诀表
(1)输出乘法口诀表;
(2)显示格式如下所示。
1*1=11*2=21*3=3....................1*9=9
2*2=42*3=6....................2*9=18
3*3=9....................3*9=27
..............................
....................
9*9=81
inta,b,c;
for(a=1;
a<
=9;
a++)
{for(c=0;
c<
a-1;
c++)
//打印每行前的空格
for(b=a;
b<
b++)
cout<
'
*'
='
setw(4)<
setiosflags(ios:
:
left)<
a*b;
//按规律输出乘法表
5、最大公约数和最小公倍数
(1)提示用户输入两个无符号整数;
(2)计算两者的最大公约数和最小公倍数,并输出。
intGCD(inta,intb)
{
if(a%b==0)
returnb;
else
returnGCD(b,a%b);
//利用辗转相除法进行递归.
{inta,b;
cout<
Pleaseinputtwonumbers:
cin>
a>
b;
intc;
if(a<
b)
{c=a;
a=b;
b=c;
}//调整ab的大小顺序
和"
的最大公约数是"
GCD(a,b)<
的最小公倍数是"
a*b/GCD(a,b)<
//利用最大公约数与最小公倍数之间的关系直接得到最小公倍数
6、计算Fibonacci级数
fib
(1)=fib
(2)=1
fib(n)=fib(n-1)+fib(n-2)
分别编写递归和非递归的C++程序完成以下功能:
(1)提示用户输入整数n;
(2)fib(n),并输出结果。
//递归法求斐波那契数列
intfib(intn)
{if(n==1||n==2)
return1;
elsereturnfib(n-1)+fib(n-2);
//递归
{intnum;
Pleaseinputtheinteger:
num;
num<
的Fibonacci级数是"
fib(num)<
//输出结果
//直接法求斐波那契数列
inta,result=1,previous=1,present=1;
//初始化
if(n>
2)
{for(a=3;
=n;
a++){
result=result+previous;
previous=present;
present=result;
returnresult;
7、计算n阶勒让德多项式
(1)提示用户输入整数n和实数x;
(2)Pn(x),并输出结果。
intp(intx,intn)
{if(n==0)
if(n==1)
returnx;
1)
return((2*n-1)*x*p(x,n-1)-(n-1)*p(x,n-2))/n;
{intx,n;
Pleaseinputtwointegersxandn:
cin>
x>
n;
x<
的"
n<
阶勒让德多项式的结果是"
p(x,n)<
总结:
由于第一天学习c++课,所以决定多做些题目来熟悉c++的规范格式,于是将七道题目都编写了,题目都很基础,用到的算法和技巧都在学c的时候学过了。
具体的有随机数种子的设定,双重for循环,递归函数求解,基本完成了实验目的所写的那样:
熟悉C++编程环境,掌握在Dev-C++开发环境下编写、编译、调试和执行C++程序的方法。
掌握C++基本语法、数据类型和程序控制结构,能够编写简单C++程序。
实验二:
类与对象
1、矩形
(1)定义一个Point类,其属性包括点的坐标,提供计算两点之间距离的方法;
(2)定义一个矩形类,其属性包括左上角和右下角两个点,提供计算面积的方法;
(3)创建一个矩形对象,提示用户输入矩形左上角和右下角的坐标;
(4)观察矩形对象以及Point类成员的构造函数与析构函数的调用;
(5)计算其面积,并输出。
classpoint
{private:
intx,y;
public:
point(intX=0,intY=0){
x=X;
y=Y;
};
//构造函数
intgetX(){returnx;
intgetY(){returny;
frienddoublegetline(point&
a,point&
b){
returnsqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
//返回两点间直线长度
}
};
//两点间距离的计算
classrectangle
private:
pointa,b;
rectangle(pointA,pointB){
a=A;
b=B;
}//构造函数
intgetarea(){
return((b.getX()-a.getX())*(a.getY()-b.getY()));
}//返回面积值
//矩形面积计算
intmain()
intx1,y1,x2,y2;
请输入左上角的坐标"
x1>
y1;
\n请输入右下角的坐标"
x2>
y2;
pointA(x1,y1),B(x2,y2);
rectanglertangle(A,B);
//类的初始化
\n面积大小是:
rtangle.getarea();
//打印结果
2、圆形
(2)定义一个圆形类,其属性包括圆心和半径;
(3)创建两个圆形对象,提示用户输入圆心坐标和半径,判断两个圆是否相交,并输出结果。
classcircle
intr;
circle(intX,intY,intR){x=X;
r=R;
friendvoidstart(circle&
a,circle&
doublem,n;
m=sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
//圆心间距离
n=a.r+b.r;
//半径和
if(m>
n)
两个圆不相交"
if(m<
=n)
两个圆相交"
}//友元函数判断是否相交
};
{intx1,y1,r1,x2,y2,r2;
请输入第一个圆的圆心坐标和半径"
y1>
r1;
请输入第二个圆的圆心坐标和半径"
y2>
r2;
circlea(x1,y1,r1);
circleb(x2,y2,r2);
start(a,b);
3、友元
(1)定义一个Boat和Car两个类,他们都具有私用属性——重量;
(2)编写一个函数,计算两者的重量和。
doubleTotalWeight(Boat&
b,Car&
c);
classcar;
classboat
doubleweight;
boat(doublew){weight=w;
}//构造函数
frienddoubleTotalWeight(boat&
a,car&
b);
//友元函数
classcar
{private:
car(doublew){weight=w;
doubleTotalWeight(boat&
{returna.weight+b.weight;
{doublea,b;
请输入boat和car的重量:
boatx(a);
cary(b);
//初始化类值
重量和是"
TotalWeight(x,y);
system("
4、分数
(1)定义一个分数类,他们都具有私用属性——分子和分母;
(2)定义分数类的构造函数和析构函数;
(3)定义方法Set,设置分子和分母;
(4)定义方法print,打印分数,格式如:
2/7;
(5)定义方法value,返回double型的分数值;
(6)定义方法invert,分子和分母交换。
classfenshu
intdown,up;
voidset(inta,intb)
{up=a;
down=b;
}
voidprint()
{cout<
分数值是:
up<
/"
down<
doublevalue()
{returndouble(up)/double(down);
voidinvert()
{intc;
c=up;
up=down;
down=c;
inta,b;
请输入分子和分母:
fenshux;
x.set(a,b);
x.print();
分数值的小数形式是"
x.value()<
x.invert();
在编写程序前对类与对象还是挺生疏的,只有脑海里闪现的书本里的一些概念,编这道题目的时候也已经是学c++的第三天了,在看完书本的例子后,考虑到老师上课说的不要照书编程,于是就在编程前看个够。
基本上这些题目也就是一些类与对象的格式的考察。
于是将四道题目全部完成了。
记得唯一让我放下手指敲键盘的地方是第二题,正方形的的属性里,起初我是自己设定两点的坐标为其私有变量,后来发现这样做不符合题意,应该将点的对象作为其私有变量。
基本上其他的也就没有问题了,注意的也就是不能直接在外部引用私有成员,需要对象内部的公有函数做接口
实验三:
数组与指针
矩阵
(一)与矩阵(三)略
1、矩阵(三)
(1)用类来实现矩阵,定义一个矩阵的类,属性包括:
●矩阵大小,用lines,rows(行、列来表示);
●存贮矩阵的数组指针,根据矩阵大小动态申请(new)。
(2)矩阵类的方法包括:
●构造函数,参数是矩阵大小,需要动态申请存贮矩阵的数组;
●析构函数,需要释放矩阵的数组指针;
●拷贝构造函数,需要申请和复制数组;
●输入,可以从cin中输入矩阵元素;
●输出,将矩阵格式化输出到cout;
●矩阵相加的函数,实现两个矩阵相加的功能,结果保存在另一个矩阵类,但必须矩阵大小相同;
●矩阵相减的函数,实现两个矩阵相减的功能,结果保存在另一个矩阵类,但必须矩阵大小相同。
(3)定义三个矩阵:
A1、A2、A3;
(4)初始化A1、A2;
(5)计算并输出A3=A1加A2,A3=A1减A2;
(6)用new动态创建三个矩阵类的对象:
pA1、pA1、pA3;
(7)初始化pA1、pA2;
(8)计算并输出pA3=pA1加pA2,pA3=pA1减pA2;
(9)释放pA1、pA1、pA3。
classarray
intlines,rows;
int**A;
array(inta=3,intb=4);
array(inta,intb,intc);
array(array&
a);
intgetLines(){returnlines;
intgetRows(){returnrows;
voidprintArray(intl,intr);
friendvoidplusArray(array*a,array*b,array*c,intl,intr);
friendvoidreductArray(array*a,array*b,array*c,intl,intr);
~array(){for(inti=0;
i<
lines-1;
i++)
{deleteA[i];
deleteA;
array:
a)
{lines=a.lines;
rows=a.rows;
/*A=newint*[lines];
for(inti=0;
=lines-1;
{A[i]=newint[rows];
}*/
A=a.A;
array(inta,intb,intc){
lines=a;
rows=b;
A=newint*[a];
=a-1;
{A[i]=newint[b];
array(inta,intb){
请输入矩阵的元素:
for(intj=0;
j<
=b-1;
j++)
A[i][j];
voidarray:
printArray(intl,intr){
=l-1;
i++){
=r-1;
voidplusArray(array*a,array*b,array*c,intl,intr)
{for(inti=0;
(*c).A[i][j]=(*a).A