吕金石C++实验报告.docx
《吕金石C++实验报告.docx》由会员分享,可在线阅读,更多相关《吕金石C++实验报告.docx(36页珍藏版)》请在冰豆网上搜索。
吕金石C++实验报告
C++实验报告
姓名:
吕金石
学号:
6100408024
学院专业:
数字媒体081班
二零一零年十二月
南昌大学实验报告
学生姓名:
吕金石学号:
6100408024专业班级:
数字媒体081班
实验类型:
□验证□综合□设计□创新实验日期:
实验成绩:
实验1熟悉C++开发环境及简单程序设计和应用
一.实验目的
1.初步了解C++程序的编译、连接和运行的过程。
2.掌握和理解C++程序的结构。
二.实验内容
1.使用VC
2.运行一个简单的C++程序
3.编程求出对任意输入的两个整数,求出该两个整数的最大公约数和最小公倍数
三.实验环境
PC微机;
Windows操作系统;
VC程序集成环境。
四.实验步骤
1.启动VC
如果用户计算机系统已经安装了VC编译系统,按下图所示进入VC集成环境。
在该窗口,有9个菜单条目。
熟悉每个菜单的意义和操作。
2.输入程序,输入以下程序
#include
usingnamespacestd;
voidmain()
{
inti
(1),sum(0);
do{
sum+=i;
i++;
}while(i<=10);
cout<<"sum="<}
3.保存文件、运行程序、退出VC程序、打开已经存在的文件
4.编程求出对任意输入的两个整数,求出该两个整数的最大公约数和最小公倍数
运行结果:
南昌大学实验报告
学生姓名:
吕金石学号:
6100408024专业班级:
数媒081班
实验类型:
□验证□综合□设计□创新实验日期:
2010.9.24实验成绩:
实验2基本控制结构程序设计
一.实验目的
1.学会有关C++语言的有关运算符,以及包含这些运算符的表达式的使用,熟练掌握多重选择结构。
2.掌握C++函数的定义方法、函数的调用方法、参数说明以及返回值。
掌握函数的嵌套调用及递归调用的设计方法;
3.在编程过程中加深理解函数调用的程序设计思想。
二.实验内容
1.编程输出表达式的运行结果;
2.用if-elseif语句或switch语句实现多分支选择结构
3.用递归方法进行程序设计。
三.实验环境
PC微机
Windows操作系统
VC程序集成环境
四.实验步骤
1.当a=1,b=2,c=3时,编程求出
a^b&-c
a&b|c
!
a|a
~a|a
a^a
a>>2
以上表达式的值。
源程序如下:
执行结果为:
2.编程实现这样一个完整的程序,运行时向用户提问“你考试考了多少分?
(0~100),接受输入后判断其等级并显示出来。
规则如下:
等级
范围
优
90〈=分数〈=100
良
80〈=分数〈90
中
60〈=分数〈80
差
0〈=分数〈60
3.源程序为:
#include
voidmain()
{
intn;
loop:
cout<<"你考试考了多少分?
请输入:
"<cin>>n;
if((n<0||n>100))
{
cout<<"你的输入有误!
请重新输入!
!
"<gotoloop;
}
intm=n/10;
switch(m)
{
case10:
cout<<"优"<break;
case9:
cout<<"优"<break;
case8:
cout<<"优"<break;
case7:
cout<<"中"<break;
case6:
cout<<"中"<break;
default:
cout<<"差"<}
}
程序运行的结果如下:
4.用递归方法编写程序求Fibonacci级数,公式为:
fib(n)=fib(n-1)+fib(n-2),n>2;fib
(1)=fib
(2)=1;观察递归调用的过程。
源程序为:
#include
intfib();
intfib(intn)
{
if((n==1)||(n==2))
return1;
if(n>2)
return(fib(n-1)+fib(n-2));
}
voidmain()
{
intn;
cout<<"请输入n的值:
"<cin>>n;
fib(n);
cout<<"Fibonacci级数结果为:
"<for(;n>2;n--)
{cout<<"倒数第"<"<cout<<"fib("<}
}
执行结果为:
n=1:
n=2:
n=6:
五.思考题
1.小结多重选择结构。
答:
多重选择结构是根据所指定的条件判断满足何种操作,从而选择其一。
处理这类问题的方法常用的是if,if……elseif……else嵌套和switch选择语句进行操作。
2.递归调用如何才是有意义的?
答:
必须满足函数是自身调用自身才是有意义的。
南昌大学实验报告
学生姓名:
吕金石学号:
61004082024专业班级:
数字媒体081班
实验类型:
□验证□综合□设计□创新实验日期:
2010.10.7实验成绩:
实验3类与对象
一.实验目的
1.学会有关C++语言够造函数和析构函数、拷贝构造函数、内联成员函数、带默认形参值的成员函数。
2.学会对象的使用。
二.实验内容
设计一个用于人事管理的“人员”类。
由于考虑到通用性,这里只抽象出所有类型人员都具有的属性:
编号、性别、出生日期、身份证号等。
其中“出生日期”声明为一个“日期”类内嵌子对象。
用成员函数实现对人员信息的录入和显示。
要求包括:
够造函数和析构函数、拷贝构造函数、内联成员函数、带默认形参值的成员函数、类的组合。
三.实验环境
PC微机
Windows操作系统
VC程序集成环境
四.实验步骤
源程序为:
#include
classBirthday//定义出生日期类
{
public:
Birthday(inty,intm,intd)
{
year=y;
month=m;
day=d;
}
intyear;
intmonth;
intday;
};
classPerson
{
public:
Person(Birthdayb1,intN,charS,intI);//带默认形参的成员函数
~Person()//析构函数
{}
voidSetNumber(charN)
{
Number=N;
}
voidSetSex(charS)
{
Sex=S;
}
voidSetID(charI)
{
ID=I;
}
inlineintGetNumber()//内联函数
{
returnNumber;
}
inlinecharGetSex()//内联函数
{
returnSex;
}
inlineintGetID()//内联函数
{
returnID;
}
voidGetbirthday()
{
cout<cout<<"-";
cout<cout<<"-";
cout<}
private:
intNumber;//定义编号
charSex;//定义性别
intID;//定义身份证号
Birthdaybirth;//实现"日期"类内嵌对象
};
Person:
:
Person(Birthdayb1,intn,chars,inti):
birth(b1)//拷贝构造函数,类的组合
{
Number=n;
Sex=s;
ID=i;
}
voidmain()
{
Birthdayb0(1980,2,22);
PersonP(b0,12345,'M',100);
cout<<"信息为:
"<cout<<"编号:
"<
cout<<"性别"<<":
"<
cout<<"身份证号"<<":
"<
cout<<"出生年月"<<":
";
P.Getbirthday();
}
运行结果:
南昌大学实验报告
学生姓名:
吕金石学号:
6100408024专业班级:
数字媒体081班
实验类型:
□验证□综合□设计□创新实验日期:
2010.10.18实验成绩:
实验4友元函数
二、实验目的
理解类的友元函数、友元类
三、实验基本原理
定义类X、Y、Z,函数h(X*),满足:
类X的私有成员i,Y的成员函数g(X*)是X的友元函数,实现对X的成员i加1,类Z是类X的友元类,其成员函数f(X*)实现对X的成员i加5,函数h(X*)是类X的友元函数,实现对X的成员i加10。
在一个文件中定义和实现类,在另一个函数中实现main函数。
四、主要仪器设备及耗材
PC微机
Windows操作系统
VC程序集成环境
五、实验步骤
#include
classX;
classY
{
public:
intg(X*);
};
classX
{
public:
friendintY:
:
g(X*x);
friendinth(X*);
friendclassZ;
intseti(inti);
private:
inti;
};
intX:
:
seti(inti)
{
cout<<"初始状态i的值为0;"<returni=0;
}
intY:
:
g(X*x)
{
(*x).i+=1;
cout<<"调用g(X*)函数后,i的值变为i=1"<return0;
}
classZ
{
public:
intf(X*);
private:
Xx;
};
intZ:
:
f(X*x)
{
(*x).i+=5;
cout<<"调用f(X*)函数后,i的值变为i=5"<return0;
}
inth(X*x)
{
(*x).i+=10;
cout<<"调用h(X*)函数后,i的值为i=10"<return0;
}
voidmain()
{
Xx;
x.seti(0);
Yy1;
y1.g(0);
Zz1;
z1.f(0);
h(0);
}
六、实验数据及处理结果
七、参考资料
《c++语言程序设计》
南昌大学实验报告
学生姓名:
吕金石学号:
6100408024专业班级:
数字媒体081班
实验类型:
□验证□综合■设计□创新实验日期:
2010.11.2实验成绩:
实验5数组和指针
一.实验目的
1.掌握数组的基本概念,包括:
数组的定义、数组的类型、数组的初始化、数组的赋值、数组元素下标的范围、数组元素的正确以及引用数组元素的输入/输出等;重点掌握对象数组的使用。
2.掌握指针的基本概念和基本用法。
包括:
变量的地址和变量的值,指针变量的说明、指针变量的初始化、指针的内容与定义格式、指针的基本运算等;重点掌握对象指针的使用。
二.实验内容
有关数组和指针的程序设计
三.实验环境
PC微机
DOS操作系统或Windows操作系统
TurboC程序集成环境
四.实验步骤
1.编程实现:
设计一个Point类,利用对象数组,进行点的线性拟合。
要求能通过键盘输入对对象数组进行赋值。
#include
#include
usingnamespacestd;
classpoint
{
public:
point(floatxx=0,floatyy=0)
{
X=xx;Y=yy;
}
floatgetX(){returnX;}
floatgetY(){returnY;}
friendfloatlinefit(pointl_point[],intn_point);
private:
floatX,Y;
};
floatlinefit(pointl_point[],intn_point)
{
floatav_x,av_y;
floatl_xx,l_yy,l_xy;
av_x=0;av_y=0;l_xx=0;
l_yy=0;l_xy=0;
for(inti=0;i{
av_x+=l_point[i].X/n_point;
av_y+=l_point[i].Y/n_point;
}
for(i=0;i{
l_xx+=(l_point[i].X-av_x)*(l_point[i].X-av_x);
l_yy+=(l_point[i].Y-av_y)*(l_point[i].Y-av_y);
l_xy+=(l_point[i].X-av_x)*(l_point[i].Y-av_y);
}
cout<<"thislinecanbefittedbyy=ax+b."<cout<<"a="<cout<<"b="<returnfloat(l_xy/sqrt(l_xx*l_yy));
}
intmain()
{intj,n,f;
pointl_p[10];
for(j=0;j<10;j++)
{cout<<"Pleaseenterthenumber"<cout<<"x=";cin>>n;
cout<<"y=";cin>>f;
l_p[j]=point(n,f);
}
floatr=linefit(l_p,10);
cout<<"linecoefficientr="<}
2.编程实现:
利用指针,设计一个程序,对任意的一个浮点数,可以将其整数部分和小数部分分别输出。
#include
usingnamespacestd;
voidcount(floata,int*b,float*c)
{
*b=(int)a;
*c=a-*b;
}
voidmain()
{
floatx,y;
intz;
cout<<"请输入一个浮点数:
x=";
cin>>x;
count(x,&z,&y);
cout<<"整数部分:
"<cout<<"小数部分:
"<}
3.编程实现:
设计一个Point类,编程实现通过对象指针的方法访问Point类对象的成员;通过成员函数指针的方法访问成员函数;动态创建和删除对象数组
#include
usingnamespacestd;
classpoint
{
public:
point(intxx=0,intyy=0)
{
X=xx;
Y=yy;
countp++;
cout<<"构造函数调用"<}
point(point&p);
~point()
{countp--;
cout<<"析构函数调用"<intgetX()
{returnX;}
intgetY()
{returnY;}
voidgetxy(intx,inty)
{
X=x;
Y=y;
}
staticvoidgetp()
{cout<<"countnumberis:
"<private:
intX,Y;
staticintcountp;
};
point:
:
point(point&p)
{
X=p.X;
Y=p.Y;
countp++;
cout<<"拷贝构造函数被调用"<}
intpoint:
:
countp=0;
voidmain()
{
pointa(10,20);
point*n;
point*p=newpoint[2];
n=&a;
p[0].getxy(30,40);
p[1].getxy(50,60);
cout<<"利用指针访问对象成员:
"<getX()<<","<getY()<cout<<"利用对象访问对象成员:
"<a.getp();
pointb(a);
cout<b.getp();
delete[]p;
}
南昌大学实验报告
学生姓名:
吕金石学号:
6100408024专业班级:
数字媒体081班
实验类型:
□验证□综合■设计□创新实验日期:
2010.11.13实验成绩:
实验六静态成员
一.实验目的
学习静态成员数据和静态成员函数的用法。
二.实验内容
声明一个Cat类,拥有静态数据成员HowmanyCats,记录Cat的个体数目;声明静态成员函数GetHowMany(),存取HowManyCats。
设计程序测试这个类,体会静态数据成员和静态成员方法函数的用法。
三.实验环境
PC微机
Windows操作系统
MicrosoftVisualStudio6.0集成开发环境;
4.实验步骤
实验程序代码:
#include
usingnamespacestd;
classcat
{
public:
cat()
{
weight=0;
age=0;
}
~cat(){howmanycats--;}
voidgetweight(intw)
{
weight=w;
howmanycats++;
}
voidgetage(inta)
{
age=a;
}
intshowweight()
{returnweight;}
intshowage()
{returnage;}
staticvoidgethowmany()
{
cout<<"cat'scount:
"<cout<<"静态函数成员调用静态数据成员。
"<}
private:
intweight,age;
staticinthowmanycats;
};
intcat:
:
howmanycats=0;
voidmain()
{
catc1;
catc2;
c1.getweight(10);
c1.getage(5);
cout<<"cat"<cout<<"第一只猫的weight:
"<cout<<"第一只猫的age:
"<c1.gethowmany();
c2.getweight(18);
c2.getage(8);
cout<<"第二只猫的weight:
"<cout<<"第二只猫的age:
"<c2.gethowmany();
}
5、实验结果
南昌大学实验报告
学生姓名:
吕金石学号:
6100408021专业班级:
数字媒体081班
实验类型:
□验证□综合■设计□创新实验日期:
2010.11.30实验成绩:
实验7多态
一.实验目的
1.理解继承的概念,了解面向对象设计中继承的合理性;
2.掌握派生类的构造与析构;
3.掌握在对象中使用类层次和继承思想进行设计、实现和测试;
二.实验内容
用模板类实现双向链表。
三.实验环境
PC微机
Windows操作系统
MicrosoftVisualStudio6.0集成开发环境;
4.实验步骤
#ifndefNODE_CLASS
#defineNODE_CLASS
template
classNode
{
private:
Node*next;
public:
Tdata;
Node(constT&item,Node*ptrnext=NULL);
voidInsertAfter(Node*p);
Node*DeleteAfter(void);
Node*NextNode(void)const;
};
template
Node:
:
Node(constT&item,Node*ptrnext):
data(item),next(ptrnext)
{}
template
Node*Node:
:
NextNode(void)const
{returnnext;}
template
voidNode:
:
InsertAfter(Node*p)
{
p->next=next;
next=p;
}
template
Node*Node:
:
DeleteAfter(void)
{
Node*tempPt