第9周基礎練習
依照學術誠信條款,我保證此作業是本人獨立完成的。
溫馨提示:
1.本次作業屬於Online Judge題目,提交後由系統即時判分。
2.學生可以在作業截止時間之前不限次數提交答案,系統將取其中的最高分作爲最終成績。
1點類(10分)
題目內容:
定義平面點類POINT,點的x,y座標是其數據成員,double類型,私有;成員函數有set()設置點的x,y座標,distance()計算和另一個點的距離,show()顯示座標的位置信息。成員函數均爲公有。
編寫主函數,使用POINT類定義兩個點對象,輸入並設置兩個點的座標,顯示依次兩個點的座標信息,計算並顯示兩個點的距離。主函數和運行結果如下下:
主函數:
運行結果
輸入:兩行,每行是一個點的x,y座標,用空格隔開。
輸出:三行,前兩行分別是兩個點的座標,在括號中用逗號隔開,是英文符號。第3行是兩個點的距離,非負實數。
樣例1輸入:
0 0
1 1
樣例1輸出:
(0,0)
(1,1)
1.41421
參考程序
時間限制:500ms內存限制:32000kb
C++
#include<iostream>
#include<cmath>
using namespace std;
class POINT{
private: double x,y;
public:
void set(double a,double b);
void show();
double distance(POINT B);
};
double POINT::distance(POINT b){
return sqrt(pow(x-b.x,2)+pow(y-b.y,2));
}
void POINT::set(double a,double b){
x=a;y=b;}
void POINT::show(){
cout<<"("<<x<<","<<y<<")";}
int main(){
POINT a,b;
double x,y;
cin>>x>>y;
a.set(x,y);
cin>>x>>y;
b.set(x,y);
a.show();cout<<endl;
b.show();cout<<endl;
cout<<a.distance(b)<<endl;
return 0; }
用例測試結果 運行時間 佔用內存 提示 得分
用例1通過 3ms 236kb
2
用例2通過 2ms 380kb
2
用例3通過 3ms 368kb
2
用例4通過 2ms 372kb
2
用例5通過 2ms 360kb
1
用例6通過 3ms 256kb
1
提交答案本次得分/總分:10.00/10.00分
2圓類(10分)
題目內容:
定義圓類CIRCLE,圓心座標和半徑是其數據成員,double類型,私有;成員函數有set()設置圓心座標和半徑,area()計算圓的面積,perimeter()計算周長,show()顯示圓心和半徑信息。成員函數均爲公有。
編寫主函數,使用CIRCLE類定義一個圓的對象,輸入並設置圓心和半徑,顯示圓的靜態成員信息信息,計算並顯示圓的周長和麪積。主函數和運行結果如下:
運行結果
輸入:圓心座標和半徑,用空格隔開。
輸出:三行,一行是圓心、半徑,在括號中,用逗號隔開;一行是周長;一行是面積
【提示】
樣例1輸入:
1 2 1
樣例1輸出:
(1,2,1)
6.28
3.14
時間限制:500ms內存限制:32000kb
C++
#include<iostream>
#include<cmath>
using namespace std;
class CIRCLE {
private: double x, y, r;
public:
void set(double a, double b, double c) {
x = a;y = b, r = c;
}
void show() {
cout << "(" << x << "," << y << "," << r << ")";
}
double perimeter(){
return 2 * r*3.14; }
double area() {
return r * r*3.14;
}
};
int main() {
CIRCLE a;
double x, y, r;
cin >> x >> y >> r;
a.set(x, y, r);
a.show();cout << endl;
cout << a.perimeter() << endl;
cout << a.area() << endl;
return 0;
}
用例測試結果 運行時間 佔用內存 提示 得分
用例1通過 2ms 364kb
3
用例2通過 2ms 244kb
3
用例3通過 3ms 256kb
2
用例4通過 12ms 256kb
2
提交答案本次得分/總分:10.00/10.00分
3矩形類(10分)
題目內容:
定義屏幕矩形類RECT,邊和座標軸平行,左上角和右下角的兩個頂點座標是其數據成員,int類型,私有;成員函數有set()設置兩個頂點座標,area()計算面積,perimeter()計算周長,showinfo()顯示兩個頂點信息,show()顯示由“*”組成的矩形(寬是矩形的寬度,高是矩形的高度)。成員函數均爲公有。
編寫主函數,使用RECT類定義一個矩形類對象,輸入並設置矩形的兩個頂點,顯示矩形的靜態成員信息,計算並顯示矩形的周長和麪積,顯示由“*”組成的矩形。主函數和運行結果如下:
結果:
輸入:兩個頂點的座標,用空格隔開。
輸出:三部分:一行是頂點座標,在括號中,用逗號隔開;一行是周長;一行是面積;最後是由*組成的矩形,寬是矩形的寬度,高是矩形的高度。
【提示】
樣例1輸入:
1 1 10 5
樣例1輸出:
(1,1,10,5)
26
36
時間限制:500ms內存限制:32000kb
C++
#include<iostream>
#include<cmath>
using namespace std;
class RECT {
private: struct point {
int x, y;
};
point p1, p2;
public:
void set(int a, int b, int c,int d) {
p1.x = a;p1.y = b, p2.x = c,p2.y=d;
}
void showinfo() {
cout << "(" << p1.x << "," <<p1.y << "," << p2.x <<","<<p2.y<<")";
}
int perimeter(){
return 2 * (abs(p2.x - p1.x) +abs(p2.y - p1.y));
}
int area() {
return abs((p1.x - p2.x)*(p1.y - p2.y));
}
void show() {
for (int i = abs(p2.y - p1.y);i >0;--i) {
for (int j = abs(p2.x - p1.x);j >0;--j)
cout << "*";cout << endl;
}
}
};
int main() {
RECT a;
int x, y, r,s;
cin >> x >> y >> r>>s;
a.set(x, y, r,s);
a.showinfo();cout << endl;
cout << a.perimeter() << endl;
cout << a.area() << endl;
a.show();
return 0;
}
用例測試結果 運行時間 佔用內存 提示 得分
用例1通過 2ms 256kb
4
用例2通過 2ms 380kb
3
用例3通過 2ms 256kb
3
提交答案本次得分/總分:10.00/10.00分
4複數類(10分)
題目內容:
定義複數類COMPLEX,實部和虛部是其數據成員,double類型,私有;成員函數有set()設置實部和虛部,getReal()獲得實部,getImag()獲得虛部,module()獲得複數的模,add()計算和另一個複數的和返回複數(不改變原複數),show()顯示覆數。成員函數均爲公有。
編寫主函數,使用COMPLEX類定義兩個對象表示兩個複數,輸入兩個複數的實部和虛部並設置兩個複數對象,顯示和,顯示和的實部,顯示和的虛部,顯示和的模。主函數和運行結果如下:
結果:
輸入:兩行,每行是一個複數的實部和虛部,用空格隔開。
輸出:四行,分別是複數、實部、虛部和模。複數爲0時顯示0+0j,虛部爲負數時顯示如0-1j。
【提示】使用if…else…判斷虛部的正負,從而採用不同的顯示格式。
樣例1輸入:
1 2
3 4
樣例1輸出:
4+6j
4
6
7.2111
時間限制:500ms內存限制:32000kb
C++
#include<iostream>
#include<cmath>
using namespace std;
class COMPLEX {
double x, y;
public:
void set(double a, double b) {
x = a, y = b;
}
double getReal() {
return x;
}
double getLmag() {
return y;
}
double module() {
return sqrt(x*x + y * y);
}
COMPLEX add( COMPLEX b) {
COMPLEX c;
c.x = x + b.x;
c.y = y + b.y;
return c;
}
void show() {
cout << x;
if (y >= 0)cout << "+";
cout << y << "j";
}
};
int main() {
COMPLEX a,b,c;
double x, y;
cin >> x >> y;
a.set(x, y);
cin >> x >> y;
b.set(x, y);
c = a.add(b);
c.show();
cout << endl;
cout<<c.getReal();cout << endl;
cout <<c.getLmag() << endl;
cout << c.module() << endl;
return 0;
}
用例測試結果 運行時間 佔用內存 提示 得分
用例1通過 15ms 368kb
2
用例2通過 3ms 364kb
2
用例3通過 3ms 368kb
2
用例4通過 3ms 364kb
1
用例5通過 2ms 368kb
1
用例6通過 15ms 364kb
1
用例7通過 3ms 364kb
1
提交答案本次得分/總分:10.00/10.00分
5分數類(10分)
題目內容:
定義分數(有理數)類FRACTION,分子和分母是其數據成員,int,私有;成員函數有set()設置分子和分母,Real()返回其小數形式,show()顯示分數,公有。成員函數reduce()實現約分,私有。
編寫主函數,使用FRACTION類定義一個對象表示分數,輸入分數的分子和分母,設置分數對象,顯示分數,顯示分數的小數形式。
注意:(1)程序自動約分,如輸入2 4 ,顯示分數1/2;(2)負數設置在分子上,如輸入1 -3 顯示的分數爲 -1/3;(3)分子爲0時,不約分,如輸入0 8 ,顯示分數0/8。
主函數和運行結果:
結果:
輸入:分數的分子和分母,整數,用空格隔開,分母不爲0。
輸出:兩行,一行爲分數形式,一行爲分數的小數形式(自然近似)。
【提示】(1)約分函數格式爲void reduce(void),直接對成員變量約分,不需參數,不需返回值;(2)set()中爲數據成員賦值後直接調用reduce()即可。(3)分母爲負數時,分子、分母都變號,就將符號轉到分子上,如分子分母分別爲1和-2,都變號,爲-1和2。
樣例1輸入:
8 -24
樣例1輸出:
-1/3
-0.333333
時間限制:500ms內存限制:32000kb
C++
#include<iostream>
#include<cmath>
using namespace std;
class FRACTION {
int x, y;
public:
void set(int a, int b) {
x = a, y = b;
reduce();
if (y < 0 && x) {
y = 0-y;
x = 0-x;
}
}
void reduce(){
if (x&&y) {
int i;
if (abs(x) < abs(y))i =abs (x);
else i =abs( y);
for (;i >= 2;--i) {
if (x%i == 0 && y%i == 0) {
x /= i;y /= i;
}
}
}
}
void show() {
if (y < 0)cout << "-";
cout << x;
cout << "/";
if (y < 0)cout << -y;
else cout << y;
}
double real() {
double a = 1.0*x / y;
if (fabs(a) < 0.0000001)return 0;
return a;
}
};
int main() {
FRACTION a;
int x, y;
cin >> x >> y;
a.set(x, y);
a.show();
cout << endl;
cout<<a.real();cout << endl;
return 0;
}
用例測試結果 運行時間 佔用內存 提示 得分
用例1通過 2ms 236kb
2
用例2通過 2ms 256kb
1
用例3通過 2ms 236kb
1
用例4通過 3ms 256kb
1
用例5通過 2ms 256kb
1
用例6通過 2ms 240kb
1
用例7通過 2ms 256kb
1
用例8通過 2ms 368kb
1
用例9通過 1ms 256kb
1
提交答案本次得分/總分:10.00/10.00分