C++面向对象程序设计习题集(3)

2019-04-14 13:58

char na[10],nu[10];

cout<<\输入姓名和电话号码\ for (i=0; i

cout<<\ 第\个人:\ cin>>na>>nu; pn[i].setname(na); pn[i].setnum(nu); }

void compute::getsort() int i,j,k;

person temp; for(i=0;i

for(j=i+1;j

if(strcmp(pn[k].getname(),pn[j].getname())>0) k=j;

temp=pn[k]; pn[k]=pn[i]; pn[i]=temp; } }

void compute::outdata() {

int i;

cout<<\输出结果:\

cout<<\ 姓名 电话号码\

cout << \ -------- --------\ << endl; for(i=0;i

cout<

void main() {

compute obj; obj.getdata(); obj.getsort(); obj.outdata(); }

9.

编写一个程序,输入n个学生的姓名和出生日期,并按年龄从大到小输出。 【知识点】:2.2 2.3 3.1 【参考分】:40分 【难易度】:A 【答案】:设计一个结构体person,包含学生的姓名和出生日期等数据:设计一

个类compute,包含私有数据成员,即person结构体数组st[],另有3个私有成员函数daynum()、count day()、leap()和3个公共成员函数getdam()、sort()、disp(),它们的功能分别用于数据获取、按出生日期排序和输出数据,在实现过程中调用前面的3个私有成员函数。sort()成员函数按结构体数组元素的d成员排序,d存放的是该学生从1900年1月l日到出生日期的天数。程序如下:

#include #include const int N=4;

int count day(int,int,int,int); int leap(int); struct person {

char name[10]; struct dates int year; int month; int day; }date;

int d; //从1900.1.1到出生日的天数 };

class compute {

struct person st[N];

int daynum(int,int,int,int,int,int); int count_day(int,int,int,int); bool leap(int); public:

void getdata(); void sort(); void disp(); };

int compute::daynum(int s_year,int s_month,int s_day,int e_year, int e_month,int e_day) {

int year,day,dayl,day2; if(s year

day=count_day(s_year,s_month,s_day,0); for(year=s_year+l;year

day+=365L;

day+=count_day(e_year,e_month,e_day,1); }

else if(s_year==e_year) {

dayl=count_day(s_year,s_month,s_day,1);

day2=count_day(e_year,e_month,e_day,1); day=day2-dayl; } else day=-1; return day; }

int compute::count_day(int year,int month,int day,int flag) {

staric int day_tab[2][12]={(31,28,31,30,31,30,3l,31,30,31,30,3l}, {31,29,31,30,31,30,31,31,30,31,30,31}};

//使用二维数组存放各月天数,第一行对应非闰年,第二行对应闰年 int p,i,s;

if(leap(year)) p=1; else p=0; if(flag) {

s=day;

for(i=1;i

s=day_tab[p][month]-day; for(i=month+1;i<=12;i++) s+=day_tab[P][i一1]; }

return(s); }

bool compute::leap(int year) {

if(year%4==O&&year0!=O||year@0==O) //是闰年 return true;

else //不是闰年 return false; }

void compute::sort() {

int i,j;

struct person temp; for(i=O;i

if(st[j].d>st[j+1].d) {

temp=st[j];

st[j]=st[j+1]; st[j+1]=temp; } }

void compute::getdata() {

int i;

for(i=0;i

cout<<\输入第\个学生姓名:\ cin>>st[i].name;

cout<<\ 出生日期:\

cin>>st[i].date.year>>st[i].date.month>>st[i].date.day; st[i].d=daynum(1900,1,1,st[i].date.year, st[i].date.month,st[i].date.day); } }

void compute::disp() {

int i;

cout<<\输出结果:\

cout<<\ 姓名 出生日期\ for(i=0;i

cout<

void main() {

compute obj; obj.getdata(); obj.sort(); obj.disp(); }

10.

设计一个集合类Set,包括将集合置空、添加元素、判断元素是否在集合中、输出集合以及将集合中元素逆置,另外还有一个复制构造函数,并使用一些数据进行测试。 【知识点】:2.2 2.3 3.1 【参考分】:40分 【难易度】:B 【答案】:Set类包括私有数据data(存放集合元素)、Bum(集合中元素个数),一个缺省构造函数和复制构造函数Set(Set &s),另有成员函数setempty()(将集合置空)、issetempty()(判断集合是否为空)、ismemberof()(判断元素是否在集合中)、add()(添加元素)、disp()(输出集合)、reverse()(将集合中元素逆置)。其中,issetempty、ismemberof和disp函数设计为常成员函数。程序如下:

#include

const int Max=10; C1ass Set {

int data[Max]; int num; public:

Set(){num=0;}

Set(Set &s); //对象引用作为参数 void setempty(){num=0;} bool issetempty()const;

bool ismemberof(int n) const; int add(int n); void disp() const; void reverse(); };

Set::Set(Set &S) nUm=S.num;

for(int i=0;i

bool Set::issetempty() const {

return(num==0); }

bool Set::ismemberof(int n) const {

for(int i=0;i

int Set::add(int n) {

if (ismemberof(n)) return 1;

else if(num>Max) return 0; else {

data[num++]=n; return 1; } }

void Set::disp() const {

cout<<\

for(int i=0;i0)


C++面向对象程序设计习题集(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:小学生作业鼓励性评语作业评语

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: