《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 ...
随机推荐
- yii_wiki_204_using-cjuidialog-to-edit-rows-in-a-cgridview(通过CJuiDialog在CGridView中修改行数据)
/*** Using CJuiDialog to edit rows in a CGridView http://www.yiiframework.com/wiki/204/using-cjuidia ...
- php三元运算
$a = 2; $a == 1 ? $test="企业" : ($a==2 ? $test="地区" : $test="其他地方"); ec ...
- 基于visual Studio2013解决C语言竞赛题之0415特殊对数
题目 解决代码及点评 这道题也是锻炼for循环,在for循环中遍历所有可能的数,然后再判断该数是不是有这样的性质 /********************************* ...
- HDU2191:悼念512汶川大地震遇难同胞——珍惜现在,感恩生活(多重背包)
Problem Description 急!灾区的食物依然短缺! 为了挽救灾区同胞的生命,心系灾区同胞的你准备自己采购一些粮食支援灾区,现在假设你一共有资金n元,而市场有m种大米,每种大米都是袋装产品 ...
- eclipse处理长字符串拼接快捷方法类
情景: 你在后台写sql文访问数据库时是不是要这样写 String sql="select a," +"b," +"c " +"f ...
- Fragment使用
当我们需要动态的多界面切换的时候,就需要将UI元素和Activity融合成一个模块.在2.3中我们一般通过各种Activity中进行跳转来实现多界面的跳转和单个界面动态改变.在4.0或以上系统中就可以 ...
- 交换机Trunk端口配置
本文为转发,简单明了,我喜欢. Trunk端口的配置步骤如下: 一 组网需求: 1.SwitchA与SwitchB用trunk互连,相同VLAN的PC之间可以互访,不同VLAN的PC之间禁止互访: 2 ...
- 手机访问php环境移动端静态页面
痛点 在做一个移动端H5页面,手机要调试访问,不方便.就想说能不能手机连接电脑的php项目,进行调试修改. 需要 手机要跟电脑同处在同个局域网中,公司的话一般是局域网,实在没有的话花个20块买个随身W ...
- Web网页中内嵌Activex的Activex插件开发 .
转载自: http://blog.csdn.net/tttyd/article/details/5258096 源代码下载 http://files.cnblogs.com/tttyd/Activex ...
- Swift - .plist文件数据的读取和存储
每次在Xcode中新建一个iOS项目后,都会自己产生一个.plist文件,里面记录项目的一些配置信息.我们也可以自己创建.plist文件来进行数据的存储和读取. .plist文件其实就是一个XML格式 ...