返回:贺老师课程教学链接

【项目5 - 数组作数据成员】阅读教材P255例8.4。注意到类中的数据成员能够是数组。设计一个工资类(Salary),当中类的数据成员例如以下:

  1. class Salary
  2. {
  3. private:
  4. double salarys[50]; //多人的工资
  5. int number; //实际人数
  6. };

要设计的成员函数有:

  • 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元工资,排序后工资数据。然后输出结果。

  1. #include <iostream>
  2. using namespace std;
  3. class Salary
  4. {
  5. public:
  6. void set_salarys( ); //输入工资
  7. void add_salarys(int x); //涨工资
  8. void sort_salarys(); //排序工资
  9. void show_salarys( ); //显示工资
  10. private:
  11. double salarys[50]; //工资
  12. int number; //实际人数
  13. };
  14.  
  15. void Salary::set_salarys( )
  16. {
  17. int x,i=0;
  18. cin>>x;
  19. while(x>0)
  20. {
  21. salarys[i]=x; //工资保存到数组数据成员中
  22. ++i;
  23. cin>>x;
  24. }
  25. number=i; //number是数据成员,记录下职工人数
  26. }
  27.  
  28. void Salary::add_salarys(int x)
  29. {
  30. int i;
  31. for (i=0;i<number;i++)
  32. salarys[i]+=x;
  33. }
  34.  
  35. void Salary::sort_salarys()
  36. {
  37. int i,j;
  38. double t;
  39. for (i=0;i<number-1;i++)
  40. for(j=0;j<number-i-1;j++)
  41. if (salarys[j]<salarys[j+1])
  42. {
  43. t=salarys[j];
  44. salarys[j]=salarys[j+1];
  45. salarys[j+1]=t;
  46. }
  47. }
  48.  
  49. void Salary::show_salarys( )
  50. {
  51. int i;
  52. for (i=0;i<number;i++)
  53. cout<<salarys[i]<<" ";
  54. }
  55.  
  56. int main( )
  57. {
  58. Salary s;
  59. s.set_salarys( );
  60. s.add_salarys(500);
  61. s.sort_salarys();
  62. s.show_salarys( );
  63. return 0;
  64. }

(2)用salary[50]有限制,实际人数少时,会浪费空间,人数多了。无法完毕任务。在main()中先输入职工人数。作为參数传递给输入职工工资的成员函数。然后利用动态分配内存的机制。开辟一个大小正好的连续空间。完毕上面的工作。

  1. #include <iostream>
  2. using namespace std;
  3. class Salary
  4. {
  5. public:
  6. void set_salarys( );
  7. void add_salarys(int x);
  8. void sort_salarys();
  9. void show_salarys( );
  10. private:
  11. double *salarys; //工资,定义为指针。将来指向一个动态数组
  12. int number; //实际人数
  13. };
  14.  
  15. void Salary::set_salarys( )
  16. {
  17. int x,i;
  18. cout<<"请输入职工人数: ";
  19. cin>>number;
  20. salarys=new double[number]; //分配大小正好合适的空间存放数据
  21. cout<<"请输入职工的工资: ";
  22. for(i=0;i<number;++i)
  23. {
  24. cin>>x;
  25. salarys[i]=x;
  26. }
  27. }
  28.  
  29. void Salary::add_salarys(int x)
  30. {
  31. int i;
  32. for (i=0;i<number;i++)
  33. salarys[i]+=x;
  34. }
  35.  
  36. void Salary::sort_salarys()
  37. {
  38. int i,j;
  39. double t;
  40. for (i=0;i<number-1;i++)
  41. for(j=0;j<number-i-1;j++)
  42. if (salarys[j]<salarys[j+1])
  43. {
  44. t=salarys[j];
  45. salarys[j]=salarys[j+1];
  46. salarys[j+1]=t;
  47. }
  48. }
  49.  
  50. void Salary::show_salarys( )
  51. {
  52. int i;
  53. for (i=0;i<number;i++)
  54. cout<<salarys[i]<<" ";
  55. }
  56.  
  57. int main( )
  58. {
  59. Salary s;
  60. s.set_salarys( );
  61. s.add_salarys(500);
  62. s.sort_salarys();
  63. s.show_salarys( );
  64. return 0;
  65. }

