C课堂练习题概要_第1页
C课堂练习题概要_第2页
C课堂练习题概要_第3页
C课堂练习题概要_第4页
C课堂练习题概要_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C++的练习题【课堂练习题1】以下程序不能能经过编译,为什么?main( ){inta,b,c;cin>>a>>b;c=sum(a,b);cout<<c;return0;}sum(inta,intb){returna+b;}【课堂练习题2】用动向分配空间的方法计算Fibonacci数列的前20项,并储藏到动向分配的空间中。#include<iostream.h>main( ){inti;int*p,f1=1,f2=1,f;p=newint[20];if(!p){cout<<”申请没有成功!\n”;return1;}p[0]=1;p[1]=1;for(i=2;1<20;i++){f=f1+f2;p[i]=f;f1=f2;f2=f;}for(i=0;i<20;i++)cout<<p[i]<<””;delete[]p;return

0;}【课堂练习题3】编写C++风格的程序,解决百钱问题:将一元人民币兑换成

1,2,5分的硬币,有多少种换法。#include<iostream.h>intmain( ){inta1,a2,a5,n=0;for(a1=1;a1<100;a1++)for(a2=1;a2<50;a2++)if((a1+a2*2)<=95){a5=100-a1-a2*2;if(a5%5==0){a5=a5/5;n++;cout<<”n=”<<n<<”a1=”<<a1<<”a2=”<<a2<<”a5”<<a5<<endl;}}cout<<”n=”<<n<<endl;return0;}【课堂练习题4】不使用C语言库函数,完成以下功能,输入一个正整数n(n<10),输出下面的图形,其中层数由n来确定。**********..........【课堂练习题5】撰写一个程序,使之能够咨询用户的姓名,并读取用户输入的内容.请确保用户输入的名字长度大于两个字符.若是用户输入了有效的名称,就显示该名字,否则给出相应的错误提示信息。分别使用以下两种方式实现操作,第一种,使用C-style(风格)字符办理方法,第二种,使用string对象种类。【课堂练习题6】一个班级有n个学生,n由用户输入,每个学生有学号1-n,有三门成绩(语、数、外)成绩由随机数生成(0到100之间),每个学生的成绩由动向数组保存。要求:1).获取总分最高的学生的学号。2).提示用户输入1,2,3来获取语、数、外的平均分。7】实现重载max的函数,让它接受以下参数两个整数两个浮点数两个字符串一个整数数组,以及一个表示数组大小的整数值最后撰写main( )测试这些函数。【课堂练习题8】撰写一个程序,从键盘读取一串整数,并将读入的整数依次存入array(数组)及vector(向量),尔后遍历这两种容器,求取数值总和,将总和及平均值输出至显示器。【课堂练习题9】撰写一个程序,实现时钟的设置与管理,设计合适的构造体(注意设计与算法分别)。【课堂练习题10】定义一个时间类,供应设准时间、显示时间和秒数增加1的功能,其中设定时间的方法需要校验数据的正确性,并在main函数中考据。【课堂练习题11】设计一个矩形类,完成计算矩形面积和显示矩形属性的功能。【课堂练习题12】需要求3个长方柱的体积。数据成员包括长(length)宽(width)高(height)。要求用成员函数实现以下功能:1)由键盘分别输入3个长方柱的长、宽、高。2)计算长方柱的体积。3)输出3个长方柱的体积。【课堂练习题13】定义一个描述圆柱体的类Cylinder,定义圆柱体的底面半径与高,计算圆柱体体积并显示圆柱体的半径、高和体积。尔后动向创办一个圆柱体对象。【课堂练习题14】设计一个学生类(CStudent),它拥有私有数据成员是:学号、姓名、数学、外语和计算机课程的成绩。要求能实现求三门课总成绩和平均成绩,并能设置和显示学生信息(类声明和成员函数定义分别)。【课堂练习题15】扩展练习13(学生类设计).设计一个友元函数,依照成绩从高到低的序次输出姓名、学号和成绩信息。【课堂练习题16】设计一个圆种类,设计此后,输入圆半径,计算圆周长、面积,并显示圆的半径、周长和面积(要求定义该类的构造函数和拷贝构造函数)。【课堂练习题17】设计BOOK类,包括ISBN号(string),书名(string),作者(string)以及单价信息,还能够依照数量确定折扣率并计算应付款项,折扣率五本以上90%,十本以上80%,二十本以上70%。设计借书还书的函数,提示:只设计一个种类的书,设计合适的构造及析构函数(类声明和成员函数定义分别)。【课堂练习题18】写一个Rectangle类,抽象自己的数据和成员函数.要求:(1)写出构造函数和析构函数用一个静态数据成员记录所创办的矩形的个数写出GetArea( )获取矩形的面积(4)明确哪些函数需要被设计为const成员函数写出一个全局函数获取N个矩形的面积intGetAllRectArea(Rectangle*pRectArray,intcount);【课堂练习题12】需要求3个长方柱的体积。数据成员包括长(length)宽(width)高(height)。要求用成员函数实现以下功能:1)由键盘分别输入3个长方柱的长、宽、高。2)计算长方柱的体积。3)输出3个长方柱的体积。//类名:Box//输入数据成员函数:value()//计算体积成员函数:volume()//输出结果成员函数:display()#include<iostream.h>classBox{private:intlength;//长intwidth;//宽intheight;//高public:voidvalue( );//输入数据成员函数doublevolume( );//计算体积成员函数voiddisplay( );//输出结果成员函数

