C++练习题.docx

上传人:b****3 文档编号:5876476 上传时间:2023-05-09 格式:DOCX 页数:15 大小:18.07KB
下载 相关 举报
C++练习题.docx_第1页
第1页 / 共15页
C++练习题.docx_第2页
第2页 / 共15页
C++练习题.docx_第3页
第3页 / 共15页
C++练习题.docx_第4页
第4页 / 共15页
C++练习题.docx_第5页
第5页 / 共15页
C++练习题.docx_第6页
第6页 / 共15页
C++练习题.docx_第7页
第7页 / 共15页
C++练习题.docx_第8页
第8页 / 共15页
C++练习题.docx_第9页
第9页 / 共15页
C++练习题.docx_第10页
第10页 / 共15页
C++练习题.docx_第11页
第11页 / 共15页
C++练习题.docx_第12页
第12页 / 共15页
C++练习题.docx_第13页
第13页 / 共15页
C++练习题.docx_第14页
第14页 / 共15页
C++练习题.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

C++练习题.docx

《C++练习题.docx》由会员分享,可在线阅读,更多相关《C++练习题.docx(15页珍藏版)》请在冰点文库上搜索。

C++练习题.docx

C++练习题

课后题:

5-5 5-6 5-7 5-9 5-11 5-12 5-13 5-14

5.4:

#include

#include

usingnamespacestd;

classEngine{

public:

  classEngine(intx,inty):

m_x(x),m_y(y){};

  intGetx()

  {

    returnm_x;

  }

  intGety()

  {

    returnm_y;

  }

  friendclassFuel;

  friendvoidShowE(Engine&x);

private:

  intm_x;

  intm_y;

};

voidShowE(Engine&x1)

{

  intx=x1.m_x;

  cout<<"frendfunction:

 "<

}

classFuel{

public:

  

  voidGet(Enginey){

    z1=y.m_y;

    cout<<"friendclass:

"<

  }

private:

  intz1;

};

intmain()

{

  EngineE1(1,2);

  ShowE(E1);//通过友元函数访问E1里面的数据;

  FuelF2;

  F2.Get(E1);//通过友员类访问E1;

  

  return0;

}

5.5

静态数据成员:

如果某个属性为整个类所共有,不属于任何一个具体对象,则采用static关键字来声明为静态成员。

静态成员在每个类中只有一个副本,由该类的所有对象共同来维护和使用,从而实现同一类的不同对象之间的数据共享。

静态数据成员具有静态生命周期。

5.6

静态函数成员:

静态函数成可以通过类名或对象名来调用,而非静态成员函数只能通过对象名来调用。

静态成员函数可以直接访问该类的静态数据和函数成员。

而访问非静态成员函数,必须通过对象名。

5.9:

(1):

友元关系不能传递;

(2):

友元关系不能继承;(3):

友元关系是单向的; 所以 都不是;

5.11:

N的值是fn1函数里赋的值,把主函数里面的值进行了覆盖;

5.12:

5.12

#include

usingnamespacestd;

voidfn1()

{

  staticintn=0;

  //n=0;

  n+=1;

cout<

}

intmain()

{

  inti=10;

  while(i--)

  {

    fn1();

  }

  return0;

}

5.13

#include

usingnamespacestd;

classX;

classY{

public:

  voidg(X&a);

private:

};

classZ{

public:

  voidf(X&a);

private:

};

classX{

public:

  classX(inti):

m_i(i){};

  friendvoidY:

:

g(X&a);

  friendclassZ;

  friendvoidh(X&a);

  voidShow()

  {

    cout<

  }

private:

  intm_i;

};

voidZ:

:

f(X&a)

{

  a.m_i+=5;

}

voidY:

:

g(X&a)

{

  a.m_i+=1;

}

voidh(X&a)

{

  a.m_i+=10;

}

intmain()

{

  Xx(0);

  Zz;

  Yy;

  y.g(x);

  z.f(x);

  h(x);

  x.Show();

  return0;

}

5.14

#include

usingnamespacestd;

