A. 三角形类(构造与析构)
#include<iostream>
#include<cmath>
#include<string>
#include<iomanip>
using namespace std;
class CTriangle {
string type;
double a;
double b;
double c;
public:
CTriangle(){}
CTriangle(double x,double y,double z,string p) {
a = x;
b = y;
c = z;
type = p;
}
~CTriangle() {
a = 0; b = 0; c = 0; type = "none";
}
double caculates() {
double p = (a + b + c) / 2;
double s= sqrt(p * (p - a) * (p - b) * (p - c));
return s;
}
void show() {
if (type == "no triangle") cout << type << endl;
else cout << type << ", " <<fixed<<setprecision(1) << caculates() << endl;
}
};
int main() {
int t;
cin >> t;
double a, b, c,n;
string s;
while (t--) {
cin >> a >> b >> c;
if (a < b) {
n = a;
a = b;
b = n;
}
if (a < c) {
n = a;
a = c;
c = n;
}
if (b < c) {
n = b;
b = c;
c = n;
}
int flag = a * a - b * b - c * c;
if ((a == b || b == c) && (a != c) && flag)
s = "isosceles triangle";
else if ((a == b || b == c) && !flag)
s = "isosceles right triangle";
else if (!flag)
s = "right triangle";
else if (a == b && b == c)
s = "equilateral triangle";
else if (a * a > b * b + c * c)
s = "no triangle";
else
s = "general triangle";
CTriangle CT(a, b, c, s);
CT.show();
}
}
B. 计算学生成绩等级(虚函数和多态)
#include<iostream>
#include<cmath>
#include<string>
#include<iomanip>
using namespace std;
class Student {
protected:
string name; //学生姓名
int type; //学生类别:1表示本科生,2表示研究生
int courses[3]; //3门课的成绩
string courseGrade; //成绩等级
public:
Student(){}
Student(string n, string t, int a1, int a2, int a3) {
name = n;
courses[0] = a1;
courses[1] = a2;
courses[2] = a3;
}//构造方法
virtual void calculateGrade() = 0;//计算成绩等级
virtual void print()=0;//输出信息
};
class Undergraduate :virtual public Student {
float average;
string s;
public:
Undergraduate() { average = 0.0; type = 1; }
Undergraduate(string n, string t, int a1, int a2, int a3):Student(n,t,a1,a2,a3) {}
void calculateGrade() {
for(int i=0;i<3;i++)
average+=courses[i];
average /= 3;
if (average > 80)
s = "优秀";
else if (average > 70 && average <= 80)
s = "良好";
else if (average > 60 && average <= 70)
s = "一般";
else if (average > 50 && average <= 60)
s = "及格";
else s = "不及格";
}
void print() {
cout << name << "," << "本科生" <<"," << s << endl;
}
};
class Postgraduate:virtual public Student{
float average;
string s;
public:
Postgraduate() { average = 0.0; type = 2; }
Postgraduate(string n, string t, int a1, int a2, int a3):Student(n,t,a1,a2,a3){}
void calculateGrade() {
for (int i = 0; i < 3; i++)
average += courses[i];
average /= 3;
if (average > 90)
s = "优秀";
else if (average > 80 && average <= 90)
s = "良好";
else if (average > 70 && average <= 80)
s = "一般";
else if (average > 60 && average <= 70)
s = "及格";
else s = "不及格";
}
void print() {
cout << name << "," << "研究生" <<"," << s << endl;
}
};
int main() {
int t,type,a1,a2,a3;
string name,s="";
cin >> t;
Student *S1;
while (t--) {
cin >> name >> type >> a1 >> a2 >> a3;
if (type == 1) {
S1 = new Undergraduate(name, s, a1, a2, a3);
S1->calculateGrade();
S1->print();
}
else {
S1 = new Postgraduate(name, s, a1, a2, a3);
S1->calculateGrade();
S1->print();
}
}
}
C. OOP 向量加减(友元+拷贝构造)
#include<iostream>
#include<cmath>
#include<string>
#include<iomanip>
using namespace std;
class CVector
{
private:
int* data; //存储n维向量
int n; //向量维数
public:
CVector(int n1, int* a) {
n = n1;
data = new int[n];
for (int i = 0; i < n; i++)
data[i] = a[i];
}
CVector(CVector& c) {
n = c.n;
data = new int[n];
for (int i = 0; i < n; i++)
data[i] = c.data[i];
}
~CVector() { delete []data; }
void print() {
for (int i = 0; i < n - 1; i++)
cout << data[i] << " ";
cout << data[n - 1] << endl;
}
friend CVector Add(const CVector V1, const CVector V2) {
int n = V1.n;
int* p = new int[n];
for (int i = 0; i < n; i++)
p[i] = V1.data[i] + V2.data[i];
CVector V3(n, p);
return V3;
}
friend CVector Sub(const CVector V1, const CVector V2) {
int n = V1.n;
int* p = new int[n];
for (int i = 0; i < n; i++)
p[i] = V1.data[i] - V2.data[i];
CVector V3(n, p);
return V3;
}
};
int main() {
int t, n, * p1, * p2;
cin >> t;
while (t--) {
cin >> n;
p1 = new int[n];
p2 = new int[n];
for (int i = 0; i < n; i++)
cin >> p1[i];
for (int i = 0; i < n; i++)
cin >> p2[i];
CVector V1(n, p1);
CVector V2(n, p2);
Add(V1, V2).print();
Sub(V1, V2).print();
}
}