C++-习题3 类和对象

给你一囗甜甜゛ 提交于 2020-02-15 05:24:19

1. (10分) C+±3-1 计算器类

题目描述
下面是一个计算器类的定义,请完成该类成员函数的实现,并编写main()。
class Counter
{
public:
Counter(int num);
void increament(); //给原值增1
void decrement(); //给原值减1
int getValue(); //取得计数器值
void print(); //显示计数
private:
int value;
};

输入描述
一个整数,用于创建Counter对象

输出描述
调用成员函数进行相关操作后的计算器值

输入样例
5

输出样例
计数器的值为:7
计数器的值为:6

代码:

#include <iostream>
using namespace std;
class Counter
{
public:
	Counter(int num);  
	void increament();  //给原值增1
	void decrement();  //给原值减1
    int getValue();     //取得计数器值
	void print();       //显示计数
private:
	int value;
};
Counter::Counter(int num)
{
	value=num;
}
void Counter::increament()
{
	value++;
}
void Counter::print(){cout<<"计数器的值为:";
}
void Counter::decrement(){
	value--;
}

int Counter::getValue(){
	print();
	return value;
}

int main()
{
	int a;
	cin>>a;
	Counter A(a);
	A.increament() ;
	A.increament() ;
	 
	cout<<A.getValue()<<endl;
	A.decrement() ;
	cout<<A.getValue()<<endl;
	 
	return 0;
 } 

2. (15分) C+±3-2 Date类

题目描述
根据注释语句的提示,实现类Date的成员函数,并编写main()
class Date
{
public:
void setYear(int y); //设置年的值
void setMonth(int m); //设置月的值
void setDay(int d); //设置日的值
bool isLeapYear(); //判断是否是闰年
void printDate(); //显示日期
private:
int year,month,day;
};

输入描述
三个整数:年、月、日

输出描述
年月日及该年是否是闰年

输入样例
以下为两组测试数据
2017 9 20

2012 9 20

输出样例
以下为两组测试数据对应的结果
日期为:2017年9月20日
该年为非闰年!

日期为:2012年9月20日
该年为闰年!

代码:

#include <iostream>
using namespace std;
class Date
{
public:
	void setYear(int y);     //设置年的值
	void setMonth(int m);  //设置月的值
	void setDay(int d);    //设置日的值
	bool isLeapYear();    //判断是否是闰年
	void printDate();     //显示日期
private:
	int year,month,day;
};
void Date::setDay(int d){day=d;
}
void Date::setMonth(int m){
	month=m;
}
void Date::setYear(int y){
	year=y;
}
bool Date::isLeapYear(){
	if(year%4==0&&year%100!=0||year%400==0)
		return true;
	return false;
}
void Date::printDate(){
	cout<<"日期为:"<<year<<"年"<<month<<"月"<<day<<"日"<<endl;
}

 
int main()
{
	Date A;
	int y,m,d;
	cin>>y>>m>>d;
	A.setDay(d);
	A.setMonth(m);
	A.setYear(y); 
	 
	A.printDate();
	if(A.isLeapYear()) cout<<"该年为闰年!"<<endl;
	else cout<<"该年为非闰年!"<<endl; 
	 
	return 0;
 } 

3. (15分) C+±3-3 Cylinder类

题目描述
编程:建立Cylinder类,有三个double型私有数据成员:半径、高和体积,构造函数传递两个值:半径和高,计算体积。成员函数showVolume()用来显示每个对象的体积。
要求:半径、高从键盘输入。
PI的值取:3.1415926

输入描述
两个实型数据:半径和高

输出描述
一个数据:圆柱体的体积

输入样例
2 3

输出样例
体积为:37.6991

代码:

#include <iostream>
using namespace std;
const double PI=3.1415926;
class C{
	public:
		C(double h,double r);
		void show();
	private:
		double high,round,v;
};
C::C(double r,double h):high(h),round(r)
{
	 
}
void C::show() {
	cout<<"体积为:"<<PI*round*round*high<<endl;
}
int main()
{
	double r,h;
	cin>>r>>h;
	C A(r,h);
	A.show();
	return 0;
}