classCar;

classBoat{

public:

  classBoat(doublex):

m_weight(x){};

  frienddoublegetTotalWeight(Boat&boat,Car&car);

private:

  doublem_weight;

};

classCar{

public:

  classCar(doublex):

m_weight(x){};

  frienddoublegetTotalWeight(Boat&boat,Car&car);

private:

  doublem_weight;

};

doublegetTotalWeight(Boat&boat,Car&car)

{

  return(boat.m_weight+car.m_weight);

}

intmain()

{

  Boatb1(1223);

  Carc1(1223);

  cout<

  return0;

}

补充题目:

1、请说出const与#define相比,有何优点?

答:

(1)const定义常量是有效数据类型,而#define宏定义常量却没有;这样const定义

的常量编译器可以对其进行数据静态类型安全检查,而#define宏定义的常量只是进行简单

的字符替换,没有类型安全的检查。

  

(2)有些调试程序可对const进行调试,但不对#define进行调试。

  (3)当定义局部变量时,const作用域仅限于局部变量的函数体内。

但是#define时其

作用域不仅定义于局部变量的函数体内,而是从定义点到整个程序的结束点。

但也可以用

#undef取消其定义从而限定其作用域范围;

  

2、main函数执行以前,还会执行什么代码?

执行一些预处理代码;

3、编写一个程序,设计一个类Trig,给定三角形的三条边长x,y,z,包含一个友元函数计算两个三角形面积之和。

#include

#include

usingnamespacestd;

classTrig{

public:

  classTrig(doublex,doubley,doublez):

m_x(x),m_y(y),m_z(z){};

  frienddoublegetArea(Trig&t,Trig&t2);

private:

  doublem_x;

  doublem_y;

  doublem_z;

};

doublegetArea(Trig&t,Trig&t2)

{

  doublearea1,area2;

  area1=0.5*t.m_x*t.m_y*sqrt(1-(((t.m_x*t.m_x)+(t.m_y*t.m_y)-(t.m_z*t.m_z))/(2*t.m_x*t.m_y)));

  area2=0.5*t2.m_x*t2.m_y*sqrt(1-(((t2.m_x*t2.m_x)+(t2.m_y*t2.m_y)-(t2.m_z*t2.m_z))/(2*t2.m_x*t2.m_y)));

  return(area1+area2);

}

intmain()

{

  Trigt1(3,4,5);

  Trigt2(3,4,5);

  cout<

  return0;

}

4、设计一个程序,其中有三个类,CBank,BBank,GBank.分别为中国银行类,工商银行类,农业银行类。

每个类都包含一个私有数据balance,用于存放储户在该行的存款数,另有一个友元函数total,用于计算储户在这3家银行中的总存款数。

#include

usingnamespacestd;

classBBank;

classGBank;

classCBank{

public:

  classCBank(doubleb=0):

balance(b){};

  friendinttotal(CBank&t1,BBank&t2,GBank&t3);

private:

  doublebalance;

};

classBBank{

public:

  classBBank(doubleb=0):

balance(b){};

  friendinttotal(CBank&t1,BBank&t2,GBank&t3);

private:

  doublebalance;

};

classGBank{

public:

  classGBank(doubleb=0):

balance(b){};

  friendinttotal(CBank&t1,BBank&t2,GBank&t3);

private:

  doublebalance;

};

inttotal(CBank&t1,BBank&t2,GBank&t3)

{

  return(t1.balance+t2.balance+t3.balance);

}

intmain()

{

  doublet;

  CBankt1(200);

  BBankt2(300);

  GBankt3(100);

  t=total(t1,t2,t3);

  cout<

  return0;

}

5、下面程序的输出结果是( )

#include

usingnamespacestd;

classSample

{

public:

  friendlongfun(Samples)

   {

      if(s.x<2)

    return1;

      returns.x*fun(Sample(s.x-1));

   }

  Sample(longa)

  {

    x=a;

  }

private:

  longx;

};

voidmain()