voidBox::value( ){cin>>length;cin>>width;cin>>height;}doubleBox::volume( ){doublevole;vole=length*width*height;return(vole);}voidBox::display( ){cout<<volume( )<<endl;}};intmain( ){Boxt1,t2,t3;t1.value( );cout<<”t1的体积为:”;t1.display( );t2.value( );cout<<”t2的体积为:”;t2.display( );t3.value( );cout<<”t3的体积为:”;t3.display( );【课堂练习题15】}也能够将volume( )函数定义为void种类,它不返回计算后的体积,而是另设一个数据成员,用来存放体积的值。请考虑如何更正程序?【课堂练习题2】类和对象的定义及接见属性定义一个描述“钟表”的类及该类的对象,并用对象接见其成员。能够设置时间,也能够显示时间。#include<iomanip.h>//使用setw(6)函数的头文件#include<iostream.h>classwatch//定义“钟表”类{public:voidsettime(inth,intm,ints);//设置时间成员函数的说明voidshowtime( );//显示时间成员函数的说明private:inthour,minute,second;//定义类的数据成员};voidwatch::settime(inth,intm,ints)//设置时间成员函数的定义{hour=h;minute=m;second=s;}inlinevoidwatch::showtime( )//显示时间成员函数的定义{cout<<setw(6)<<hour<<setw(8)<<minute<<setw(8)<<second<<endl;}voidmain( ){watchw1,w2;//定义两个watch类的对象w1.settime(12,30,20);//对w1对象设置时间cout<<setw(6)<<"hour"<<setw(8)<<"minute"<<setw(8)<<"second"<<endl;//输出表头w1.showtime( );//调用w1对象的显示时间成员函数w2.settime(8,52,36);//对w2对象设置时间w2.showtime( );//调用w2对象的显示时间成员函数}【课堂练习题16】【课堂练习题3】带有成员初始化表的构造函数定义一个描述“点“的类及该类的对象,使用成员初始化表初始化数据成员。#include<math.h>#include<iostream.h>classpoint{intxval,yval;//定义两个坐标变量public:point(intx=0,inty=0);//构造函数point(double,double);//构造函数voidshowpoint( );};point::point(intx,inty):xval(x),yval(y)//xval被x初始化,yval被y初始化。{};point::point(doublelen,doubleangle):yval((int)(len*sin(angle)))//yval被(int)(len*sin(angle))初始化{xval=(int)(len*cos(angle));}//xval被(int)(len*cos(angle))初始化voidpoint::showpoint( )//显示坐标点{cout<<"("<<xval<<","<<yval<<")"<<endl;}voidmain( ){pointpt1(30,50);//笛卡尔坐标pointpt2(26.3,3.14/3);//极坐标pointpt3;//原点cout<<"pt1=";pt1.showpoint( );【课堂练习题17】cout<<"pt2=";pt2.showpoint( );cout<<"pt3=";pt3.showpoint( );}【课堂练习题4】带有参数的构造函数//创办一个日期类,包括年、月、日三个私有数据成员。能够在创办对象时利用构造函数初始化对象年、月、日的值,也能够利用成员函数重新设置年、月、日的值。并能够显示日期。#include<iostream.h>classDate//定义日期类{public:Date(inty,intm,intd);//带参数的构造函数说明voidsetDate(inty,intm,intd);//能够设置日期的函数说明voidshowDate( );//能够显示日期的函数说明private:intyear;//表示年的数据成员intmonth;//表示月的数据成员intday;//表示日的数据成员【课堂练习题17-1】};//Date::Date(inty,intm,intd)//在类外面定义构造函数{cout<<"构造函数初始化"<<endl;year=y;month=m;day=d;}voidDate::setDate(inty,intm,intd)//在类外面定义设置日期的函数{year=y;month=m;day=d;}inlinevoidDate::showDate( )//在类外面定义显示日期的函数{cout<<year<<","<<month<<","<<day<<endl;}voidmain( ){Datedate1(1984,4,28);//定义对象date1,并带有初始化数据cout<<"对象date1的第一次输出:"<<endl;date1.showDate( );//调用显示日期的函数date1.setDate(2002,11,24);//调用设置日期的函数cout<<"对象date1的第二次输出:"<<endl;date1.showDate( );//调用显示日期的函数}【课堂练习题5】构造函数的应用某商店销售商品,若是购买量大,高出必然的数量,高出的数量将恩赐折扣。假设商品单价为25.8。设计一个<商品折扣类>Tase,包括购买数量(Shua)、折扣初步数量(Base)和折扣金额(Meor)三项数据信息。编写C++程序能够初始化购买数量和折扣初步数量(默认值为100),并能够输入购买数量和折扣初步数量,输出相关信息。折扣率计算公式:购买数量在扣除初步数量后的部分折扣率1~505%51~10010%101以上15%#include<iostream.h>classTase{intShua,Base;//Shua购买数量,Base折扣初步数量doubleMeor;//Meor折扣金额public:Tase(int,int);//构造函数说明voidinput( );//输入函数说明voidprint( );//输出函数说明voidwekou( );//计算折扣金额函数};Tase::Tase(intshua,intbase=100)//构造函数,第二个参数折扣初步数量(默认值为100){Shua=shua;Base=base;wekou( );}//在构造函数中调用wekou( )函数,目的是计算在折扣初步数量为100时,折扣率是多少,折扣金额是多少voidTase::wekou( )//计算折扣金额函数{doubletex;intx;x=Shua-Base;if(x<0)tex=0;elseif(x<51)tex=0.05;elseif(x<101)tex=0.10;elsetex=0.15;cout<<”折扣率=”<<tex<<endl;Meor=25.8*x*tex;}voidTase::input( )

//输入函数能够输入购买数量、折扣初步数量{cin>>Shua>>Base;wekou( );}voidTase::print( )

