7-1 例4-3游泳池改造预算 (10分)
#include<iostream>
#define pi 3.141592
using namespace std;
class pool {
private:
double r;
public:
void inti(double R) {
r=R;
}
double money1() {
return 2*(r+3)*pi*35;
}
double money2() {
double r1=r+3;
return (r1*r1*pi-r*r*pi)*20;
}
};
int main() {
int R;
pool a;
cin>>R;
a.inti(R);
cout<<"Fencing Cost is $"<<a.money1()<<endl;
cout<<"Concrete Cost is $"<<a.money2()<<endl;
return 0;
}
7-2 复数类的操作 (10分)
#include<iostream>
using namespace std;
class Complex{
double real,image;
public:
Complex()
{
real=0;
image=0;
}
void get(double r,double i)
{
real=r;
image=i;
}
void fan()
{
real=-real;
image=-image;
}
void Print()
{
cout<<"("<<real<<", "<<image<<")"<<endl;
}
friend void jiao(Complex ob1,Complex ob2)
{
cout<<"("<<ob1.real+ob2.real<<", "<<ob1.image+ob2.image<<")"<<endl;
}
};
int main(void)
{
double c11,c12,c21,c22;
cin>>c11>>c12>>c21>>c22;
Complex ob1,ob2;
ob1.get(c11,c12);
ob2.get(c21,c22);
jiao(ob1,ob2);
ob2.fan();
jiao(ob1,ob2);
ob2.fan();
ob2.Print();
}
7-3 运算符重载 (15分)
#include<iostream>
#include<math.h>
using namespace std;
class Fs{
int fz,fm;
public:
void display();
Fs(int x = 0, int y = 0);
Fs operator+(Fs &op2)
{
int max = (this->fm > op2.fm) ? this->fm : op2.fm;
do
{
if (max % this->fm == 0 && max % op2.fm == 0)
{
break;
}
else
++max;
} while (true);
Fs temp;
this->fz *= max / this->fm;
op2.fz *= max / op2.fm;
this->fz += op2.fz;
temp.fz=this->fz;
temp.fm=max;
max = 1;
for (int i = 1; i <= abs(this->fz); i++)
{
if (temp.fz % i == 0 && temp.fm%i == 0)
max = i;
}
temp.fm /= max;
temp.fz/= max;
return temp;
}
};
Fs::Fs(int x,int y){
fz = x;
fm = y;
}
void Fs::display(){
cout << fz;
if(fm!=1&&fz!=0)
cout << " " << fm;
}
int main(){
int a[4];
cin >> a[0] >> a[1] >> a[2] >> a[3];
Fs x1(a[0],a[1]), x2(a[2],a[3]),x3;
x3 = x1 + x2;
x3.display();
}
7-4 日程安排(多重继承+重载) (15分)
#include<cmath>
#include<cstdio>
#include<algorithm>
#include<string>
#include<vector>
#include<iomanip>
#include<iostream>
using namespace std;
class Date
{
protected:
int year;
int month;
int day;
public:
Date(int a = 0, int b = 0, int c = 0):year(a), month(b), day(c) {};
};
class Time
{
protected:
int hour;
int minute;
int second;
public:
Time(int a = 0, int b = 0, int c = 0):hour(a), minute(b), second(c) {};
};
class Schedule : protected Date, protected Time
{
public:
bool operator < (const Schedule & s){
if(year<s.year){
return true;
}
if(year==s.year&&month<s.month){
return true;
}
if(year==s.year&&month==s.month&&day<s.day){
return true;
}
int sum1=hour*3600+minute*60+second;
int sum2=s.hour*3600+s.minute*60+s.second;
if(year==s.year&&month==s.month&&day==s.day&&sum1<sum2){
return true;
}
return false;
}
Schedule(int y = 99999, int m = 0, int d = 0, int h = 0, int min = 0, int s = 0, int id = 0)
:Date(y, m, d), Time(h, min, s)
{
ID=id;
};
void show(){
cout<<ID<<": "<<year<<"/"<<month<<"/"<<day<<" "<<hour<<":"<<minute<<":"<<second<<endl;
}
protected:
int ID;
};
int main()
{ int y,m,d,h,min,s,id;
Schedule mx;
cin>>id;
while(id!=0){
scanf("%d/%d/%d%d:%d:%d",&y,&m,&d,&h,&min,&s);
Schedule sch(y,m,d,h,min,s,id);
if(!(mx<sch)){
mx=sch;
}
cin>>id;
}
cout<<"The urgent schedule is No.";
mx.show();
return 0;
}
7-5 汽车收费 (10分)
#include<iostream>
using namespace std;
class Vehicle
{
protected:
string NO;
public:
Vehicle(string N){NO=N;}
virtual void display()=0;
};
class Car:public Vehicle
{
int num;
int weight;
public:
Car(string N,int n,int w):Vehicle(N)
{
num=n;
weight=w;
}
virtual void display()
{
cout<<NO<<" "<<num*8+weight*2<<endl;
}
};
class Truck:public Vehicle
{
int weight;
public:
Truck(string N,int w):Vehicle(N){weight=w;}
virtual void display()
{
cout<<NO<<" "<<weight*5<<endl;
}
};
class Bus:public Vehicle
{
int num;
public:
Bus(string N,int n):Vehicle(N){num=n;}
virtual void display()
{
cout<<NO<<" "<<num*3<<endl;
}
};
int main()
{
Vehicle *pv[10];
int type;
cin>>type;
int i=0;
int a,b;
string N;
while(type!=0)
{
cin>>N;
switch(type)
{
case 1:
cin>>a>>b;
pv[i]=new Car(N,a,b);
break;
case 2:
cin>>a;
pv[i]=new Truck(N,a);
break;
case 3:
cin>>b;
pv[i]=new Bus(N,b);
break;
}
pv[i]->display();
i++;
cin>>type;
}
}
7-6 师生信息管理 (10分)
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
class Person
{
protected:
int NO;
public:
virtual void display()=0;
Person(int n){NO=n;}
virtual ~Person(){};
};
class Student:public Person
{
double pj;
int num=0;
public:
Student(int n,int n1,int n2,int n3,int n4,int n5):Person(n)
{
if(n1==-1) num++;
else pj+=n1;
if(n2==-1) num++;
else pj+=n2;
if(n3==-1) num++;
else pj+=n3;
if(n4==-1) num++;
else pj+=n4;
if(n5==-1) num++;
else pj+=n5;
pj=pj/(5-num);
}
virtual void display()
{
cout<<NO<<" "<<num;
if(num!=5){
cout<<" "<<setiosflags(ios::fixed)<<setprecision(1)<<pj;
}
cout<<endl;
}
};
class Teacher:public Person
{
int num;
public:
Teacher(int n,int n1,int n2,int n3):Person(n)
{
num=n1+n2+n3;
}
virtual void display()
{
cout<<NO<<" "<<num<<endl;
}
};
int main()
{
Person *pd[10];
string s;
int t,n,i=0,n1,n2,n3,n4,n5;
cin>>t;
while(t){
cin>>n;
if(t==1){
cin>>n1>>n2>>n3>>n4>>n5;
pd[i]=new Student(n,n1,n2,n3,n4,n5);
}else if(t==2){
cin>>n1>>n2>>n3;
pd[i]=new Teacher(n,n1,n2,n3);
}
pd[i]->display();
i++;
cin>>t;
}
delete *pd;
return 0;
}
7-7 数据的最大值问题(重载+函数模板) (20分)
#include <iostream>
#include <cmath>
#include <sstream>
#include <string>
using namespace std;
int main()
{
int ty;
cin>>ty;
while(ty!=-1)
{
if(ty==1)
{
int n,m=-1e9;
while(cin>>n&&n!=0)
{
m=max(n,m);
}
cout<<m<<endl;
}
if(ty==2)
{
double n,m=-1e9;
while(cin>>n&&n!=0)
{
m=max(n,m);
}
cout<<m<<endl;
}
if(ty==3)
{
int a,b,c,s1=0;
int d,e,g,s2=0;
string s;
getline(cin,s);
stringstream ss(s);
while(ss>>a>>b>>c)
{
s1=a*3600+b*60+c;
if(s1>s2)
{
d=a,e=b,g=c;
}
a=0,b=0,c=0;
}
cout<<d<<" "<<e<<" "<<g<<endl;
}
if(ty==4)
{
int a,b,c,s1=0;
int d=0,e=0,g=0,s2=0;
string s;
getline(cin,s);
stringstream ss(s);
// cout<<"sdsd"<<endl;
while(ss>>a>>b>>c)
{
if(a>d)
{
d=a,e=b,g=c;
}
else if(a==d)
{
if(b>e)
{
d=a,e=b,g=c;
}
else if(b==e)
{
if(c>g)
{
d=a,e=b,g=c;
}
}
}
a=0,b=0,c=0;
}
cout<<d<<" "<<e<<" "<<g<<endl;
}
cin>>ty;
}
return 0;
}
7-8 数据的间距问题 (15分)
#include<iostream>
#include<cmath>
using namespace std;
class Complex{
private:
double a, b;
public:
Complex(){
a = 0;
b = 0;
}
Complex(double x, double y){
a = x;
b = y;
}
};
template < class T >
double dist(T a, T b)
{
return abs(a-b);
}
double s(double m1, double m2)
{
return pow(abs(m2-m1), 2);
}
int main()
{
int n;
while(cin >> n, n != 0){
if(n == 1){
int a, b;
cin >> a >> b;
cout << dist(a, b) << endl;
}
else if(n == 2){
float a, b;
cin >> a >> b;
cout << dist(a, b) << endl;
}
else if(n == 3){
double a, b;
double a1, b1, a2, b2;
cin >> a1 >> b1 >> a2 >> b2;
a = s(a1, a2);
b = s(b1, b2);
cout << sqrt(a+b) << endl;
}
}
return 0;
}
7-9 组最大数 (15分)
#include <iostream>
#include <algorithm>
#include<vector>
using namespace std;
bool campare(string i, string j)
{
return (i+j) > (j+i);
}
int main()
{
int n;
while(cin >> n)
{
vector<string> tmp(n, "");
for(int i=0; i<n; i++)
{
cin >> tmp[i];
}
sort(tmp.begin(), tmp.end(), campare);
for(int i=0; i<n; i++)
{
cout << tmp[i];
}
cout << endl;
}
}
7-10 对称排序 (15分)
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n=-1,cnt=0;
while(1)
{
string str="";
vector<string> v;
vector<string> v2;
bool flag=true;
cin>>n;
if(n==0)
{
break;
}
cnt++;
for(int i=0;i<n;i++)
{
cin>>str;
if(flag)
{
v2.push_back(str);
flag=false;
}
else
{
v.push_back(str);
flag=true;
}
}
cout<<"SET "<<cnt<<endl;
for(int k=0;k<v2.size();k++)
{
cout<<v2[k]<<endl;
}
for(int i=v.size()-1;i>=0;i--)
{
cout<<v[i]<<endl;
}
}
return 0;
}