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

课程首页在: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菜鸟起飞铺跑道,和学生一起享受快乐和激情的大学 =====




你可能感兴趣的:(C++第15周(春)项目1 - 工资数据的输入)