//输出函数,能够计算总金额:单价×购买数量-折扣金额{cout<<”购买数量”<<Shua<<”折扣初步数量”<<Base<<”折扣金额”<<Meor<<”总金额”<<25.8*Shua-Meor<<endl;}voidmain( ){Taset1(40);//定义对象t1,给出购买数量40,折扣初步数量(默认值为100)t1.print( );//输出相关信息t1.input( );//输入新的购买数量、折扣初步数量t1.print( );//输出相关信息}【课堂练习题18】【课堂练习题6】静态数据成员的应用在产品类(包括:产品名称、产品单价、库存量)中,计算产品的销售总数,总数量和购买产品的人数。利用静态成员函数输出产品的销售总数,总数量和购买产品的人数。说明:产品的销售总数,总数量和购买产品的人数应该是每个产品对象共享的数据,因此在程序中将其说明为静态数据成员。#include<string.h>#include<iostream.h>classproduct{public:product(char*name,intp,intn);//构造函数声明,参数name是产品名称,p单价,n库存节余台数~product( );//析构函数声明voidbuy(intmoney);//购买产品的统计与计算voidget_const( );//输出当前产品名称、单价、库存节余台数。staticvoidshow_sum( );//输出销售总数、销售总数量、购买的顾客总数private://定义私有数据成员char*pname;//产品名称intprice;//单价intquantity;//库存数量staticintsum;//记录销售总台数staticintcount;

//记录购买顾客的总人数staticinttotal;

//卖出产品的总金额};

//类定义结束product::product(char*name,intp,intn)//构造函数,*name是指向产品名称的指针,p是单价,//n库存数量{pname=newchar[strlen(name)+1];//产生一个商品名称的数组空间,//让指针pname指向这个数组strcpy(pname,name);//将商品名称送入数组price=p;//写入单价quantity=n;//写入库存数量count++;//购买顾客的总人数加1}product::~product( )//析构函数{delete[]pname;}//释放数组空间voidproduct::buy(intmoney)//购买产品的统计与计算,money是顾客交了多少钱{intn,r;//n记录购买的数量,r记录顾客的余额n=money/price;//金额/单价,得出购买的数量if(n>quantity)cout<<"数量不够!"<<endl;//若是购买数量>库存数量else{cout<<”产品名称:”<<pname<<”单价:”<<price<<”元库存:”<<quantity<<”台”<<endl;//输出产品名称、单价、库存quantity-=n;//库存数量减去购买数量r=money%price;//计算顾客的余额sum+=n;//记录卖出的总台数total+=n*price;//记录卖出的总金额cout<<”顾客付:“<<money<<“元,购买了:”<<n<<”台,余额:”<<r<<”元”<<endl;输出顾客付了多少钱,购买了多少台产品,余额是多少}}voidproduct::get_const( )//输出当前产品名称、单价、库存节余台数。{cout<<"产品:"<<pname<<"单价:"<<price<<"元,节余"<<quantity<<"台"<<endl;}voidproduct::show_sum( )//输出销售总数、销售总数量、购买的顾客总数{cout<<"销售总数:"<<total<<endl;cout<<"共售出产品数量:"<<sum<<"台"<<endl;cout<<"共有:"<<count<<"位顾客"<<endl;}intproduct::sum=0;//静态变量初始化在函数体外面进行intproduct::count=0;//intproduct::total=0;//voidmain( ){productp1("打印机",1010,30);//定义对象p1,并且带有构造函数的初始化参数p1.buy(6500);//【课堂练习题19】p1.get_const( );productp2("打印机",1020,20);//定义对象p2,并且带有构造函数的初始化参数p2.buy(3100);p2.get_const( );productp3("打印机",1200,15);p3.buy(6000);//定义对象p3,并且带有构造函数的初始化参数p3.get_const( );product::show_sum( );}【课堂练习题7】派生类公有继承的应用第必定义一个基类(学生类),私有数据成员包括:学号num、姓名name、性别sex。定义一个成员函数:能够从键盘上输入学生的学号、姓名、性别。定义一个显示函数:能够显示学号、姓名、性别。再定义一个派生类(学生类1),私有数据成员包括:年龄age、地址addr。定义一个成员函数:能够从键盘上输入学生的年龄、地址。在主函数中输出学生的学号、姓名、性别、年龄、地址。classStudent

//声明基类{public:

//基类公用成员voidget_value( ){cin>>num>>name>>sex;}voiddisplay( ){cout<<″num:″<<num<<endl;cout<<″name:″<<name<<endl;cout<<″sex:″<<sex<<endl;}private:

//基类私有成员intnum;charname[10];charsex;};classStudent1:publicStudent//声明派生类{public:voidget_value_1( ){get_value( );//调用基类中的get_value( )函数,输入cin>>age>>addr;//输入age,addr

num,name,sex}voiddisplay_1( )//输出age,addr{cout<<”age:”<<age<<endl;cout<<”address:”<<addr<<endl;//注意这里不能够输出学号num、姓名

name、性别

