6-1 学生类的构造与析构 (10分)
#include<iostream>
#include<string>
using namespace std;
class Student {
private:
int num;
string name;
char sex;
public:
Student(int n,string na,char s){
num=n;
name=na;
sex=s;
cout<<"Constructor called."<<endl;}
void display(){
cout<<"num:"<<num<<endl;
cout<<"name:"<<name<<endl;
cout<<"sex:"<<sex<<endl;
cout<<endl;
}
~Student(){
cout<<"Destructor called."<<endl;}
};
6-2 体育俱乐部I(构造函数) (10分)
Club::Club(string n1,int y,string n2,int wr):name(n1),year(y),c(n2,wr){};
void Coach::show(){cout<<name<<" "<<winRate<<"%"<<endl;}
void Club::show(){cout<<name<<" "<<year<<endl;
c.show();}
6-3 2017final友元函数之全班同学的平均绩点 (10分)
double averagegrade(student *stu,int count){
int i,j;
double sum1=0,sum2=0,sum;
for(i==0;i<count;i++)
for(j=0;stu[i].score[j]!=-1;j++){
sum1+=stu[i].score[j]*(stu[i].grade[j]/10-5);
sum2+=stu[i].score[j];}
if(sum2==0||sum1==0)
return 0;
return sum1/sum2;}
6-4 大整数求和(运算符重载) (10分)
class BigInt
{
int *a;
int max;
string num;
public:
BigInt()
{
a = new int[101];
max=0;
}
void swap_string_to_dig()
{
int len = num.length();
max = len;
for(int i=len-1;i>=0;i--)
a[len-i-1] = num[i]-'0';
for(int i=len;i<101;i++)
a[i] = 0;
}
friend istream& operator>>(istream &is,BigInt &x)
{
is>>x.num;
return is;
}
friend ostream& operator<<(ostream &os,BigInt &x)
{
os<<x.num;
return os;
}
BigInt operator+(BigInt &x)
{
BigInt c;
int n,i=0,j=0,k=0;
x.swap_string_to_dig();
swap_string_to_dig();
int l=0;
while(j<max || k<x.max)
{
c.a[i] = a[j++] + x.a[k++] + l;
l = c.a[i]/10;
c.a[i]%=10;
i++;
}
while(l>0)
{
c.a[i] += l;
l = c.a[i]/10;
c.a[i]%=10;
i++;
}
c.max = i;
for(i=c.max-1;i>=0;i--)
c.num += c.a[i]+'0';
return c;
}
};
6-5 时间相加 (10分)
Time::Time(int h,int m,int s)
{
hours=h;
minutes=m;
seconds=s;
}
void Time::DispTime()
{
cout<<hours<<"h:"<<minutes<<"m:"<<seconds<<"s"<<endl;
}
Time Time::operator +(Time & k)
{
Time temp;
temp.minutes=this->minutes+k.minutes;
temp.seconds=this->seconds+k.seconds;
temp.hours=this->hours+k.hours;
if(temp.seconds>59)
{
temp.seconds-=60;
temp.minutes++;
}
if(temp.minutes>59)
{
temp.minutes-=60;
temp.hours++;
}
return temp;
}
6-6 派生类的定义和使用 (10分)
class Animal
{
public:
void speak()
{
cout<<"animal language!"<<endl;
}
};
class Cat:public Animal
{
private:
string m_strName;
public:
Cat(string name)
{
m_strName=name;
}
void print_name()
{
cout<<"cat name: "<<m_strName<<endl;
}
};
6-7 多重继承派生类构造函数 (10分)
class Graduate:public Teacher,public Student{
public:
Graduate(string nam,int a,char s,string t,float sco,float w)
:Student(nam,s,sco),Teacher(nam,a,t)
{
wages=w;
}
void show(){
cout<<"name:"<<name<<endl;
cout<<"age:"<<age<<endl;
cout<<"sex:"<<sex<<endl;
cout<<"score:"<<score<<endl;
cout<<"title:"<<title<<endl;
cout<<"wages:"<<wages<<endl;
}
private:
float wages;
};
6-8 虚函数的应用 (10分)
class CMyClassB:public CMyClassA{
int va;
public:
CMyClassB(int v):CMyClassA(3*v){
va=v;
cout<<"B:"<<va<<endl;
}
void print(){
cout<<va<<endl;
}
};
6-9 数组排序输出(函数模板) (10分)
template <class T>
void sort(T *data,int size){
int i,j,min;
T t;
for(i=0;i<size;i++)
cin>>data[i];
for(i=0;i<size-1;i++){
min=i;
for(j=i+1;j<size;j++)
if(data[j]<data[min])
min=j;
t=data[i];
data[i]=data[min];
data[min]=t;
}
}
6-10 筛法求质数 (10分)
int a[10000002]={0};
vector<int> sieve(int n){
vector<int> temp;
int i,j;
for(i=2;i*i<=n;i++){
if(a[i]==1)
continue;
int tp=2;
while(tp*i<=n){
a[tp*i]=1;
tp++;
}
}
for(int i=2;i<=n;i++){
if(a[i]!=1)
temp.push_back(i);
}
return temp;
}