定义一个三角形类CTriangle,属性包含三条边和三角形类型,其中用字符串保存三角形类型。三角形类型如下:
等腰三角形:isosceles triangle
直角三角形:right triangle
等腰直角三角形:isosceles right triangle
等边三角型:equilateral triangle
一般三角形:general triangle
不能构成三角形:no triangle
其中判断直角三角形条件:三角形三边中的一边长度平方等于另两边长度平方之和
类行为包括构造、析构、计算面积等等。其中构造函数将设置三条边长度,并且判断三条边能否构成三角形、并设置三角形类型。析构函数将三条边长度清0,并将三角形类型设置为none
测试数据的组数
第一组边1 第一组边2 第一组边3
第二组边1 第二组边2 第二组边3
…
第一个三角形类型,面积
第二个三角形类型,面积
…
如果不形成三角形,就无需输出面积
面积精度到小数点后1位
3
3.0 2.0 6.0
3.0 4.0 5.0
1.0 1.0 1.414
no triangle
right triangle, 6.0
isosceles right triangle, 0.5
#include
#include
#include
using namespace std;
class CTriangle
{
double a;
double b;
double c;
string type;
public:
CTriangle(){}
CTriangle(double x1,double x2,double x3);
bool istriangle()
{
if(type[0]=='n') return false;
else return true;
}
double area()
{
double s;
double p;
p=(a+b+c)/2;
s=sqrt(p*(p-a)*(p-b)*(p-c));
return s;
}
~CTriangle()
{
a=0;
b=0;
c=0;
type="none";
}
void print()
{
if(istriangle()) cout<<type<<", "<<fixed<<setprecision(1)<<area()<<endl;
else cout<<type<<endl;
}
};
CTriangle::CTriangle(double x1,double x2,double x3)
{
a=x1;
b=x2;
c=x3;
type="0";
if(a+b>c&&a+c>b&&b+c>a&&fabs(a-b)<c&&fabs(a-c)<b&&fabs(b-c)<a)
{
int flag1=0,flag2=0;
//直角三角形
if(a*a+b*b==c*c||a*a+c*c==b*b||b*b+c*c==a*a)
{
type="right triangle";
flag1=1;
}
else if(a==b||a==c||b==c)
{
if(a==b&&b==c) type="equilateral triangle";//等边三角形
else //普通的等腰三角形
{
type="isosceles right triangle";
flag2=1;
}
}
else if(flag1&&flag2) type="isosceles right triangle";
else type="general triangle";
}
else type="no triangle";
}
int main()
{
int t;
cin>>t;
double x1,x2,x3;
while(t--)
{
cin>>x1>>x2>>x3;
CTriangle tri(x1,x2,x3);
tri.print();
}
}
建立一个类Equation,表达方程ax2+bx+c=0。类中至少包含以下方法:
1、无参构造(abc默认值为1、1、0)与有参构造函数,用于初始化a、b、c的值;
2、set方法,用于修改a、b、c的值
3、getRoot方法,求出方程的根。
一元二次方程的求根公式如下:
一元二次方程的求解分三种情况,如下:
输入测试数据的组数t
第一组a、b、c
第二组a、b、c
输出方程的根,结果到小数点后2位
在C++中,输出指定精度的参考代码如下:
#include
#include //必须包含这个头文件
using namespace std;
void main( )
{ double a =3.141596;
cout<
3
2 4 2
2 2 2
2 8 2
x1=x2=-1.00
x1=-0.50+0.87i x2=-0.50-0.87i
x1=-0.27 x2=-3.73
#include
#include
#include
using namespace std;
class Equation
{
double a;
double b;
double c;
public:
Equation()
{
a=1;b=1;c=0;
}
Equation(double a1,double a2,double a3)
{
a=a1;
b=a2;
c=a3;
}
void set(double a1,double a2,double a3)
{
a=a1;
b=a2;
c=a3;
}
int num_root()
{
int judge=0;
if(b*b-4*a*c<0) judge=0;
else if(b*b-4*a*c==0) judge=1;
else judge=2;
return judge;
}
void getroot();
};
void Equation::getroot()
{
double x1,x2,x1_i,x2_i;
double res1,res2;
res1=-b/(2*a);
if(num_root()==0) //无实根
{
x1=res1;
x2=res1;
x1_i=sqrt(4*a*c-b*b)/(2*a);//判别式为负数
x2_i=-sqrt(4*a*c-b*b)/(2*a);
cout<<"x1="<<fixed<<setprecision(2)<<x1<<'+'<<fixed<<setprecision(2)<<x1_i<<"i x2=";
cout<<fixed<<setprecision(2)<<x2<<fixed<<setprecision(2)<<x2_i<<'i'<<endl;
}
else if(num_root()==1)
{
x1=res1;
x2=res1;
cout<<"x1=x2="<<fixed<<setprecision(2)<<x1<<endl;
}
else
{
x1=res1+sqrt(b*b-4*a*c)/(2*a);
x2=res1-sqrt(b*b-4*a*c)/(2*a);
cout<<"x1="<<fixed<<setprecision(2)<<x1<<' ';
cout<<"x2="<<fixed<<setprecision(2)<<x2<<endl;
}
}
int main()
{
int t;
cin>>t;
double a1,a2,a3;
while(t--)
{
cin>>a1>>a2>>a3;
Equation equ1(a1,a2,a3);
equ1.getroot();
}
}
假设图书馆的图书书名各不相同,相同书有若干本可借阅。
定义图书类CBook,数据成员包括:索取号、书名、馆藏数量、可借数量。方法包括:
构造函数:根据参数初始化数据成员。
借书:参数是书名。若该书的可借数量大于等于1,则返回索取号;否则,返回空串。
主函数动态定义CBook数组,初始化图书馆馆藏信息。输入借书信息,对每次借书需求,根据样例给出结果。
图书馆馆藏书种类n
n个图书信息:索取号 书名 馆藏数量 可借数量
借书需求次数m
m本书名
对每个借书需求,根据样例输出结果。
输出空行。
输出所有馆藏书的信息。
输出借出图书数量 剩余馆藏图书数量
4
TP312JA-43/L99 Java语言程序设计教程 3 0
TP312PH/Q68b PHP7内核剖析 3 2
TP311.561-43/L93 Python大学教程 3 1
TP311.5-43/M18a1(2) 软件工程基础 3 3
4
Java语言程序设计教程
软件工程基础
Python大学教程
Python大学教程
Java语言程序设计教程 该书已全部借出
软件工程基础 索取号: TP311.5-43/M18a1(2)
Python大学教程 索取号: TP311.561-43/L93
Python大学教程 该书已全部借出
TP312JA-43/L99 Java语言程序设计教程 3 0
TP312PH/Q68b PHP7内核剖析 3 2
TP311.561-43/L93 Python大学教程 3 0
TP311.5-43/M18a1(2) 软件工程基础 3 2
借出图书: 8本 剩余馆藏图书: 4本
#include
#include
#include
#include
using namespace std;
class CBook
{
string sbn;
string name;
int num_have;
int num_borr;
public:
CBook(){}
CBook(string s1,string s2,int n1,int n2)
{
sbn=s1;
name=s2;
num_have=n1;
num_borr=n2;
}
void set(string s1,string s2,int n1,int n2)
{
sbn=s1;
name=s2;
num_have=n1;
num_borr=n2;
}
string borrow()
{
string temp;
if(num_borr>=1)
{
num_borr--;
return sbn;
}
else
{
temp="\0";
return temp;
}
}
string get_name()
{
return name;
}
int get_numbor()
{
return num_borr;
}
int get_numhav()
{
return num_have;
}
void get_all()
{
cout<<sbn<<' '<<name<<' '<<num_have<<' '<<num_borr<<endl;
}
};
int main()
{
int n;
cin>>n;
int m,num1,num2;
string s1,s2,temp1,temp2;
CBook *p=new CBook[n];
for(int i=0;i<n;i++)
{
cin>>s1>>s2>>num1>>num2;
p[i].set(s1,s2,num1,num2);
}
cin>>m;
for(int i=0;i<m;i++)
{
cin>>temp1;
cout<<temp1<<' ';
for(int j=0;j<n;j++)
{
if(p[j].get_name()==temp1)
{
temp2=p[j].borrow();
if(temp2=="\0") cout<<"该书已全部借出"<<endl;
else cout<<"索取号: "<<temp2<<endl;
break;
}
}
}
cout<<endl;
int sum=0,sum_left=0,sum_bor=0;
for(int i=0;i<n;i++)
{
p[i].get_all();
sum+=p[i].get_numhav();
sum_left+=p[i].get_numbor();
}
sum_bor=sum-sum_left;
cout<<"借出图书: "<<sum_bor<<"本 "<<"剩余馆藏图书: "<<sum_left<<"本"<<endl;
delete []p;
}
设计一个类来实现手机的功能。它包含私有属性:号码类型、号码、号码状态、停机日期;包含方法:构造、拷贝构造、打印、停机。
1、号码类型表示用户类别,只用单个字母,A表示政府,B表示企业、C表示个人
2、号码是11位整数,用一个字符串表示
3、号码状态用一个数字表示,1、2、3分别表示在用、未用、停用
4、停机日期是一个日期对象指针,在初始化时该成员指向空,该日期类包含私有属性年月日,以及构造函数和打印函数等
5、构造函数的作用就是接受外来参数,并设置各个属性值,并输出提示信息,看示例输出
6、拷贝构造的作用是复制已有对象的信息,并输出提示信息,看示例输出。
想一下停机日期该如何复制,没有停机如何复制??已经停机又如何复制??
7、打印功能是把对象的所有属性都输出,输出格式看示例
8、停机功能是停用当前号码,参数是停机日期,无返回值,操作是把状态改成停用,并停机日期指针创建为动态对象,并根据参数来设置停机日期,最后输出提示信息,看示例输出
要求:在主函数中实现号码备份的功能,对已有的虚拟手机号的所有信息进行复制,并将号码类型改成D表示备份;将手机号码末尾加字母X
第一行输入t表示有t个号码
第二行输入6个参数,包括号码类型、号码、状态、停机的年、月、日,用空格隔开
依次输入t行
每个示例输出三行,依次输出原号码信息、备份号码信息和原号码停机后的信息
每个示例之间用短划线(四个)分割开,看示例输出
2
A 15712345678 1 2015 1 1
B 13287654321 2 2012 12 12
Construct a new phone 15712345678
类型=机构||号码=15712345678||State=在用
Construct a copy of phone 15712345678
类型=备份||号码=15712345678X||State=在用
Stop the phone 15712345678
类型=机构||号码=15712345678||State=停用 ||停机日期=2015.1.1
----
Construct a new phone 13287654321
类型=企业||号码=13287654321||State=未用
Construct a copy of phone 13287654321
类型=备份||号码=13287654321X||State=未用
Stop the phone 13287654321
类型=企业||号码=13287654321||State=停用 ||停机日期=2012.12.12
----
#include
#include
using namespace std;
class date {
private:
int y, m, d;
public:
date(int a, int b, int c)
{
y = a;
m = b;
d = c;
}
void print_date()
{
cout << y << '.' << m << '.' << d << endl;
}
};
class phone {
public:
char type;
string number;
int mod;
date *bir;
phone(char a, string b, int c, date *p) {
type = a;
number = b;
mod = c;
bir = p;
cout << "Construct a new phone " << number << endl;
}
phone(const phone &a) {
type = 'D';
number = a.number;
mod = a.mod;
bir = new date(*a.bir);
cout << "Construct a copy of phone " << number << endl;
}
void stop() //停机操作
{
cout<<"Stop the phone "<<number<<endl;
mod=3;
print();
cout<<"||停机日期=";
bir->print_date();
cout<<"----"<<endl;
}
void print()
{
switch (type) {
case 'A':
cout << "类型=机构" << "||";
break;
case 'B':
cout << "类型=企业" << "||";
break;
case 'C':
cout << "类型=个人" << "||";
break;
case 'D':
cout << "类型=备份" << "||";
number.append("X");
break;
}
cout << "号码=" << number << "||";
switch (mod) {
case 1:
cout << "State=在用"<<endl;
break;
case 2:
cout << "State=未用"<<endl;
break;
case 3:
cout << "State=停用 ";
break;
}
}
~phone()
{
if(bir!=NULL)
delete bir;
}
};
int main() {
int t,y, m, d;
cin >> t;
while (t--)
{
char type;
string num;
int mod;
cin >> type >> num >> mod>> y >> m >> d;
date *p = new date(y, m, d);
phone ph1(type, num, mod, p);
ph1.print();
phone ph2(ph1);//调用拷贝构造
ph2.print();
ph1.stop();
}
}
学生类定义如下:
class Student {
private:
int id;//学号
int score; //成绩
static int maxscore;//最高分数
static int maxid;//最高分数学生学号
public:
Student(int ti=0,int ts=0)
:id(ti), score(ts)
{}
static void findMax(Student & st); //寻找最高成绩和学号
static int getMaxScore(); //返回最高成绩
static int getMaxID();//返回最高成绩的学号
};
输入一组学生学号和成绩,用上述静态成员求最高成绩和对应学号
第一行输入n表示有n个学生
接着输入n行,每行包括两个数据,表示学号和成绩
调用静态成员函数输出学号和最高成绩,格式看样例
3
1002 68
1023 54
1045 32
1002--68
#include
using namespace std;
class Student
{
private:
int id;
int score;
static int maxscore;//最高分数
static int maxid;//最高分数学生学号
public:
Student(int ti=0,int ts=0):id(ti),score(ts) {}
static void findMax(Student & st); //寻找最高成绩和学号
static int getMaxScore()//返回最高成绩
{
return maxscore;
}
static int getMaxID()//返回最高成绩的学号
{
return maxid;
}
void set()
{
maxscore=score;
maxid=id;
}
void print()
{
cout<<maxid<<"--"<<maxscore<<endl;
}
};
int Student::maxscore=0;
int Student::maxid=0;
void Student::findMax(Student &st)
{
if(maxscore<st.score)
{
st.set();
}
}
int main()
{
int n;
cin>>n;
int id1,sco1;
Student *q=new Student[n];
for(int i=0;i<n;i++)
{
cin>>id1>>sco1;
q[i]=Student(id1,sco1);
}
q[0].set();
for(int i=0;i<n-1;i++)
{
for(int j=i+1;j<n;j++)
{
q[i].findMax(q[j]);
}
}
q[0].print();
delete []q;
}