sex,因为num、name、sex是基类的私有成员,而派生类是不能够接见基类的私有成员的。}private:intage;charaddr[30];};main( ){Student1stud1;stud1.get_value_1( );//调用派生类中的输入函数stud1.display( );//调用基类中的display( )函数输出num,name,sexstud1.display_1( );//调用派生类中的display_1( )函数输出addr,endl;}【课堂练习题8】成立一个简单的大学管理系统,其中有学生和职工,职工中有教师。类的继承关系如图。Data_rec虚基类它包括了全部派生类共有的数据成员Employee职工类为虚基类Data_rec的派生类Student学生类为虚基类Data_rec的派生类Teacher教师类为Employee职工类的派生类E_Student任职大学生类为Employee职工类和tudent学生类的共同派生类程序功能:能输入输出不一样种类人员的相关信息,#include<iostream>#include<string>usingnamespacestd;constcharnull='\0';staticchar*strsave(char*s){char*p;p=newchar[strlen(s)+1];strcpy(p,s);returnp;}classData_rec//定义虚基类{protected:char*name;//姓名char*id_number;//编号public:Data_rec( )//虚基类的构造函数,默认指针为空{name=null;id_number=null;}Data_rec(char*name1,char*id_number1)//虚基类的构造函数,{name=strsave(name1);//strsave(name1)是什么函数?Employee(char*name1,char*id_number1,char*dept1,floatsalary1):Data_rec(name1,id_number1){dept=strsave(dept1);salary=salary1;}~Employee( ){delete[]dept;}voidprint( );};id_number=strsave(id_number1);}~Data_rec( ){delete[]name;delete[]id_number;}voidprint( ){cout<<"\n"<<"name:"<<name<<endl;cout<<"id_number:"<<id_number<<endl;}};classStudent:virtualpublicData_rec//定义类学生,从虚基类继承派生出学生类{protected:char*major;//专业longintstu_no;//学号intlevel;//年级public:Student(char*name,char*id_number1,char*major1,longintstu_no1,intlevel1):Data_rec(name,id_number1)//学生类的构造函数{major=strsave(major1);stu_no=stu_no1;level=level1;}~Student( ){delete[]major;}voidprint( );};voidStudent::print( ){Data_rec::print( );//调用上级的打印函数cout<<"major:"<<major<<endl;cout<<"stu_no:"<<stu_no<<endl;cout<<"level"<<level<<endl;}classEmployee:virtualpublicData_rec//定义职工类{protected:char*dept;//部门doublesalary;薪水public:voidEmployee::print( ){Data_rec::print( );cout<<"Department"<<dept<<endl;cout<<"salary:"<<salary<<endl;}classTeacher:virtualpublicEmployee//定义教师类{protected:char*title;//职称public:Teacher(char*name1,char*id_number1,char*dept1,floatsalary1,char*title1):Data_rec(name1,id_number1),Employee(name1,id_number1,dept1,salary1){title=strsave(title1);}~Teacher( ){delete[]title;}voidprint( );};voidTeacher::print( ){Employee::print( );cout<<"title:"<<title;}classE_Student:publicEmployee,publicStudent//定义任职大学生类{public:E_Student(char*name1,char*id_number1,char*major1,longintstu_no1,intlevel1,char*dept1,floatsalary1):Data_rec(name1,id_number1),Employee(name1,id_number1,dept1,salary1),Student(name1,id_number1,major1,stu_no1,level1){}voidprint( );};voidE_Student::print( ){Student::print( );cout<<"Department::"<<dept<<endl;cout<<"salary"<<salary<<endl;}main( ){Studentmy_student("zhangming","01012345","Computer",1234,4);//学生信息Employeemy_Employee("chanping","1012356","Electricsal",7.2);//职工信息Teachermy_Teacher("liping","01012367","ComputerScie",12.34,"professor");E_Studentmy_E_Student("zhangping","01012378","ComputerScie",203478,3,"professor",7.20);//教师信息cout<<"\n\n";my_E_Student.print( );return0;}【课堂练习题9】利用类表示一个货仓(stack),并为此货仓成立push( ),pop( )及显示货仓内容的showstack( )函数。整个程序分为3个独立的文件:stack.h是类声明文件stack.cpp是类实现文件stackmain.cpp是类的使用文件C++程序的多文件组成一个源程序按构造能够划分为3个文件:类声明文件(*.h文件)、类实现文件(*.cpp)和类的使用文件(*.cpp,主函数文件)。将类的声明部分放在类声明文件(头文件)中,这就形成了类的public接口,向用户供应调用类成员函数所需的函数原型。将类成员函数的定义放在类实现文件中,这样就形成了类的实现方法。实现文件中必定包括类的声明文件。将类的使用部分(平时是主程序)放在类使用文件中,这样能够清楚地表示出本程序所要完成的工作。由多个文件组成的程序的编写、编译、连接和执行方法:1.把编写好的源文件存放到指定的目录下。如D:\C++选择“文件/新建”,打开“新建”对话框。在对话框中选“工作区”,在右部输入“工作空间名称”和“地址”。单击“确定”,回到C++主窗口。选择“文件/新建”,打开“新建”对话框。选择“工程”选项卡,在右部的列表中选择“Win32ConsoleApplication”项,并在右部地址框中,输入源文件的路径和工程名称。尔后选择“增加到当前工作空间”单项选择按钮。单击“确定”弹出一个对话框,选择“一个空白工程”单项选择按钮。单击“完成”。弹出一个“新建工程信息”对话框,单击“确定”,回到C++主窗口。看到右侧项目文件已经加到项目工作区中。在C++主窗口中,选择菜单命令“工程/增加到工程/文件”,弹出一个“插入文件到工程”对话框,在该对话框中找到文件,单击“确定”将文件增加到工程中。回到C++主窗口,编译程序,执行程序即可。程序代码//文件1stack..h#include<iostream.h>#include<iomanip.h>#include<ctype.h>constintSIZE=10;classstack{intstck[SIZE];inttos;public:stack( );voidpush(intch);intpop( );voidShowStack( );};//文件2stack.cpp#include<iostream.h>#includestack”.h”stack::stack( ){tos=0;}voidstack::push(intch){if(tos=SIZE){cout<<”Stack是个满栈”;return;}stck[tos]=ch;tos++;cout<<”你已经把一个数据放入栈内\n”;}voidstack::pop( ){if(tos==0)_{cout<<”Stack是空栈”;return0;}tos--;returnstck[tos];}voidstack::ShowStack( ){cout<<”这个栈内的数据:\n”;if(tos==0){cout<<”\n这个栈里没有数据\n”;return;}for(inti=tos-1;i>=0;i--)cout<<stck[i]<<”“;cout<<”\n\n”;}//文件3stackmain.cpp#include<iostream.h>#includestack”.h”main( ){cout<<endl;stackss;intx;charch;cout<<”<I>-------------数据进栈\n”;cout<<”<O>-------------数据出栈\n”;cout<<”<S>-------------显示栈里的数据cout<<”<Q>-------------退出\n”;

\n”;while(1){cout<<”请选择一项:”;cin>>ch;ch=toupper(ch);switch(ch){case‘I’:cout<<”\n输入进栈的数据”;cin>>x;ss.push(x);break;case’O’:x=ss.pop( );cout<<”从栈里已经出数据存入变量x\n”;break;case’S’:ss.ShowStack( );break;case’Q’:return;defult:cout<<”你选择了错误项,请重新选择!\n”;continue;}}}【课堂练习题10】用类Vevctor表示向量,类Vevctor内包括了整型数据成员n及指针*array,n表示向量的成分个数,而array则是指向该向量的内容(为一个动向数组),要求为这种种类的向量成立加法,内积及标度函数,利用这种方法我们能够办理维数不固定的向量运算。【课堂练习题11】应用C++的多态性,计算三角形、矩形和圆的面积。【课堂练习题12】应用抽象类,求圆、圆内正方形和圆外正方形的面积和周长。【课堂练习题13】图形的显示、隐去、放大、减小和搬动//画图程序#include<graphics.h>#include<conio.h>classlocation{protected:intx,y;public:location(intinitx,intinity);};classpoint:publiclocation{public:point(intinitx,intinity);voidshow( );voidhide( );voidmoveto(intnewx,inty);};classcircles:point{intradius;public:circles(intinits,intinity,intinitradius);voidshow( );voidhide( );voidexpand(intexpandby);voidmoveto(intnx,intny);voidcontract(intcontractby);};location::location(intinitx,intinity){x=initx;y=inity;}point::point(intinitx,intinity):location(initx,inity){}voidpoint::show( ){putpixel(x,y,getcolor( ));}voidpoint::hide( ){putpixel(x,y,getbkcolor( ));}voidpoint::moveto(intnewx,intnewy){hide( );x=newx;y=newy;show( );}circles::circles(intinitx,intinity,intinitradius):point(initx,inity){radius=initradius;}voidcircles::show( ){circle(x,y,radius);}voidcircles::hide( ){unsignedinttempcolor;tempcolor=getcolor( );setcolor(getbkcolor( ));circle(x,y,radius);setcolor(tempcolor);}voidcircles::expand(intexpandby){hide( );radius+=expandby;if(radius<0){radius=0;}show( );}voidcircles::contract(intcontractby){expand(-contractby);}voidcircles::moveto(intnewx,intnewy){hide( );x=newx;y=newy;show( );}main( ){intgdriver=DETECT,gmode;initgraph(&gdriver,&gmode,"c:..\\bgi");circlesmycircle(100,200,50);setcolor(RED);mycircle.show;getch( );mycircle.moveto(200,250);getch( );mycircle.expand(50);getch( );mycircle.contract(75);getch( );closegraph( );return0;}【课堂练习题14】利用纯虚函数成立货仓与队列的操作。大作业:模拟网上购书的结账功能问题解析与功能定义本题是一个特别合用的题目。我们要解决的问题是:用户在网上购书后,系统依照购书人的不一样种类计算出购书人的花销。网上购书的一般过程是:用户先输入他的会员号,尔后选择想买的书籍放到购书筐中,选择结束后,用户要求系统结账,系统便计算出花销通知用户。我们把选书的过程略去。假设用户已经选了两本书。依照实质情况,确定购书人可分为3类:一般人、会员、贵宾。“一般人”的购书按原价收取。“会员”购书花销的计算方法是:五星级会员,按原价的70%收取。四星级会员,按原价的80%收取。三星级会员,按原价的85%收取。二星级会员,按原价的90%收取。一星级会员,按原价的95%收取。“贵宾”的购书花销依照特别指定的折扣率计算收取的花销。比方折扣率40%。则按实质书价的60%收取。对象(类)设计依照以上解析,需要设计一个基类buyer和它的3个派生类layfolk(一般人)、member(会员)和honoured_guset(贵宾)。基类buyer中包括的数据成员是:姓名、购书人编号、地址、购书金额。会员类member除了继承基类buyer的数据,还要增加会员级别项。贵宾类honoured_guset除了继承基类buyer的数据,还要增加折扣率项。在基类中定义了构造函数的操作,对全部购书人是相同的。getbuyname( )负责取出购书人的姓名。getaddress( )负责取出购书人的地址。getpay( )负责取出购书人的应付的金额。getid( )负责取出购书人的应付的编号。由于对不一样购书人的购书金额的计算方法不一样,因此不能够在基类中确定计算方法。又由于各类购书人的数据不一样,显示的方法也不一样样。因此,在基类中将getpay( )和display( )定义为虚函数。由于在计算购书金额时要知道用户买了哪些书及书的价格,因此必定成立一个book完成对书的相关操作。book类中数据成员应该包括:书号、书名、作者、初版社、定价。为了程序简洁,类定义中宽泛使用了string类,下面是string类的定义。

