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