版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
《C++程序设计》实现环节考核规定2.1实践环节考核大纲一、考核类型 上机考核二、目的要求 《C++语言程序设计》是计算机科学与应用专业、信息管理专业(本科)的必修课,是培养学生实践动手能力的一门重要的专业课程,是为满足计算机应用领域与计算机应用人才的需要而设计的。C++语言是一种面向对象的编程语言,它集抽象性、封装性、继承性和多态性等面向对象特征于一体,可以帮助人们开发出具有较高数据抽象程度,能够充分体现信息隐蔽、软件重用、易修改、易扩充等特征的大型软件。 《C++语言程序设计》的实验采用MicrosoftVisualC++6.0。通过上机实践,加深对课程的理解,更好地掌握程序设计的基本方法,增强实践动手能力。三、考核环境 硬件:586以上的PC系列机,主频大于166MHz,内存大于256MB,硬盘空间大于500MB。 软件:中文Windows2000/NT/XP操作系统,MicrosoftVisualC++6.0。四、考核方法 考生抽取试题后,在45分钟内,完成试卷中所要求的全部内容,并作必要的记录。考试结束后,考生上交试卷。上机考核成绩由现场老师初评,经考点负责人审核签名,报主考院校核定。成绩分合格、不合格两类。五、考核内容掌握MicrosoftVisualC++6.0集成开发环境的使用,新建工程,编辑含有类C++源文件,存取文件,编译文件,调试程序和运行程序。模板。包括:函数模板、类模板,练习编制函数模板和类模板。熟悉面向对象编程思想和多文件编程规范。掌握公有继承的赋值兼容性规则、构造函数、复制构造函数和析构函数的设计方法。练习各类运算符的重载。熟悉使用文件的基本方法。熟悉继承和包含以及虚函数的多态性。六、参考书目 1.刘振安主编,《C++程序设计》,机械工业出版社2008年 2.雪万鹏译,《C++程序设计教程》,机械工业出版社2005年 3.钱能,《C++程序设计教程》,清华大学出版社2006年2.2《C++程序设计》上机考核指导 《C++语言程序设计》是一门实践性很强的课程,必须通过反复上机练习,深入领悟面向对象程序设计的基本思想。通过实验教学加深理解和巩固课堂和教材所学的内容,提高实践动手能力。实验一MicrosoftVisualC++6.0集成开发环境的使用实验目的与要求了解并初步掌握MicrosoftVisualC++6.0集成开发环境的使用。实验内容创建项目(Project)启动VC6.0从主菜单中选择【文件】|【新建】命令,打开【新建】对话框。单击【工程】标签,从项目列表中单击Win32ConsoleApplication选项;在【工程】文本框中输入项目的名字,如“hello”,系统将自动为用户的项目分配一个默认的目录。如果是VisualC++6.0,系统将显示一个询问项目类型的程序向导,选择anemptyproject(空项目)选项,单击【完成】按钮,显示新建项目信息;单击【确定】按钮结束。添加程序代码从主菜单中选择【文件】|【新建】命令,打开【新建】对话框。在【新建】对话框中打开【文件】选项卡,单击C++SourceFile选择,建立源文件;选择“添加工程”复选框。在右边的“文件”文本框中为文件指定一个名字,如“hello”。编辑源文件。在【工作区】窗口中单击FileVIEW标签,选择并打开该窗口中SourceFiles下的文件,如hello.app,在打开的【文件】窗口中输入源文件。在项目文件中增加文件。若在已有的项目文件中增加一个新文件,如C++源文件“*.cpp”或头文件“*.h”需要执行以下操作。打开相应的项目文件,选择【新建】|【文件】命令,选择C++编辑栏Source选择,可增加C++源文件;或选择C/C++HeadFile选项增加C/C++头文件。在【文件】文本框输入文件名,单击【确定】按钮。编译源文件先激活相应的源文件窗口,选择【编译】|【编译】命令或按Ctrl+F7键来编译源文件,形成目标文件(生成.obj文件),若该项目中有多个源文件,可依次激活并编译。连接目标文件,形成可执行文件选择【编译】|【连接】命令或快捷键F7连接程序,并形成可执行文件。此命令也可直接将项目中的所有源文件进行编译并连接形成可执行文件,使编译和连接的过程结合在一起。运行程序选择【编译】|【执行】命令或使用快捷键Ctrl+F5运行该程序,将显示一个类似于DOS的窗口,在窗口中第一行输出程序计算结果,第二行输出“Pressanykeytocontinue”,提示用户按任意键回到开发环境。程序练习定义一个关于日期的类,然后声明对象,判断该日期是否为闰年并输出。本题练习的是定义类和使用类的方法#include<iostream>usingnamespacestd;classTDate{ public: voidSetDate(inty,intm,intd); intisLeapYear(); voidPrint(); private: intyear,month,day;};voidTDate::SetDate(inty,intm,intd){ year=y; month=m; day=d;}intTDate::isLeapYear(){ return(year%4==0&&year%100!=0)||(year%400==0);}voidTDate::Print(){ cout<<year<<"."<<month<<"."<<day<<endl;}voidmain(){ TDatedate1,date2; date1.SetDate(2004,5,4); date2.SetDate(2005,4,9); intleap=date1.isLeapYear(); date1.Print(); if(leap==1) cout<<"是闰年!"<<endl; else cout<<"不是闰年!"<<endl; date2.Print(); leap=date2.isLeapYear(); if(leap==1) cout<<"是闰年!"<<endl; else cout<<"不是闰年!"<<endl;}实验要求按要求编写实验程序,将实验程序调试运行,写出程序的运行结果,并提交实验报告,写出调试运行的分析和体会。实验二类和对象的使用实验目的和要求熟悉类的定义格式和类中成员的访问权限。掌握对象的定义以及对象的初始化和赋值的操作。掌握构造函数和析构函数的使用。实验内容编写一个程序,定义类CPeople包含个人信息名称、年龄、薪水。并在类中定义构造函数、析构函数。题目分析:注意构造函数、析构函数的定义规则。源程序代码:#include<iostream>#include<string>usingnamespacestd;//类Cpeople的定义classCPeople{ intm_nAge; floatm_fSalary; char*m_pstrName; public: CPeople();//缺省构造函数 CPeople(intage,floatsalary,char*name);//带参数的构造函数 CPeople(constCPeople&);//拷贝构造函数 ~CPeople();//析构函数 char*GetName(); floatGetSalary(); voidSetSalary(float); intGetAge(); voidSetAge(intage);};CPeople::CPeople(){ m_nAge=20; m_fSalary=3000.00f; m_pstrName=newchar[20]; strcpy(m_pstrName,"无名氏");}CPeople::CPeople(intage,floatsalary,char*name){ m_nAge=age; m_fSalary=salary; m_pstrName=newchar[20]; strcpy(m_pstrName,name);}CPeople::CPeople(constCPeople&AnotherPeople){ m_nAge=AnotherPeople.m_nAge; m_fSalary=AnotherPeople.m_fSalary; m_pstrName=newchar[20]; strcpy(m_pstrName,AnotherPeople.m_pstrName);}CPeople::~CPeople(){ if(m_pstrName!=NULL)delete[]m_pstrName;}char*CPeople::GetName(){ returnm_pstrName;}intCPeople::GetAge(){ returnm_nAge;}voidCPeople::SetAge(intage){ if(age<=0) cout<<"设置的年龄不合法"<<endl; else m_nAge=age;}floatCPeople::GetSalary(){ returnm_fSalary;}voidCPeople::SetSalary(floatnum){ if(num<0) cout<<"设置的薪水数目不合法"<<endl; else m_fSalary=num;}voidmain(){ CPeopleZhangSan(65,2000.00f,"张三"); cout<<"以下为个人信息:\n姓名,年龄,薪水"<<endl; cout<<"-------------\n"; cout<<ZhangSan.GetName()<<""; cout<<ZhangSan.GetAge()<<""; cout<<ZhangSan.GetSalary()<<endl<<endl; CPeopleA; A.SetAge(34); A.SetSalary(4000.00f); cout<<A.GetName()<<""; cout<<A.GetAge()<<""; cout<<A.GetSalary()<<endl<<endl; CPeopleB(ZhangSan); cout<<B.GetName()<<""; cout<<B.GetAge()<<""; cout<<B.GetSalary()<<endl<<endl;}实验和要求按要求编写实验程序,将实验程序调试运行,写出程序的运行结果,并提交实验报告,写出调试运行的分析和体会。实验三继承与派生一、实验目的和要求(1)掌握派生类的定义方法和派生类构造函数的定义方法。(2)掌握不同继承方法的情况下,基类成员函数在派生类中的访问权限。(3)了解派生类的构造函数和析构函数的执行顺序。了解多重继承的定义方法,多重继承的构造函数和析构函数的使用。二、实验内容 在类CPeople的基础上,派生出学生类CStudent,并实现对学生成绩的统计和输出。源程序代码:#include<iostream>#include<string>#defineMAXNUM10usingnamespacestd;classCPeople{ intm_nAge; public: char*m_pstrName; CPeople(intage,char*name); ~CPeople(); intGetAge(); voidSetAge(intage); voidCopyPeople(CPeople*pAnother);};CPeople::CPeople(intage,char*name){ m_nAge=age; m_pstrName=newchar[20]; strcpy(m_pstrName,name);}CPeople::~CPeople(){ if(m_pstrName!=NULL)delete[]m_pstrName;}intCPeople::GetAge(){ returnm_nAge;}voidCPeople::SetAge(intage){ m_nAge=age;}voidCPeople::CopyPeople(CPeople*pAnother){ m_nAge=pAnother->m_nAge; strcpy(m_pstrName,pAnother->m_pstrName);}classCStudent:publicCPeople{ floatm_ArrayScore[MAXNUM];//用来存放成绩的数组 protected: intm_stuNo; //学号 intm_courseNum; //课程数目 floatm_aScore; //平均成绩 public: CStudent(intage,intNo,intNum,char*pName="noname"):CPeople(age,pName) { m_stuNo=No; m_courseNum=Num; m_aScore=0.0f; //初始化成绩数组 cout<<"请输入学生"<<m_pstrName<<m_courseNum<<"门课的成绩:"<<endl; for(inti=0;i<m_courseNum;++i) cin>>m_ArrayScore[i]; } voidCaculateAverageScore() { floatSUM=0.0f; for(inti;i<m_courseNum;++i) { SUM+=m_ArrayScore[i]; } m_aScore=SUM/m_courseNum; } floatGetM_aScore(){returnm_aScore;} friendostream&operator<<(ostream&out,constCStudent&s);};ostream&operator<<(ostream&out,constCStudent&s){ out<<"学生姓名"<<s.m_pstrName<<",学号:"<<s.m_stuNo<<",成绩列表:"<<endl; for(inti=0;i<s.m_courseNum;++i) { out<<s.m_ArrayScore[i]<<endl; } out<<"平均成绩="<<s.m_aScore<<endl<<endl; returnout;}voidmain(){ CStudentstu1(16,29,3,"张三"); stu1.CaculateAverageScore(); cout<<stu1;}注意:VC++6.0不支持插入操作符和提取操作符作为友元运算符重载,故改造如下:#include<iostream>#include<string>#defineMAXNUM10usingnamespacestd;classCPeople{ intm_nAge; public: char*m_pstrName; CPeople(intage,char*name); ~CPeople(); intGetAge(); voidSetAge(intage); voidCopyPeople(CPeople*pAnother);};CPeople::CPeople(intage,char*name){ m_nAge=age; m_pstrName=newchar[20]; strcpy(m_pstrName,name);}CPeople::~CPeople(){ if(m_pstrName!=NULL)delete[]m_pstrName;}intCPeople::GetAge(){ returnm_nAge;}voidCPeople::SetAge(intage){ m_nAge=age;}voidCPeople::CopyPeople(CPeople*pAnother){ m_nAge=pAnother->m_nAge; strcpy(m_pstrName,pAnother->m_pstrName);}classCStudent:publicCPeople{ floatm_ArrayScore[MAXNUM];//用来存放成绩的数组 protected: intm_stuNo; //学号 intm_courseNum; //课程数目 floatm_aScore; //平均成绩 public: CStudent(intage,intNo,intNum,char*pName="noname"):CPeople(age,pName) { m_stuNo=No; m_courseNum=Num; m_aScore=0.0f; //初始化成绩数组 cout<<"请输入学生"<<m_pstrName<<m_courseNum<<"门课的成绩:"<<endl; for(inti=0;i<m_courseNum;i++) cin>>m_ArrayScore[i]; } voidCaculateAverageScore() { floatSUM=0.0f; for(inti=0;i<m_courseNum;i++) { SUM+=m_ArrayScore[i]; } m_aScore=SUM/m_courseNum; } floatGetM_aScore(){returnm_aScore;} ostream&operator<<(ostream&out);};ostream&CStudent::operator<<(ostream&out){ out<<"学生姓名"<<m_pstrName<<",学号:"<<m_stuNo<<",成绩列表:"<<endl; for(inti=0;i<m_courseNum;i++) { out<<m_ArrayScore[i]<<endl; } out<<"平均成绩="<<m_aScore<<endl<<endl; returnout;}voidmain(){ CStudentstu1(16,29,3,"张三"); stu1.CaculateAverageScore(); stu1<<cout;}三、实验和要求按要求编写实验程序,将实验程序调试运行,写出程序的运行结果,并提交实验报告,写出调试运行的分析和体会。实验四模板的使用一、实验目的和要求 了解函数模板、类模板的概念,练习编制函数模板和类模板。二、实验内容编写一个程序,使用类模板对数组进行排序、查找和求元素和的程序。要求:设计一个类模板template<classT>classArray,用于对T类型的数组进行排序、查找和求元素和,然后由此产生模板类Array<int>和Array<double>。源程序代码:#include<iostream>#include<iomanip>usingnamespacestd;template<classT>classArray{ T*set; intn; public: Array(T*data,inti){set=data;n=i;}; ~Array(){}; voidsort();//排序 intseek(Tkey);//查找指定的元素 TSUM();//求和 voiddisp();//显示所有的元素};template<classT>voidArray<T>::sort(){ inti,j; Ttemp; for(i=1;i<n;i++) for(j=n-1;j>=i;j--) if(set[j-1]>set[j]) { temp=set[j-1];set[j-1]=set[j];set[j]=temp; }}template<classT>intArray<T>::seek(Tkey){ inti; for(i=0;i<n;i++) if(set[i]==key)returni; return-1;}template<classT>TArray<T>::SUM(){ Ts=o; inti; for(i=0;i<n;i++) s+=set[i]; returns;}template<classT>voidArray<T>::disp(){ inti; for(i=0;i<n;i++) cout<<set[i]<<""; cout<<endl;}voidmain(){ inta[]={6,3,8,1,9,4,7,5,2}; doubleb[]={2.3,6.1,1.5,8.4,6.7,3.8}; Array<int>arr1(a,9); Array<double>arr2(b,6); cout<<"arr1"<<endl; cout<<"原序列"; arr1.disp(); cout<<"8在arr1中的位置:"<<arr1.seek(8)<<endl; arr1.sort(); cout<<"排序后:"; arr1.disp(); cout<<"arr2"<<endl; cout<<"原序列"; arr2.disp(); cout<<"8.4在arr2中的位置:"<<arr2.seek(8.4)<<endl; arr2.sort(); cout<<"排序后:"; arr2.disp();}三、实验和要求按要求编写实验程序,将实验程序调试运行,写出程序的运行结果,并提交实验报告,写出调试运行的分析和体会。实验五使用向量一、实验目的和要求 练习使用向量解决实际问题。二、实验内容利用向量编写程序;出圈游戏。假设有人为n的一个小组,他们顺时针方向围坐一圈。一开始任选一个正整数作为报数的上限值m,从第一个人开始按顺时针方向自star开始顺序报数,报到m时停止报数并出列。如此下去,直到所有人全部出列为止。要求按他们出列的顺序输出他们的名字。源程序代码:#include<iostream>#include<string>#include<vector>usingnamespacestd;voidfun(vector<string>&rc,unsigned&rm,unsigned&ri){ vector<string>::iteratorp=rc.begin(); unsignedj=1; //报数 while(j<=rm) { ri++; if(ri>=rc.size()) //到终点,返回到第一个位置计数 ri=0; j++; } cout<<rc[ri]<<","; rc.erase(p+ri); //删除出圈人的记录 if(ri>=rc.size())ri=0;//到终点,返回到第一个位置计数}voidmain(){ unsignedlength=0,m,star,i; cout<<"请输入人数:"; cin>>length; vector<string>c(length); cout<<"请输入报数上限值m(m<=20)"; cin>>m; while(m>20) { cout<<"报数上限值太大,请重新输入:"; cin>>m; } cout<<"从第几个人的位置开始报数(不能大于"<<c.size()<<"):"; cin>>star; while(star>c.size()) { cout<<"开始位置大于人数,重新输入:"; cin>>star; } cout<<"准备输入名字"<<endl; for(i=0;i<c.size();i++) { cout<<"第"<<i+1<<"个人的名字:"; cin>>c[i]; } i=star-1; //计数位置初始值 while(c.size()>1) { fun(c,m,i); } cout<<c[i]<<endl;}三、实验和要求按要求编写实验程序,将实验程序调试运行,假设参加游戏的人数为5人,间隔数选10,从第三个人的位置开始报数,5个人的名字依次为:李红、王强、李四、王五,写出程序的运行结果,并提交实验报告,写出调试运行的分析和体会。实验六多态性和虚函数一、实验目的和要求 熟悉继承和包含以及虚函数的多态性。二、实验内容 建立工程文件、类在头文件(employee.h)中声明、类在源文件(empfun.cpp)实现、在源文件(sy10_4.cpp)中编写主程序。程序实现的基本功能:小公司人员管理信息。某小公司主要有3类人员:经理、兼职技术人员、兼职销售员。这些人员分别具有以下属性。经理:姓名、编号、固定工资、当月薪水、计算月薪、显示信息;兼职技术人员:姓名、编号、工作小时、每小时工资额、当月薪水、计算月薪、显示信息;兼职销售员:姓名、编号、销售额、销售额提成、当月薪水、计算月薪、显示信息; 要求: 人员编号基数为1000,每输入一个人员信息编码加1;月薪计算办法是经理固定月薪8000元;兼职技术人员按100元、小时领取月薪;兼职销售员按当月销售额的4%提成。 根据题目要求,设计一个基数emplyee,然后派生出technician(兼职技术人员)类、manager(经理)类和salesman(兼职销售员)类。源程序代码://employee.h头文件#include<iostream>#include<string>usingnamespacestd;classemployee//定义职员类{ protected: char*name;//定义姓名 intEmpNo;//个人编号 doubleSUMPay;//月薪总额 staticintemployeeNo;//本公司职员编号目前最大值 public: employee(); ~employee(); virtualvoidpay()=0;//计算月薪函数,解决:虚函数 voiddisplayStatus();//显示人员信息};classtechnician:publicemployee//兼职技术人员类(公有派生){ protected: floathourlyRate;//每小时酬金 intworkHours;//当月工作时数 public: technician(); voidpay();//计算月薪 voiddisplayStatus();//显示人员信息};classsalesman:publicemployee//兼职销售员类(公有派生){ protected: doubleCommRate;//提成百分比 doublesales;//当月销售额 public: salesman(); voidpay();//计算月薪 voiddisplayStatus();//显示人员信息};classmanager:virtualpublicemployee//经理类(公有派生){ protected: floatmonthlyPay;//固定月薪 public: manager(); voidpay();//计算月薪 voiddisplayStatus();//显示人员信息};//empfun.cpp#include<iostream>#include<string>usingnamespacestd;#include"employee.h"intemployee::employeeNo=1000;//员工编号基数employee::employee(){ charstr[20]; cout<<"\n输入雇员姓名"; cin>>str; name=newchar[strlen(str)+1];//动态申请 strcpy(name,str); EmpNo=employeeNo++;//新员工编号自动生成 SUMPay=0.0;//月薪总额初始0}employee::~employee(){ delete[]name;//释放空间}voidemployee::displayStatus(){ cout<<name<<":"<<"编号"<<EmpNo<<",本月工资"<<SUMPay<<endl;}technician::technician(){ hourlyRate=100;//每小时酬金100元}voidtechnician::pay(){ cout<<"输入本月工作时数:"; cin>>workHours; SUMPay=hourlyRate*workHours;}voidtechnician::displayStatus(){ cout<<"兼职技术人员:"; employee::displayStatus();}salesman::salesman(){ CommRate=0.04;//提成比例}voidsalesman::pay(){ cout<<"输入本月销售额:"; cin>>sales; SUMPay=sales*CommRate;//月薪=销售提成}voidsalesman::displayStatus(){ cout<<"销售员:"; employee::displayStatus();}manager::manager(){ monthlyPay=8000;}voidmanager::pay(){ SUMPay=monthlyPay;//月薪总额=固定月薪}voidmanager::displayStatus(){ cout<<"经理:"; employee::displayStatus();}//sy10_4.cpp#include<iostream>#include<string>usingnamespacestd;#include"employee.h"voidmain(){ //经理 managerm1; m1.pay(); m1.displayStatus(); //兼职技术人员 techniciant1; t1.pay(); t1.displayStatus(); //兼职销售员salesmans1; s1.pay(); s1.displayStatus(); cout<<"\n使基类指针指向子类对象"<<endl; employee*ptr[4]={&m1,&t1,&s1}; for(inti=0;i<3;i++) ptr[i]->displayStatus();}三、实验和要求按要求编写实验程序,将实验程序调试运行,写出程序的运行结果,并提交实验报告,写出调试运行的分析和体会。实验七缺少一、实验目的和要求实验八文件读写一、实验目的和要求熟悉使用文件的基本方法。熟悉标准流对象cin和cout的使用方法,掌握系统提供的输入操作和输出操作函数。二、实验内容简单通讯录:编写一个简单的通讯录程序,在文件myNote中记录朋友的姓名、年龄和电话号码,允许用户向其中添加信息,根据姓名查询或显示所有信息。源程序代码:#include<iostream>#include<s
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 贵州财经职业学院《电路实验A》2023-2024学年第一学期期末试卷
- 贵阳幼儿师范高等专科学校《强化传热》2023-2024学年第一学期期末试卷
- 2025海南建筑安全员考试题库附答案
- 2025年海南建筑安全员知识题库
- 2025年山西省安全员B证考试题库附答案
- 广州幼儿师范高等专科学校《数字逻辑与计算机组成原理》2023-2024学年第一学期期末试卷
- 广州卫生职业技术学院《作物栽培学》2023-2024学年第一学期期末试卷
- 2025年贵州省建筑安全员知识题库附答案
- 2025青海建筑安全员考试题库附答案
- 2025上海市建筑安全员考试题库及答案
- 夫妻共同房产变更为一方单独所有协议书(2篇)
- 第六单元《多边形的面积》 单元测试(含答案)2024-2025学年人教版五年级数学上册
- 光伏电站安装与调试教学培训课件:太阳能光伏发电系统概论
- 工程伦理(2024东莞理工)学习通超星期末考试答案章节答案2024年
- 平安在线测评 iq 30题 答案
- 2024工程材料合同交底(填报要求)
- 2024年湖北三江航天江河化工科技限公司招聘高频500题难、易错点模拟试题附带答案详解
- 体育场馆运营管理与服务标准规范
- 智慧物流第2套理论题附有答案
- 夜市食品安全管理制度
- 网络设备驻场运维服务方案
评论
0/150
提交评论