类帮助classstring{friendostream&operator<<(ostream&S,conststring&Str);//重载<<friendistream&operator>>(istream&S,string&Str);//public:string( );string(conststring&Str);voidoperator=(conststring&Str);~string( );string(char*p);private:shortm_Length;//字符串长度char*m_Data;//字符串开始地址

重载>>};核心控制设计在主函数中,我们要做的操作包括:1)成立继承了基类buyer的3个对象。2)成立2个book类对象。3)请用户输入购书人的编号。4)经过编号盘问到相应的对象。5)用对象的计算金额的方法计算购书金额。此时两个对象的定价作为信息传达给购书人对象。编码与测试本程序包括了4个文件:buy.hbook.hstrclass.hbuy_book.cppmain( )函数在buy_book.cpp文件中。//buy.h文件#include<iostream>#include<string>usingnamespacestd;classbuyer{protected:stringname;//姓名intbuyerID;//购书人编号stringaddress;//地址doublepay;//购书金额public:buyer( );//buyer类默认构造函数buyer(stringn,intb,stringa,double

p);//buyer类构造函数stringgetbuyname( );//取姓名函数stringgetaddress( );//取地址函数doublegetpay( );//取应付金额函数intgetid( );//取购书人编号函数virtualvoiddisplay( )=0;//显示对象函数(纯虚函数)virtualvoidsetpay(double=0)=0;//计算购书金额函数(纯虚函数)};classmember:publicbuyer//定义会员类(派生类){public:member(stringn,intb,intl,stringa,doublep):buyer(n,b,a,p)//定义会员类构造函数{leaguer_grade=l;}voiddisplay( );//显示对象函数voidsetpay(doublep);//计算购书金额函数private:intleaguer_grade;//会员级别(私有成员)};classhonoured_guest:publicbuyer//定义贵宾类(派生类){doublediscount_rate;//折扣率public:honoured_guest(stringn,intb,doubler,stringa,doublep):buyer(n,b,a,p)//定义贵宾类构造函数{discount_rate=r;}//折扣率赋值voiddisplay( );//显示对象函数voidsetpay(doublep);//计算购书金额函数};classlayfolk:publicbuyer//定义一般人类(派生类){public:layfolk(stringn,intb,stringa,doublep):buyer(n,b,a,p)//定义一般人类构造函数{}voiddisplay( );//显示对象函数voidsetpay(doublep);//计算购书金额函数};buyer::buyer( )//定义基类默认构造函数{name="";//姓名buyerID=0;//购书人编号address="";//地址pay=0;//购书金额}buyer::buyer(stringn,intb,stringa,doublep)//定义基类构造函数{name=n;//姓名buyerID=b;//购书人编号address=a;//地址pay=p;//购书金额}doublebuyer::getpay( )//取购书金额{returnpay;}stringbuyer::getaddress( )//取购书人地址{returnaddress;}stringbuyer::getbuyname( )//取购书人姓名{returnname;}intbuyer::getid( )//取购书人编号{returnbuyerID;}voidmember::display( )//会员类的显示函数{cout<<"购书人姓名:"<<name<<"\t";cout<<"购书人编号:"<<buyerID<<"\t";cout<<"购书人为会员,级别:"<<leaguer_grade<<"\n";cout<<"地址:"<<address<<"\n";}voidmember::setpay(doublep)//会员类的计算购书金额函数{if(leaguer_grade==1)pay=.95*p+pay;elseif(leaguer_grade==2)pay=.90*p+pay;elseif(leaguer_grade==3)pay=.85*p+pay;elseif(leaguer_grade==4)pay=.8*p+pay;elseif(leaguer_grade==5)pay=.70*p+pay;elsecout<<"级别错误";}voidhonoured_guest::setpay(doublep)//贵宾类的计算购书金额函数{pay=pay+(1-discount_rate)*p;}voidhonoured_guest::display( )//贵宾类的显示函数{cout<<"购书人姓名:"<<name<<"\t";cout<<"购书人编号:"<<buyerID<<"\t";cout<<"购书人为贵宾,折扣率为:"<<discount_rate*100<<"%\n";cout<<"地址:"<<address<<"\n\n";}voidlayfolk::display( )//一般类的显示函数{cout<<"购书人姓名:"<<name<<"\t";cout<<"购书人编号:"<<buyerID<<"\t";cout<<"购书人为一般人:"<<"\n";cout<<"地址:"<<address<<"\n\n";}voidlayfolk::setpay(doublep)//一般类的据算金额函数{pay=pay+p;}//book文件classbook//定义book类{protected:stringbook_ID;//书号stringbook_name;//书名stringauther;//作者stringpublishing;//初版社doubleprice;//定价public:book( );//默认构造函数book(stringb_id,stringb_n,stringau,stringpu,doublepr);//构造函数声明voiddisplay( );//显示函数stringgetbook_ID( );//取书号stringgetbook_name( );//取书名stringgetauther( );//取作者stringgetpublishing( );//取初版社doublegetprice( );//取定价};book::book(stringb_id,stringb_n,stringau,stringpu,doublepr)//构造函数定义{book_ID=b_id;book_name=b_n;auther=au;publishing=pu;price=pr;}book::book( )//默认构造函数{book_ID="";book_name="";auther="";publishing="";price=0;}voidbook::display( )//显示函数{cout<<"书号:"<<book_ID<<"";cout<<"书名:"<<book_name<<"";cout<<"作者:"<<auther<<"\t";cout<<"初版社:"<<publishing<<"";cout<<"定价:"<<price;cout<<"\n";}stringbook::getbook_ID( )//取书号{returnbook_ID;}stringbook::getbook_name( )//取书名{returnbook_name;}stringbook::getauther( )//取作者{returnauther;}stringbook::getpublishing( )//取初版社{returnpublishing;}doublebook::getprice( )//取定价{returnprice;}//buybook.cpp文件//#include"buy.h"//#include"book.h"//#include"strclass.h"voidmain( ){inti=0,buyerid,flag;//buyerid记录购书人编号book*c[2];//c[2]数组存放图书信息

