C++-習題3 類和對象

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;
 } 

發佈了23 篇原創文章 · 獲贊 11 · 訪問量 1618
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章