4. (20分) C+±3-4 Book类

题目描述
构建一个Book类,有4个私有数据成员:书名、作者、qu和price(均为int型),将qu初始化为1~5,将price被始化为qu的10倍。建立一个有5个元素的对象数组,顺序显示每个对象数组中元素的信息;定义对象指针,通过指针访问对象数组,逆序显示对象数组中元素的信息。要求:书名、作者、qu的信息从键盘输入

输入描述
5个对象数组元素的值

输出描述
顺序显示对象数组中各对象的值
逆序显示对象数组中各对象的值

输入样例
C语言程序设计 苏小红 2
C++程序设计 刘丽华 3
Python机器学习 范淼 4
数据结构与算法 徐凤生 3
大话数据结构 程杰 2

输出样例
顺序显示的结果为:
书名:C语言程序设计 作者:苏小红 quprice:40
书名:C++程序设计 作者:刘丽华 qu
price:90
书名:Python机器学习 作者:范淼 quprice:160
书名:数据结构与算法 作者:徐凤生 qu
price:90
书名:大话数据结构 作者:程杰 qu*price:40

使用指针,逆序显示的结果为:
书名:大话数据结构 作者:程杰 quprice:40
书名:数据结构与算法 作者:徐凤生 qu
price:90
书名:Python机器学习 作者:范淼 quprice:160
书名:C++程序设计 作者:刘丽华 qu
price:90
书名:C语言程序设计 作者:苏小红 qu*price:40

代码

#include <iostream>
#include <string>
using namespace std;
class Book{
	public:
		Book(){
		};
		void set(string bn,string n,int q);
		string getn(){return name;
		}
		string getbn()
		{
			return bookname;
		}
		 
		int total(){
			price=qu*10;
			return qu*price;
		}
		 
	private:
		int qu,price;
		string name,bookname;
};

void Book::set(string bn,string n,int q)
{
	name=n;
	bookname=bn;
	qu=q;
	
}
int main()
{ 	int q;
	string n;
	string bn;
 
	
	Book s[5];
	
	int i;
	for(i=0;i<5;i++)
	{
		cin>>bn>>n>>q;
		s[i].set(bn,n,q); 
	
		
	} 
	Book *p;
	p=&s[0];
	cout<<"顺序显示的结果为:"<<endl;
	for(;p<=&s[4];p++){
		cout<<"书名:"<<p->getbn()<<"     作者:"<<p->getn()<<"    qu*price:"<<p->total()<<endl;
	}
	cout<<endl<<"使用指针,逆序显示的结果为:"<<endl;
	p--;
	for(;p>=&s[0];p--)
		cout<<"书名:"<<p->getbn()<<"     作者:"<<p->getn()<<"    qu*price:"<<p->total()<<endl;
	 p++;
	delete p;
 
	return 0;
}

5. (20分) C+±3-5 Stock类

题目描述
编程:构建一个类Stock,含有字符数组stockcode[]及int型quan、double型成员price.
构造函数含有三个参数:字符数组na[]及q、p。当定义Stock的类对象时,将对象的第1个字符串参数赋给数据成员stockcode,第2和第3个参数分别赋给quan、double。未设置第2和第3个参数时,quan的值为1000,price的值为9.98。成员函数print()无形参,要求使用this指针显示对象数据成员的内容。main()中定义二个对象,
对象s1的三个参数分别为: "600001”, 3000, 5.67,都由键盘输入
对象s2的第1个数据成员值为:"600002”, 由键盘输入,其余使用默认值。

输入描述
两行数据
第一行为第一个对象的数据成员值,分别为:"600001”, 3000, 5.67
第二行为第二个对象的第1个数据成员值,为:"600002”

输出描述
两行
第一行为对象1的数据成员值
第二行为对象2的数据成员值

输入样例
600001 3000 5.67
600002

输出样例
stockcode:600001 quan:3000 price:5.67
stockcode:600002 quan:1000 price:9.98