flag

1标志找到购书人layfolkb1("林晓惠",1,"北京",0);//定义三种购书人对象,给出初始化值honoured_guestb2("王路遥",2,.6,"上海",0);//memberb3("赵红艳",3,5,"广州",0);buyer*b[3]={&b1,&b2,&b3};//b[]数组存放三个购书人信息bookc1("7-302-04504-6","C++程序设计","谭浩强","清华",25);//定义两个图书对象bookc2("7-402-03388-9","数据构造","许卓林","北大",20);c[0]=&c1;c[1]=&c2;//c[]数组存放两种图书的信息cout<<"购书人信息:\n\n";for(i=0;i<3;i++)//显示三位购书人的信息b[i]->display( );cout<<"\n图书信息:\n\n";for(i=0;i<2;i++)//显示两种图书的信息c[i]->display( );cout<<"\n\n请输入购书人的编号:";cin>>buyerid;//输入购书人的编号flag=0;//先把标志变量置0for(i=0;i<3;i++)//查找输入的购书人编号可否存在,若存在标志变量置1if(b[i]->getid( )==buyerid){flag=1;break;}if(!flag){cout<<"编号不存在"<<endl;}else{b[i]->setpay(c[0]->getprice( ));//若是购书人的编号存在使用该书的定价计算b[i]->setpay(c[1]->getprice( ));//两种图书价格累加cout<<"购书人需要付费:"<<b[i]->getpay( )<<"\n\n";//输出购书款项。}}程序运行结果大作业2电话簿管理程序1.问题的提出与功能解析电话簿由若干条通信记录组成。每条通信记录由姓名和电话号码组成。姓名不超过30个字符,电话号码不高出20个字符。依照需要能够增加,删除,显示通信记录,电话簿存盘和读出电话簿。2.对象(类)的设计,设计一个通信类Address。该类包括3个数据成员:姓名、电话和通信录状态。再定义一个电话簿类,实现对通信录的操作。3.核心控制设计该程序开始执行时显示以下主菜单:**********************************模拟电话簿**1.增加通信录**2.删除通信录**3.显示通信录**4.电话簿存盘**5.读出电话簿**6.退出*********************************输入(1-6)4.编码与测试1)选择1时,进入“增加通信录”功能。显示电话簿中已经有的通信录的数量。如电话簿已经记满,则显示“电话簿已满”,按任意键返回主菜单。否则,依次提示“输入姓名”和“输入电话号码”,在电话簿中插入一条记录。2)选择2时,进入“删除通信录”后,显示电话簿中已有的通信录数量。如电话簿已经为空,则显示“电话簿已空”,按任意键返回主菜单。否则,提示“输入姓名”,依照指定的姓名删除一条通信录。若是该姓名在通信录中不存在,则给出提示“该姓名不存在”,按任意键返回主菜单。3)选择3时,进入“显示通信录”,列出电话簿中全部通信录的清单。包括姓名和电话号码。一条通信录据有一行,按姓名字典序次排列。4)选择4时,进入“电话簿存盘”,提示“输入保持的文件名”,输入文件名后,电话簿存盘。若是存盘失败,提示“打开文件失败”,按任意键返回主菜单。5)选择5时,进入“读出电话簿”,提示“输入读取的文件名”,输入文件名后,从文件中读取电话簿;若是读取失败,提示“打开文件失败”,按任意键返回主菜单。6)选择6时,程序退出。本程序成立了两个类,通信录类和电话簿类对姓名和号码长度有限制,电话簿数量有限制。输入、删除、显示都在数组中进行输入判断电话簿满否,删除判断电话簿空否,显示以前进行排序操作结束以文件形式存盘文件读盘读入数组#include<iostream>#include<iomanip>#include<fstream>#include<string>usingnamespacestd;classAddress//通信录类{boolStatus;//通信录状态charName[31];//姓名charPhone[21];//电话public:Address( ){Status=true;}//构造时通信录清空stringGetName( )const;//取姓名stringGetPhone( )const;//取电话boolisEmpty( );//取通信录状态voidEnter(string&name,string&phone);//输入通信录voidSet( );//置通信录状态0,非空voidClear( );//置通信录状态1,空};#include<iostream>#include<iomanip>#include<fstream>#include<string>usingnamespacestd;constintItemNum=100;classAddressBook//电话簿类{AddressItem[ItemNum];//ItemNum为通信录最大数量,定义长度为100的数组intNum;//通信录数量intFindFree( );//查栈空的通信录public:AddressBook( ){Num=0;}//AddressBook类的构造函数,通信录数量初始值为0voidEnter( );//输入voidErase( );//删除voidLoad( );//读盘voidSave( );//存盘voidList( );//显示};#include<iostream>#include<iomanip>#include<fstream>#include<string>usingnamespacestd;stringAddress::GetName( )const//取姓名{strings=Name;returns;}stringAddress::GetPhone( )const//取号码{strings=Phone;returns;}boolAddress::isEmpty( ){returnStatus;}//取通信录状态voidAddress::Enter(string&name,string&phone)//输入通信录{intlen=name.length( );if(len>30)len=30;//输入超长时截断name.copy(Name,len,0);Name[len]=0;//字符串结束符,把string变换成char*len=phone.length( );if(len>20)len=20;phone.copy(Phone,len,0);Phone[len]=0;}voidAddress::Set( ){Status=false;}voidAddress::Clear( ){Status=true;}#include<iostream>#include<iomanip>#include<fstream>#include<string>usingnamespacestd;ostream&operator<<(ostream&output,constAddress&addr)//重载<<{output<<setiosflags(ios::left)<<setw(31)<<addr.GetName( )<<setw(21)<<addr.GetPhone( );returnoutput;}intAddressBook::FindFree( ){intt;for(t=0;t<ItemNum;t++)if(Item[t].isEmpty( ))returnt;return-1;//电话簿已满}voidAddressBook::Enter( )//输入一个通信录{stringname,phone;intphoner;phoner=FindFree( );//判断电话簿满否if(phoner==-1)cout<<"电话簿已记满";else{cout<<"电话簿中有"<<Num<<"条通信录"<<endl;cout<<"输入姓名:";cin>>name;cout<<"输入电话号码:";cin>>phone;Item[phoner].Enter(name,phone);Item[phoner].Set( );Num++;}}voidAddressBook::Erase( )//删除通信录{intt;strings;cout<<"电话簿中有"<<Num<<"条通信录"<<endl;if(!Num)cout<<"电话簿已空!\n";else{cout<<"输入姓名:";cin>>s;for(t=0;t<ItemNum;t++){if(!Item[t].isEmpty( )&&Item[t].GetName( )==s){Item[t].Clear( );Num--;cout<<"已经删除"<<s<<"的通信录\n";break;}}if(t==ItemNum){cout<<"该名字不存在\n";cin.get( );}}}voidAddressBook::List( )//按字典序次显示全部通信录{intt,i,j;Addresslist[ItemNum],temp;if(!Num)cout<<"电话簿已空!"<<endl;else{cout<<"电话簿中有"<<Num<<"条通信录"<<endl;for(t=0;t<ItemNum;t++)list[t]=Item[t];for(i=0;i<ItemNum;i++){for(j=ItemNum-1;j>i;j--)if(list[j-1].GetName( )>list[j].GetName( )){temp=list[j-1];list[j-1]=list[j];list[j]=temp;}}cout<<setiosflags(ios::left)<<setw(31)<<"姓名"<<setw(21)<<"电话"<<endl;for(t=0;t<ItemNum;++t){if(!list[t].isEmpty( ))cout<<list[t]<<endl;}}}voidAddressBook::Save( )//电话存盘{ofstreamfile;inti;charfname[4];cout<<"输入保存的文件名:";cin>>fname;file.open(fname,ios::out);if(!file){cout<<"打开文件失败!\n";cin.get( );}else{for(i=0;i<ItemNum;i++){if(file&&!file.eof( ))file.write(reinterpret_cast<constchar*>(&Item[i]),sizeof(Address));}file.close( );}}voidAddressBook::Load( )//读出电话簿{ifstreamfile;inti;charfname[4];cout<<"输入读取的文件名:";cin>>fname;file.open(fname,ios::in);if(!file){cout<<"打开文件失败!\n";cin.get( );}else{Num=0;for(i=0;i<ItemNum;i++){if(file&&!file.eof( ))file.read(reinterpret_cast<char*>(&Item[i]),sizeof(Address));if(!Item[i].isEmpty( ))Num++;}file.close( );}}#include<iostream>#include<fstream>#include<iomanip>#include<string>usingnamespacestd;intmenu_select( );voidmain( ){charchoice;AddressBookmaillist;for(;;)//循环直到输入结束代码{choice=menu_select( );switch(choice){case1:maillist.Enter( );break;case2:maillist.Erase;break;case3:maillist.List( );break;case4:maillist.Save( );break;case5:maillist.Load( );break;case6:exit(0);}}}intmenu_select( ){charc;cout<<"***************************\n";cout<<"*模拟电话簿*\n";cout<<"*1.增加通信录*\n";cout<<"*2.删除通信录*\n";cout<<"*3.显示通信录*\n";cout<<"*4.电话簿存盘*\n";cout<<"*5.读出电话簿*\n";cout<<"*6.退出*\n";cout<<"***************************\n";cout<<"\n请输入(1-6):";do{//键盘输入循环cin.get(c);}while(c<'1'||c>'6');returnc-48;}《C++程序设计》练习题一、选择题(四选一)以下选项中,哪一个是C++的合法运算符()(A)cout