(3)手工输入工资?!

太让人不能忍受了。

现给出包括了不足500个职工工资的文件salary.txt(下载),从文件里读数据,完毕上面的工作。

(4)添加一个成员函数,将排序后结果保存到一个文件里。

  1. #include <iostream>
  2. #include <fstream>
  3. #include <cstdlib>
  4. using namespace std;
  5. const int N=500;
  6. class Salary
  7. {
  8. public:
  9. void read_data( );
  10. void write_data();
  11. void add_salarys(int x);
  12. void sort_salarys();
  13. void show_salarys( );
  14. private:
  15. double salarys[N]; //工资, 用指针更好
  16. int number; //人数
  17. };
  18.  
  19. void Salary::read_data( )
  20. {
  21. int i;
  22. ifstream infile("salary.txt",ios::in); //以输入的方式打开文件
  23. if(!infile) //測试是否成功打开
  24. {
  25. cerr<<"open error!"<<endl;
  26. exit(1);
  27. }
  28. i=0;
  29. while(infile>>salarys[i])
  30. i++;
  31. number=i;
  32. infile.close();
  33. }
  34.  
  35. void Salary::write_data( )
  36. {
  37. int i;
  38. ofstream outfile("salary_ordered.txt",ios::out); //以输入的方式打开文件
  39. if(!outfile) //測试是否成功打开
  40. {
  41. cerr<<"open error!"<<endl;
  42. exit(1);
  43. }
  44. for(i=0; i<number; ++i)
  45. {
  46. outfile<<salarys[i]<<endl;
  47. }
  48. outfile.close();
  49. }
  50.  
  51. void Salary::add_salarys(int x)
  52. {
  53. int i;
  54. for (i=0; i<number; i++)
  55. salarys[i]+=x;
  56. }
  57.  
  58. void Salary::sort_salarys()
  59. {
  60. int i,j;
  61. double t;
  62. for (i=0; i<number-1; i++)
  63. for(j=0; j<number-i-1; j++)
  64. if (salarys[j]<salarys[j+1])
  65. {
  66. t=salarys[j];
  67. salarys[j]=salarys[j+1];
  68. salarys[j+1]=t;
  69. }
  70. }
  71.  
  72. void Salary::show_salarys( )
  73. {
  74. int i;
  75. for (i=0; i<number; i++)
  76. cout<<salarys[i]<<"\t";
  77. }
  78.  
  79. int main( )
  80. {
  81. Salary s;
  82. s.read_data( );
  83. s.add_salarys(500);
  84. s.sort_salarys();
  85. s.write_data( );
  86. s.show_salarys( );
  87. return 0;
  88. }

(5)用多文件的方式组织最后的程序。

(參考解答略)

