实验2
Home | Web Board | ProblemSet | Standing | Status | Statistics |
Problem A: 平面上的点——Point类 (I)
Time Limit: 1 Sec Memory Limit: 4 MBSubmit: 6011 Solved: 2151
[Submit][Status][Web Board]
Description
在数学上,平面直角坐标系上的点用X轴和Y轴上的两个坐标值唯一确定。现在我们封装一个“Point类”来实现平面上的点的操作。
根据“append.cc”,完成Point类的构造方法和show()方法。
接口描述:
Point::show()方法:按输出格式输出Point对象。
Input
输入多行,每行为一组坐标“x,y”,表示点的x坐标和y坐标,x和y的值都在double数据范围内。
Output
输出为多行,每行为一个点,X坐标在前,Y坐标在后,Y坐标前面多输出一个空格。每个坐标的输出精度为最长16位。输出格式见sample。
C语言的输入输出被禁用。
Sample Input
Sample Output
HINT
注意精度控制,C语言的输入输出被禁用。
Append Code
#include<iostream> #include<iomanip> using namespace std; class Point{ private: double x; double y; public: Point():x(0),y(0){} Point(double a,double b):x(a),y(b){} void show() { cout<<setprecision(16)<<"Point : ("<<x<<", "<<y<<")"<<endl; } }; int main() { char c; double a, b; Point q; while(std::cin>>a>>c>>b) { Point p(a, b); p.show(); } q.show(); }
Home | Web Board | ProblemSet | Standing | Status | Statistics |
Problem B: 平面上的点——Point类 (II)
Time Limit: 1 Sec Memory Limit: 4 MBSubmit: 5090 Solved: 2072
[Submit][Status][Web Board]
Description
在数学上,平面直角坐标系上的点用X轴和Y轴上的两个坐标值唯一确定。现在我们封装一个“Point类”来实现平面上的点的操作。
根据“append.cc”,完成Point类的构造方法和show()方法,输出各Point对象的构造和析构次序。
接口描述:
Point::show()方法:按输出格式输出Point对象。
Input
输入多行,每行为一组坐标“x,y”,表示点的x坐标和y坐标,x和y的值都在double数据范围内。
Output
输出每个Point对象的构造和析构行为。对每个Point对象,调用show()方法输出其值:X坐标在前,Y坐标在后,Y坐标前面多输出一个空格。每个坐标的输出精度为最长16位。输出格式见sample。
C语言的输入输出被禁用。
Sample Input
Sample Output
HINT
思考构造函数、拷贝构造函数、析构函数的调用时机。
Append Code
#include<iostream> #include<iomanip> using namespace std; class Point{ private: double x,y; public: Point():x(0),y(0){cout<<setprecision(16)<<"Point : (0, 0) is created."<<endl;} Point(double a,double b):x(a),y(b){cout<<setprecision(16)<<"Point : ("<<x<<", "<<y<<") is created."<<endl;} Point(double a):x(a),y(1){cout<<setprecision(16)<<"Point : ("<<x<<", "<<y<<") is created."<<endl;} Point(const Point &q){x=q.x;y=q.y;cout<<setprecision(16)<<"Point : ("<<x<<", "<<y<<") is copied."<<endl;} ~Point(){cout<<setprecision(16)<<"Point : ("<<x<<", "<<y<<") is erased."<<endl;} void show(){cout<<setprecision(16)<<"Point : ("<<x<<", "<<y<<")"<<endl;} }; int main() { char c; double a, b; Point q; while(std::cin>>a>>c>>b) { Point p(a, b); p.show(); } Point q1(q), q2(1); q1.show(); q2.show(); q.show(); }
Home | Web Board | ProblemSet | Standing | Status | Statistics |
Problem C: 平面上的点——Point类 (III)
Time Limit: 1 Sec Memory Limit: 4 MBSubmit: 3328 Solved: 1933
[Submit][Status][Web Board]
Description
在数学上,平面直角坐标系上的点用X轴和Y轴上的两个坐标值唯一确定。现在我们封装一个“Point类”来实现平面上的点的操作。
根据“append.cc”,完成Point类的构造方法和show()方法,输出各Point对象的构造和析构次序。实现showPoint()函数。
接口描述:
showPoint()函数按输出格式输出Point对象,调用Point::show()方法实现。
Point::show()方法:按输出格式输出Point对象。
Input
输入多行,每行为一组坐标“x,y”,表示点的x坐标和y坐标,x和y的值都在double数据范围内。
Output
输出每个Point对象的构造和析构行为。showPoint()函数用来输出(通过参数传入的)Point对象的值:X坐标在前,Y坐标在后,Y坐标前面多输出一个空格。每个坐标的输出精度为最长16位。输出格式见sample。
C语言的输入输出被禁用。
Sample Input
Sample Output
HINT
思考构造函数、拷贝构造函数、析构函数的调用时机。
Append Code
#include<iostream> #include<iomanip> using namespace std; class Point{ private: double x; double y; public: Point():x(0),y(0){cout<<setprecision(16)<<"Point : (0, 0) is created."<<endl;} Point(double a,double b):x(a),y(b){cout<<setprecision(16)<<"Point : ("<<x<<", "<<y<<") is created."<<endl;} Point(double a):x(a),y(1){cout<<setprecision(16)<<"Point : ("<<x<<", "<<y<<") is created."<<endl;} void show(); ~Point() { cout<<setprecision(16)<<"Point : ("<<x<<", "<<y<<") is erased."<<endl; } Point(const Point &p) { x=p.x; y=p.y; cout<<setprecision(16)<<"Point : ("<<p.x<<", "<<p.y<<") is copied."<<endl; } }; void Point::show() { cout<<setprecision(16)<<"Point : ("<<x<<", "<<y<<")"<<endl; } void showPoint(Point a) { a.show(); } void showPoint(Point a,Point b,Point c) { a.show(); b.show(); c.show(); } int main() { char c; double a, b; Point q; while(std::cin>>a>>c>>b) { Point p(a, b); showPoint(p); } Point q1(q), q2(1); showPoint(q1, q2, q); }
Home | Web Board | ProblemSet | Standing | Status | Statistics |
Problem D: 时间类的构造和输出
Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 1964 Solved: 595
[Submit][Status][Web Board]
Description
Input
Output
Sample Input
Sample Output
HINT
Append Code
#include<iostream> #include<iomanip> using namespace std; class Time{ private: int hour; int minute; int second; public: Time(int,int,int); void showTime(); }; Time::Time(int h,int m,int s):hour(h),minute(m),second(s){} void Time::showTime() { cout<<setfill('0')<<setw(2)<<hour<<":"<<setfill('0')<<setw(2)<<setfill('0')<<setw(2)<<minute<<":"<<setfill('0')<<setw(2)<<second<<endl; } int main() { int cases; cin>>cases; for(int i = 1; i <= cases; ++i) { int hour, minute, second; cin>>hour>>minute>>second; Time t(hour, minute, second); t.showTime(); } }
Home | Web Board | ProblemSet | Standing | Status | Statistics |
Problem E: 时间类的成员读写
Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 1785 Solved: 582
[Submit][Status][Web Board]
Description
Input
Output
Sample Input
Sample Output
HINT
Append Code
#include<bits/stdc++.h> using namespace std; class Time{ int h,m,s; public: Time(int a=0,int b=0,int c=0):h(a),m(b),s(c){} void showTime(){printf("%.2d:%.2d:%.2d\n",h,m,s);} int hour(int a=-1){if(~a)h=a;return h;} int minute(int a=-1){if(~a)m=a;return m;} int second(int a=-1){if(~a)s=a;return s;} }; int main() { Time t; int cases; cin>>cases; for(int i = 1; i <= cases; ++i) { int hour, minute, second; cin>>hour>>minute>>second; t.hour(hour); t.minute(minute); t.second(second); cout<<setw(2)<<setfill('0')<<t.hour()<<":"; cout<<setw(2)<<setfill('0')<<t.minute()<<":"; cout<<setw(2)<<setfill('0')<<t.second()<<endl; } }
Home | Web Board | ProblemSet | Standing | Status | Statistics |
Problem F: 一元二次方程类
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 651 Solved: 232
[Submit][Status][Web Board]
Description
定义一个表示一元二次方程的类Equation,该类至少具有以下3个数据成员:a、b和c,用于表示方程“a*x*x + b*x +c = 0”。同时,该类还至少具有以下两个成员函数:
1. void solve():用于求方程的根。
2. void printRoot():用于输出方程的根。
设定:
1. 所有输入的a、b、c所生成的方程必定有个2个不同的实根。
2. 输出的两个根按照从大到小的顺序输出,两个根之间用一个空格隔开,而且每个根必须且仅能保留2位小数,即使小数部分为0。
3. 请根据样例和给出的main()函数定义相应的构造函数。
Input
输入有若干行,每行有3个实数,分别为方程“a*x*x + b*x + c = 0”中的系数a、b、c。
Output
按照题目要求中的设定条件2输出方程的根。
Sample Input
Sample Output
HINT
可以使用fixed和setprecision()来实现输出固定小数位数的数值。
Append Code
#include<iostream> #include<iomanip> #include<cmath> using namespace std; class Equation{ private: double a; double b; double c; double s1; double s2; public: Equation(double x,double y,double z):a(x),b(y),c(z){} void solve() { s1=(-b+sqrt(b*b-4*a*c))/(2*a); s2=(-b-sqrt(b*b-4*a*c))/(2*a); } void printRoot() { cout <<setiosflags(ios::fixed); cout<<setprecision(2)<<max(s1,s2)<<" "<<min(s1,s2)<<endl; } }; int main() { double a, b, c; while (cin>>a>>b>>c) { Equation equ(a,b,c); equ.solve(); equ.printRoot(); } return 0; }
Home | Web Board | ProblemSet | Standing | Status | Statistics |
Problem G: 整数的封装
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 787 Solved: 209
[Submit][Status][Web Board]
Description
现在,请编写一个Integer类,将整数封装起来。目前,只需要你来实现最基本的功能:
1. 具有2个构造函数:
(1)Integer::Integer(int):根据参数构建一个整数对象。
(2)Integer::Integer(char*, int):根据给定的字符串和进制来构建一个整数对象。
2. 具有一个int Integer::getValue()方法,用于返回Integer类中所封装的整数的具体数值。
Input
输入分为多行。
第一行是一个正整数M,表示其后面的M行为M个整数,每行一个整数。
第M+2行是一个正整数N,表示其后有N行。每行由利用一个空格隔开的2部分组成:前半部分是一个字符串,后半部分是该字符串所使用的进制。
注意:
1. 所有的输入,均在int类型的表示范围内,且所有的输入均为合法输入。
2. 利用0~9和a~z可最大可以表示36进制的数值。
Output
输出为M+N行,每行为一个十进制整数,且输出顺序应与输入顺序相同。
Sample Input
Sample Output
HINT
Append Code
#include<iostream> #include<cstring> #include<iomanip> using namespace std; class Integer{ private: int val; public: Integer(int n):val(n){} Integer(char*, int); int getValue() { return val; } }; Integer::Integer(char* c, int t) { int length=strlen(c); val=0; int a; char ch[101]; strcpy(ch,c); if(ch[0]=='-') { for(a=1;a<length;a++) { int num; char tmp=ch[a]; if(tmp>='0'&&tmp<='9') { num=tmp-'0'; val=val*t+num; } else if(tmp>='a'&&tmp<='z') { num=tmp-'a'+10; val=val*t+num; } else if(tmp>='A'&&tmp<='Z') { num=tmp-'A'+10; val=val*t+num; } } val=0-val; } else { for(a=0;a<length;a++) { int num; char tmp=ch[a]; if(tmp>='0'&&tmp<='9') { num=tmp-'0'; val=val*t+num; } else if(tmp>='a'&&tmp<='z') { num=tmp-'a'+10; val=val*t+num; } else if(tmp>='A'&&tmp<='Z') { num=tmp-'A'+10; val=val*t+num; } } } } int main() { char str[100]; int numOfData, numOfStr; int data, i, radix; cin>>numOfData; for (i = 0; i < numOfData; i++){ cin>>data; Integer anInteger(data); cout<<anInteger.getValue()<<endl; } cin>>numOfStr; for (i = 0; i < numOfStr; i++){ cin>>str>>radix; Integer anInteger(str,radix); cout<<anInteger.getValue()<<endl; } return 0; }