(B)friend

(C)int

(D)new2.()是给对象取一个别名。(A)指针(B)引用(C)列举(D)构造3.下面哪一个是"voidBC(inta,intb);"(A)floatBC(intx,inty);(B)voidBC(inta,charb);(C)floatBC(inta,intb,intc=0);

的重载函数

?(

)(D)intbc(inta,intb);4.下面相关构造函数的描述正确的选项是()构造函数的返回种类能够是int种类构造函数必定带有参数构造函数的名字与类名完好相同构造函数不能够够重载5.下面关于引用的定义,错误的选项是()(A)inta;int&b=a;

(B)doublea;double&b;b=a;(C)floata;float&b=a;

(D)chara;char&b=a;6.以下关于继承的说法中,错误的选项是()析构函数不能够继承默认的继承方式是私有继承派生类的成员,除了它自己的成员外,还包括了它基类的成员派生类继承的基类成员的接见权限到派生类保持不变7.以下关于指针的用法,错误的选项是()(A)inti;int*p=&i;(B)inti;int*p;*p=&i;(C)inti[10],*p;p=&i[5];(D)inti[10],*p;p=i;下面的运算符中,在C++中不能够够重载的是()(A)=(B)+(C)delete(D).9.以下关于类和对象的说法不正确的选项是()(A)对象是类的一个实例(B)一个类只能有一个对象任何一个对象只能属于一个详尽的类类与对象的关系和数据种类与变量的关系相似10.构造函数在()时被执行(A)程序编译(B)创办类(C)创办对象(D)执行程序友元的作用之一是()(A)提高程序的运行效率(B)加强类的封装性(C)实现数据的隐蔽性(D)增加成员函数的种类12.以下关于运算符重载函数的说法中,错误的选项是()(A)不是类的成员函数(B)也不是类的友元函数(C)是构造函数的一种(D)可是一般的函数13.在声明类的时候,下面的说法正确的选项是()能够在类的声明中给数据成员赋初值数据成员的数据种类能够是registerprivate、public、protected能够按任意序次出现没适用private、public、protected定义的数据成员是公有成员14.静态成员函数赞同接见类的()成员。静态(B)非静态(C)私有(D)非私有15.以下关于静态成员函数的说法中,正确的选项是()在静态成员函数中能够使用this指针在成立对象前,就可以为静态数据成员赋值静态成员函数在类外定义时,要用static前缀静态成员函数只幸亏类外定义16.以下关于虚函数描述,正确的选项是( )构造函数不能够是虚函数(B)析构函数不能够是虚函数虚函数能够是友元函数(D)虚函数能够是静态函数.17.对象成员的引用方法有()种。(A)1(B)2(C)3(D)418.()是给对象取一个别名,它引入了对象的同义词。(A)指针(B)引用(C)列举(D)构造19.一个()赞同用户为函数定义一种模式,使得函数中的参数能获取多种数据种类。函数模板(B)模板函数(C)类模板(D)模板类20.关于类中定义的成员,其隐含接见权限为()(A)public(B)protected(C)private(D)static二、填空在设计一个类的时候,有时需要将数据成员定义为受保护的种类,这时能够使用要点字①,再在后边加上“:”号。//定义长方形的类RECTclassRECT{floata,b,area( );public:②{a=8;b=6;}//无参构造函数其他成员函数略};//声明友元函数classClassOne{intx;MF(ClassOne);//声明友元函数,该函数无返回值public:其他成员函数略};//静态成员classCK{doublecunkuan;public:④doublelixi;//将lixi声明为一个静态成员CK(doublec){cunkuan=c;}voidmodLixi(double);voidcalLiXi(intm=1);};5.运算符被重载后,不能够改变⑤、结合性和语法构造//设计类A,主函数实现先输出两数,再输出两数中较大者classA{intx,y;public:voida

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论