1、《C++程序设计》实现环节考核规定 2.1实践环节考核大纲 一、考核类型 上机考核 二、目的要求 《C++语言程序设计》是计算机科学与应用专业、信息管理专业(本科)的必修课,是培养学生实践动手能力的一门重要的专业课程,是为满足计算机应用领域与计算机应用人才的需要而设计的。C++语言是一种面向对象的编程语言,它集抽象性、封装性、继承性和多态性等面向对象特征于一体,可以帮助人们开发出具有较高数据抽象程度,能够充分体现信息隐蔽、软件重用、易修改、易扩充等特征的大型软件。 《C++语言程序设计》的实验采用Microsoft Visual C++6.0。通过上机实践,加深对课程的理解,
2、更好地掌握程序设计的基本方法,增强实践动手能力。 三、考核环境 硬件:586以上的PC系列机,主频大于166MHz,内存大于256MB,硬盘空间大于500MB。 软件:中文Windows2000/NT/XP操作系统,Microsoft Visual C++6.0。 四、考核方法 考生抽取试题后,在45分钟内,完成试卷中所要求的全部内容,并作必要的记录。考试结束后,考生上交试卷。上机考核成绩由现场老师初评,经考点负责人审核签名,报主考院校核定。成绩分合格、不合格两类。 五、考核内容 l 掌握Microsoft Visual C++6.0集成开发环境的使用,新建工程,编辑含有类
3、C++源文件,存取文件,编译文件,调试程序和运行程序。 l 模板。包括:函数模板、类模板,练习编制函数模板和类模板。 l 熟悉面向对象编程思想和多文件编程规范。 l 掌握公有继承的赋值兼容性规则、构造函数、复制构造函数和析构函数的设计方法。 l 练习各类运算符的重载。 l 熟悉使用文件的基本方法。 l 熟悉继承和包含以及虚函数的多态性。 六、参考书目 1.刘振安主编,《C++程序设计》,机械工业出版社2008年 2.雪万鹏译,《C++程序设计教程》,机械工业出版社2005年 3.钱能,《C++程序设计教程》,清华大学出版社 2006年 2.2 《C++程序设计》
4、上机考核指导 《C++语言程序设计》是一门实践性很强的课程,必须通过反复上机练习,深入领悟面向对象程序设计的基本思想。通过实验教学加深理解和巩固课堂和教材所学的内容,提高实践动手能力。 实验一 Microsoft Visual C++6.0集成开发环境的使用 一、 实验目的与要求 了解并初步掌握Microsoft Visual C++6.0集成开发环境的使用。 二、 实验内容 (1) 创建项目(Project) 1、 启动VC6.0 2、 从主菜单中选择【文件】|【新建】命令,打开【新建】对话框。单击【工程】标签,从项目列表中单击Win32 Console Applica
5、tion选项;在【工程】文本框中输入项目的名字,如“hello”,系统将自动为用户的项目分配一个默认的目录。 3、 如果是Visual C++6.0,系统将显示一个询问项目类型的程序向导,选择an empty project(空项目)选项,单击【完成】按钮,显示新建项目信息;单击【确定】按钮结束。 (2) 添加程序代码 1、 从主菜单中选择【文件】|【新建】命令,打开【新建】对话框。 2、 在【新建】对话框中打开【文件】选项卡,单击C++Source File选择,建立源文件;选择“添加工程”复选框。在右边的“文件”文本框中为文件指定一个名字,如“hello”。 3、 编辑源文件。在
6、工作区】窗口中单击FileVIEW标签,选择并打开该窗口中SourceFiles下的文件,如hello.app,在打开的【文件】窗口中输入源文件。 4、 在项目文件中增加文件。若在已有的项目文件中增加一个新文件,如C++源文件“*.cpp”或头文件“*.h”需要执行以下操作。打开相应的项目文件,选择【新建】|【文件】命令,选择C++编辑栏Source选择,可增加C++源文件;或选择C/C++Head File选项增加 C/C++头文件。在【文件】文本框输入文件名,单击【确定】按钮。 (3) 编译源文件 先激活相应的源文件窗口,选择【编译】|【编译】命令或按Ctrl+F7键来编译源文件,
7、形成目标文件(生成.obj文件),若该项目中有多个源文件,可依次激活并编译。 (4) 连接目标文件,形成可执行文件 选择【编译】|【连接】命令或快捷键F7连接程序,并形成可执行文件。此命令也可直接将项目中的所有源文件进行编译并连接形成可执行文件,使编译和连接的过程结合在一起。 (5) 运行程序 选择【编译】|【执行】命令或使用快捷键Ctrl+F5运行该程序,将显示一个类似于DOS的窗口,在窗口中第一行输出程序计算结果,第二行输出“Press any key to continue”,提示用户按任意键回到开发环境。 三、 程序练习 定义一个关于日期的类,然后声明对象,判断该日期是
8、否为闰年并输出。本题练习的是定义类和使用类的方法
#include
9、ear()
{
return (year%4==0 && year%100!=0)||(year%400==0);
}
void TDate::Print()
{
cout< 10、年!"< 11、
(3) 掌握构造函数和析构函数的使用。
二、 实验内容
1. 编写一个程序,定义类CPeople包含个人信息名称、年龄、薪水。并在类中定义构造函数、析构函数。题目分析:注意构造函数、析构函数的定义规则。
源程序代码:
#include 12、 //缺省构造函数
CPeople(int age,float salary,char *name); //带参数的构造函数
CPeople(const CPeople&); //拷贝构造函数
~CPeople(); //析构函数
char *GetName();
float GetSalary();
void SetSalary(float);
int GetAge();
void SetAge(in 13、t 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(con 14、st 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;
15、}
int CPeople::GetAge()
{
return m_nAge;
}
void CPeople::SetAge(int age)
{
if(age<=0)
cout<<"设置的年龄不合法"< 16、fSalary=num;
}
void main()
{
CPeople ZhangSan(65,2000.00f,"张 三");
cout<<"以下为个人信息:\n姓名,年龄,薪水"< 17、00f);
cout< 18、和要求
(1)掌握派生类的定义方法和派生类构造函数的定义方法。
(2)掌握不同继承方法的情况下,基类成员函数在派生类中的访问权限。
(3)了解派生类的构造函数和析构函数的执行顺序。了解多重继承的定义方法,多重继承的构造函数和析构函数的使用。
二、实验内容
在类CPeople的基础上,派生出学生类CStudent,并实现对学生成绩的统计和输出。
源程序代码:
#include 19、Age;
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:: 20、~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 CStude 21、nt: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= 22、Num;
m_aScore=0.0f;
//初始化成绩数组
cout<<"请输入学生"< 23、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<<"学生姓名"< 24、
out< 25、ng 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 ch 26、ar[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_ 27、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"):CPeopl 28、e(age,pName)
{
m_stuNo=No;
m_courseNum=Num;
m_aScore=0.0f;
//初始化成绩数组
cout<<"请输入学生"< 29、um;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<<"学生姓名"< 30、eNum;i++)
{
out< 31、板、类模板的概念,练习编制函数模板和类模板。
二、实验内容
编写一个程序,使用类模板对数组进行排序、查找和求元素和的程序。
要求:设计一个类模板template 32、ic:
Array(T *data,int i){set=data;n=i;};
~Array(){};
void sort(); //排序
int seek(T key); //查找指定的元素
T SUM(); //求和
void disp(); //显示所有的元素
};
template 33、
int i,j;
T temp;
for(i=1;i 34、T Array 35、int>arr1(a,9);
Array 36、cout<<"排序后:";
arr2.disp();
}
三、实验和要求
按要求编写实验程序,将实验程序调试运行,写出程序的运行结果,并提交实验报告,写出调试运行的分析和体会。
实验五 使用向量
一、实验目的和要求
练习使用向量解决实际问题。
二、实验内容
利用向量编写程序;出圈游戏。假设有人为n的一个小组,他们顺时针方向围坐一圈。一开始任选一个正整数作为报数的上限值m,从第一个人开始按顺时针方向自star开始顺序报数,报到m时停止报数并出列。如此下去,直到所有人全部出列为止。要求按他们出列的顺序输出他们的名字。
源程序代码:
#include 37、tream>
#include 38、out< 39、报数上限值太大,请重新输入:";
cin>>m;
}
cout<<"从第几个人的位置开始报数(不能大于"< 40、 //计数位置初始值
while(c.size()>1)
{
fun(c,m,i);
}
cout< 41、n.cpp)实现、在源文件(sy10_4.cpp)中编写主程序。
程序实现的基本功能:小公司人员管理信息。
某小公司主要有3类人员:经理、兼职技术人员、兼职销售员。这些人员分别具有以下属性。
经理 :姓名、编号、固定工资、当月薪水、计算月薪、显示信息;
兼职技术人员:姓名、编号、工作小时、每小时工资额、当月薪水、计算月薪、显示信息;
兼职销售员 :姓名、编号、销售额、销售额提成、当月薪水、计算月薪、显示信息;
要求:
人员编号基数为1000,每输入一个人员信息编码加1;
月薪计算办法是经理固定月薪8000元;
兼职技术人员按100元、小时领取月薪;
42、兼职销售员按当月销售额的4%提成。
根据题目要求,设计一个基数emplyee,然后派生出technician(兼职技术人员)类、manager(经理)类和salesman(兼职销售员)类。
源程序代码:
//employee.h 头文件
#include 43、 //个人编号
double SUMPay; //月薪总额
static int employeeNo; //本公司职员编号目前最大值
public:
employee();
~employee();
virtual void pay()=0; //计算月薪函数,解决:虚函数
void displayStatus(); //显示人员信息
};
class technician:public employee //兼职技术人员类(公有派生)
{
protected:
float hourly 44、Rate; //每小时酬金
int workHours; //当月工作时数
public:
technician();
void pay(); //计算月薪
void displayStatus(); //显示人员信息
};
class salesman:public employee //兼职销售员类(公有派生)
{
protected:
double CommRate; //提成百分比
double sales; 45、 //当月销售额
public:
salesman();
void pay(); //计算月薪
void displayStatus(); //显示人员信息
};
class manager: virtual public employee //经理类(公有派生)
{
protected:
float monthlyPay; //固定月薪
public:
manager();
void pay(); //计算月薪
void 46、displayStatus(); //显示人员信息
};
//empfun.cpp
#include 47、py(name,str);
EmpNo=employeeNo++; //新员工编号自动生成
SUMPay=0.0; //月薪总额初始0
}
employee::~employee()
{
delete []name; //释放空间
}
void employee::displayStatus()
{
cout< 48、 hourlyRate=100; //每小时酬金100元
}
void technician::pay()
{
cout<<"输入本月工作时数:";
cin>>workHours;
SUMPay=hourlyRate*workHours;
}
void technician::displayStatus()
{
cout<<"兼职技术人员:";
employee::displayStatus();
}
salesman::salesman()
{
CommRate=0.04; //提成比例
} 49、
void salesman::pay()
{
cout<<"输入本月销售额:";
cin>>sales;
SUMPay=sales*CommRate; //月薪=销售提成
}
void salesman::displayStatus()
{
cout<<"销售员:";
employee::displayStatus();
}
manager::manager()
{
monthlyPay=8000;
}
void manager::pay()
{
SUMPay=monthlyPay; //月薪总额=固定月薪
50、}
void manager::displayStatus()
{
cout<<"经理:";
employee::displayStatus();
}
//sy10_4.cpp
#include






