C++实验报告Word文件下载.docx
《C++实验报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《C++实验报告Word文件下载.docx(31页珍藏版)》请在冰豆网上搜索。
![C++实验报告Word文件下载.docx](https://file1.bdocx.com/fileroot1/2023-2/3/01a9cba0-32fb-4b33-ba26-620c155e6f00/01a9cba0-32fb-4b33-ba26-620c155e6f001.gif)
.'
s+3<
d[0]+d[1]+d[2]<
d[1]+d[2]<
endl;
}
任务2:
在教材第109页第4大题中,从(3)(4)(5)(6)中至少选择2道题,给出源代码并调试通过,保证结果正确。
3.#include<
inta,b;
"
pleaseinputtwonumber:
cin>
>
a>
b;
intn=a;
if(n>
b)
n=b;
for(inti=n;
i>
=1;
i--)
if(a%i==0&
&
b%i==0)
{cout<
最大公约数:
i<
break;
intm=a;
if(m<
m=b;
for(intj=m;
j>
0;
j++)
if(j%a==0&
j%b==0)
最小公倍数:
j<
}
5.#include<
inti,j,num=0;
for(i=1;
=10;
i++)
{
intn=1;
for(j=1;
=i;
n=n*j;
num+=n;
num="
num<
任务3:
编程验证下列各个问题:
验证赋值运算符的结合性是从右至左的;
#include<
intx(5),y(3);
y+=x-=x*x;
y="
y<
x="
x<
验证逗号表达式的值和类型都取决于最后一个表达式;
inta(5);
intb(3);
intc;
c=a+b+3;
c=(++a,b+=5,3+b);
c<
验证你所用的计算机对于二进制右移位操作,左端是否补符号位;
intmain()
inta(3),b(3),c;
a>
b>
=3;
c=50;
c>
=2;
a,b,c分别右移位1,3,2时,结果为:
a="
a<
b="
b<
c="
return0;
验证三目运算符组成的条件表达式的类型是冒号前后两个操作数中高的类型;
charb;
doublec;
b='
x'
c=3.33;
运算符输出的b的类型是:
(1<
2?
b:
c)<
验证给一个数组赋初值后,没有被初始化的元素有默认值,int型数的默认值为0;
intb[3]={1,2,3};
inta[3]={1,2};
charc[2]={'
a'
b'
};
chard[2]={'
a[2]="
a[2]<
b[2]<
c[1]="
c[1]<
d[1]="
d[1]<
验证结构变量的成员是异址的,联合变量的成员是同址的;
任务4:
编程验证下述描述:
验证在if语句中,else子句与它最近的if子句配对;
if(1<
2)
if(2>
3)
cout<
666<
else
333<
555<
验证在switch语句,default语句可以放在花括号内的任何位置;
inta,b,c;
a;
switch(a)
case1:
1<
break;
case2:
2<
default:
不存在"
switch(b)
c;
switch(c)
验证使用for循环语句编写的程序可以用while语句编写;
{
for循环:
for(a=0;
4;
a++)
while循环:
b=0;
while(b<
4)
b++;
验证在switch语句中的<
语句序列>
里适当选择使用break语句是十分重要的;
intnum,sum(0);
inputnumber"
for(inti=0;
5;
cin>
num;
if(num<
0)
break;
sum+=num;
sum="
sum<
三、实验总结
程序编写不难,但中间小错误不容易发现,需要仔细认真,并且注意题目要求,不会的多于同学,老师沟通。
实验二
1.学会函数的定义格式和说明方法,掌握返回值的用法以及调用方法,区别传递变量值与传递变量地址、传递变量引用三种调用方式的不同;
2.练习函数模板的使用;
3.练习使用系统函数;
4.学习标准C++库的使用;
5.学习字符串数据的组织和处理
调试教材程序
1.上机调试教材中例4.3、4.4和4.5程序,注意三个程序之间在函数调用方式上的区别。
回答下列问题:
(1)传值调用时,形参和实参有何要求?
形参可以改变,实参不变。
(2)传址调用时,形参和实参有何要求?
通过改变形参来改变实参。
(3)引用调用与传值调用比较有什么不同?
引用可以直接对实参进行操作,而且不用返回值,效率高。
传值调用有返回值时只能返回一个值,有些时候不能满足需要,而且会产生临时对象,效率低一些。
(4)引用调用与传址调用比较有什么不同?
传址调用把变量在内存中的地址传给函数,这样在函数中修改地址上的值,会使主函数中的值也跟着改变,因为改变的是该地址上的值,而主函数也是通过地址访问的。
所以更改之后,主函数的值跟着变。
引用调用,也能改变主函数的的值,其做法也是获得该变量所在内存中的地址。
(5)三种函数调用方式的特点是什么?
传值调用只把变量的值传入函数,在函数中修改后,在主函数中值还是不变,相当于函数只是复制了变量的副本,不会改变原来的值。
传址调用把变量在内存中的地址传给函数(有地址信息可以轻易得出给地址上的值),这样在函数中修改地址上的值,会使主函数中的值也跟着改变,因为改变的是该地址上的值,而主函数也是通过地址访问的。
2.调试教材中例4.8程序,回答以下问题:
(1)函数设置默认参数时的注意事项有哪些?
验证如果不按其规定做时,会出现什么现象?
1.默认参数是严格按照从左至右的顺序使用。
2.参数默认值只能在声明或定义中一处指定.不能同时指定。
如果右面的参数不能用默认值,那么它左边的统统不能用默认值。
(2)函数设置了默认参数后,调用函数中出现实参值与默认形参值不等时,怎么办?
调用实参。
(3)在程序中有函数定义和函数说明时,设置默认参数在定义时还是在说明时?
在说明中。
3.上机调试教材中例4.16程序,熟悉函数嵌套调用的方法,将程序改写为只有一个主函数,并调试出正确结果。
intpowers(intm,intn)
inti,product
(1);
=n;
product*=m;
returnproduct;
intsum_of_powers(intk,intn)
intsum(0);
for(inti
(1);
sum+=powers(i,k);
returnsum;
intk(4),n(6);
sum_of_powers(k,n);
sumof"
k<
powersotintegersfrom1to"
n<
='
sum_of_powers(k,n)<
1.编写一个函数把华氏温度转换为摄氏温度,转换公式为:
C=(F-32)*5/9;
F-32)*5/9。
doublei,C;
华氏温度为:
i;
C=(i-32)*5/9;
摄氏温度为:
C<
2.编写重载函数Max,可分别求取两个整数,三个整数,两个双精度数,三个双精度数的最大值。
intmax(int,int);
doublemax(double,double);
max(5,10)<
max(5.0,10.5)<
intmax(intx,inty)
returnx+y;
doublemax(doublea,doubleb)
returna+b;
3.使用系统函数pow(x,y)计算xy的值,注意包含头文件math.h。
math.h>
doublex,y,z;
pleaseinputxandy:
x>
y;
z=pow(x,y);
的"
次方为:
z<
4.用递归的方法编写函数求Fibonacci级数,观察递归调用的过程。
longfibo(intn);
intN;
输入N值:
N;
longf=fibo(N);
f<
longfibo(intn)
if(n==1)return0;
elseif(n==2)return1;
returnfibo(n-1)+fibo(n-2);
编程实现两字符串的连接。
要求使用字符数组保存字符串,不使用系统函数。
使用string类定义字符串对象,重新实现连个字符串的连接。
string>
{stringstr1,str2,str3;
cin>
str1;
str2;
str3=str1+str2;
cout<
str3<
return0;
教材上的程序要认真学习,尤其是函数调用方式上的区别,还有就是注意题目要求,小心仔细,杜绝小问题。
实验三
1.掌握类的定义和使用;
2.掌握类的定义和对象的声明;
3.复习具有不同访问属性的成员的访问方式;
4.观察构造函数和析构函数的执行过程;
5.使用VC++的debug调试功能观察程序流程,跟踪观察类的构造函数、析构函数、成员函数的执行顺序;
定义一个CPU类,包含等级(rank)、频率(frequency)、电压(voltage)等属性,有两个公有成员函数run、stop。
其中,rank为枚举类型CPU_Rank,定义为enumCPU_Rank{P1=1,P2,P3,P4,P5,P6,P7}。
frequency为单位是MHz的整数,voltage为浮点型的电压值。
观察构造函数和析构函数的调用顺序。
enumCPU_Rank{P1=1,P2,P3,P4,P5,P6,P7};
classCPU
{
public:
CPU(CPU_Rankr,intf,floatv)
rank=r;
frequency=f;
voltage=v;
构造了一个CPU!
}
~CPU()
析构了一个CPU!
voidRun(){
CPU开始运行!
voidStop()
CPU停止运行!
voidprint()
rank<
"
frequency<
voltage<
private:
CPU_Rankrank;
intfrequency;
floatvoltage;
CPUa(P2,100,1.11);
a.Run();
a.print();
a.Stop();
CPUb(P3,200,2.12);
b.Run();
b.print();
b.Stop();
定义一个简单的Computer类,有数据成员芯片(cpu)、内存(ram)、光驱(cdrom)等等,有两个公有成员函数run,stop。
CPU为CPU类的一个对象,ram为RAM类的一个对象,cdrom为CDROM类的一个对象,定义并实现这个类。
private:
intrank;
intfrequency;
floatvoltage;
public:
CPU(intr,intf,floatv)
rank=r;
frequency=f;
voltage=v;
cout<
"
构造CPU!
<
endl;
CPU()
~CPU()
析构CPU!
voidRun()
{cout<
CPU运行!
voidStop()
classRAM
inta;
RAM()
构造RAM!
~RAM()
析构RAM!
RAM运行!
RAM停止!
classCDROM
CDROM()
{cout<
构造CDROM!
~CDROM()
析构CDROM!
voidRun(){cout<
CDROM运行!
voidStop(){cout<
CDROM停止!
classCOMPUTER
CPUcpu;
RAMram;
CDROMcdrom;
COMPUTER()
构造OMPUTER!
~COMPUTER()
析构COMPUTER!
COMPUTER运行!
cpu.Run();
ram.Run();
ram.Stop();
cpu.Stop();
COMPUTER停止运行!
COMPUTERa;
a.Run();
a.Stop();
使用VC++的debug调试功能观察程序流程时,要注意跟踪观察类的构造函数、析构函数、成员函数的执行顺序,结合教材,学习编写。
实验四
1.学习定义和使用类的继承关系,定义派生类;
2.熟悉不同继承方式下对基类成员的访问控制;
3.学习利用虚基类解决二义性问题;
4.掌握运算符重载的方法;
5.学习使用虚函数实现动态多态性;
6.熟悉流类库中常用的类及其成员函数的用法;
7.学习标准输入输出及格式控制;
定义一个基类Animal,有私有整型成员变量age,构造其派生类dog,在其成员函数SetAge(intn)中直接给age赋值,看看会有什么问题,把age改为公有成员变量,还会有问题吗?
classAnimal
Animal()
cout<
构造函数"
~Animal()
析构函数"
};
voidSetAge(intn)
age=n;
intGetAge()
returnage;
private:
intage;
classDog:
publicAnimal
Dog()
构造Dog"
~Dog()
析构Dog"
voidmain()
Doga;
a.SetAge(5);
age="
a.GetAge()<
定义一个车(vehicle)基类,具有MaxSpeed,Weight等成员变量,Run,Stop等成员函数,由此派生出自行车(bicycle)、汽车(motorcar)类。
自行车(bicycle)类有高度(Height)等属性,汽车(motorcar)类有座位数(SearNum)等属性。
从bicycle何motorcar派生出摩托车(motorcycles)类,在继承过程中,注意把vehicle设置为虚基类。
如果不把vehicle设置为虚基类,会有什么问题?
classvehicle
intMAXSPEED;
intWEIGHT;
voidRUN();
voidSTOP();
vehicle()
{
构造vehicle函数"
~vehicle()
{
析构v