C++高分题目求助!!!(解答好的话可以再加分)

*1. 编写一个学生和教师数据输入和显示程序,学生数据有编号、姓名、班级和成绩,教师数据有编号、姓名、职称和部门。要求将编号、姓名输入和显示设计成一个类person,并作为学生数据操作类student和教师类数据操作类teacher的基类。
*2.编写一个程序计算出球、圆柱和圆锥的表面积和体积。
要求:
(1)定义一个基类圆,至少含有一个数据成员半径;
(2)定义基类的派生类球、圆柱、圆锥,都含有求表面积和体积的成员函数和输出函数。

//第一题,后附测试结果

#include <iostream>

#include <cstdlib>

#include <string>

using namespace std;

class person

{

public:

 void in_nm();

 void in_id();

 void ou_nm();

 void ou_id();

private:

 string id;

 string name;

};

class student:public person

{

public:

 void in_clsid();

 void in_sc();

 void ou_clsid();

 void ou_sc();

private:

 string cls_id;

 float score;

};

class teacher:public person

{

public:

 void in_zc();

 void in_dp();

 void ou_zc();

 void ou_dp();

private:

 string zc;

 string depart;

};

void person::in_nm()

{

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

 cin>>name;

}

void person::in_id()

{

 cout<<"请输入编号:"<<endl;

 cin>>id;

}

void person::ou_nm()

{

 cout<<"姓名为:"<<name<<endl;

}

void person::ou_id()

{

 cout<<"编号为:"<<id<<endl;

}

void student::in_clsid()

{

 cout<<"请输入学生班级:"<<endl;

 cin>>cls_id;

}

void student::in_sc()

{

 cout<<"请输入学生分数:"<<endl;

 cin>>score;

}

void student::ou_clsid()

{

 cout<<"学生班级为:"<<cls_id<<endl;

}

void student::ou_sc()

{

 cout<<"学生分数为:"<<score<<endl;

}

void teacher::in_zc()

{

 cout<<"请输入教师职称:"<<endl;

 cin>>zc;

}

void teacher::in_dp()

{

 cout<<"请输入教师部门:"<<endl;

 cin>>depart;

}

void teacher::ou_zc()

{

 cout<<"教师职称为:"<<zc<<endl;

}

void teacher::ou_dp()

{

 cout<<"教师部门为:"<<depart<<endl;

}

int main()

{

 student stu;

 cout<<"开始输入学生信息:"<<endl;

 stu.in_nm();

 stu.in_id();

 stu.in_clsid();

 stu.in_sc();

 cout<<"显示学生信息:"<<endl;

 stu.ou_nm();

 stu.ou_id();

 stu.ou_clsid();

 stu.ou_sc();

 cout<<endl;

 

 teacher tch;

 cout<<"开始输入教师信息:"<<endl;

 tch.in_nm();

 tch.in_id();

 tch.in_zc();

 tch.in_dp();

 cout<<"显示教师信息:"<<endl;

 tch.ou_nm();

 tch.ou_id();

 tch.ou_zc();

 tch.ou_dp();

 cout<<endl;

 system("pause");

 return 0;

第二题:

#include <iostream>

#include <cstdlib>

#include <string>

using namespace std;

//常量圆周率

const double PI=3.14159;

class circle

{

public:

 void in_rad()

 {

  cout<<"输入半径:"<<endl;

  cin>>rad;

 }

protected:

 float rad; //半径

};

class ball:public circle

{

public:

 void in_rad()

 {

  cout<<"输入球半径:"<<endl;

  cin>>rad;

 }

 void calc_sur()

 {

  sur=4*PI*rad*rad;

 }

 void calc_vol()

 {

  vol=4/3.0*PI*rad*rad*rad;

 }

 void out_sur()

 {

  cout<<"球的表面积为:"<<sur<<endl;

 }

 void out_vol()

 {

  cout<<"球的体积为:"<<vol<<endl;

 }

private:

 double sur; //表面积

 double vol; //体积

};

//圆柱

class column:public circle

{

public:

 void in_rad()

 {

  cout<<"输入圆柱半径:"<<endl;

  cin>>rad;

 }

 void in_height()

 {

  cout<<"输入圆柱高:"<<endl;

  cin>>height;

 }

 void calc_sur()

 {

  sur=PI*rad*rad+2*PI*rad*height;

 }

 void calc_vol()

 {

  vol=PI*rad*rad*height;

 }

 void out_sur()

 {

  cout<<"圆柱的表面积为:"<<sur<<endl;

 }

 void out_vol()

 {

  cout<<"圆柱的体积为:"<<vol<<endl;

 }

private:

 double sur; //表面积

 double vol; //体积

 double height; //高

};

//圆锥

class cone:public circle

{

public:

 void in_rad()

 {

  cout<<"输入圆锥半径:"<<endl;

  cin>>rad;

 }

 void in_height()

 {

  cout<<"输入圆锥高:"<<endl;

  cin>>height;

 }

 void calc_sur()

 {

  sur=0.5*PI*rad*rad*2*PI*rad*height;

 }

 void calc_vol()

 {

  vol=1/3.0*PI*rad*rad*height;

 }

 void out_sur()

 {

  cout<<"圆锥的表面积为:"<<sur<<endl;

 }

 void out_vol()

 {

  cout<<"圆锥的体积为:"<<vol<<endl;

 }

private:

 double sur; //表面积

 double vol; //体积

 double height;

};

int main()

{

 cout<<"球:"<<endl;

 ball oball;

 oball.in_rad();

 oball.calc_sur();

 oball.calc_vol();

 oball.out_sur();

 oball.out_vol();

 cout<<endl;

 cout<<"圆柱:"<<endl;

 column ocol;

 ocol.in_rad();

 ocol.in_height();

 ocol.calc_sur();

 ocol.calc_vol();

 ocol.out_sur();

 ocol.out_vol();

 cout<<endl;

 cout<<"圆锥:"<<endl;

 cone ocone;

 ocone.in_rad();

 ocone.in_height();

 ocone.calc_sur();

 ocone.calc_vol();

 ocone.out_sur();

 ocone.out_vol();

 cout<<endl;

 system("pause");

 return 0;

}

温馨提示:内容为网友见解,仅供参考
第1个回答  2011-05-04
兄弟 你这是课设吧??
很简单的 自己做吧 仔细看一下课本 关于类的知识
刚学编程的人 可能觉得难 但你如果不去思考 是领悟不到编程的诀窍的
第2个回答  2011-05-04
呵呵... 楼上的说得好, 我来详细说说.

是strcat函数的问题. strcat函数可以连接两个字符串, 传入两个参数, 是指向要连接的两个字符串的指针.

但是它的第一个参数必须是一个字符串数组头地址, 即是一个分配了内存的, 拥有一定空间的指针. 但是f()无参数时默认建立的两个指针*a和*b都是指针变量, 没有自己的空间, 所以会发生内存错误.

用分配了20个字节空间的公共变量 str(这是字符串数组首地址指针) 代替没有分配内存的指针a就可以完成了! 请看程序:

#include "iostream.h"
#include "string.h"

char *f( char a[20]="Hello,", char b[]="world" );
char str[20];

int main()
{
cout << f() << endl;
cout << f("Hi,") << endl;
cout << f("Hi,","friend!");
return 0;
}

char *f(char a[], char b[])
{
strcpy( str, a );
strcat(str, b);
return str;
}

//原本还有第二种解法, 仔细想过后发觉第二种改法不行, 确实会导致内存泄漏, 所以删去了.
另外,团IDC网上有许多产品团购,便宜有口碑
相似回答