{

 intsum=0;

 for(inti=0;i<4;i++)

 {

  sum+=fun(Sample(i));

 }

 cout<

}

A)12    B)16    C)10    D)34   (1+1+(2*1)+(3*2*1))=10;

6、 分析以下程序的执行结果

#include

classSample

{

  intn;

  staticintsum;

  public:

  Sample(intx){n=x;}

  voidadd(){sum+=n;}

  voiddisp()

  {

    cout<<"n="<

  }

};

intSample:

:

sum=0;//静态数据成员赋初值

 voidmain()

 {

  Samplea

(2),b(3),c(5);

  a.add();

   a.disp();

   b.add();

   b.disp();

  c.add();

   c.disp();

 }

2235510

7.static全局变量与普通全局变量有什么区别?

static局部变量与普通局部变量有什么区别?

总结static的用法!

8.程序分析题

(1)#include

usingnamespacestd;

classmyClass

{

public:

  myClass(){number++;}

  ~myClass(){number--;}

  staticintnumber;

};

intmyClass:

:

number=0;

intmain(void)

{

  myClass*ptr;

  myClassA,B;

  myClass*ptr_Arr=newmyClass[3];

  ptr=ptr_Arr;

  myClassC;

  cout<

:

number<

  delete[]ptr;

  return0;

}   6

(2)#include

usingnamespacestd;

classTest

{

public:

  staticintfunc();

  staticvoidsfunc(Test&r);

private:

  staticintval;

  inta;

};

intTest:

:

val=20;

intTest:

:

func()

{

  val+=val;

  returnval;

}

voidTest:

:

sfunc(Test&r)

{

  r.a=25;

  cout<<"Result3="<

}

intmain(void)

{

  cout<<"Result1="<

:

func()<

  Testa;

  cout<<"Result1="<

  Test:

:

sfunc(a);

  return0;

} 40 80 25

3.程序设计题

(1)编一个类,声明一个数据成员和一个静态数据成员,其构造函数初始化数据成员,并把静态数据成员加1,其析构函数把静态数据成员减1.

  1>编写一个应用程序,创建该类的3个对象,然后显示其数据成员和静态数据成员,再析构每个对象,并显示它们对静态数据成员的影响

  2>修改该类,增加静态成员函数并访问静态数据成员,并声明静态数据成员为保护成员,体会静态成员函数的使用,静态成员之间与非静态成员之间相互访问题。

(2)定义一个处理日期的类TDate,它有3个私有数据成员:

Month,Day,Year和若干个公有成员函数,并实现如下要求:

(1)成员函数设置缺省参数;

(2)定义一个友元函数来打印日期。

(3)某次歌手比赛中,有JudgeNum个评委给选手打分,参加比赛的选手有PlayerNum名,现为比赛记分编写一个CompetitionResult类,类的定义如下:

classCompetitionResult

{

  shortnum;             //选手号码

  char name[10];           //选手姓名

  floatscore[JudgeNum];        //记录各评委给选手的打分

  floataverage;        //选手最后得分,去掉一个最高分和最低分后的平均分

public:

  CompetitionResult();

  CompetitionResult(shortn,char*ps);

  floatMaxScore();             //求评委打的最高分

  floatMinScore();             //求评委打的最低分

  voidSetAvg();               //求选手的最后得分

  floatGetAvg();              //读选手的最后得分

  shortGetNo();               //求选手的编号

  voidsetNo(intj);             //设置选手的编号

  char*GetName();             //读选手的姓名

  floatGetScore(intj);            //读第j个评委的打分

  void SetScore(intk,floatav);        //记录第j个评委的打分

  friendvoidSort(CompetitionResult*pr,intn);  //按最后得分从高到低排序

};

1>写出所有成员函数的实现代码

2>编写main()函数对该类进行测试。

在函数体中定义CompetitionResult类的对象数组r[PlayerNum],它的每个元素记录每个选手的所有信息,各评委的打分通过键盘输入,在屏幕上应有提示信息进行交互式操作,比赛结果按选手得分从高到低排序输出。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 农林牧渔 > 农学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2