当前位置:文档之家› C++面向对象程序设计实验报告

C++面向对象程序设计实验报告

C++面向对象程序设计实验报告

C + + object-oriented program designExperiment Report

目录

实验1 编程环境的熟悉及简单C++程序的编制 (5)

1.1实验目的和要求 (5)

1.2所占学时数 (5)

1.3实验任务 (5)

1.3.1 任务一 (5)

1.3.1 任务二 (8)

实验2 函数的应用 (2)

2.1实验目的和要求 (2)

2.2所占学时数 (2)

2.3实验任务 (2)

2.3.1 任务一 (2)

2.3.1 任务二 (2)

实验3 类与对象、构造与析构函数 (3)

3.1实验目的和要求 (3)

3.2所占学时数 (3)

3.3实验任务 (3)

3.3.1 任务一 (3)

3.3.1 任务二 (3)

实验4 数据共享与保护 (4)

4.1实验目的和要求 (4)

4.2所占学时数 (4)

4.3实验任务 (4)

4.3.1 任务一 (4)

实验5 数组指针与字符串 (5)

5.1实验目的和要求 (5)

5.2所占学时数 (5)

5.3实验任务 (5)

5.3.1 任务一 (5)

实验6 类的继承与派生 (6)

6.1实验目的和要求 (6)

6.2所占学时数 (6)

6.3实验任务 (6)

6.3.1 任务一 (6)

实验7 多态性 (7)

7.1实验目的和要求 (7)

7.2所占学时数 (7)

7.3实验任务 (7)

7.3.1 任务一 (7)

实验1 编程环境的熟悉及简单C++程序的编制

1.1 实验目的和要求

1.熟悉VC++2010编程环境,编制简单C++程序并运行,熟悉C++的编辑、编译、

连接、运行、断点调试等过程。

2.掌握C++数据类型,熟悉如何定义和使用常量和变量,以及对它们赋值的方法。

3.学会使用C++的有关算术运算符及表达式,特别是自加(++)和自减(--)运算符

的使用。

4.分支和循环结构的使用

1.2 所占学时数

本实验安排2个实验课时

1.3 实验任务

1.3.1 任务一

(1)题目名称:功能需求

运行时显示"Menu: A(dd) D(elete) S(ort) Q(uit),Select one:"提示用户输入,A 表示增加,D 表示删除,S 表示排序,Q 表示退出,输入为A、D、S 时分别提示"数据已经增加、删除、排序。"输入为Q 时程序结束。

①使用if …else 语句进行判断,用break、continue 控制程序流程。

②使用Switch 语句实现。

(2)构思过程(可用文字、流程图、UML图等方式表达)

要想实现所需的功能,主要包含两个关键语句,首先,要实现判断,要用到if-else或者switch的应用,再有,只有在用户点击到指定字符时才能终止程序,即要用到循环。

(3)程序源码

①用if-else编写:

#include

using namespace std ;

int _tmain(int argc, _TCHAR* argv[])

{

cout<<"Menu: A(dd) D(elete) S(ort) Q(uit),Select one:"<

while(true)

{

char input=' ';

cin >>input;

if (input=='A')

{

cout<<"增加"<

continue;

}

else if (input=='D')

{

cout<<"删除"<

continue;

}

else if (input=='S')

{

cout<<"排序"<

continue;

}

else if (input=='Q')

{

cout<<"退出"<

break;

}

}

}

②用switch-case编写:

#include "stdafx.h"

#include

using namespace std ;

int _tmain(int argc, _TCHAR* argv[])

{

char input;

cout<<"Menu: A(dd) D(elete) S(ort) Q(uit),? Select one:"<

do

{

cin>>input;

switch(input)

{

case 'A':cout<<"增加"<

case 'D':cout<<"删除"<

case 'S':cout<<"排序"<

}

}

while(input!='Q');

cout<<"退出"<

return 0;

}

(4)运行结果(截图)

(5)心得体会

