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++程序設計 作者:劉麗華 quprice:90
書名:Python機器學習 作者:範淼 quprice:160
書名:數據結構與算法 作者:徐鳳生 quprice:90
書名:大話數據結構 作者:程傑 qu*price:40
使用指針,逆序顯示的結果爲:
書名:大話數據結構 作者:程傑 quprice:40
書名:數據結構與算法 作者:徐鳳生 quprice:90
書名:Python機器學習 作者:範淼 quprice:160
書名:C++程序設計 作者:劉麗華 quprice: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;
}