《C++语言基础》实践參考——数组作数据成员的更多相关文章

  1. 《C语言及程序设计》实践參考——分数的累加

    返回:贺老师课程教学链接  项目要求 [项目1:分数的累加]编程序.输出1/3-3/5+5/7-7/9-+19/21的结果提示:假设直接解决上面的问题有困难.能够设计一条"由易到难" ...

  2. [Coursera][计算导论与C语言基础][Week 10]对于“数组应用练习”课后习题的思考题的一些想法

    (首先,关于Honor Code,我咨询过了Help Center,分享课后练习的思考题的想法是可以的(注意不是代码),但要标明引用,引用格式来源于https://guides.lib.monash. ...

  3. C++实践參考——二进制文件浏览器

    [项目-二进制文件浏览器] (1)做一个相似BinaryViewer的查看二进制文件的程序.输入文件名称后,能够以16进制和ASCII对比的方式列出该文件的内容.能够參考下图: 提示:循环中,一次读入 ...

  4. C语言基础 (6) 类型转换,数组与随机数

    复习 1.隐式转换 Double a Int b = 1 A = b //编译器自动转换把b转换为double类型后 再给a赋值(隐式转换) 2.强制类型转换 (变量)类型名 Int a = 1 // ...

  5. go语言基础之二维数组

    1.二维数组 示例: package main //必须有个main包 import "fmt" func main() { //有多少个[]就是多少维 //有多少个[]就用多少个 ...

  6. 嵌入式-C语言基础:二维数组的地址写法

    二维数组a的有关指针: 表示形式                                含义                                                   ...

  7. 嵌入式-C语言基础:二维数组

    二维数组的每个元素都是一个一维数组,例如int arr[2][3]={{1,2,3},{4,5,6}}; 下面通过几个例子来对二维数组进行深入了解:二维数组可以看作是一个父数组,他的每个元素都是一个一 ...

  8. C++走向远洋——36(数组做数据成员,工资)

    */ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:salarly.cpp * 作者:常轩 * 微信公众号:Worl ...

  9. Java基础02 方法与数据成员

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 在Java基础01 从HelloWorld到面向对象,我们初步了解了对象(obje ...

随机推荐

  1. ORACLE存储过程笔记1

    ORACLE存储过程笔记1 一.基本语法(以及与informix的比较)   create [or replace] procedure procedure_name (varible {IN|OUT ...

  2. JAVAC 命令使用方法

    结构 javac [ options ] [ sourcefiles ] [ @files ] 參数可按随意次序排列. options 命令行选项. sourcefiles 一个或多个要编译的源文件( ...

  3. HDU 4738 双连通模版题

    九野的博客,转载请注明出处:http://blog.csdn.net/acmmmm/article/details/11711577 题意:给定n个点,m条无向边 下面m行表示u , v ,边权值 求 ...

  4. iOS 用GDataXMLNode创建和解析XML

    原文地址:http://blog.csdn.net/gf771115/article/details/7718403 NSError *error; //    NSString *path = [[ ...

  5. java--多线程之Thread继承

    多线程,是java的特殊机制.所谓线程就是程序执行的流程.“多线程”就是可以在同一时刻能够执行多个程序块(注意,是程序块,而不是程序),这样一来就可以使得程序的执行速度大大增加. package Te ...

  6. 02-UIKit控件、MVC

    目录: 一.控件使用 二.动态类型和静态类型 三.MVC 四.UIAlertView对话框 回到顶部 一.控件使用 1 事件源,事件处理方法有一个参数传进来,那个参数就是触发这个事件的时间源. UIS ...

  7. 知识点1-4:ASP.NET MVC的好处

    ASP.NET MVC解决了ASP.NET Web Form的许多缺点.当在.NET平台上开发新的应用程序时,这使ASP.NET MVC成为一种更好的选择. 1. 对HTML的完全控制 2. 对URL ...

  8. QSettings保存程序设置

    今天看了一些QSettings的简单用法,可以用来保存程序的设置,使得程序每次启动都可以显示上次关闭时的状态.我这里实现了一个简单的文本编辑窗口,可以设置文本的字体,字体的颜色和背景色.每次关闭程序都 ...

  9. shell登录模式及其相应配置文件(转)

    参考<linux命令.编辑器与shell编程>(清华大学出版社) 当启动shell时,它将运行启动文件来初始化自己.具体运行哪个文件取决于该shell是登陆shell还是非登陆shell的 ...

  10. Java中抽象类和接口区别

    在Java语言中, abstract class 和interface 是支持抽象类定义的两种机制.正是由于这两种机制的存在,才赋予了Java强大的 面向对象能力.abstract class和int ...