C++第15周(春)项目1 - 工资数据的输入

来源:互联网 发布:华为网络机顶盒价格 编辑:程序博客网 时间:2024/05/29 08:21

课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接


【项目1-工资数据的输入】(本程序中需要的相关文件,请到http://pan.baidu.com/s/1qW59HTi下载。)

  (1)输入若干职工的工资(1000-10000的数字),将这些数字按降序排序后输出。

输入样例:
3736.98 9169.35 5595.57 1006 6631.19 5917.13 6076.89 9692.97 9771.73^Z
输出样例:
9771.73 9692.97 9169.35 6631.19 6076.89 5917.13 5595.57 3736.98 1006
提示:用键盘输入时,需要用^Z作为结束。

参考解答:

#include <iostream>using namespace std;int main( ){    double salarys[500];    int n=0;    while(cin>>salarys[n])    {        n++;   //从cin流读取数据    }    //将n名职工的工资排序后输出    int i,j;    double t;    for(j=0; j<n-1; j++)        for(i=0; i<n-j-1; i++)            if (salarys[i]<salarys[i+1])            {                t=salarys[i];                salarys[i]=salarys[i+1];                salarys[i+1]=t;            }    for(j=0; j<n; j++)        cout<<salarys[j]<<endl;    return 0;}

  (2)在软件开发过程中,为了调试程序,常常需要多次运行程序。多次运行的输入常相同,不免感到麻烦,尤其当数据量还偏多之时。人在做着毫无技术含量的事情!
  可以用的简便方法是,用输入重定向避免这种重复:请自建一个文件a.txt,包含上面输入样例中的数据,在(1)的程序中,while之前加句freopen("a.txt","r",stdin);,return 0;之前加一句fclose(stdin);,然后运行程序……。要习惯用这种方式。
  提示1:OJ快手们常用的做法是,开考之前,做一个程序模板如下,这样可以提高效率。这个技巧可以用于考试,只要将输入样例中的输入放入文件即可不过提交时务必注意将freopen一行加上注释。

参考解答:

#include <iostream>#include <cstdio>using namespace std;int main( ){    double salarys[500];    int n=0;    freopen("a.txt","r",stdin);    while(cin>>salarys[n])    {        n++;   //从cin流读取数据    }    //将n名职工的工资排序后输出    int i,j;    double t;    for(j=0; j<n-1; j++)        for(i=0; i<n-j-1; i++)            if (salarys[i]<salarys[i+1])            {                t=salarys[i];                salarys[i]=salarys[i+1];                salarys[i+1]=t;            }    for(j=0; j<n; j++)        cout<<salarys[j]<<endl;    fclose(stdin)    return 0;}

  (3)在实际的应用中,数据并不是从键盘输入。输入重定向的方式也并非“正当”的渠道。工程中的做法是将数据放入专门的文件等待处理。

  下载文件salary.txt,其中有不超过500名职工的工资。编程序读入这些职工的工资,将按降序排序后显示并保存到文件ordered_salary.txt中。

参考解答:

#include <iostream>#include <fstream>#include <cstdlib>using namespace std;int main( ){    double salarys[500];    ifstream infile("salary.txt",ios::in);  //以输入的方式打开文件    if(!infile)       //测试是否成功打开    {        cerr<<"open error!"<<endl;        exit(1);    }    int n=0;    while(infile>>salarys[n])    {        n++;   //从cin流读取数据    }    //将n名职工的工资排序后输出    int i,j;    double t;    for(j=0; j<n-1; j++)        for(i=0; i<n-j-1; i++)            if (salarys[i]<salarys[i+1])            {                t=salarys[i];                salarys[i]=salarys[i+1];                salarys[i+1]=t;            }    //输出结果    ofstream outfile("ordered_salary.txt",ios::out);    if(!outfile)    //测试文件打开操作是否成功,不成功则提示后退出。    {        cerr<<"open error!"<<endl;        exit(1);    }    for(i=0; i<n; i++)    {        outfile<<salarys[i]<<endl;        if(i%5==0) cout<<endl;        cout<<salarys[i]<<"\t";    }    outfile.close();     //关闭文件。用完了必须关闭,否则会丢失数据    return 0;}



================= 迂者 贺利坚 CSDN博客专栏=================|== IT学子成长指导专栏 专栏文章的分类目录(不定期更新) ==||== C++ 课堂在线专栏  贺利坚课程教学链接(分课程年级) ==||== 我写的书——《逆袭大学——传给IT学子的正能量》    ==|===== 为IT菜鸟起飞铺跑道,和学生一起享受快乐和激情的大学 =====




0 0
原创粉丝点击