1、下面的程序可以输出ASCII字符与所对应的数字的对照表。修改下列程序,使其可以输出字母a到z(或任意两个字符间)与所对应的数字的对照表。
class table
{
public:
table(int p)
{
i=p;
}
void ascii(void);
protected:
int i;
};
void table::ascii(void)
{
int k=1;
for (;i<127;i++)
{
cout<<setw(4)<<i<<" "<<(char)i;
if((k)%12==0)
cout<<"\n";
k++;
}
cout<<"\n";
}
class der_table:public table
{
public:
der_table(int p,char *m):table(p)
{
c=m;
}
void print(void);
protected:
char *c;
};
void der_table::print(void)
{
cout<<c<<"\n";
table::ascii();
}
int main()
{
der_table obl(32,"ASCII value---char");
obl.print();
return 0;
}
提示:修改后的主程序为:
int main()
{
der_table ob('a','z',"ASCII value---char");
ob.print();
return 0;
}
#include<iostream>
#include<iomanip>
using namespace std;
class table
{
protected:
int i;
int j;
public:
table(int p,int q)
{
i=p;
j=q;
}
void ascii()
{
int k=1;
for(;i<=j;i++)
{
cout<<setw(4)<<i<<" "<<(char)i;
if((k)%12==0)
cout<<endl;
k++;
}
cout<<endl;
}
};
class der_table:public table
{
protected:
char *c;
public:
der_table(int p,int q,char *m):table(p,q)
{
c=m;
}
void print()
{
cout<<c<<endl;
table::ascii();
}
};
int main()
{
der_table ob('a','z',"ASCII value---char");
ob.print();
return 0;
}
2、已有类Time和Date,要求设计一个派生类Birthtime,它继承类Time和Date,并且增加一个数据成员Childname用于表示小孩的名字,同事设计主程序显示一个小孩的出生时间和名字。
class Time
{
public:
Time(int h,int m, int s)
{
hours=h;
minutes=m;
seconds=s;
}
void display()
{
cout<<"出生时间:"<<hours<<"时"<<minutes<<"分"<<seconds<<"秒"<<endl;
}
protected:
int hours,minutes,seconds;
};
class Date
{
public:
Date(int m,int d,int y)
{
month=m;
day=d;
year=y;
}
void display()
{
cout<<"出生年月:"<<year<<"年"<<month<<"月"<<day<<"日"<<endl;
}
protected:
int month,day,year;
};
#include<iostream>
#include<string>
using namespace std;
class time
{
protected:
int hours,minutes,seconds;
public:
time(int h,int m,int s)
{
hours=h;
minutes=m;
seconds=s;
}
void display()
{
cout<<"出生时间:"<<hours<<"时"<<minutes<<"分"<<seconds<<"秒"<<endl;
}
};
class date
{
protected:
int month,year,day;
public:
date(int m,int d,int y)
{
month=m;
day=d;
year=y;
}
void display()
{
cout<<"出生年月"<<year<<"年"<<month<<"月"<<day<<"日"<<endl;
}
};
class birthtime:public time,public date
{
private:
string childname;
public:
birthtime(int h,int m,int s,int m1,int d,int y,string n):time(h,m,s),date(m1,d,y)
{
childname=n;
}
void display()
{
time::display();
date::display();
cout<<"名字是:"<<childname<<endl;
}
};
int main()
{
birthtime a(0,6,33,6,29,2000,"jassic");
a.display();
return 0;
}
3、编写一个学生和教师的数据输入和显示程序。学生数据有编号、姓名、性别、年龄、系别和成绩,教师数据有编号、姓名、性别、年龄、职称和部门。要求将编号、姓名、性别、年龄的输入和显示设计成一个类Person,并作为学生类Student和教师类Teacher的基类。
#include<iostream>
#include<string>
using namespace std;
class person
{
private:
int num;
string name;
public:
person(int n,string na)
{
cout<<"putin the num:";
cin>>n;
num=n;
cout<<endl<<"putin the name:";
cin>>na;
name=na;
}
void show()
{
cout<<"the name is:"<<name<<endl<<"the number is:"<<num<<endl;
}
};
class student:public person
{
private:
int classnum;
float score;
public:
student(int n,string na,int cn,float s):person(n,na)
{
cout<<"please putin the classnum:";
cin>>cn;
cout<<endl<<"please putin the score:";
classnum=cn;
cin>>s;
score=s;
}
void show1()
{
show();
cout<<"the classnumber is:"<<classnum<<endl<<"the score is:"<<score<<endl;
}
};
class teacher:public person
{
private:
string title;
string depart;
public:
teacher(int n,string na,string t,string d):person(n,na)
{
cout<<"please putin the title:";
cin>>t;
title=t;
cout<<endl<<"please putin the department:";
cin>>d;
depart=d;
}
void show2()
{
show();
cout<<"the title is :"<<title<<endl<<"the department is:"<<depart<<endl;
}
};
int main()
{
int m,cln;
string n;
float sc;
student s(m,n,cln,sc);
s.show1();
string t;
string d;
teacher te(m,n,t,d);
te.show2();
return 0;
}
4、给出下面的基类:
class area
{
protected:
double height;
double width;
public:
area(double h,double w)
{
height=h;
width=w;
}
virtual double getarea()=0;
};
【要求】
(1)建立基类area的俩个派生类rectangle与isosceles,让每一个派生类都包含一个函数getarea(),分别用来返回矩形与三角形的面积。用构造函数对height与width进行初始化。
(2)写出主程序,用来求height与width分别为10.0与5.0的矩形面积,以及求height与width分别为4.0与6.0的三角形面积。
(3)要求通过使用基类指针访问虚函数的方法(即运行时的多态性)分别求出矩形和三角形面积。
#include<iostream>
using namespace std;
class area
{
protected:
double height;
double width;
public:
area(double h,double w)
{
height=h;
width=w;
}
virtual double getarea()=0;
};
class rectangle:public area
{
private:
double a;
public:
rectangle(double a,double b):area(a,b)
{}
virtual double getarea()
{
a=height*width;
return a;
}
};
class isosceles:public area
{
private:
double a;
public:
isosceles(double a,double b):area(a,b)
{}
virtual double getarea()
{
a=0.5*height*width;
return a;
}
};
int main()
{
area *mp;
rectangle r(10.0,5.0);
mp=&r;
cout<<"the area of rectangle is:"<<mp->getarea()<<endl;
isosceles i(4.0,6.0);
mp=&i;
cout<<"the area of isosceles is:"<<mp->getarea()<<endl;
return 0;
}
5、编写一个程序,递归调用被继承的基类成员函数,实现求素数的功能。
#include<iostream>
using namespace std;
class base
{
private:
int x;
public:
base(int p)
{
x=p;
}
int fun(int j)
{
int t=2,f=1;
for(;t<j&&f==1;t++)
{
if(j%t==0)
f=0;
return f;
}
}
};
class derive:public base
{
protected:
char *c;
public:
derive(char *m):base(2)
{
c=m;
}
int fun1(int l)
{
return base::fun(l);
}
};
int main()
{
derive a("base\n");
int n;
cout<<"please input a int :";
cin>>n;
if(a.fun1(n)==1)
cout<<n<<"is prime number"<<endl;
else
cout<<n<<"is not prime number"<<endl;
return 0;
}