C++
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《C++程序设计》实现环节考核规定
2.1实践环节考核大纲
一、考核类型
上机考核
二、目的要求
《C++语言程序设计》是计算机科学与应用专业、信息管理专业(本科)的必修课,是培养学生实践动手能力的一门重要的专业课程,是为满足计算机应用领域与计算机应用人才的需要而设计的。C++语言是一种面向对象的编程语言,它集抽象性、封装性、继承性和多态性等面向对象特征于一体,可以帮助人们开发出具有较高数据抽象程度,能够充分体现信息隐蔽、软件重用、易修改、易扩充等特征的大型软件。
《C++语言程序设计》的实验采用Microsoft Visual C++6.0。通过上机实践,加深对课程的理解,更好地掌握程序设计的基本方法,增强实践动手能力。
三、考核环境
硬件:586以上的PC系列机,主频大于166MHz,内存大于256MB,硬盘空间大于500MB。
软件:中文Windows2000/NT/XP操作系统,Microsoft Visual C++6.0。
四、考核方法
考生抽取试题后,在45分钟内,完成试卷中所要求的全部内容,并作必要的记录。考试结束后,考生上交试卷。上机考核成绩由现场老师初评,经考点负责人审核签名,报主考院校核定。成绩分合格、不合格两类。
五、考核内容
掌握Microsoft Visual C++6.0集成开发环境的使用,新建工程,编辑含有类C++源文件,存取文件,编译文件,调试程序和运行程序。
模板。包括:函数模板、类模板,练习编制函数模板和类模板。
熟悉面向对象编程思想和多文件编程规范。
掌握公有继承的赋值兼容性规则、构造函数、复制构造函数和析构函数的设计方法。
练习各类运算符的重载。
熟悉使用文件的基本方法。
熟悉继承和包含以及虚函数的多态性。
六、参考书目
1.刘振安主编,《C++程序设计》,机械工业出版社2008年
2.雪万鹏译,《C++程序设计教程》,机械工业出版社2005年
3.钱能,《C++程序设计教程》,清华大学出版社 2006年
2.2 《C++程序设计》上机考核指导
《C++语言程序设计》是一门实践性很强的课程,必须通过反复上机练习,深入领悟面向对象程序设计的基本思想。通过实验教学加深理解和巩固课堂和教材所学的内容,提高实践动手能力。
实验一 Microsoft Visual C++6.0集成开发环境的使用
一、实验目的与要求
了解并初步掌握Microsoft Visual C++6.0集成开发环境的使用。
二、实验内容
创建项目(Project)
启动VC6.0
从主菜单中选择【文件】|【新建】命令,打开【新建】对话框。单击【工程】标签,从项目列表中单击Win32 Console Application选项;在【工程】文本框中输入项目的名字,如“hello”,系统将自动为用户的项目分配一个
默认的目录。
如果是Visual C++6.0,系统将显示一个询问项目类型的程序向导,选择an empty project(空项目)选项,单击【完成】按钮,显示新建项目信息;单击【确定】按钮结束。
添加程序代码
从主菜单中选择【文件】|【新建】命令,打开【新建】对话框。
在【新建】对话框中打开【文件】选项卡,单击C++Source File选择,建立源文件;选择“添加工程”复选框。在右边的“文件”文本框中为文件指定一个名字,如“hello”。
编辑源文件。在【工作区】窗口中单击FileVIEW标签,选择并打开该窗口中SourceFiles下的文件,如hello.app,在打开的【文件】窗口中输入源文件。
在项目文件中增加文件。若在已有的项目文件中增加一个新文件,如C++源文件“*.cpp”或头文件“*.h”需要执行以下操作。打开相应的项目文件,选择【新建】|【文件】命令,选择C++编辑栏Source选择,可增加C++源文件;或选择C/C++Head File选项增加 C/C++头文件。在【文件】文本框输入文件名,单击【确定】按钮。
编译源文件
先激活相应的源文件窗口,选择【编译】|【编译】命令或按Ctrl+F7键来编译源文件,形成目标文件(生成.obj文件),若该项目中有多个源文件,可依次激活并编译。
连接目标文件,形成可执行文件
选择【编译】|【连接】命令或快捷键F7连接程序,并形成可执行文件。此命令也可直接将项目中的所有源文件进行编译并连接形成可执行文件,使编译和连接的过程结合在一起。
运行程序
选择【编译】|【执行】命令或使用快捷键Ctrl+F5运行该程序,将显示一个类似于DOS的窗口,在窗口中第一行输出程序计算结果,第二行输出“Press any key to continue”,提示用户按任意键回到开发环境。
三、程序练习
定义一个关于日期的类,然后声明对象,判断该日期是否为闰年并输出。本题练习的是定义类和使用类的方法
#include
using namespace std;
class TDate
{
public:
void SetDate(int y,int m,int d);
int isLeapYear();
void Print();
private:
int year,month,day;
};
void TDate::SetDate(int y,int m,int d)
{
year=y;
month=m;
day=d;
}
int TDate::isLeapYear()
{
return (year%4==0 && year%100!=0)||(year%400==0);
}
void TDate::Print()
{
cout<
void main()
{
TDate date1,date2;
date1.SetDate(2004,5,4);
date2.SetDate(2005,4,9);
int leap=date1.isLeapYear();
date1.Print();
if(leap==1)
cout<<"是闰年!"<
cout<<"不是闰年!"<
leap=date2.isLeapYear();
if(leap==1)
cout<<"是闰年!"<
cout<<"不是闰年!"<
四、实验要求
按要求编写实验程序,将实验程序调试运行,写出程序的运行
结果,并提交实验报告,写出调试运行的分析和体会。
实验二 类和对象的使用
一、实验目的和要求
熟悉类的定义格式和类中成员的访问权限。
掌握对象的定义以及对象的初始化和赋值的操作。
掌握构造函数和析构函数的使用。
二、实验内容
编写一个程序,定义类CPeople包含个人信息名称、年龄、薪水。并在类中定义构造函数、析构函数。题目分析:注意构造函数、析构函数的定义规则。
源程序代码:
#include
#include
using namespace std;
//类Cpeople的定义
class CPeople
{
int m_nAge;
float m_fSalary;
char* m_pstrName;
public:
CPeople(); //缺省构造函数
CPeople(int age,float salary,char *name); //带参数的构造函数
CPeople(const CPeople&); //拷贝构造函数
~CPeople(); //析构函数
char *GetName();
float GetSalary();
void SetSalary(float);
int GetAge();
void SetAge(int age);
};
CPeople::CPeople()
{
m_nAge=20;
m_fSalary=3000.00f;
m_pstrName=new char[20];
strcpy(m_pstrName,"无名氏");
}
CPeople::CPeople(int age,float salary,char *name)
{
m_nAge=age;
m_fSalary=salary;
m_pstrName=new char[20];
strcpy(m_pstrName,name);
}
CPeople::CPeople(const CPeople&AnotherPeople)
{
m_nAge=AnotherPeople.m_nAge;
m_fSalary=AnotherPeople.m_fSalary;
m_pstrName=new char[20];
strcpy(m_pstrName,AnotherPeople.m_pstrName);
}
CPeople::~CPeople()
{
if(m_pstrName!=NULL) delete []m_pstrName;
}
char *CPeople::GetName()
{
return m_pstrName;
}
int CPeople::GetAge()
{
return m_nAge;
}
void CPeople::SetAge(int age)
{
if(age<=0)
cout<<"设置的年龄不合法"<
m_nAge=age;
}
float CPeople::GetSalary()
{
return m_fSalary;
}
void CPeople::SetSalary(float num)
{
if(num<0)
cout<<"设置的薪水数目不合法"<
m_fSalary=num;
}
void main()
{
CPeople ZhangSan(65,2000.00f,"张 三");
cout<<"以下为个人信息:\n姓名,年龄,薪水"<
cout<
CPeople A;
A.SetAge(34);
A.SetSalary(4000.00f);
cout<
CPeople B(ZhangSan);
cout<
三、实验和要求
按要求编写实验程序,将实验程序调试运行,写出程序的运行结果,并提交实验报告,写出调试运行的分析和体会。
实验三 继承与派生
一、实验目的和要求
(1)掌握派生类的定义方法和派生类构造函数的定义方法。
(2)掌握不同继承方法的情况下,基类成员函数在派生类中的访问权限。
(3)了解派生
类的构造函数和析构函数的执行顺序。了解多重继承的定义方法,多重继承的构造函数和析构函数的使用。
二、实验内容
在类CPeople的基础上,派生出学生类CStudent,并实现对学生成绩的统计和输出。
源程序代码:
#include
#include
#define MAXNUM 10
using namespace std;
class CPeople
{
int m_nAge;
public:
char* m_pstrName;
CPeople(int age,char *name);
~CPeople();
int GetAge();
void SetAge(int age);
void CopyPeople(CPeople *pAnother);
};
CPeople::CPeople(int age,char *name)
{
m_nAge=age;
m_pstrName=new char[20];
strcpy(m_pstrName,name);
}
CPeople::~CPeople()
{
if(m_pstrName!=NULL) delete []m_pstrName;
}
int CPeople::GetAge()
{
return m_nAge;
}
void CPeople::SetAge(int age)
{
m_nAge=age;
}
void CPeople::CopyPeople(CPeople *pAnother)
{
m_nAge=pAnother->m_nAge;
strcpy(m_pstrName,pAnother->m_pstrName);
}
class CStudent:public CPeople
{
float m_ArrayScore[MAXNUM]; //用来存放成绩的数组
protected:
int m_stuNo; //学号
int m_courseNum; //课程数目
float m_aScore; //平均成绩
public:
CStudent(int age,int No,int Num,char* pName="no name"):CPeople(age,pName)
{
m_stuNo=No;
m_courseNum=Num;
m_aScore=0.0f;
//初始化成绩数组
cout<<"请输入学生"<
}
void CaculateAverageScore()
{
float SUM=0.0f;
for(int i;i
SUM+=m_ArrayScore[i];
}
m_aScore=SUM/m_courseNum;
}
float GetM_aScore(){return m_aScore;}
friend ostream &operator <<(ostream &out,const CStudent &s);
};
ostream &operator <<(ostream &out,const CStudent &s)
{
out<<"学生姓名"<
out<
out<<"平均成绩="<
}
void main()
{
CStudent stu1(16,29,3,"张三");
stu1.CaculateAverageScore();
cout<
注意:VC++6.0 不支持插入操作符和提取操作符作为友元运算符重载,故改造如下:
#include
#include
#define MAXNUM 10
using namespace std;
class CPeople
{
int m_nAge;
public:
char* m_pstrName;
CPeople(int age,char *name);
~CPeople();
int GetAge();
void SetAge(int age);
void CopyPeople(CPeople *pAnother);
};
CPeople::CPeople(int age,char *name)
{
m_nAge=age;
m_pstrName=new char[20];
strcpy(m_pstrName,name);
}
CPeople::~CPeople()
{
if(m_pstrName!=NULL) delete []m_pstrName;
}
int CPeople::GetAge()
{
return m_nAge;
}
void CPeople::SetAge(int age)
{
m_nAge=age;
}
void CPeople::CopyPeople(CPeople *pAnother)
{
m_nAge=pAnother->m_nAge;
strcpy(m_pstrName,pAnother->m_pstrName
);
}
class CStudent:public CPeople
{
float m_ArrayScore[MAXNUM]; //用来存放成绩的数组
protected:
int m_stuNo; //学号
int m_courseNum; //课程数目
float m_aScore; //平均成绩
public:
CStudent(int age,int No,int Num,char* pName="no name"):CPeople(age,pName)
{
m_stuNo=No;
m_courseNum=Num;
m_aScore=0.0f;
//初始化成绩数组
cout<<"请输入学生"<
}
void CaculateAverageScore()
{
float SUM=0.0f;
for(int i=0;i
SUM+=m_ArrayScore[i];
}
m_aScore=SUM/m_courseNum;
}
float GetM_aScore(){return m_aScore;}
ostream &operator <<(ostream &out);
};
ostream & CStudent::operator<<(ostream &out)
{
out<<"学生姓名"<
out<
out<<"平均成绩="<
}
void main()
{
CStudent stu1(16,29,3,"张三");
stu1.CaculateAverageScore();
stu1<
三、实验和要求
按要求编写实验程序,将实验程序调试运行,写出程序的运行结果,并提交实验报告,写出调试运行的分析和体会。
实验四 模板的使用
一、实验目的和要求
了解函数模板、类模板的概念,练习编制函数模板和类模板。
二、实验内容
编写一个程序,使用类模板对数组进行排序、查找和求元素和的程序。
要求:设计一个类模板template
源程序代码:
#include
#include
using namespace std;
template
class Array
{
T *set;
int n;
public:
Array(T *data,int i){set=data;n=i;};
~Array(){};
void sort(); //排序
int seek(T key); //查找指定的元素
T SUM(); //求和
void disp(); //显示所有的元素
};
template
void Array
{
int i,j;
T temp;
for(i=1;i
if(set[j-1]>set[j])
{
temp=set[j-1];set[j-1]=set[j];set[j]=temp;
}
}
template
int Array
{
int i;
for(i=0;i
return -1;
}
template
T Array
{
T s=o;
int i;
for(i=0;i
return s;
}
template
void Array
{
int i;
for(i=0;i
void main()
{
int a[]={6,3,8,1,9,4,7,5,2};
double b[]={2.3,6.1,1.5,8.4,6.7,3.8};
Array
Array
cout<<"arr1"<
arr1.disp();
cout<<"8 在arr1中的位置:"<
seek(8)<
cout<<"排序后:";
arr1.disp();
cout<<"arr2"<
arr2.disp();
cout<<"8.4 在arr2中的位置:"<
cout<<"排序后:";
arr2.disp();
}
三、实验和要求
按要求编写实验程序,将实验程序调试运行,写出程序的运行结果,并提交实验报告,写出调试运行的分析和体会。
实验五 使用向量
一、实验目的和要求
练习使用向量解决实际问题。
二、实验内容
利用向量编写程序;出圈游戏。假设有人为n的一个小组,他们顺时针方向围坐一圈。一开始任选一个正整数作为报数的上限值m,从第一个人开始按顺时针方向自star开始顺序报数,报到m时停止报数并出列。如此下去,直到所有人全部出列为止。要求按他们出列的顺序输出他们的名字。
源程序代码:
#include
#include
#include
using namespace std;
void fun(vector
{
vector
unsigned j=1; //报数
while(j<=rm)
{
ri++;
if(ri>=rc.size()) //到终点,返回到第一个位置计数
ri=0;
j++;
}
cout<
if(ri>=rc.size()) ri=0; //到终点,返回到第一个位置计数
}
void main()
{
unsigned length=0,m,star,i;
cout<<"请输入人数:";
cin>>length;
vector
cout<<"请输入报数上限值m (m<=20)";
cin>>m;
while(m>20)
{
cout<<"报数上限值太大,请重新输入:";
cin>>m;
}
cout<<"从第几个人的位置开始报数(不能大于"<
while(star>c.size())
{
cout<<"开始位置大于人数,重新输入:";
cin>>star;
}
cout<<"准备输入名字"<
cout<<"第"<cin>>c[i];
}
i=star-1; //计数位置初始值
while(c.size()>1)
{
fun(c,m,i);
}
cout<
三、实验和要求
按要求编写实验程序,将实验程序调试运行,假设参加游戏的人数为5人,间隔数选10,从第三个人的位置开始报数,5个人的名字依次为:李红、王强、李四、王五,写出程序的运行结果,并提交实验报告,写出调试运行的分析和体会。
实验六 多态性和虚函数
一、实验目的和要求
熟悉继承和包含以及虚函数的多态性。
二、实验内容
建立工程文件、类在头文件(employee.h)中声明、类在源文件(empfun.cpp)实现、在源文件(sy10_4.cpp)中编写主程序。
程序实现的基本功能:小公司人员管理信息。
某小公司主要有3类人员:经理、兼职技术人员、兼职销售员。这些人员分别具有以下属性。
经理 :姓名、编
号、固定工资、当月薪水、计算月薪、显示信息;
兼职技术人员:姓名、编号、工作小时、每小时工资额、当月薪水、计算月薪、显示信息;
兼职销售员 :姓名、编号、销售额、销售额提成、当月薪水、计算月薪、显示信息;
要求:
人员编号基数为1000,每输入一个人员信息编码加1;
月薪计算办法是经理固定月薪8000元;
兼职技术人员按100元、小时领取月薪;
兼职销售员按当月销售额的4%提成。
根据题目要求,设计一个基数emplyee,然后派生出technician(兼职技术人员)类、manager(经理)类和salesman(兼职销售员)类。
源程序代码:
//employee.h 头文件
#include
#include
using namespace std;
class employee //定义职员类
{
protected:
char *name; //定义姓名
int EmpNo; //个人编号
double SUMPay; //月薪总额
static int employeeNo; //本公司职员编号目前最大值
public:
employee();
~employee();
virtual void pay()=0; //计算月薪函数,解决:虚函数
void displayStatus(); //显示人员信息
};
class technician:public employee //兼职技术人员类(公有派生)
{
protected:
float hourlyRate; //每小时酬金
int workHours; //当月工作时数
public:
technician();
void pay(); //计算月薪
void displayStatus(); //显示人员信息
};
class salesman:public employee //兼职销售员类(公有派生)
{
protected:
double CommRate; //提成百分比
double sales; //当月销售额
public:
salesman();
void pay(); //计算月薪
void displayStatus(); //显示人员信息
};
class manager: virtual public employee //经理类(公有派生)
{
protected:
float monthlyPay; //固定月薪
public:
manager();
void pay(); //计算月薪
void displayStatus(); //显示人员信息
};
//empfun.cpp
#include
#include
using namespace std;
#include "employee.h"
int employee::employeeNo=1000; //员工编号基数
employee::employee()
{
char str[20];
cout<<"\n 输入雇员姓名";
cin>>str;
name=new char[strlen(str)+1]; //动态申请
strcpy(name,str);
EmpNo=employeeNo++; //新员工编号自动生成
SUMPay=0.0; //月薪总额初始0
}
employee::~employee()
{
delete []name; //释放空间
}
void employee::displayStatus()
{
cout<
technician::technician()
{
hourlyRate=100; //每小时酬金100元
}
void technician::pay()
{
cout<<"输入本月工作时数:";
cin>>workHours;
SUMPay=hourlyRate*workHours;
}
void technician::displayStatus()
{
cout<<"兼职技术人员:";
employee::displayStatus();
}
salesman::salesm
an()
{
CommRate=0.04; //提成比例
}
void salesman::pay()
{
cout<<"输入本月销售额:";
cin>>sales;
SUMPay=sales*CommRate; //月薪=销售提成
}
void salesman::displayStatus()
{
cout<<"销售员:";
employee::displayStatus();
}
manager::manager()
{
monthlyPay=8000;
}
void manager::pay()
{
SUMPay=monthlyPay; //月薪总额=固定月薪
}
void manager::displayStatus()
{
cout<<"经理:";
employee::displayStatus();
}
//sy10_4.cpp
#include
#include
using namespace std;
#include "employee.h"
void main()
{
//经理
manager m1;
m1.pay();
m1.displayStatus();
//兼职技术人员
technician t1;
t1.pay();
t1.displayStatus();
//兼职销售员
salesman s1;
s1.pay();
s1.displayStatus();
cout<<"\n使基类指针指向子类对象"<
for(int i=0;i<3;i++)
ptr[i]->displayStatus();
}
三、实验和要求
按要求编写实验程序,将实验程序调试运行,写出程序的运行结果,并提交实验报告,写出调试运行的分析和体会。
实验七 缺少
一、实验目的和要求
实验八 文件读写
一、实验目的和要求
熟悉使用文件的基本方法。熟悉标准流对象cin和cout的使用方法,掌握系统提供的输入操作和输出操作函数。
二、实验内容
简单通讯录:编写一个简单的通讯录程序,在文件myNote中记录朋友的姓名、年龄和电话号码,允许用户向其中添加信息,根据姓名查询或显示所有信息。
源程序代码:
#include
#include
#include "iomanip"
#include "fstream"
using namespace std;
class MyFriend
{
private:
unsigned int age;
string name;
string telephoneNo;
public:
void getdata()
{
cin>>name>>age>>telephoneNo;
}
void disp()
{
cout<
string getname()
{
return name;
}
};
void outDate()
{
ifstream input("myNote.dat");
MyFriend myfriend;
cout<<"输入数据:"<
while(input)
{
myfriend.disp();
input.read((char*)&myfriend,sizeof(myfriend));
}
input.close();
}
void searchByName()
{
string sname;
bool ifFind=false;
MyFriend myfriend;
ifstream file("myNote.dat");
file.seekg(0);
cout<<"输入要查询的姓名:";
cin>>sname;
cout<
{
if(myfriend.getname()==sname)
{
myfriend.disp();
ifFind=true;
break;
}
};
if(!ifFind)
cout<<"对不起,没有找到!"<
}
void addDate()
{
fstream file("myNote.dat",ios::out|ios::app);
MyFriend myfriend;
cout<<"添加数
据(姓名 年龄 电话):";
myfriend.getdata();
file.write((char *)&myfriend,sizeof(myfriend));
file.close();
}
void main()
{
int select;
do
{
cout<<"选择(1:输出数据 2:按姓名查询 3:添加数据 其他数字:退出):";
cin>>select;
switch(select)
{
case 1: outDate();break;
case 2: searchByName();break;
case 3: addDate();break;
default:break;
}
}while(select==1||select==2||select==3);
}
三、实验和要求
按要求编写实验程序,将实验程序调试运行,写出程序的运行结果,并提交实验报告,写出调试运行的分析和体会。