代码

#include <iostream>
#include <string>
using namespace std;
class Stock{
	public:
	Stock(string a,int quan,double price);
		void print();
	private:
		int quan;
		double price;
		string str;
};
void Stock::print(){
	cout<<"stockcode:"<<this->str<< "quan:"<<this->quan<<" price:"<<this->price<<endl;
}
Stock::Stock(string a,int q=1000,double p=9.98)
{
	str=a;
	quan=q;
	price=p;
	
}
 
 
int main()
{
	int a;
	double b;
	string c,d;
	cin>>c>>a>>b>>d;
	Stock A(c,a,b),B(d);
	A.print() ;
	B.print();
	
	return 0;
}

6. (20分) C+±3-6 Student类

题目描述
声明一个Student类,在该类的结构如下:
数据成员:
-stuNo:string
-name:string
-score:int // 成绩
-sum:int // 静态数据成员,统计总分
-count:int //静态数据成员,统计学生人数
成员函数
+setData(no:string,na:string,sco:int):void //设置数据成员的值
+<>getSum():int //返回学生成绩之和
+<>getCount():int //返回学生总人数
+<>calAverage():double //计算平均分
+show():void //输出学生学号、姓名、成绩
+<>showStaticData():void //输出学生的总人数、总分
在main()函数中,输入某班若干位同学(人数不超过30)的信息,并求出全班学生的总人数、总分及平均分。

本题每组测试用例的对象数是不固定的,以组合键Ctrl+Z或人数>30结束输入,例如:
while((cin>>stuNo>>name>>score)&&Student::getCount()<30) {
stu[Student::getCount()].setData(stuNo,name,score);
}

输入描述
若干个学生的信息,每位学生信息一行

输出描述
创建对象前的学生人数和总分信息
每位学生的信息
学生总人数、总分
学生平均分

输入样例
2001 张翼德 87
2002 赵子龙 76
2003 黄汉升 85
2004 关云长 89
2005 马孟起 68

输出样例
创建对象前,学生总人数、总分为:
现在有0人,总分为:0
学生成绩信息:
学号:2001 姓名:张翼德 成绩:87
学号:2002 姓名:赵子龙 成绩:76
学号:2003 姓名:黄汉升 成绩:85
学号:2004 姓名:关云长 成绩:89
学号:2005 姓名:马孟起 成绩:68
现在有5人,总分为:405
学生的平均分为:81

用户代码

#include <iostream>
#include <string>
using namespace std;
class Student{
	public:
		void setData(string numx,string namex,int scorex);
		void jia();
		static int getsum(){
			return sum;
		}
		static int getcnt(){
			return cnt;
		}
		static double getave()
		{
			return sum*1.0/cnt;
		}
		void show(){
			cout<<"学号:"<<num<<" 姓名:"<<name<<" 成绩:"<<score<<endl;
		}
	private:
		string num;
		string name;
		int score;
		static int sum,cnt;
};
int Student::sum=0;
int Student::cnt =0;
void Student::setData(string numx,string namex,int scorex) 
{
	num=numx;
	name=namex;
	score=scorex;
}
void Student::jia(){
	sum+=score;
	cnt++; 
}
 
int main()
{
	
	string numx,namex;
	int scorex;
	Student stu[30];
	while((cin>>numx>>namex>>scorex)&&Student::getcnt()<30)	{	
		stu[Student::getcnt()].setData(numx,namex,scorex);
		stu[Student::getcnt()].jia();
}int i=0;
cout<<"创建对象前,学生总人数、总分为:"<<endl;
	cout<<"现在有0人,总分为:0"<<endl;
	cout<<"学生成绩信息:"<<endl;
	for(i=0;i<Student::getcnt() ;i++)
		 stu[i].show() ;
		 i--;
	cout<<"现在有"<<stu[i].getcnt() <<"人,总分为:"<<stu[i].getsum()<<endl ;
cout<<"学生的平均分为:"<<stu[i].getave()<<endl;
		  
	return 0;
 } 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!