您的当前位置:首页正文

c++经典课后习题整理(1)

2022-05-06 来源:步旅网
(1)设计一个Car类,他的数据成员要能描述一辆汽车的品牌、型号、出厂年份和价格,成员函数包括提供合适的途径来访问数据成员,在main()函数中定义类的对象并调用相应的成员函数

#include

#include

using namespace std;

class Car

{

private:

string Pingpai;

string Xinghao;

int Year;

int Price;

public:

1

void set()

{

cout<<\"shu ru xiang guan xin xi\"<cout<<\"pingpai:\";

cin>>Pingpai;

cout<<\"xinghao:\";

cin>>Xinghao;

cout<<\"chuchangnianfen:\"; cin>>Year;

cout<<\"jiage:\";

cin>>Price;

}

void show()

2

{

cout<<\"pingpai:\"<cout<<\"xinghao:\"<cout<<\"chuchangnianfen:\"<cout<<\"jiage:\"<}

};

int main()

{

Car car;

car.set ();

car.show ();

return 0;

3

}

(2)设计一个学生类Student,拥有的数据成员是学号、姓名、电话号码、所属院系,成员函数包括访问和修改这些属性,在main()中定义对象,并输出相关信息

#include

#include

using namespace std;

class Student //学号、姓名、电话号码、所属院系,成员函数包括访问和修改这些属性

{

private:

string xuehao;

string name;

string tel;

string department;

4

public:

Student(string x,string n,string t,string d)

{

xuehao=x;

name=n;

tel=t;

department=d;

}

void change(string x,string n,string t,string d)//修改属性

{

xuehao=x;

name=n;

tel=t;

5

department=d;

}

void display()

{

cout<<\"xuehao=\"<cout<<\"name=\"<cout<<\"tel=\"<cout<<\"department=\"<}

};

int main()

{

string a,b,c,d;

6

cin>>a;

cin>>b;

cin>>c;

cin>>d;

Student s(a,b,c,d);

s.display();

return 0;

}

(3)设计一个学生类,包含学生呢个姓名、成绩(char *name;double score),设计一个友元函数,比较学生成绩的高低,并求出下一组学生:{Stu(\"zhang\"),78,Stu(\"wang\}中的最高分和最低分……

#include

#include

using namespace std;

7

class student

{

private:

char *name;

double score;

public:

student()

{

}

student(char *na,double sc)

{

name=na;

score=sc;

8

}

friend void order(student s[]);

};

void order(student s[])

{

student tmp;

int i,j;

for(j=0;j<3;j++)

for(i=0;i<3-j;i++)

if(s[i].score{

tmp=s[i];

s[i]=s[i+1];

9

s[i+1]=tmp;

}

cout<<\"分数由高到低排列:\";

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

cout<cout<<\"最高分:\"<cout<<\"最低分:\"<}

int main()

{

student

s[4]={student(\"zhang\

order(s);

}

10

(4)编写程序,定义机动车类Vehicle,包括的数据成员有出厂日期和售价并定义成员函数可以设置这些数据成员,再定义print()然后定义car类,增加乘客数量,truck类增加载重吨数.......

#include

#include

using namespace std;

class Vehicle

{

private:

int year,month,day;

int price;

public:

Vehicle()

{

11

cout<<\"please input date: \";

cout<<\"year\"<<\

cin>>year;

cin>>month;

cin>>day;

cout<<\"please input price:\";

cin>>price;

cout<<\"Vehicle\"<}

virtual void print1()

{

cout<<\"date:\"<cout<<\"price:\"<12

}

};

class Car:public Vehicle

{

public:

int amount;

Car()

{

cout<<\"please input amount of passager: \";

cin>>amount;

cout<<\"car\"<}

void print2()

13

{

print1();

cout<<\"amount:\"<}

};

class Truck:public Vehicle

{

public:

int ton;

Truck()

{

cout<<\"please input ton:\";

cin>>ton;

14

cout<<\"truck\"<}

void print3()

{

print1();

cout<<\"ton:\"<}

};

int main()

{

Vehicle V1;

V1.print1();

Car C1;

15

C1.print2();

Truck T1;

T1.print3();

return 0;

}

(7-4)完整定义字符串类string,使用动态分配内存机制实现字符串存储,定义构造函数,析构函数,重载运算符“=”,\"+\

#include

#include

using namespace std;

class String

{

public:

String();

16

String(char *t);

String(String &t);

~String();

String operator=(String t);

String operator+( String t);

String operator +=(String t);

void Show()

{

cout<}

private:

char *p;

};

17

String::String()

{

p = new char[1];

*p = '\\0';

}

String::String(char *t)

{

p = new char[strlen(t)+1];

strcpy(p,t);

}

String::String(String &t)

{

p = new char[strlen(t.p)+1];

18

strcpy(p,t.p);

}

String String::operator +(String t)

{

char *pt;

pt = new char[strlen(p)+strlen(t.p)+1];

strcpy(pt,p);

strcat(pt,t.p);

String temp(pt);

delete[]pt;

return temp;

}

String String::operator +=(String t)

19

{

char *i;

i=new char[strlen(p)+1];

strcpy(i,p);

delete[] p;

p=new char[strlen(t.p)+strlen(p)+1];

strcpy(p,i);

strcat(p,t.p);

return *this;

}

String::~String()

{

delete[]p;

20

}

String String::operator =(String t)

{

if(this == &t)

return *this;

delete[]p;

p = new char[strlen(t.p)+1];

strcpy(p,t.p);

return *this;

}

void main()

{

String s1(\"hello!\");

21

String s2(\"when.\");

String s3;

s3=s2+s1;

s3+=s2;

s2=s1;

s3.Show();

s2.Show();

}

(8-4)根据程序定义一个求3个数之间最大值的函数模板max。

#include

#include

templateT max(T a,T b,T c)

{

22

return (a>b?a:b)>c?(a>b?a:b):c;

}

int main()

{

cout<cout<cout<return 0;

}

(5)有一个学生类student,包括学生姓名、成绩,设计一个友元函数,输出成绩对应的等级:大于等于90:优;80~90:良;70~79:中;60!69:及格;小于60:不及格。

#include

#include

23

class student

{

char name[10];

int deg;

public:

student(char na[],int d)

{

strcpy(name,na);

deg=d;

}

friend void trans(student &s) {

if(s.deg>=90)

24

cout<else if(s.deg>=80)

cout<else if(s.deg>=70)

cout<=60)

cout<cout<};

void main()

{

\"<<\"中\"<\"<<\"及格\"<\"<<\"不及格\"<\"<student st[]={student(\"王华\李明\张伟\孙强\

cout<<\"输出结果:\"<cout<<\"姓名\"<<\" \"<<\"成绩\"<<\" \"<<\"等级\"<for(int i=0;i<4;i++)

trans(st[i]);

}

(6)编写一个程序,设计一个Point类,包括学号、姓名和成绩等私有数据成员,不含任何成员函数,只将main()设置为该类的友元函数。

#include

class point

{

int no;

char name[10];

26

int deg;

public:

friend void main();

};

void main()

{

point p;

cout<<\"输入学号:\";

cin>>p.no;

cout<<\"姓名:\";

cin>>p.name;

cout<<\"成绩:\";

cin>>p.deg;

27

cout<<\"输出结果\"<cout<<\"学生:\"<cout<<\"学号:\"<cout<<\"成绩为:\"<}

(7)创建一个学生类,包括学号和成绩,编程输入和显示学生信息,建立一个人类,包括姓名,性别,年龄,并作为学生的基类.

#include

class Person

{

char name[10];

char sex;

int age;

public:

28

void input()

{

cout<<\"请输入姓名:\";

cin>>name;

cout<<\"请输入性别:\";

cin>>sex;

cout<<\"请输入年龄:\";

cin>>age;

}

void display()

{

cout<<\"姓名:\"<}

29

};

class Student:public Person

{

char sno[10];

int score;

public:

void input()

{

Person::input();

cout<<\"请输入学号:\";

cin>>sno;

cout<<\"请输入成绩:\";

cin>>score;

30

}

void display()

{

Person::display();

cout<<\"学号;\"<}

};

void main()

{

Student s1;

s1.input();

s1.display();

}

31

(8)按要求编程:

某学校教授和讲师的月工资计算办法规定如下:

教授每月固定工资为4000元。

讲师每月工资与讲课学时数有关,计算方法是每学时50元,另加补助1000元。

编程显示某个教员的月工资数目。

#include

class Teacher

{

public:

virtual int Salary()=0;

virtual void Print(int)=0;

};

class Professor:public Teacher

32

{

private:

char name[20];

int lessons;

public:

Professor()

{

cout<<\"请输入姓名:\";

cin>>name; //字符串中不能有空格

}

int Salary()

{

return 4000;

33

}

void Print(int money)

{

cout<<\"职称:教授 姓名:\"<}

};

class Lecturer:public Teacher

{

private:

char name[20];

int lessons;

public:

Lecturer()

34

{

cout<<\"请输入姓名:\";

cin>>name;

cout<<\"请输入课时:\";

cin>>lessons;

}

int Salary()

{

return (1000+lessons*50);

}

void Print(int money)

{

cout<<\"职称:讲师 姓名:\"<35

}

};

void main()

{

int money=0;

Professor t;

money = t.Salary();

t.Print(money);

Lecturer l;

money = l.Salary();

l.Print(money);

}

(9)1.给定一个int型数n,编程实现按不同进制输出,包括十进制数、八进制数、十六进制数。要求使用纯虚函数print()。十进制数 (dec) 十六进制数(hex)八进制

36

数(oct)

#include

#include

int main()

{

char ch[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}, output[20];

int input,temp,n,i=0;

cout<<\"请输入你想要转换的十进制数:\";

cin>>input;

cout<<\"请输入要转换的进制(2<=n<=16):\";

cin>>n;

input=fabs(input);

while(input)

37

{

temp=input%n;

input=input/n;

output[i++]=ch[temp];

}

output[i]='\\0';

cout<<\"转换为\"<for(;i>=0;i--)

cout<cout<return 0;

}

两个或两个以上的函数,具有相同的函数名,但是形参的个数或者类型不同,编译器根据实参和形参的类型及个数进行最佳匹配,自动确定调用哪个函数,这就是函数的重载。

38

重写和重载,他们其实是实现类型多态(同一种方法,不同的对象会产生不同的结果)特性的基本技术之一.重写也叫做覆写,它存在与有继承关系的子类中,是在子类中重新定义父类具有相同方法签名的函数,使之有不同的实现.要理解重写和重载的本质区别,实现要理解什么叫做具有相同签名的方法.其实很简单,就是指相同的方法名,相同的参数列表(参数个数以及相同位置的参数类型相同)以及相同的函数返回值.重写的一个重要特征就是必须要求方法的签名相同.重写的基本特征:

1.是一种运行时多态,又称为动态联编,只有在运行时才知道调用的是哪个方法.

2.存在于有继承关系的子类中,只有被virtual和abstract标记的虚方法和抽象方法才能被直接重写. 3.用关键字override来标记.

4.重写这个方法的类的父类中有一个与这个方法签名相同的方法.

39

因篇幅问题不能全部显示,请点此查看更多更全内容