2.28编写一个完整的C++程序,使用系统函pow(x,y)计算x的y次方的值。
#include
#include
using namespace std;
int pow(int i,int g)
{return pow(i,g);}
int main()
{
int x,y,z;
cin>>x>>y;
z=pow(x,y);
cout<<"z="< return 0; } 2.29编写一个C++风格的程序,用动态分配空间的方法计算Fibonacci数列的前20项并存储动态分配的空间。 #include using namespace std; int main() { int i; int *pi=new int[20]; pi[0]=1; pi[1]=1; for(i=2;i<=19;i++) pi[i]=pi[i-2]+pi[i-1]; cout< delete pi; } 2.30 编写一个c++风格的程序,建立一个被称为sroot()的函数,返回其参数的二次方根。重载函数sroot()3次,让它返回整数、长整数与双精度数的二次方根(计算二次方根时,可以使用标准库函数sprt())。 #include using namespace std ; double sroot(int n) { return (double)sqrt((float)n) ; } double sroot(long long n) { return (double)sqrt((long double)n) ; } double sroot(double n) { return (double)sqrt((double)n) ; } 3.22声明一个Circle类,有数据成员radius(半径),成员函数area(),计算圆的面积,构造一个circle的对象进行测试。 #include using namespace std; const double PI=3.14; class circle { private: double radius; public: area(double r) { radius=r; } double area1() { return(PI*radius*radius); } }; int main() { Circle r(20); cout<<"The area of circle is"< return 0; } 3.23 建立类cyliner,cyliner的构造函数被传递了两个double值,分别表示圆柱体的半径和高度。用类cyliner计算圆柱体的体积,并存储在一个double变量中。在类cyliner 中包含一个成员函数vol,用来显示每个cyliner对象的体积。 #include using namespace std; const double PI=3.14; class cyliner { private: double radius,height; public: cyliner(double r,double h) { radius=r; height=h; } double vol() { return PI*radius*radius*height; } }; int main() { double v; cylinder v1(5,10); v=v1.vol(); cout<<"圆柱体的体积是:"< return 0; } [4.17]建立一个对象数组,内放5个学生的数据,用指针指向数组首元素,输出第1,3,5个学生的数据 //建立一个对象数组,内放5个学生的数据,用指针指向数组首元素,输出第1,3,5个学生的数据 #include #include using namespace std; class Student { public: int number; string name; }; int main() { Student student[5];//定义对象数组Student *p=student;//初始化指针p指向对象数组student的首地址 int num=1001;//为了初始化数组对象中的number string nam[5]={"张三","李四","王五","丽丽","小强"};//初始化数组对象中的name int i=0,k=0; for(i=0;i<5;i++) { k=i+1; student[i].number=num; num++; student[i].name=nam[i]; if (k==1||k==3||k==5) { cout<<"第"< cout< cout<<"名字为:"; cout< cout< } } cout< return 0; } 修改,显示2,4,6学生的学号,名字 #include #include using namespace std; class Student { public: int number; string name; }; int main() { Student student[6];//定义对象数组 Student *p=student;//初始化指针p指向对象数组student的首地址 int num=1001;//为了初始化数组对象中的number string name[6]={"张三","李四","王五","丽丽","小强","小明"};//初始化数组对象中的name int i=0; for(i=0;i<6;i++) { student[i].number=num; num++; student[i].name=name[i]; if (i==1||i==3||i==5) { cout<<"第"< cout< cout<<"名字为:"; cout< cout< } } cout< return 0; } [4.18]C++建立一个对象数组,内放6个学生的数据(学号,成绩),设立一个函数max,用指针指向数组元首,向对象的指针作函数参数,在max函数中找出6个学生中的成绩最高者,并输出其学号。 #include using namespace std; class Student { private: int id; float score; public: Student() { id = 0; score = 0; } Student(int id, float score) { this->id = id; this->score = score; } float getScore() {return score; } int getID() {return id; } }; void max(Student* s, int size) { if (s == 0 || size < 1) cout<<”error!”; int max=s[0].getScore(); int j=0; for (int i = 0; i < size; i++) { if (s[i].getScore() >max) {max= s[i].getScore(); j=i;} } cout << "Student with ID \"" << s[j].getID() << "\" has the largest grade is:" < } int main() { Student students[6] = { Student(1, 78), Student(2, 92), Student(4, 81), Student(4, 89), Student(5, 68), Student(4, 81), }; max(students, 6); return 0; } [4.19]构建一个类book,其中含有两个私有数据成员qu和price,建立一个有5个元素的数组对象,将qu初始化为1~5,将price 初始化为qu的10倍。显示每个对象的qu*price。 解答:#include class book {public: book(int a,int b) {qu=a;price=b;} void show_money() {cout< private: int qu,price; }; int main() {book ob[5]={book(1,10),book(2,20), book(3,30),book(4,40),book(5,50)}; int i; for(i=0;i<5;i++)ob[i].show_money(); return 0;} [4.21] 编写一个程序,已有若干学生数据,包括学号,姓名,成绩。要求输出这些学生的数据,并计算出学生人数和平均成绩(要求将学生人数和总成绩用静态数据成员表示) #include #include using namespace std; class Student{ private: int num; string name; float score; static int count; static float sum; static float ave; public: void input(); void show(); //普通成员函数,输出姓名、学号和成绩 static void show_count_sum_ave(); }; void Student::input() {cout<<"请输入学生的学号:"; cin>>num; cout<<"请输入学生的姓名:"; cin>>name; cout<<"请输入学生的成绩:"; cin>>score; ++count; //累加学生人数 sum=sum+score; //累加成绩 ave=sum/count; } void Student::show() {cout<<"学号:"< cout<<"姓名:"< void Student::show_count_sum_ave() //静态成员函数 {cout<<"学生人数:"< cout<<"累加成绩:"< cout<<"平均成绩:"< int Student::count=0; float Student::sum=0.0; float Student::ave=0.0; int main() {int i; Student stu[5]; for (i=0;i<5;i++) stu[i].input(); for (i=0;i<5;i++) stu[i].show(); Student::show_count_sum_ave(); return 0;} [4.22] 求助:设计一个点类,其中包含一对坐标点数据成员,一个求两点之间距离的友元函数和显示坐标点的成员函数,并用数据进行测试. #include "math.h" //需要一个求根函数,在math.h文件里 #include using namespace std; class point //定义点类 { public: friend double lon(point &,point &); //求两点距离的友元 putp(); //向对象里写入数据double getx(){return x;} //取X坐标double gety(){return y;} //取Y坐标private: double x,y; //声明坐标 }; double lon(point &p1,point &p2) //定义友元{ return sqrt(((p1.x-p2.x)*(p1.x-p2.x))+((p1.y-p2.y)*(p 1.y-p2.y))); } point::putp() //定义成员函数 { cout<<"写入数据:"< cout<<"x:"; cin>>x; cout<<"y:"; cin>>y; } int main () { point p1,p2; cout<<"第一个点"; p1.putp(); cout<<"第二个点"; p2.putp(); cout<<"输出结果:"< cout<<"第二个点:"<<"("< cout<<"两点间距离="< 5.19 设计一个虚基类base,包含姓名和年龄是有数据成员,以及相关成员函数;有他派生出领导类leader,包含职务和部门是有数据成员以及相关的成员函数;再由base 派生出工程师类engieer,包含职称和专业私有数据成员以及相关的成员函数;然后由leader和engineer,派生出主任工程师类chairman,采用相关数据进行测试。 #include #include using namespace std; class base{ public: base(string name1,int age1) { name=name1; age=age1; } void print() { cout<<"姓名:"< cout<<"年龄:"< } private: string name; int age; }; class leager:virtual public base{ leader(string name1,int age1,string duty1,string dept1) base(name1,age1) { pro=pro1; major=major1; } void print() { base::print(); cout<<"职称:"< cout<<"专业:"< } private: string pro; string major; }; class chairman:public leader,public endieer{ public: chairman(string name1,int age1,string duty1,string dept1,string pro1,string major): base(string name1,int age1),leader(string name1,int age1,string duty1,string dept1),engieer(string name1,int age1,string pro1,string major1){} void print() { leader::print(); engieer::print(); } }; int main() { leader my_leader("陈翠",24,"主任","招生办"); cout<<"领导:"< my_leader.print(); engieer my_engieer("张三",30,"工程师","计算机"); cout<<"工程师:"< my_engieer.print(); chairman my_chairman("李四",40,"主任","招生办","工程师","计算机"); cout<<"主任工程师:"< my_chairman.print(); return 0; } 第三章实验题 (1)copy-initialization Constructor is called copy-initialization Constructor is called P3=(3,4) Destructor is called Destructor is called Destructor is called (2)Constructor is called Copy-initialization Constructor is called Copy-initialization Constructor is called P3=(3,4) Destructor is called Destructor is called Destructor is called (3)程序结果会出现随机数 因为没有匹配的参数 将构造函数改成带默认值的构造函数(4)当创建一个类的对象时,会调用构造函数,当用类的一个对象去初始化另一个对象时会调用拷贝构造函数,就如coordinatep2(p1)时 5.18编写一个学生和教师的数据输入和显示程序,学生数据有编号、姓名、性别、年龄、系别和成绩,教师数据有编号、姓名、性别、年龄、职称和部门。要求将编号、姓名、性别年龄的输入和显示设计成一个类Person,并作为学生类student和教师类teacher的基类。 #include #include class person { public: void input() { cin>>num; cin>>name; cin>>sex; cin>>age; } void print() { cout<<"num:"< cout<<"name:"< cout<<"sex:"< cout<<"age:"< } protected: int num; string name; string sex; int age; }; class student:public person { public: void input1() { person::print(); cout<<"dept"< cout<<"score"< } private: string dept; float score; }; class Teacher:public person { public: void input2() { person:input(); cin>>dept; cin>>pro; } void print2() { person:print(); cout<<"dept"< cout<<"pro"< } private: string dept; string pro; }; int main() { student stu; cout<<"输入学生信息:"< stu.input1(); cout<<"输出学生信息:"< stu.print1(); teacher tea; cout<<"输入教师信息:"< tea.input2(); cout<<"输出教师信息:"< tea.print2() return 0; } 输入学生信息:输入教师信息: 04 01 陈翠宋春红 女女 24 38 信息工程分院教授 数学教研室 6.12给出下面的基类: Class area_c1{ Protected:double height;double width; Public: Area_c1(double r,double s) {height=r;width=s;} V irtual double area()=0; }; 要求: 建立基类area_c1的两个派生类rectangle与isosceles,让每一个派生类都包含一个函数area(),分别用来返回矩形与三角形的面积。用构造函数对height与width进行初始化。写出主程序,用来求height与width分别为10.0与5.0的矩形面积,以及求height与width分别为4.0与6.0的三角形面积。 要求通过使用基类指针访问虚函数的方法(即运行时的多态),分别求出矩形和三角形面积。 #include class area_c1{ protected: double height;double width; public: area_c1(double r,double s) { height=r;width=s; } virtual double areaa()=0; }; class rectangle :public area() { public: rectangle(double r,double s):area_c1(r,s) {} double area() { cout<<"triangle with height"< cout<<"and base"< cout<<"height*width*0.5"< return 0; } }; class isosceles:public areac1 { public: isosceles(double r,double s):area_c1(r,s) {} double area() { cout<<"square with dimension"< cout< return 0; } }; int main() { area_c1 *p; triangle t(4.0,6.0); square s(10.0,5.0); p=&t; p->area(); p=&s; p->area(); return 0; } 6.13定义基类Base ,其数据成员为高h 定义成员函数disp()为虚函数。然后,再由基类型派生出长方体类Cuboid与圆柱体类Cylinder。并在两个派生类中定义成员函数disp()为虚函数。在主函数中,用基类Base 定义指针变量pc,然后用指针pc动态调用基类与派生类中的虚函数disp(),显示长方体与圆柱体的体积 #include using namespace std; const double PI=3.1415927; class Base { public: Base(double x):h(x) { } virtual void disp()=0; protected: double h;//高 }; class Cuboid:public Base{ public: Cuboid(double x=0, double y=0, double z=0):Base(z),c(x), k(y) { } virtual void disp() { cout <<"长方体体积" << c*k*h << endl; } private: double c,k;// 长,宽 }; class Cylinder:public Base{ public: Cylinder(double a=0, double b=0):Base(b), r(a) { } virtual void disp() { cout << "圆柱体体积"<< h*PI*r*r<< endl; } private: double r;//底半径 }; int main() { Cuboid a(1,2,3); Cylinder b(1,2); Base *pc = &a; pc->disp(); pc = &b; pc->disp(); return 0; } 6.14给出下面的抽象基类container; class container { protected: double radius; public: container(double radius1); virtual double surface_area()=0; virtual double volume()=0; }; 要求建立3个继承container的派生类cube、sphere与cylinder,让每一个派生类都包含虚函数surface_area()和volume(),分别用来计算正方体、球体和圆柱体的表面积及体积。要求写出主程序,应用C++的多态性,分别计算边长为6.0的正方体、半径为5.0的球体,以及半径为5.0和高为6.0的圆柱体的表面积和体积。 #include using namespace std; #define PI 3.1415927 class container{ protected: double radius; public: container(double radius1){}; virtual double surface_area()=0; virtual double volume()=0; }; class cube:public container{ public: cube(double r):container(r){ radius=r; } double surface_area(){ return 6*radius*radius; } double volume(){ return radius*radius*radius; } }; class sphere:public container{ public: sphere(double r):container(r){ radius=r; } double surface_area(){ return 4*PI*radius*radius; } double volume(){ return 4*PI*radius*radius*radius/3; } }; class cylinder:public container{ protected: double height; public: cylinder(double r,double h):container(r){ radius=r; height=h; } double surface_area(){ return 2*PI*radius*radius+2*PI*radius*height; } double volume(){ return PI*radius*radius*height; } }; int main(){ cube a(6.0); sphere b(5.0); cylinder c(5.0,6.0);