《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 ...
随机推荐
- springmvc中使用response的out.print问题
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws E ...
- docker学习笔记:容器的网络设置
创建一个docker容器,docker系统会自动为该容器分配一个ip地址,通常是172.17开头. 我们可以在主机上用 docker inspect 命令 或者进入容器用ifconfig命令来查看容器 ...
- ubuntu学习: apt-get命令
1.apt-get update 更新软件源本地缓存文件 2.apt-cache search 查找软件包,找到想要安装的包,如 sudo apt-cache search mysql-server ...
- 基于visual Studio2013解决算法导论之018栈实现(基于链表)
题目 用链表实现栈 解决代码及点评 #include <stdio.h> #include <stdlib.h> #include <time.h> #in ...
- Install TightVNC Server in RHEL/CentOS and Fedora to Access Remote Desktops
Virtual Networking Computing (VNC) is a Kind of remote sharing system that makes it possible to take ...
- muduo 与 libevent2 吞吐量对照
libevent 是一款很好用的 C 语言网络库,它也採用 Reactor 模型,正好能够与 muduo 做一对照. 本文用 ping pong 測试来对照 muduo 和 libevent2 的吞吐 ...
- Adobe Acrobat Ⅺ Pro安装激活
1.注意一定要断网安装,如果你有防火墙拦截亦可(注意:系统自带那防火墙不行). 2.将AcrobatPro_11_Web_WWMUI.exe解压到一个目录下,找到目录下的setup.exe安装,安装时 ...
- 小记:css特殊性
今天早上遇到了个小bug,刚好用从css权威指南学到的知识解决了 html结构 <ul class="portlet-nav"> <li><a id= ...
- @(报错)could not find the main class, Program will exit(已解决)
原文 @(报错)could not find the main class, Program will exit(已解决) (很抱歉,如果你希望能更加清楚地看清图片或是图上的文字的话,你可以 ...
- HDU 4712Hamming Distance(随机函数运用)
Hamming Distance Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others) ...