【描述】
声明并实现一个Point类,表示直角坐标系中的一个点。Point类包括:
double类型的私有数据成员x和y,表示坐标。
无参(默认)构造函数,将坐标设置为原点。
有参构造函数,将坐标设置为给定的参数。
访问器函数getX和getY,分别用于访问点的x坐标和y坐标。
【输入】
0,0 4,5
【输出】
(0,0) (4,5)
#include
using namespace std;
class Point {
public:
Point() {
x = 0;
y = 0;
}
Point(double newX, double newY) {
x = newX;
y = newY;
}
double getX() const {
return x;
}
double getY() const {
return y;
}
private:
double x;
double y;
};
int main() {
double x, y;
char ignore;
cin >> x >> ignore >> y;
Point p1(x, y);
cin >> x >> ignore >> y;
Point p2(x, y);
cout << "(" << p1.getX() << "," << p1.getY() << ")" << endl;
cout << "(" << p2.getX() << "," << p2.getY() << ")" << endl;
return 0;
}
【描述】
声明并实现一个Rectangle类,表示矩形。Rectangle类包括:
double类型的私有数据成员width和height,表示矩形的宽和高。
带默认参数的构造函数,将矩形的宽和高设置为给定的参数。宽和高的默认参数值为1。
更改器函数setWidth和setHeight,分别用于修改矩形的宽和高。
访问器函数getWidth和getHeight,分别用于访问矩形的宽和高。
成员函数computeArea,返回矩形的面积。
成员函数computePerimeter,返回矩形的周长。
【输入】
5 40 10 3.5
【输出】
200 90 35 27
#include
using namespace std;
class Rectangle{
public:
Rectangle(double newWidth=1,double newHeight=1){
width=newWidth;
height=newHeight;
}
double getWidth() const{
return width;
}
double getHeight() const{
return height;
}
void setWidth(double newWidth){
width=newWidth;
}
void setHeight(double newHeight){
height=newHeight;
}
double computeArea() const{
return width * height;
}
double computePerimeter() const{
return 2*(width+height);
}
private:
double width;
double height;
};
int main() {
double width, height;
cin >> width >> height;
Rectangle rect1;
rect1.setWidth(width);
rect1.setHeight(height);
cin >> width >> height;
Rectangle rect2(width, height);
cout << rect1.computeArea() << " " << rect1.computePerimeter() << endl;
cout << rect2.computeArea() << " " << rect2.computePerimeter() << endl;
return 0;
}
【描述】
声明并实现一个Account类,表示银行账户。Account类包括:
string类型的私有数据成员id,表示账号;string类型的私有数据成员name,表示客户名;double类型的私有数据成员balance,表示账户余额;double类型的私有数据成员annualInterestRate,表示年利率。
有参构造函数,将账号、客户名、账户余额、年利率设置为给定的参数。
更改器函数setId、setName、setBalance和setAnnualInterestRate,分别用于修改账号、客户名、账户余额、年利率。
访问器函数getId、getName、getBalance和getAnnualInterestRate,分别用于访问账号、客户名、账户余额、年利率。
成员函数withdraw,从账户中取款。
成员函数deposit,往账户中存款。
成员函数computeMonthlyInterestRate,返回月利率。
成员函数print,输出账户信息。
【输入】
输入账号、客户名、账户余额和年利率。
【输出】
输出账号、客户名、账户余额和月利率。
【输入示例】
112233 ZhangSan 20000 4.5
【输出示例】
112233 ZhangSan 20500 0.375%
【提示】
假设年利率为4.5%,则以4.5作为输入值。
月利率=年利率/12
#include
#include
using namespace std;
// 请在此处编写Account类
class Account{
private:
string id;
string name;
double balance;
double annualInterestRate;
public:
Account(string id,string name,double balance,double annualInterestRate)
{
this->id=id;
this->name=name;
this->balance=balance;
this->annualInterestRate=annualInterestRate;
}
void setId(double id)
{
this->id=id;
}
string getId()
{
return this->id;
}
void setName(double name)
{
this->name=name;
}
string getName()
{
return this->name;
}
void setBalance(double balance)
{
this->balance=balance;
}
double getBalance()
{
return this->balance;
}
void setAnnualInterestRate(double annualInterestRate)
{
this->annualInterestRate=annualInterestRate;
}
double getAnnualInterestRate()
{
return this->annualInterestRate;
}
void withdraw(double n)
{
this->balance-=n;
}
void deposit(double n)
{
this->balance+=n;
}
double computeMonthlyInterestRate(double annualInterestRate)
{
return annualInterestRate/12;
}
void print()
{
cout<id<name<balance<annualInterestRate/12<<"%"<> id >> name >> balance >> annualInterestRate;
Account account(id, name, balance, annualInterestRate);
account.withdraw(2500);
account.deposit(3000);
account.print();
return 0;
}
【描述】
声明并实现一个Loan类,表示贷款。Loan类包括:
double类型的私有数据成员loanAmount,表示贷款额。double类型的私有数据成员annualInterestRate,表示贷款年利率。int类型的私有数据成员numberOfYears,表示贷款年限。
有参构造函数,将贷款额、贷款年利率、贷款年限设置为给定的参数。
更改器函数setLoanAmount、setAnnualInterestRate和setNumberOfYears,分别用于修改贷款额、贷款年利率、贷款年限。
访问器函数getLoanAmount、getAnnualInterestRate和getNumberOfYears,分别用于访问贷款额、贷款年利率、贷款年限。
成员函数getMonthlyPayment,返回月还款额。
成员函数getTotalPayment,返回总还款额。
【输入】
输入贷款额、贷款年利率、贷款年限。
【输出】
月还款额和总还款额。
【输入示例】
60000 6.25 15
【输出示例】
514.454 92601.7
【提示】
假设年利率为6.25%,则以6.25作为输入值。
计算月还款额的公式如下:
#include
#include
using namespace std;
class Loan{
private:
double loanAmount;
double annualInterestRate;
int numberOfYears;
public:
Loan(double loanAmount,double annualInterestRate,int numberOfYears)
{
this->loanAmount=loanAmount;
this->numberOfYears=numberOfYears;
this->annualInterestRate=annualInterestRate;
}
void setLoanAmount(double loanAmount){
this->loanAmount=loanAmount;
}
double getLoanAmount(){
return loanAmount;
}
void setAnnualInterestRate(double annualInterestRate){
this->annualInterestRate=annualInterestRate;
}
double getAnnualInterestRate(){
return annualInterestRate;
}
void setNumberOfYears(int numberOfYears){
this->numberOfYears=numberOfYears;
}
int getNumberOfYears(){
return numberOfYears;
}
double getMonthlyPayment(){
return loanAmount * (annualInterestRate/1200) / (1 - pow(1 / (1 + annualInterestRate/1200), (numberOfYears * 12)));
}
double getTotalPayment(){
return (loanAmount * (annualInterestRate/1200) / (1 - pow(1 / (1 + annualInterestRate/1200), (numberOfYears * 12)))) * numberOfYears * 12;
}
};
int main() {
double loanAmount, annualInterestRate;
int numberOfYears;
cin >> loanAmount;
cin >> annualInterestRate;
cin >> numberOfYears;
Loan loan(loanAmount, annualInterestRate, numberOfYears);
cout << loan.getMonthlyPayment() << endl;
cout << loan.getTotalPayment() << endl;
return 0;
}
【描述】
声明并实现一个Cylinder类,表示圆柱体。Cylinder类包括:
double类型的私有数据成员radius和height,分别表示圆柱体底半径和高。
带默认参数的构造函数,将圆柱体底半径和高设置为给定的参数。半径和高的默认参数值为1。
访问器函数,分别用于访问圆柱体底半径和高。
成员函数computeVolume,返回圆柱体体积。
成员函数computeSurfaceArea,返回圆柱体表面积。
假设PI为3.14159。
【输入】
输入圆柱体的底半径和高。
【输出】
输出圆柱体的体积和表面积。
【输入示例】
4 8
【输出示例】
402.124 301.593
#include
using namespace std;
const double PI = 3.14159;
// 请在此处编写Cylinder类
class Cylinder{
private:
double radius;
double height;
public:
Cylinder(double newRadius=1,double newHeight=1){
radius=newRadius;
height=newHeight;
}
double getRadius() const{
return radius;
}
double getHeight() const{
return height;
}
double computeVolume() const{
return PI*radius*radius*height;
}
double computeSurfaceArea() const{
return 2*PI*radius*height+2*PI*radius*radius;
}
};
int main() {
double radius, height;
cin >> radius >> height;
Cylinder cylinder(radius, height);
cout << cylinder.computeVolume() << endl;
cout << cylinder.computeSurfaceArea() << endl;
return 0;
}
【描述】
声明并实现一个Time类,表示时间。Time类包括:
int类型的私有数据成员hour、minute、second,表示时、分、秒。
带默认参数的构造函数,将时、分、秒设置为给定的参数。时、分、秒的默认参数值为0。需要检查时、分、秒的有效性。若超出允许范围,则抛出invalid_argument标准异常。
更改器函数setHour、setMinute和setSecond,分别用于修改时、分、秒。每个更改器函数都要检查对应的时、分、秒的有效性。若超出允许范围,则抛出invalid_argument标准异常。
访问器函数getHour、getMinute和getSecond,分别用于访问时、分、秒。
成员函数setTime,用于同时修改时、分、秒。需要检查时、分、秒的有效性。若超出允许范围,则抛出invalid_argument标准异常。
成员函数printTime24,以24小时制格式输出时间,格式为时:分:秒。
成员函数printTime12,以12小时制格式输出时间,格式为上午或下午时:分:秒。
成员函数tick,将时间递增1秒。要考虑增加1秒后,时间增加到下一分钟、下一小时、下一天的情况。
【输入】
没有输入。
【输出】
00:00:00 AM12:00:00 02:00:00 AM2:00:00 21:34:00 PM9:34:00 12:25:42 PM12:25:42 Invalid argument! 00:00:00 AM12:00:00
#include
#include
#include
using namespace std;
class Time {
private:
int hour;
int minute;
int second;
public:
Time(int newhour = 0, int newminute = 0, int newsecond = 0) {
setTime(newhour, newminute, newsecond);
}
void setTime(int newhour, int newminute, int newsecond) {
setHour(newhour);
setMinute(newminute);
setSecond(newsecond);
}
void setHour(int newhour) {
if (newhour >= 0 && newhour <= 24)
hour = newhour;
else
throw invalid_argument("Invalid argument!");
}
void setMinute(int newminute) {
if (newminute >= 0 && newminute <60)
minute = newminute;
else
throw invalid_argument("Invalid argument!");
}
void setSecond(int newsecond) {
if (newsecond >= 0 && newsecond <60)
second = newsecond;
else
throw invalid_argument("Invalid argument!");
}
int getHour() const {
return hour;
}
int getMinute() const {
return minute;
}
int getSecond() const {
return second;
}
void printTime24() {
cout << setw(2) << setfill('0') << hour << ":" << setw(2) << setfill('0') << minute << ":" << setw(
2) << setfill('0') << second << endl;
}
void printTime12() {
if (hour == 0 && minute == 0 && second == 0)
cout << "AM12:00:00" << endl;
else
cout << (hour >= 12 ? "PM" : "AM") << (hour > 12 ? hour % 12 : hour) << ":" << setw(2) << setfill('0') << minute << ":"
<< setw(2) << setfill('0') << second << endl;
}
void tick() {
++second;
if (second >= 60) {
second -= 60;
++minute;
if (minute >= 60) {
minute -= 60;
++hour;
hour %= 24;
}
}
}
};
int main() {
Time t1;
t1.printTime24();
t1.printTime12();
Time t2(2);
t2.printTime24();
t2.printTime12();
Time t3(21, 34);
t3.printTime24();
t3.printTime12();
Time t4(12, 25, 42);
t4.printTime24();
t4.printTime12();
try {
Time t5(23, 59, 99);
}
catch(invalid_argument &ex) {
cout << ex.what() << endl;
}
Time t6(23, 59, 59);
t6.tick();
t6.printTime24();
t6.printTime12();
return 0;
}
【描述】
有理数是由分子和分母组成的a/b形式的数,a是分子,b是分母。例如,1/3、3/4和10/4等都是有理数。有理数不能以0为分母,但可以以0为分子。整数a等价于有理数a/1。
有理数用于包含分数的精确运算。例如,1/3=0.333333……,这个数是不能用浮点数精确表示,为了得到精确的结果,必须使用有理数。
一个有理数可能有很多与其值相等的其他有理数,例如,1/3=2/6=3/9=4/12。为简单起见,用1/3表示所有值等于1/3的有理数。因此,需要对有理数进行优化,使分子和分母之间没有公约数(1除外)。求分子和分母绝对值的最大公约数,然后将分子和分母都除以此最大公约数,得到有理数的优化表示形式。
声明并实现一个Rational类,表示有理数。Rational类包括:
int类型的私有数据成员numerator、denominator,表示分子、分母。
私有成员函数gcd,用于求分子、分母的最大公约数。
带默认参数的构造函数,将分子、分母设置为给定的参数。分子、分母的默认参数值分别为0、1。
访问器函数getNumerator、getDenominator,分别用于访问分子、分母。
成员函数add、subtract、multiply、divide,实现有理数的+、-、×和÷运算。
成员函数equals,判断一个有理数与另一个有理数是否相等。如果相等,返回true,否则返回false。
成员函数doubleValue,将有理数转换为浮点数。
成员函数print,输出一个有理数。若分母为0,则输出“Inf”。
【输入】
4/2 2/3
【输出】
2 2/3 8/3 4/3 4/3 3 a!=b 0.666667
#include
using namespace std;
class Rational {
private:
int numerator;
int denominator;
int gcd(int a, int b) {
return b == 0 ? a : gcd(b, a % b);
}
public:
Rational(int numerator = 0, int denominator = 1) {
int g = gcd(numerator, denominator);
if (denominator < 0) {
numerator = -numerator;
denominator = -denominator;
}
this->numerator = numerator / g;
this->denominator = denominator / g;
}
int getNumerator() const {
return numerator;
}
int getDenominator() const {
return denominator;
}
//gcd(numerator*right.denominator+right.numerator*denominator,denominator*right.denominator)
Rational add(const Rational &right) {
int n = numerator * right.denominator + right.numerator * denominator;
int d = denominator * right.denominator;
return Rational(n, d);
}
//gcd(numerator*right.denominator-right.numerator*denominator,denominator*right.denominator)
Rational subtract(const Rational &right) {
int n = numerator * right.denominator - right.numerator * denominator;
int d = denominator * right.denominator;
return Rational(n, d);
}
//gcd(numerator*right.numerator,denominator*right.denominator)
Rational multiply(const Rational &right) {
int n = numerator * right.numerator;
int d = denominator * right.denominator;
return Rational(n, d);
}
//gcd(numerator*right.denominator,denominator*right.numerator)
Rational divide(const Rational &right) {
int n = numerator * right.denominator;
int d = denominator * right.numerator;
return Rational(n, d);
}
bool equals(const Rational &right) {
return numerator / denominator == right.numerator / right.denominator ? true : false;
}
double doubleValue() {
return numerator * 1.0 / denominator;
}
void print() {
if (denominator == 0)
cout << "Inf" << endl;
else if (denominator == 1)
cout << numerator << endl;
else {
if (numerator * denominator < 0 && denominator < 0) {
numerator *= -1;
denominator *= -1;
}
cout << numerator << "/" << denominator << endl;
}
}
};
int main() {
int x, y;
char ignore;
cin >> x >> ignore >> y;
Rational a(x, y);
cin >> x >> ignore >> y;
Rational b(x, y);
Rational c;
a.print();
b.print();
c = a.add(b);
c.print();
c = a.subtract(b);
c.print();
c = a.multiply(b);
c.print();
c = a.divide(b);
c.print();
cout << (a.equals(b) ? "a==b" : "a!=b") << endl;
cout << b.doubleValue() << endl;
return 0;
}
【描述】
自定义异常类TriangleException。该类有一个string类型的私有数据成员message,用来存放异常信息;一个无参(默认)构造函数(默认值为“Exception”)和一个有参构造函数,用来设置异常信息;成员函数what,用来显示异常信息。
声明并实现一个Triangle类,表示三角形。Triangle类包括:
double类型的私有数据成员side1、side2、side3,表示三角形三条边。
私有成员函数isValid,判断三条边能否构成三角形。如果能构成三角形,返回true,否则返回false。
私有成员函数check,判断边是否大于0。如果边大于0,返回true,否则返回false。
带默认参数的构造函数,将三角形三条边设置为给定的参数。三条边的默认参数值为1。需要调用check函数检查边是否大于0,如果边小于等于0,则抛出TriangleException异常;以及调用isValid函数判断更改边后能否构成三角形,如果不能构成三角形,则抛出TriangleException异常。
更改器函数setSide1、setSide2和setSide3,分别用于修改三角形三条边。和构造函数一样,每个更改器函数需要调用check函数和isValid函数检查边的有效性。
访问器函数getSide1、getSide2和getSide3,分别用于访问三角形三条边。
成员函数computeArea,返回三角形面积。
成员函数computePerimeter,返回三角形周长。
【输入】
输入三角形的三条边,边长以空格间隔。
【输出】
若三条边有负数,输出“Negative side”。
若三条边能构成三角形,输出三角形面积和周长,以空格间隔。
若不能构成三角形,输出“Don't make a triangle”。
#include
#include
#include
using namespace std;
class TriangleException {
public:
TriangleException() {
message = "Exception";
}
TriangleException(string msg) {
message = msg;
}
string what() {
return message;
}
private:
string message;
};
class Triangle {
private:
double side1;
double side2;
double side3;
bool isValid(double side1, double side2, double side3) {
return (side1 + side2 > side3 && side2 + side3 > side1 && side1 + side3 > side2) ? true : false;
}
bool check(double side) {
return (side > 0) ? true : false;
}
public:
Triangle(double newside1 = 1, double newside2 = 1, double newside3 = 1) {
side1 = newside1;
side2 = newside2;
side3 = newside3;
if (!check(side1) or !check(side2) or !check(side3))
throw TriangleException("Negative side");
if (isValid(side1, side2, side3) == false)
throw TriangleException("Don't make a triangle");
}
void setSide1(double newside1) {
side1 = newside1;
if (check(side1) == false)
throw TriangleException("Negative side");
if (isValid(side1, side2, side3) == false)
throw TriangleException("Don't make a triangle");
}
double getSide1() const {
return side1;
}
void setSide2(double newside2) {
side2 = newside2;
if (check(side2) == false)
throw TriangleException("Negative side");
if (isValid(side1, side2, side3) == false)
throw TriangleException("Don't make a triangle");
}
double getSide2() const {
return side2;
}
void setSide3(double newside3) {
side3 = newside3;
if (check(side3) == false)
throw TriangleException("Negative side");
if (isValid(side1, side2, side3) == false)
throw TriangleException("Don't make a triangle");
}
double getSide3() const {
return side3;
}
double computeArea() const {
double p = (side1 + side2 + side3) / 2;
return sqrt(p * (p - side1) * (p - side2) * (p - side3));
}
double computePerimeter() const {
return side1 + side2 + side3;
}
};
int main() {
double side1, side2, side3;
try {
cin >> side1 >> side2 >> side3;
Triangle triangle(side1, side2, side3);
cout << triangle.computePerimeter() << " "
<< triangle.computeArea() << endl;
}
catch(TriangleException &ex) {
cout << ex.what() << endl;
}
return 0;
}
【描述】
自定义异常类NegativeNumberException,表示对负数执行 *** 作时出现的异常,如计算负数的平方根。该类有一个string类型的私有数据成员message,用来存放异常信息;一个无参(默认)构造函数和一个有参构造函数,用来设置异常信息;成员函数what,用来显示异常信息。在main函数中,让用户输入某个数,并调用squareRoot函数,计算该数的平方根。如果输入的是负数,squareRoot函数将抛出NegativeNumberException异常,否则返回该数的平方根。
【输入】
输入一个数。
【输出】
输出该数的平方根或者输出错误信息“Invalid argument!”。
【输入示例】
-8
【输出示例】
Invalid argument!
#include
#include
#include
using namespace std;
class NegativeNumberException {
public:
NegativeNumberException() {
message = "Invalid argument!";
}
NegativeNumberException(string msg) {
message = msg;
}
string what() {
return message;
}
private:
string message;
};
double squareRoot(double value) {
if (value < 0)
throw NegativeNumberException("Invalid argument!");
else
return sqrt(value);
}
int main() {
double value;
cin >> value;
try {
cout << squareRoot(value) << endl;
}
catch(NegativeNumberException &ex) {
cout << ex.what() << endl;
}
return 0;
}
【描述】
小明是一个熊孩子,他很想知道某一个日期是星期几。他知道你正在学习C++,所以想请你写一个程序,实现一个Date类。Date类的定义如下:
class Date { public: Date(int year, int month, int day); int getWeekday() const; private: int year; int month; int day; };
成员变量year、month、day分别代表年月日。现在你要实现Date函数和getWeekday函数,并编写main函数。getWeekday函数,如果日期合法,返回1~7中某个数值,表示星期一到星期天中某一天(其中1为星期一),如果日期不合法,则返回-1。
【输入】
输入包含多组数据。每行包括三个整数year(2000≤y≤9999)、month、day。输入数据以0 0 0结束。
【输出】
每组数据输出一行,每行包括一个整数。1表示星期一,7表示星期日,等等,若数据非法,则输出-1。
0 0 0不需输出
【输入示例】
2013 2 26 2013 2 29 0 0 0
【输出示例】
2 -1
【提示】2000年1月1日是星期六。
求星期几:(6 + 2000年1月1日至输入日期的天数 - 1)% 7 + 1
#include
using namespace std;
class Date {
public:
Date(int year, int month, int day);
int getWeekday() const;
private:
int year;
int month;
int day;
};
bool isLeapYear(int year) {
return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}
Date::Date(int year, int month, int day) {
this->year = year;
this->month = month;
this->day = day;
}
int Date::getWeekday() const {
const int DAYS_PER_MONTH[13] = {
0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
};
if (year < 2000 || year > 9999)
return -1;
if (month < 1 || month > 12)
return -1;
if (day < 1 || day > DAYS_PER_MONTH[month])
return -1;
int sum = 0;
// 处理年
for (int i = 2000; i < year; ++i) {
if (isLeapYear(i))
sum += 366;
else
sum += 365;
}
// 处理月
for (int i = 1; i < month; ++i)
sum += DAYS_PER_MONTH[i];
if (isLeapYear(year))
if (month > 2 || month == 2)
sum += 1;
// 处理日
sum += day - 1;
return (6 + sum - 1) % 7 + 1;
}
int main() {
int year, month, day;
while(cin >> year >> month >> day) {
if(year == 0 && month == 0 && day == 0)
break;
Date d(year, month, day);
cout << d.getWeekday() << endl;
}
return 0;
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)