首先,只有输入Q时程序才会退出,输入A,S,,D时程序反馈后继续运行,所以要想到运用while循环,只有当Q输入时程序跳出;其次,运用while循环,输入字符(input)的位置,由于输入字符也是循环的,所以放在里边,所以不能在while后的括号里写到关于字符的信息,程序是顺序运行,而无论输入什么字符,while都会运行,故在括号里边写true;再有,break与continue的区别,break跳出while循环,而continue跳出if,注意区别。最后,必须记住Switch-case的格式,用do-while 循环时,注意到循环结束的条件是while后括号里边的条件不成立。

1.3.1 任务二

(1)题目名称

1)题目名称:找完全数

找出2~10000之内的所有完全数。所谓完全数,即其各因子之和正好等于本身的数。如

6=1+2+3,28=1+2+4+7+14,所以6,28都是完全数。

(2)构思过程(可用文字、流程图、UML图等方式表达)

找完全数,首先要找到2到10000之内的数,要用到一层循环,同时要找到每个数的因子,又用到一层循环。用两层循环解决这个问题.

(3)程序源码

#include

using namespace std;

int _tmain(int argc, _TCHAR* argv[])

{

int sum=0;

for (int i=2;i<10000;i++)

{

sum=0;

for (int j=1;j

{

if (i%j==0)

{

sum+=j;

}

}

if (i==sum)

cout<

}

return 0;

}

(4)运行结果(截图)

(5)心得体会

编写程序时自己逻辑思维必须清晰,明确各个数据处理后变化以及自己想要达到的目的,在本题中sum的值要在每次循环开始时

清零,注意这个细节。

实验2 函数的应用

2.1 实验目的和要求

1.掌握函数声明、定义和调用的方法;

2.掌握函数递归调用的方法;

3.掌握重载函数的声明、定义和使用方法;

4.理解函数参数传递中传值与引用的区别。

2.2 所占学时数

本实验安排2个实验课时。

2.3 实验任务

2.3.1 任务一

(1)题目名称

用递归方法编写函数Fibonnacci(斐波那契)级数:

F n=F n-1+F n-2;F1=F2=1;

并求出第26项的值。

(2)构思过程(可用文字、流程图、UML图等方式表达)

首先,题目要求用递归方法应定义一个递归函数,写代码段

F n=F n-1+F n-2,如果n=1或n=2时,不再递归,即F1=F2=1;其次,设置输入输出流,计算结果。

(3)程序源码

#include "stdafx.h"

#include

using namespace std;

int num (int n)

{

if (n==1||n==2)

return 2;

return n+num(n-1);

}

int _tmain(int argc, _TCHAR* argv[])

{

int result=num(26);

cout<

return 0;

}

(4)运行结果(截图)

(5)心得体会

在用递归函数时要想到当n=1或2时,程序应当如何运行,即程序什么时候停止递归,应提前写出来,防止出现死循环。

2.3.1 任务二

(1)题目名称

设计一函数,判断一整数是否为素数。并完成下列程序设计:

①编写求素数的函数,并用这个函数求3-200之间的所有素数

②在4-200 之间,验证歌德巴赫猜想:任何一个充分大的偶数都可以表示为两个素数之和。输出4=2+2 6=3+3 …… 200=3+197 注:素数又称质数,指在一个大于1的自然数中,除了1和此整数自身外,不能被其他自然数(不包括0)整除的数。

(2)构思过程(可用文字、流程图、UML图等方式表达)

①判断是否为素数,应用比其小的数逐个去除,明显用到循环,而偶数中除2外其余均非素数,故只判断奇数即可,有因为多次判断是否为素数,可定义一个bool函数,如果是true,则输出素数,如果为false,则继续循环判断。

②偶数用素数表示,需要将偶数分成两个数相加,除4=2+2外,其余偶数均为应为两个奇数相加,故循环中注意判断分成的两个数是奇数并分别判断此两个数是否均为素数,判断素数可利用①中的bool函数来判断,当两个数均为素数时输出。

(3)程序源码

#include "stdafx.h"

#include

using namespace std;

bool num(int n)

{

if (n==2)

return true;

int j=0;

for (j=3;j

{

if (n%j==0)break;

}

if (n==j)

return true;

return false;

}

int _tmain(int argc, _TCHAR* argv[])

{

int a=0;int k;int p=0;

cout<<"-------素数--------"<

for (int i=2;i<200;i++)

{

if(num(i))

cout<

}

cout<

cout<<"--------用素数表示偶数-------"<

cout<<"4=2+2"<<" ";

for (int i=6;i<=200;i+=2)

{

for ( k=3;k

{

a=i-k;

if(num(k)&&num(a))

break;

}

cout<

p+=1;

if (p%6==0)

cout<

}

return 0;

}

(4)运行结果(截图)

(5)心得体会

由于除2外的素数均为奇数,所以判断时要从3开始,依次加2来判断,这样可以减少运算次数,用素数来表示偶数时也是如此,除4外,其余应为两个即是奇数又是素数的相加。

实验3 类与对象、构造与析构函数

3.1 实验目的和要求

1.掌握类的定义和使用。

2.掌握类的定义和对象的声明。

3.掌握具有不同访问属性的成员的访问方式。

4.深入体会构造函数、复制构造函数、析构函数的执行机制。5.使用的VC++的debug调试功能观察程序流程,跟踪观察类的构造函数、析构函数、

成员函数的执行顺序。

3.2 所占学时数

本实验安排4个实验课时。

3.3 实验任务

3.3.1 任务一

(1)题目名称

设计一个用于人事管理的People(人员)类。考虑到通用性,这里只抽象出所有类z型人员都具有的属性:number(编号)、sex (性别)、birthday(出生日期)、id(身份证号)等。其中"出生日期"定义为一个"日期"类内嵌子对象。用成员函数实现对人员信息的录入和显示。

要求包括:构造函数和析构函数、拷贝构造函数、内联成员函数、带缺省形参值的成员

函数、聚集。

(2)构思过程(可用文字、流程图、UML图等方式表达)

由于实验要求出生日期设为内嵌子对象,故要先写一个类

Date,构建出生日期的类,将出生日期设置为无返回值类型函数,其中包含参数不缺省的以及参数缺省的函数两种,然后,设计People类,在public中要写构造函数、拷贝构造函数、析构函数以及其他函数,构造函数应包含无参构造函数,有参构造函数,设性别设为内联函数。

(3)程序源码

#include

using namespace std;

class Date

{

private:

int Year;

int Month;

int Day;

public:

Date(){};

~Date(){};

Date(int year,int month,int day)

{

Year=year;

Month=month;

Day=day;

}

Date(int month,int day)

{

Year=1994;

Month=month;

Day=day;

}

void show1()

{

cout<<"出生日期:"<

}

};

class People

{

private:

int number;

int id;

Date date;

public:

People()

{

number=id=0;

}

People (int n,int i,Date d)

{

number=n;

id=i;

date=d;

}

~People ()

{

cout<<"pass"<

}

People(People&p)

{

number=p.number;

id=p.id;

date=p.date;

cout<<"copy"<

}

inline void sex (int a )

{

if (a==1)

cout <<"性别:"<<"女"<

else

cout <<"性别:"<<"男"<

};

void show2()

{

cout<<"编号是:"<

cout<<"身份证号:"<

date.show1() ;

}

};

int _tmain(int argc, _TCHAR* argv[]) {

Date d(1993,3,24);

People n1(001,123123123,d);

n1.show2 ();

n1.sex(1);

Date d1(7,4);

People n2(002,123123123,d1);

n2.show2 ();

n2.sex(2);

return 0;

}

(4)运行结果(截图)

(5)心得体会

1、要编写一个类,必须在脑中构架一个类的基本框架,熟知类包含哪几部分,明确自己要写什么,条理清晰,正确编写,才会使类的编写过程简单且完整。

2、在写内联函数时要注意使用关键字inline,注意内联函数使

用方式。

相关主题
文本预览
相关文档 最新文档