C程序设计实验指导书.docx
《C程序设计实验指导书.docx》由会员分享,可在线阅读,更多相关《C程序设计实验指导书.docx(10页珍藏版)》请在冰豆网上搜索。
C程序设计实验指导书
《C++程序设计》实验指导书
信息工程阮幼林
《C++程序设计》实验教学大纲
课程编号:
课程名称:
C++程序设计/TheC++Programming
实验总学时数:
8学时
适应专业:
信息工程专业
承担实验室:
信息工程专业实验室
一、实验教学的目的和任务
本课程通过学习类的抽象性、封装性、继承性和多态性等概念及其运用,有助于学生开发出具有数据抽象程序高、体现信息隐藏、可复用、易修改、易扩充的模块化程序,逐步掌握C++面向对象的过程和面向对象的功能。
为进一步学习后续课程和将来从事应用软件开发奠定良好的基础。
通过本实验课程的目的是使学生掌握有关C++语言的基本概念、基本语法和编程方法,理解C++语言面向对象的重要特征;促使学生理论联系实际,能够灵活运用自己所学的理论知识进行程序开发,增强学生的实践动手技能,并能够提高学生独立分析问题和解决问题的能力。
二、实验项目及学时分配
序号
实验项目名称
实验学时
实验类型
要求
1
类与对象的操作
2
验证
必做
2
运算符重载
2
验证
必做
3
虚函数运用
2
验证
必做
4
输入输出流
2
验证
必做
三、每项实验的内容和要求
实验设备:
计算机一台,VC++6.0
实验一:
类与对象的操作
一、实验内容
1.定义学生类student,包括数据成员和成员函数;
2.建立对象并调用成员函数,输出学生信息。
二、实验要求
(1)理解面向对象程序设计的基本方法。
(2)掌握C++类的概念和类的定义方法,理解类和对象之间的关系。
(3)熟悉掌握成员函数的定义与调用。
实验二:
运算符重载
一、实验内容
定义复数类,重载复数的加“+”和“-”运算符,完成复数的加法与减法。
二、实验要求
(1)理解运算符重载的概念。
(2)熟练掌握运算符重载的方法,包括成员函数和友元函数重载。
实验三:
虚函数运用
一、实验内容
(1)对基类学生继承,分别输出基类和派生类的信息。
(2)对虚函数的定义及运用
二、实验要求
(1)理解类层次的概念及实现类层次的方法,掌握派生的类别与方式。
(2)掌握派生类中如何使用基类的成员、基类成员在派生类中的访问控制。
(3)理解派生类中构造函数与析构函数的定义方法和执行顺序。
实验四:
输入输出流
一、实验内容
(1)编写程序,实现对ASCII文件和二进制文件的读写操作。
二、实验要求
(1)理解I/O流的概念、输入/输出流类的层次概念。
(2)熟练掌握格式化输入/输出、磁盘文件的输入/输出方法。
四、实验改革与特色
着重培养学生的实际动手操作能力,使学生通过本实验课的学习能够熟悉面向对象设计方法及其实现方法,理解和掌握基于C++的程序开发,提高编程能力和综合应用能力。
使学生能够将理论和实际紧密结合,做到学有所用。
五、教材及实验指导书
教材:
《C++程序设计》(第2版),主编:
谭浩强,出版社:
清华大学出版社,2014.8。
实验指导书:
《C++程序设计题解与上机指导》(第2版),主编:
谭浩强,清华大学出版社,2014.6。
执笔:
阮幼林日期:
2015.12
审阅:
郑林日期:
2015.12
审定:
日期:
2015.12
实验1类与对象的操作
实验目的:
(1)掌握类与对象的定义与使用方法;
(2)初步掌握构造函数的定义与使用方法;
(3)初步掌握析构函数的定义与使用方法;
(4)理解构造函数与析构函数的调用过程。
实验内容:
定义学生类student,包括数据成员和成员函数;建立对象并调用成员函数,输出学生信息。
实验步骤:
(1)定义学生类student,包括数据成员和成员函数;
classStudent//声明Student类
{
voiddisplay()//定义成员函数
{cout<<″num:
″<cout<<″name:
″<cout<<″sex:
″<private:
//定义数据成员
intnum;
charname[10];
charsex;
};
(2)加入构造函数与析构函数。
public:
student(intn,stringnam,chars)//定义构造函数
{num=n;name=nam;sex=s;}
~Student()//定义析构函数
{cout<<″Destructorcalled.″<(3)建立对象并调用成员函数,输出学生信息。
intmain()
{Studentstud1(10010,″Wang_li″,′f′);//建立对象stud1
stud1.display();//输出学生1的数据
Studentstud2(10011,″Zhang_fun″,′m′);//定义对象stud2
stud2.display();//输出学生2的数据
return0;
}
(4)编译运行源程序;写出运行结果。
(5)加入其它数据成员,修改成员函数,编译运行程序。
实验2运算符重载
实验目的:
(1)理解运算符重载的概念。
(2)熟练掌握运算符重载的方法,包括成员函数和友元函数重载。
实验内容:
重载复数的“+”和“-”运算符,完成复数的加法与减法。
实验步骤:
(1)定义复数类
classComplex//定义Complex类
{public:
Complex(){real=0;imag=0;}//定义构造函数
Complex(doubler,doublei){real=r;imag=i;}//构造函数重载
voiddisplay();//声明输出函数
private:
doublereal;//实部
doubleimag;//虚部
};
(2)加入重载运算符+的函数
Complexoperator+(Complex&c2);//声明重载运算符的函数
ComplexComplex∷operator+(Complex&c2)//定义重载运算符的函数
{Complexc;
c.real=real+c2.real;
c.imag=imag+c2.imag;
returnc;
}
(3)建立对象并调用重载函数,实现复数加法。
intmain()
{Complexc1(3,4),c2(5,-10),c3;
c3=c1+c2;//运算符+用于复数运算
cout<<″c1=″;c1.display();
cout<<″c2=″;c2.display();
cout<<″c1+c2=″;c3.display();
return0;
}
(4)加入重载运算符-的函数,实现复数减法。
实验3虚函数的运用
实验目的:
(1)理解继承与派生的概念;
(2)掌握派生类定义格式与使用方法;
(3)初步掌握派生类构造函数的定义与使用方法,理解构造函数的调用过程,及基类成员的初始化过程;
(4)虚函数的定义及运用;
实验内容:
对基类学生继承,分别输出基类和派生类的信息。
实现虚函数的定义及运用。
实验步骤:
(1)定义基类
classStudent//声明基类Student
{public:
Student(intn,stringnam,chars)//基类构造函数
{num=n;
name=nam;
sex=s;}
~Student(){}//基类析构函数
protected:
//保护部分
intnum;
stringname;
charsex;
};
(2)定义派生类
classStudent1:
publicStudent//声明派生类Student1
{public:
//派生类的公用部分
Student1(intn,stringnam,chars,inta,stringad):
Student(n,nam,s)
//派生类构造函数
{age=a;//在函数体中只对派生类新增的数据成员初始化
addr=ad;
}
voidshow()
{cout<<″num:
″<cout<<″name:
″<cout<<″sex:
″<cout<<″age:
″<cout<<″address:
″<}
~Student1(){}//派生类析构函数
private:
//派生类的私有部分
intage;
stringaddr;
};
(3)定义对象,输出基类和派生类对象的信息。
(4)不同继承方式和包含子对象的派生类的情况下,如何输出信息。
(5)多层继承下虚函数的定义及运用。
实验4输入输出流
实验目的:
(1)理解C++的输入输出流
(2)掌握标准输入流和输出流
(3)掌握文件操作与文件流。
实验内容:
实现对ASCII文件和二进制文件的读写操作
实验步骤:
(1)键盘读入字符,把字母字符存入磁盘文件f1.dat,
ofstreamoutfile(″f1.dat″);//定义输出文件流对象outfile,以输出方式打开磁盘文件f2.dat
charc[80];cin.getline(c,80);//从键盘读入一行字符
for(inti=0;c[i]!
=0;i++)//对字符逐个处理,直到遇′/0′为止
if(c[i]>=65&&c[i]<=90||c[i]>=97&&c[i]<=122)//如果是字母字符
{outfile.put(c[i]);//将字母字符存入磁盘文件f1.dat
cout<cout<outfile.close();
}
(2)再从磁盘文件读入,将大写字母改成小写字母,再存入磁盘文件f2.dat。
charch;
ifstreaminfile(″f1.dat″,ios:
:
in|ios:
:
nocreate);//定义输入文件流outfile,
ofstreamoutfile(″f2.dat″);//定义输出文件流outfile
while(infile.get(ch))
{if(ch>=97&&ch<=122)//判断ch是否为小写字母
ch=ch-32;//将小写字母变为大写字母
outfile.put(ch);//将该大写字母存入磁盘文件f2.dat
cout<}
cout<infile.close();
outfile.close();
}
(3)主函数实现上述功能。
(4)自行设计对二进制文件的读写控制。