4.基础题 第25题:
建立一个类NUM,并统计待定序列中相同的字符的个数。 具体要求如下:
(1) 私有数据成员
● char data[25]:随机生成25个字符
● int num[128]:储存每个字符出现的次数
(2) 共有数据成员
● NUM(int data):构造函数,同时初始化数组data ● void process():统计数组data中每个字符出现的个数,并保存到数组num中 ● void print():输出每个出现过的字符及其出现的个数,每行输出5个没有出现过的字符
不显示
(3) 在主程序中定义一个对象,对该类进行测试。 二.系统设计 (1) 系统功能分析 本系统主要实现统计待定序列中相同的字符的个数。
(2) 类的定义与描述 (3) 编写源程序如下:#include 三.系统测试 四. 实验小结 本次实践开始忽视了字符和整型的转化,导致调试运行时老报错,而且,由于此题牵扯到随机字符的产生,所以在编写程序时一定不要忘记文件包含< stdlib.h>。 五.参考文献: [1] 潘克勤,华伟 《Visual C++程序设计》 北京:中国铁道出版社,2008 [2] 张晓如,王芳 《Visual C++程序设计解析与实训》 北京:中国铁道出版社,2008 实践五 一.实践任务 5.基础题 第27题: 建立一个类NUM,求指定数据范围内的所有素数。 具体要求如下: (1) 私有数据成员 ● int data[10]:依次存放原始数据 ● int prime[10]:存放指定数据内所求出的所有素数 ● int num:存放素数个数 (2) 共有数据成员 ● NUM(int n[ ]):构造函数,用参数n初始化data,同时初始化num为0 ● int isprime(int x):判断x是否为素数。若是素数返回1,否则返回0 ● void process():求指定data数组中的所有素数,把它们依次存放在数组prime中,并将 求出的素数个数赋给num ● void print():输出求出的素数个数及所有素数,每行输出4个素数 (3) 在主函数中完成对该类的测试。定义NUM类的对象test,通过test调用成员函数完成求素数 及输出素数的工作。原始数据为{4,5,9,11,36,29,31,101,56,199} 二.系统设计 (1) 系统功能分析 本系统主要实现求指定数据范围内素数的个数,并将这些素数输出。 (2) 类的定义与描述 (3) 编写源程序如下:#include } 是:\ }; cout<<\素数为:\ for (int i=0;i 三.系统测试 测试数据:4,5,9,11,36,29,31,101,56,199 预期输出结果:素数的个数是:6 素数为: 5 11 29 31 101 199 四.实验小结 本题相对来说很简单,主要就是素数的判断,而素数的判断经过多次的练习已经熟练 掌握。 五.参考文献: [1] 潘克勤,华伟 《Visual C++程序设计》 北京:中国铁道出版社,2008 [2] 张晓如,王芳 《Visual C++程序设计解析与实训》 北京:中国铁道出版社,2008 实践六 一.实践任务 6.提高题 第6题: 设计一个大学师生类,包括学生类(Student),教师类(Professor),职员类(Staff),教师类是职员类的派生类。另有一类既作为学生又兼做助教的,可作为学生类和职员类的派生类(StudentStaff)。另外定义一个所有类的父类(DataRec)。 具体要求如下: (1) DataRec类中数据成员又姓名,家庭住址,定义为指针变量。成员函数有构造函数,析构函 数,输出函数,strsave函数。输出函数定义为虚函数。Strsave函数用来动态申请内存空间,拷贝参数中的字符串,返回内存空间的首地址。因为所有的派生类都要用到,设置为保护权限 (2) Student类数据成员有专业、学号,专业定义为指针变量。Staff类数据成员有部门、计时薪酬, 部门定义为指针变量。Professor类数据成员有工资,这三个类都有输出函数,用来输出自己的数据成员 (3) StudentStaff类多重继承学生类和职员类。成员函数有输出函数 (4) DataRec类可以定义为虚基类 (5) 每个类中数据成员定义为私有的 (6) 编写main函数,测试上述所要求的各种功能。 二.系统设计 1.概要设计 (1)系统功能分析 本系统的功能是存储大学师生的基本信息,如:姓名,家庭住址,专业,部门等。 (2)类的层次图: DataRec Student Staff StudentStaff Professor 2.详细设计 (1)类的描述与定义 ? 基类DataRec有2个保护成员,定义如下: class DataRec{ //基类 protected: char *name; //姓名 char *address; } //地址 ? 学生类有2个私有成员,定义如下: class Student:DataRec{ //学生类 private: char* major; //专业 int number;} //学号 ? 员工类有2个保护成员,定义如下: class Staff:DataRec { //员工类 protected: char* department; //.部门 double t_salary;} //计时工资 ? Professor类有一个私有成员,定义如下: class Professor:Staff { //professor 类 private: double salary;} //工资 (4) 主要成员函数设计 ? 基类的构造函数定义如下: DataRec(char *nam,char *addr) { name=strsave(nam); address=strsave(addr);} ? 基类的析构函数定义如下: ~DataRec(){ delete [ ]name; delete [ ]address;} ? 基类中strsave函数定义如下: ? ? ? ? ? ? ? ? ? ? ? char* strsave(char *s){ char* r=new char[strlen(s)+1]; strcpy(r,s); return r;} 基类中输出函数的功能没有必要先定义,将其说明为纯虚函数,其具体实现在派生类中定义: virtual void Output()=0; Student类的构造函数定义如下: Student(char *nam,char *addr,char* majo,int num):DataRec(nam,addr) { major=strsave(majo); number=num;} Student类的析构函数定义如下: ~Student() { delete []major;} Student 类的输出函数定义如下: void Output() { cout< cout< cout<<\Staff类的构造函数定义如下: Staff(char *nam,char *addr,char* depar,double t_sala):DataRec(nam,addr){ department=strsave(depar); t_salary=t_sala;} Staff类的析构函数定义如下: ~Staff(){ delete [] department;} Staff类的输出函数定义如下: void Output(){ cout< { salary=salar;} Professor类的输出函数定义如下: void Output(){ Staff::Output(); cout<<\StudentStaff类构造函数定义如下: StudentStaff(char *nam,char *addr,char* majo,int num,int salar,char* depar,double t_sala):Student(nam,addr, majo, num),Staff(nam,addr, depar, t_sala) {}; StudentStaff 类的输出函数定义如下: void Output(){ Student::Output();