《C++语言基础》实践參考——数组作数据成员
返回:贺老师课程教学链接
【项目5 - 数组作数据成员】阅读教材P255例8.4。注意到类中的数据成员能够是数组。设计一个工资类(Salary),当中类的数据成员例如以下:
- class Salary
- {
- private:
- double salarys[50]; //多人的工资
- int number; //实际人数
- };
要设计的成员函数有:
- void set_salarys( ):输入职工工资(输入-1标志着工资输入结束)。工资保存到salary数组中,实际人数保存到number中。
- void add_salarys(int x):给每一个人涨x元工资
- void sort_salarys():对工资排序
- void show_salarys( ):显示工资信息
(1)在main函数定义Salary类的对象,输入工资。再给每一个人涨500元工资,排序后工资数据,然后输出结果。
(2)用salary[50]有限制。实际人数少时,会浪费空间,人数多了。无法完毕任务。在main()中先输入职工人数,作为參数传递给输入职工工资的成员函数,然后利用动态分配内存的机制。开辟一个大小正好的连续空间,完毕上面的工作。
(3)手工输入工资?!太让人不能忍受了。现给出包括了不足500个职工工资的文件salary.txt(下载),从文件里读数据,完毕上面的工作。
(4)添加一个成员函数。将排序后结果保存到一个文件里。
(5)用多文件的方式组织最后的程序。
[參考解答]
(1)在main函数定义Salary类的对象。输入工资,再给每一个人涨500元工资,排序后工资数据。然后输出结果。
- #include <iostream>
- using namespace std;
- class Salary
- {
- public:
- void set_salarys( ); //输入工资
- void add_salarys(int x); //涨工资
- void sort_salarys(); //排序工资
- void show_salarys( ); //显示工资
- private:
- double salarys[50]; //工资
- int number; //实际人数
- };
- void Salary::set_salarys( )
- {
- int x,i=0;
- cin>>x;
- while(x>0)
- {
- salarys[i]=x; //工资保存到数组数据成员中
- ++i;
- cin>>x;
- }
- number=i; //number是数据成员,记录下职工人数
- }
- void Salary::add_salarys(int x)
- {
- int i;
- for (i=0;i<number;i++)
- salarys[i]+=x;
- }
- void Salary::sort_salarys()
- {
- int i,j;
- double t;
- for (i=0;i<number-1;i++)
- for(j=0;j<number-i-1;j++)
- if (salarys[j]<salarys[j+1])
- {
- t=salarys[j];
- salarys[j]=salarys[j+1];
- salarys[j+1]=t;
- }
- }
- void Salary::show_salarys( )
- {
- int i;
- for (i=0;i<number;i++)
- cout<<salarys[i]<<" ";
- }
- int main( )
- {
- Salary s;
- s.set_salarys( );
- s.add_salarys(500);
- s.sort_salarys();
- s.show_salarys( );
- return 0;
- }
(2)用salary[50]有限制,实际人数少时,会浪费空间,人数多了。无法完毕任务。在main()中先输入职工人数。作为參数传递给输入职工工资的成员函数。然后利用动态分配内存的机制。开辟一个大小正好的连续空间。完毕上面的工作。
- #include <iostream>
- using namespace std;
- class Salary
- {
- public:
- void set_salarys( );
- void add_salarys(int x);
- void sort_salarys();
- void show_salarys( );
- private:
- double *salarys; //工资,定义为指针。将来指向一个动态数组
- int number; //实际人数
- };
- void Salary::set_salarys( )
- {
- int x,i;
- cout<<"请输入职工人数: ";
- cin>>number;
- salarys=new double[number]; //分配大小正好合适的空间存放数据
- cout<<"请输入职工的工资: ";
- for(i=0;i<number;++i)
- {
- cin>>x;
- salarys[i]=x;
- }
- }
- void Salary::add_salarys(int x)
- {
- int i;
- for (i=0;i<number;i++)
- salarys[i]+=x;
- }
- void Salary::sort_salarys()
- {
- int i,j;
- double t;
- for (i=0;i<number-1;i++)
- for(j=0;j<number-i-1;j++)
- if (salarys[j]<salarys[j+1])
- {
- t=salarys[j];
- salarys[j]=salarys[j+1];
- salarys[j+1]=t;
- }
- }
- void Salary::show_salarys( )
- {
- int i;
- for (i=0;i<number;i++)
- cout<<salarys[i]<<" ";
- }
- int main( )
- {
- Salary s;
- s.set_salarys( );
- s.add_salarys(500);
- s.sort_salarys();
- s.show_salarys( );
- return 0;
- }
(3)手工输入工资?!
太让人不能忍受了。
现给出包括了不足500个职工工资的文件salary.txt(下载),从文件里读数据,完毕上面的工作。
(4)添加一个成员函数,将排序后结果保存到一个文件里。
- #include <iostream>
- #include <fstream>
- #include <cstdlib>
- using namespace std;
- const int N=500;
- class Salary
- {
- public:
- void read_data( );
- void write_data();
- void add_salarys(int x);
- void sort_salarys();
- void show_salarys( );
- private:
- double salarys[N]; //工资, 用指针更好
- int number; //人数
- };
- void Salary::read_data( )
- {
- int i;
- ifstream infile("salary.txt",ios::in); //以输入的方式打开文件
- if(!infile) //測试是否成功打开
- {
- cerr<<"open error!"<<endl;
- exit(1);
- }
- i=0;
- while(infile>>salarys[i])
- i++;
- number=i;
- infile.close();
- }
- void Salary::write_data( )
- {
- int i;
- ofstream outfile("salary_ordered.txt",ios::out); //以输入的方式打开文件
- if(!outfile) //測试是否成功打开
- {
- cerr<<"open error!"<<endl;
- exit(1);
- }
- for(i=0; i<number; ++i)
- {
- outfile<<salarys[i]<<endl;
- }
- outfile.close();
- }
- void Salary::add_salarys(int x)
- {
- int i;
- for (i=0; i<number; i++)
- salarys[i]+=x;
- }
- void Salary::sort_salarys()
- {
- int i,j;
- double t;
- for (i=0; i<number-1; i++)
- for(j=0; j<number-i-1; j++)
- if (salarys[j]<salarys[j+1])
- {
- t=salarys[j];
- salarys[j]=salarys[j+1];
- salarys[j+1]=t;
- }
- }
- void Salary::show_salarys( )
- {
- int i;
- for (i=0; i<number; i++)
- cout<<salarys[i]<<"\t";
- }
- int main( )
- {
- Salary s;
- s.read_data( );
- s.add_salarys(500);
- s.sort_salarys();
- s.write_data( );
- s.show_salarys( );
- return 0;
- }
(5)用多文件的方式组织最后的程序。
(參考解答略)
《C++语言基础》实践參考——数组作数据成员的更多相关文章
- 《C语言及程序设计》实践參考——分数的累加
返回:贺老师课程教学链接 项目要求 [项目1:分数的累加]编程序.输出1/3-3/5+5/7-7/9-+19/21的结果提示:假设直接解决上面的问题有困难.能够设计一条"由易到难" ...
- [Coursera][计算导论与C语言基础][Week 10]对于“数组应用练习”课后习题的思考题的一些想法
(首先,关于Honor Code,我咨询过了Help Center,分享课后练习的思考题的想法是可以的(注意不是代码),但要标明引用,引用格式来源于https://guides.lib.monash. ...
- C++实践參考——二进制文件浏览器
[项目-二进制文件浏览器] (1)做一个相似BinaryViewer的查看二进制文件的程序.输入文件名称后,能够以16进制和ASCII对比的方式列出该文件的内容.能够參考下图: 提示:循环中,一次读入 ...
- C语言基础 (6) 类型转换,数组与随机数
复习 1.隐式转换 Double a Int b = 1 A = b //编译器自动转换把b转换为double类型后 再给a赋值(隐式转换) 2.强制类型转换 (变量)类型名 Int a = 1 // ...
- go语言基础之二维数组
1.二维数组 示例: package main //必须有个main包 import "fmt" func main() { //有多少个[]就是多少维 //有多少个[]就用多少个 ...
- 嵌入式-C语言基础:二维数组的地址写法
二维数组a的有关指针: 表示形式 含义 ...
- 嵌入式-C语言基础:二维数组
二维数组的每个元素都是一个一维数组,例如int arr[2][3]={{1,2,3},{4,5,6}}; 下面通过几个例子来对二维数组进行深入了解:二维数组可以看作是一个父数组,他的每个元素都是一个一 ...
- C++走向远洋——36(数组做数据成员,工资)
*/ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:salarly.cpp * 作者:常轩 * 微信公众号:Worl ...
- Java基础02 方法与数据成员
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 在Java基础01 从HelloWorld到面向对象,我们初步了解了对象(obje ...
随机推荐
- ORACLE存储过程笔记1
ORACLE存储过程笔记1 一.基本语法(以及与informix的比较) create [or replace] procedure procedure_name (varible {IN|OUT ...
- JAVAC 命令使用方法
结构 javac [ options ] [ sourcefiles ] [ @files ] 參数可按随意次序排列. options 命令行选项. sourcefiles 一个或多个要编译的源文件( ...
- HDU 4738 双连通模版题
九野的博客,转载请注明出处:http://blog.csdn.net/acmmmm/article/details/11711577 题意:给定n个点,m条无向边 下面m行表示u , v ,边权值 求 ...
- iOS 用GDataXMLNode创建和解析XML
原文地址:http://blog.csdn.net/gf771115/article/details/7718403 NSError *error; // NSString *path = [[ ...
- java--多线程之Thread继承
多线程,是java的特殊机制.所谓线程就是程序执行的流程.“多线程”就是可以在同一时刻能够执行多个程序块(注意,是程序块,而不是程序),这样一来就可以使得程序的执行速度大大增加. package Te ...
- 02-UIKit控件、MVC
目录: 一.控件使用 二.动态类型和静态类型 三.MVC 四.UIAlertView对话框 回到顶部 一.控件使用 1 事件源,事件处理方法有一个参数传进来,那个参数就是触发这个事件的时间源. UIS ...
- 知识点1-4:ASP.NET MVC的好处
ASP.NET MVC解决了ASP.NET Web Form的许多缺点.当在.NET平台上开发新的应用程序时,这使ASP.NET MVC成为一种更好的选择. 1. 对HTML的完全控制 2. 对URL ...
- QSettings保存程序设置
今天看了一些QSettings的简单用法,可以用来保存程序的设置,使得程序每次启动都可以显示上次关闭时的状态.我这里实现了一个简单的文本编辑窗口,可以设置文本的字体,字体的颜色和背景色.每次关闭程序都 ...
- shell登录模式及其相应配置文件(转)
参考<linux命令.编辑器与shell编程>(清华大学出版社) 当启动shell时,它将运行启动文件来初始化自己.具体运行哪个文件取决于该shell是登陆shell还是非登陆shell的 ...
- Java中抽象类和接口区别
在Java语言中, abstract class 和interface 是支持抽象类定义的两种机制.正是由于这两种机制的存在,才赋予了Java强大的 面向对象能力.abstract class和int ...