c++分行读取并利用数字类型文件数据
2017-07-02 12:27
411 查看
c++课程设计程序
c++ 课程设计任务书:
面向对象技术与C++课程设计任务书
假设事先已经建立了text型的数据文件f1.txt,其中依次记录着n个选手的编号(一个正整数)、姓名(一个字符串)以及m个评委给出的得分。
请编制程序,依次从数据文件f1.txt中读入n个选手的有关信息,而后按上述规定方法计算出每一个选手的最后得分,而且往屏幕上以及另一个text型文件f2.txt中同时输出如下形式的结果信息。
假设参赛选手人数n=5,评委人数m=7,磁盘文件f1.txt中的初始数据为:
1 zhangjin 8.8 9.3 7.9 8.7 8.9 9.7 9.2
2 lintao 8.9 8.2 8.6 8.8 8.5 9.1 9.3
3 guojian 8.9 8.4 8.7 8.6 8.6 8.4 8.6
4 maling 7.9 8.3 8.5 8.6 8.5 8.9 8.3
5 liuyifan 9.5 9.1 9.8 9.2 9.0 9.5 8.9
那么,程序执行后,屏幕显示结果以及磁盘文件f2.txt中的结果均应该为:
-----------------------------------------------------------------------
参赛号 姓 名 最高分 最低分 累积分 最后得分
-----------------------------------------------------------------------
1 zhangjin 9.7 7.9 44.9 8.98
2 lintao 9.3 8.2 43.9 8.78
3 guojian 8.9 8.4 42.9 8.58
4 maling 8.9 7.9 42.2 8.44
5 liuyifan 9.8 8.9 46.3 9.26
----------------------------------------------------------------
思考:可进一步考虑找出比赛的第1至第k名,也在屏幕以及f2.txt中同时输出相关的结果信息(k小于等于n,并规定若多个选手最后得分相同时,则有效分(即已删除原来的最高分后)中最高分高者名次优先)。
并且在完成设计之后,又新添从键盘读取数据并且存入f1文件后再次利用文件计算新增后的选手成绩。
下边我将自己的代码放在这里供大家参考,如有错误或者不当之处希望大家联系我进行改正:
#include <iostream>
#include <fstream>
#include <string>
#include<sstream>
#include"ks.h"
using namespace std;
int main()
{
score play(10);//给score类定义一个对象
double read[10];//定义一个double型数组用于读取文件中的选手成绩
double a[10];//定义一个double型数组用于存储文件中的选手成绩
double num;//定义一个double类型存储选手的编号
string str;//定义一个string字符串存储文件中选手的名字
double pp[10];
double temp1;
double qq[10];
int q=1;
int w;
char s[10];
double ss[10];
int u;
int g;
int k = 0;//f定义一个k用于计算裁判的个数
char store[1000];//定义一个store字符串用于存放从文件中读取的所有内容
cout<<"--------------------------------------------------------------"<<endl;
cout<<" "<<endl;
cout<<"1.读取并输出当前文件成绩 "<<endl;
cout<<"2.再次添加运动员及其成绩 "<<endl;
cout<<" "<<endl;
cout<<"--------------------------------------------------------------"<<endl;
cin>>w;
if(w==1)
{
cout<<"请输入读取选手成绩个数"<<endl;
cin>>g;
cout<<"编号"<<" "<<"姓名"<<" "<<"最高分"<<" "<<"最低分"<<" "<<"总分"<<" "<<"平均分"<<endl;
ifstream in("f1.txt");//以读取的形式打开文件f1
ofstream out("f2.txt");//以写入的形式打开文件f2
out<<"编号"<<" "<<"姓名"<<" "<<"最高分"<<" "<<"最低分"<<" "<<"总分"<<" "<<"平均分"<<endl;//向文件中输出这句话
int line;
for (line = 1; line<g+1; line++)//用于将文件分行读取
{
in.seekg(0,ios::beg);
for (int i = 0; i<line;i++)
{
in.getline(store, sizeof(store));//读取文件中的第line行
}
std::istringstream iss(store);//给读取的分配内存空间
iss >> num;//将文件中的数据编号进行类型转换并存入到int型的num中
iss >> str;//将文件中的数据姓名存入字符串str中
cout << num << " ";
cout << str << " ";
i=0;//由于上边运用了i并且i已经有了一个值这里需要将i重新变回0
k=0;
while (iss >> read[i])//对文件中的选手成绩进行读取并且存入read数组中
{
a[i] = read[i];//为方便对数据进行计算将所读取的数组重新复制给a数组
//cout << a[i] << " ";
i++;
k++;//每次读取数据k都将会加1从而记录成绩个数从而得到裁判的数
}
cout << " ";
double max=play.max(a,k);//用对象去调用类中的函数max从而得到数组的最大值并将它赋值给double型数据max
double min=play.min(a, k);//用对象去调用类中的函数min从而得到数组的最小值并将它赋值给double型数据min
double aver=play.aver(a,k);//用对象去调用类中的函数aver从而得到数组的平均数并将它赋值给aver
double sum=play.sum(a,k);//用对象去调用类中的函数sum从而的得函数的返回值然后赋值给sum
cout<<max<<" "<<min<<" "<<sum<<" "<<aver<<endl;
out << num << " ";//向文件中输入选手编号
out << str << " ";//向文件中输入选手姓名
out<<max<<" "<<min<<" "<<sum<<" "<<aver<<endl;//向文件中输入选手得分最大值最小值总和以及平均值
pp[line]=play.sum(a,k);//用一个double数组记录所有人的成绩
qq[line]=play.aver(a,k);//用一个数组记录所有人的平均成绩
}
for (int m = 0; m<g; m++)//成绩对数组进行排序
{
for (int n = 0; n<g-m-1; n++)
{
if (pp
>pp[n+ 1])
{
temp1 = pp
;
pp
= pp[n + 1];
pp[n + 1] = temp1;
}
}
}
for(int c=1;c<g+1;c++)//如果两人总成绩相同比较两人平均分进行判断
{
for(int d=c+1;d<g+1;d++)
if(pp[c]==pp[d])
{
cout<<"第"<<c<<"名和第"<<d<<"名总成绩相同比较平均分"<<endl;
if(qq[c]>qq[d])
cout<<"获得"<<pp[c]<<"分数的名次高于获得"<<pp[d]<<"分数的"<<endl;
else
cout<<"获得"<<pp[c]<<"分数的名次高于获得"<<pp[d]<<"分数的"<<endl;
}
}
for( q=1;q<g+1;q++)//用循环输出所有人总成绩以及名次
{
cout<<"第"<<q<<"名的成绩为"<<pp[q]<<endl;
out<<"第"<<q<<"名的成绩为"<<pp[q]<<endl;
}
in.close();//关闭读取的文件f1
out.close();//关闭读取的文件f2
}
if(w==2)
{
cout<<"请输入新增加的选手姓名"<<endl;
cin>>s;
cout<<"请依次输入选手的成绩"<<endl;
for(u=0;u<7;u++)
{
cin>>ss[u];
}
ifstream in;
ofstream out;
out.open("f1.txt",ios::app);
out<<"6"<<" ";
out<<s<<" ";
for(u=0;u<7;u++)
{
out<<ss[u]<<" ";
}
cout<<"是否计算当前所有运动员成绩";
cout<<"是请按3"<<endl;
cout<<"否则请退出"<<endl;
cin>>w;
if(w==3)
{
cout<<"请输入读取选手成绩个数"<<endl;
cin>>g;
cout<<"编号"<<" "<<"姓名"<<" "<<"最高分"<<" "<<"最低分"<<" "<<"总分"<<" "<<"平均分"<<endl;
in.open("f1.txt");//以读取的形式打开文件f1
out.open("f2.txt");//以写入的形式打开文件f2
out<<"编号"<<" "<<"姓名"<<" "<<"最高分"<<" "<<"最低分"<<" "<<"总分"<<" "<<"平均分"<<endl;//向文件中输出这句话
int line;
for (line = 1; line<g+1; line++)//用于将文件分行读取
{
in.seekg(0,ios::beg);
for (int i = 0; i<line;i++)
{
in.getline(store, sizeof(store));//读取文件中的第line行
}
std::istringstream iss(store);//给读取的分配内存空间
iss >> num;//将文件中的数据编号进行类型转换并存入到int型的num中
iss >> str;//将文件中的数据姓名存入字符串str中
cout << num << " ";
cout << str << " ";
i=0;//由于上边运用了i并且i已经有了一个值这里需要将i重新变回0
k=0;
while (iss >> read[i])//对文件中的选手成绩进行读取并且存入read数组中
{
a[i] = read[i];//为方便对数据进行计算将所读取的数组重新复制给a数组
//cout << a[i] << " ";
i++;
k++;//每次读取数据k都将会加1从而记录成绩个数从而得到裁判的数
}
cout << " ";
double max=play.max(a,k);//用对象去调用类中的函数max从而得到数组的最大值并将它赋值给double型数据max
double min=play.min(a, k);//用对象去调用类中的函数min从而得到数组的最小值并将它赋值给double型数据min
double aver=play.aver(a,k);//用对象去调用类中的函数aver从而得到数组的平均数并将它赋值给aver
double sum=play.sum(a,k);//用对象去调用类中的函数sum从而的得函数的返回值然后赋值给sum
cout<<max<<" "<<min<<" "<<sum<<" "<<aver<<endl;
out << num << " ";//向文件中输入选手编号
out << str << " ";//向文件中输入选手姓名
out<<max<<" "<<min<<" "<<sum<<" "<<aver<<endl;//向文件中输入选手得分最大值最小值总和以及平均值
pp[line]=play.sum(a,k);//用一个double数组记录所有人的成绩
qq[line]=play.aver(a,k);//用一个数组记录所有人的平均成绩
}
for (int m = 0; m<g; m++)//成绩对数组进行排序
{
for (int n = 0; n<g-m-1; n++)
{
if (pp
>pp[n+ 1])
{
temp1 = pp
;
pp
= pp[n + 1];
pp[n + 1] = temp1;
}
}
}
for(int c=1;c<g+1;c++)//如果两人总成绩相同比较两人平均分进行判断
{
for(int d=c+1;d<g+1;d++)
if(pp[c]==pp[d])
{
cout<<"第"<<c<<"名和第"<<d<<"名总成绩相同比较平均分"<<endl;
if(qq[c]>qq[d])
cout<<"获得"<<pp[c]<<"分数的名次高于获得"<<pp[d]<<"分数的"<<endl;
else
cout<<"获得"<<pp[c]<<"分数的名次高于获得"<<pp[d]<<"分数的"<<endl;
}
}
for( q=1;q<g+1;q++)//用循环输出所有人总成绩以及名次
{
cout<<"第"<<q<<"名的成绩为"<<pp[q]<<endl;
out<<"第"<<q<<"名的成绩为"<<pp[q]<<endl;
}
in.close();//关闭读取的文件f1
out.close();//关闭读取的文件f2
}
}
//ks.h
class score
{
private:
int p;
//double read[7];
//double a[7];
public:
score(int pp)//构造函数
{
p = pp;
}
double min(double a[], int k)//定义两个参数,求所读取数组的最小值,两个参数需要从主函数中获得
{
double temp;
for (int j = 0; j<k; j++)
{
for (int i = 0; i<k-j-1; i++)//对数组进行排序
{
if (a[i]>a[i + 1])
{
temp = a[i];
a[i] = a[i + 1];
a[i + 1] = temp;
}
}
}
return a[0];//该函数最终返回值为数组的最小值
}
double max(double a[],int k)//定义两个参数,求所读取数组的最大值,两个参数需要从主函数中获得
{
double temp;
for (int j = 0; j<k; j++)//对数组进行排序
{
for (int i = 0; i<k-j-1; i++)
{
if (a[i]>a[i + 1])
{
temp = a[i];
a[i] = a[i + 1];
a[i + 1] = temp;
}
}
}
return a[k-1];//该函数最终返回值为数组的最大值
}
double sum(double a[], int k)//定义两个参数,用于求该数组所有元素的和
{
int i;
double sum = 0;
if (k<9)//如果给的参数中k的值小于9则去掉一个最高一个最低
{
for (i = 1; i<k - 1; i++)
{
sum = sum + a[i];
}
}
else//如果给的参数中k的值大于9则去掉两个最高两个最低
{
for (i = 2; i<k - 2; i++)
{
sum = sum + a[i];
}
}
return sum;//该函数返回一个值为数组所有数字的和
}
double aver(double a[],int k)//定义两个参数,用于求该数组的平均值
{
double sum=0;
double aver=0;
if (k<9)//裁判数目小于9去掉一个最高一个最低
{
for (int i = 1; i<k - 1; i++)
{
sum = sum + a[i];
}
aver = sum / (k - 2);
}
else//裁判数目大于9去掉两个最高两个最低
{
for (int i = 2; i<k - 2; i++)
{
sum = sum + a[i];
}
aver = sum / (k - 4);
}
return aver;//该函数最终返回值为该数组的平均值
}
};
对于这个小程序我认为程序的难点在于将文件中的信息读取出来,并且在读取后进行类型转换将字符串中的数据,转换成可以进行计算排序的数字类型数据。
c++ 课程设计任务书:
面向对象技术与C++课程设计任务书
题目17 | 大赛评分系统 | 班级 | 16060101~03 | 指导教师 | 耿军雪 | ||
姓名 | 学号 | 地点 | G1-205 | 完成时间 | 2017/6/26 2017/6/30 | ||
目 的 与 要 求 | 1、目的: (1)要求学生达到熟练掌握C++语言的基本知识和技能; (2)基本掌握面向对象程序设计的基本思路和方法; (3)能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。 2、基本要求: (1)要求利用面向对象的方法以及C++的编程思想来完成系统的设计; (2)要求在设计的过程中,建立清晰的类层次;要分析和定义各个类,每个类中要有各自的属性和方法;要求运用面向对象的机制(继承、派生及多态性)来实现系统功能。 (3)在系统的设计中,要有清晰的界面设计,同时采用文件进行读写操作。 3、创新要求: 在基本要求达到后,可进行创新设计。 | ||||||
问 题 描 述 及 功 能 要 求 | 参赛选手n人(n>1),评委m人(m>2),评委给每一选手打一个分数score(分数scor为小于等于10的一个正实数)。选手的最后得分lastScore计算方法 为 (1)m<9时,去掉一个最高分和一个最低分后另m-2个得分的平均值。 (2)m≥9时,去掉两个最高分和两个最低分后另m-4个得分的平均值。 其他要求附后 | ||||||
问 题 的 解 决 方 案 | 根据系统功能要求,可以将问题解决分为以下步骤: (1)应用系统分析,建立该系统的功能模块框图以及界面的组织和设计; (2)分析系统中的各个实体及它们之间的关系包括属性和行为; (3)根据问题描述,设计系统的类层次; (4)完成类层次中各个类的描述(包括属性和方法); (5)完成类中各个成员函数的定义; (6)完成系统的应用模块; (7)功能调试; (8)完成系统课程设计报告,并提交课程设计报告及软件到gjxat2012@126.com | ||||||
设 计 报 告 要 求 | 1.封面:(格式附后) 2.课程设计任务书 3.课程设计报告: ⑴ 系统总体方案 ⑵ 设计思路和主要步骤 ⑶ 各功能模块和流程图 ⑷ 设计代码 ⑸ 心得体会和参考资料 |
请编制程序,依次从数据文件f1.txt中读入n个选手的有关信息,而后按上述规定方法计算出每一个选手的最后得分,而且往屏幕上以及另一个text型文件f2.txt中同时输出如下形式的结果信息。
假设参赛选手人数n=5,评委人数m=7,磁盘文件f1.txt中的初始数据为:
1 zhangjin 8.8 9.3 7.9 8.7 8.9 9.7 9.2
2 lintao 8.9 8.2 8.6 8.8 8.5 9.1 9.3
3 guojian 8.9 8.4 8.7 8.6 8.6 8.4 8.6
4 maling 7.9 8.3 8.5 8.6 8.5 8.9 8.3
5 liuyifan 9.5 9.1 9.8 9.2 9.0 9.5 8.9
那么,程序执行后,屏幕显示结果以及磁盘文件f2.txt中的结果均应该为:
-----------------------------------------------------------------------
参赛号 姓 名 最高分 最低分 累积分 最后得分
-----------------------------------------------------------------------
1 zhangjin 9.7 7.9 44.9 8.98
2 lintao 9.3 8.2 43.9 8.78
3 guojian 8.9 8.4 42.9 8.58
4 maling 8.9 7.9 42.2 8.44
5 liuyifan 9.8 8.9 46.3 9.26
----------------------------------------------------------------
思考:可进一步考虑找出比赛的第1至第k名,也在屏幕以及f2.txt中同时输出相关的结果信息(k小于等于n,并规定若多个选手最后得分相同时,则有效分(即已删除原来的最高分后)中最高分高者名次优先)。
并且在完成设计之后,又新添从键盘读取数据并且存入f1文件后再次利用文件计算新增后的选手成绩。
下边我将自己的代码放在这里供大家参考,如有错误或者不当之处希望大家联系我进行改正:
#include <iostream>
#include <fstream>
#include <string>
#include<sstream>
#include"ks.h"
using namespace std;
int main()
{
score play(10);//给score类定义一个对象
double read[10];//定义一个double型数组用于读取文件中的选手成绩
double a[10];//定义一个double型数组用于存储文件中的选手成绩
double num;//定义一个double类型存储选手的编号
string str;//定义一个string字符串存储文件中选手的名字
double pp[10];
double temp1;
double qq[10];
int q=1;
int w;
char s[10];
double ss[10];
int u;
int g;
int k = 0;//f定义一个k用于计算裁判的个数
char store[1000];//定义一个store字符串用于存放从文件中读取的所有内容
cout<<"--------------------------------------------------------------"<<endl;
cout<<" "<<endl;
cout<<"1.读取并输出当前文件成绩 "<<endl;
cout<<"2.再次添加运动员及其成绩 "<<endl;
cout<<" "<<endl;
cout<<"--------------------------------------------------------------"<<endl;
cin>>w;
if(w==1)
{
cout<<"请输入读取选手成绩个数"<<endl;
cin>>g;
cout<<"编号"<<" "<<"姓名"<<" "<<"最高分"<<" "<<"最低分"<<" "<<"总分"<<" "<<"平均分"<<endl;
ifstream in("f1.txt");//以读取的形式打开文件f1
ofstream out("f2.txt");//以写入的形式打开文件f2
out<<"编号"<<" "<<"姓名"<<" "<<"最高分"<<" "<<"最低分"<<" "<<"总分"<<" "<<"平均分"<<endl;//向文件中输出这句话
int line;
for (line = 1; line<g+1; line++)//用于将文件分行读取
{
in.seekg(0,ios::beg);
for (int i = 0; i<line;i++)
{
in.getline(store, sizeof(store));//读取文件中的第line行
}
std::istringstream iss(store);//给读取的分配内存空间
iss >> num;//将文件中的数据编号进行类型转换并存入到int型的num中
iss >> str;//将文件中的数据姓名存入字符串str中
cout << num << " ";
cout << str << " ";
i=0;//由于上边运用了i并且i已经有了一个值这里需要将i重新变回0
k=0;
while (iss >> read[i])//对文件中的选手成绩进行读取并且存入read数组中
{
a[i] = read[i];//为方便对数据进行计算将所读取的数组重新复制给a数组
//cout << a[i] << " ";
i++;
k++;//每次读取数据k都将会加1从而记录成绩个数从而得到裁判的数
}
cout << " ";
double max=play.max(a,k);//用对象去调用类中的函数max从而得到数组的最大值并将它赋值给double型数据max
double min=play.min(a, k);//用对象去调用类中的函数min从而得到数组的最小值并将它赋值给double型数据min
double aver=play.aver(a,k);//用对象去调用类中的函数aver从而得到数组的平均数并将它赋值给aver
double sum=play.sum(a,k);//用对象去调用类中的函数sum从而的得函数的返回值然后赋值给sum
cout<<max<<" "<<min<<" "<<sum<<" "<<aver<<endl;
out << num << " ";//向文件中输入选手编号
out << str << " ";//向文件中输入选手姓名
out<<max<<" "<<min<<" "<<sum<<" "<<aver<<endl;//向文件中输入选手得分最大值最小值总和以及平均值
pp[line]=play.sum(a,k);//用一个double数组记录所有人的成绩
qq[line]=play.aver(a,k);//用一个数组记录所有人的平均成绩
}
for (int m = 0; m<g; m++)//成绩对数组进行排序
{
for (int n = 0; n<g-m-1; n++)
{
if (pp
>pp[n+ 1])
{
temp1 = pp
;
pp
= pp[n + 1];
pp[n + 1] = temp1;
}
}
}
for(int c=1;c<g+1;c++)//如果两人总成绩相同比较两人平均分进行判断
{
for(int d=c+1;d<g+1;d++)
if(pp[c]==pp[d])
{
cout<<"第"<<c<<"名和第"<<d<<"名总成绩相同比较平均分"<<endl;
if(qq[c]>qq[d])
cout<<"获得"<<pp[c]<<"分数的名次高于获得"<<pp[d]<<"分数的"<<endl;
else
cout<<"获得"<<pp[c]<<"分数的名次高于获得"<<pp[d]<<"分数的"<<endl;
}
}
for( q=1;q<g+1;q++)//用循环输出所有人总成绩以及名次
{
cout<<"第"<<q<<"名的成绩为"<<pp[q]<<endl;
out<<"第"<<q<<"名的成绩为"<<pp[q]<<endl;
}
in.close();//关闭读取的文件f1
out.close();//关闭读取的文件f2
}
if(w==2)
{
cout<<"请输入新增加的选手姓名"<<endl;
cin>>s;
cout<<"请依次输入选手的成绩"<<endl;
for(u=0;u<7;u++)
{
cin>>ss[u];
}
ifstream in;
ofstream out;
out.open("f1.txt",ios::app);
out<<"6"<<" ";
out<<s<<" ";
for(u=0;u<7;u++)
{
out<<ss[u]<<" ";
}
cout<<"是否计算当前所有运动员成绩";
cout<<"是请按3"<<endl;
cout<<"否则请退出"<<endl;
cin>>w;
if(w==3)
{
cout<<"请输入读取选手成绩个数"<<endl;
cin>>g;
cout<<"编号"<<" "<<"姓名"<<" "<<"最高分"<<" "<<"最低分"<<" "<<"总分"<<" "<<"平均分"<<endl;
in.open("f1.txt");//以读取的形式打开文件f1
out.open("f2.txt");//以写入的形式打开文件f2
out<<"编号"<<" "<<"姓名"<<" "<<"最高分"<<" "<<"最低分"<<" "<<"总分"<<" "<<"平均分"<<endl;//向文件中输出这句话
int line;
for (line = 1; line<g+1; line++)//用于将文件分行读取
{
in.seekg(0,ios::beg);
for (int i = 0; i<line;i++)
{
in.getline(store, sizeof(store));//读取文件中的第line行
}
std::istringstream iss(store);//给读取的分配内存空间
iss >> num;//将文件中的数据编号进行类型转换并存入到int型的num中
iss >> str;//将文件中的数据姓名存入字符串str中
cout << num << " ";
cout << str << " ";
i=0;//由于上边运用了i并且i已经有了一个值这里需要将i重新变回0
k=0;
while (iss >> read[i])//对文件中的选手成绩进行读取并且存入read数组中
{
a[i] = read[i];//为方便对数据进行计算将所读取的数组重新复制给a数组
//cout << a[i] << " ";
i++;
k++;//每次读取数据k都将会加1从而记录成绩个数从而得到裁判的数
}
cout << " ";
double max=play.max(a,k);//用对象去调用类中的函数max从而得到数组的最大值并将它赋值给double型数据max
double min=play.min(a, k);//用对象去调用类中的函数min从而得到数组的最小值并将它赋值给double型数据min
double aver=play.aver(a,k);//用对象去调用类中的函数aver从而得到数组的平均数并将它赋值给aver
double sum=play.sum(a,k);//用对象去调用类中的函数sum从而的得函数的返回值然后赋值给sum
cout<<max<<" "<<min<<" "<<sum<<" "<<aver<<endl;
out << num << " ";//向文件中输入选手编号
out << str << " ";//向文件中输入选手姓名
out<<max<<" "<<min<<" "<<sum<<" "<<aver<<endl;//向文件中输入选手得分最大值最小值总和以及平均值
pp[line]=play.sum(a,k);//用一个double数组记录所有人的成绩
qq[line]=play.aver(a,k);//用一个数组记录所有人的平均成绩
}
for (int m = 0; m<g; m++)//成绩对数组进行排序
{
for (int n = 0; n<g-m-1; n++)
{
if (pp
>pp[n+ 1])
{
temp1 = pp
;
pp
= pp[n + 1];
pp[n + 1] = temp1;
}
}
}
for(int c=1;c<g+1;c++)//如果两人总成绩相同比较两人平均分进行判断
{
for(int d=c+1;d<g+1;d++)
if(pp[c]==pp[d])
{
cout<<"第"<<c<<"名和第"<<d<<"名总成绩相同比较平均分"<<endl;
if(qq[c]>qq[d])
cout<<"获得"<<pp[c]<<"分数的名次高于获得"<<pp[d]<<"分数的"<<endl;
else
cout<<"获得"<<pp[c]<<"分数的名次高于获得"<<pp[d]<<"分数的"<<endl;
}
}
for( q=1;q<g+1;q++)//用循环输出所有人总成绩以及名次
{
cout<<"第"<<q<<"名的成绩为"<<pp[q]<<endl;
out<<"第"<<q<<"名的成绩为"<<pp[q]<<endl;
}
in.close();//关闭读取的文件f1
out.close();//关闭读取的文件f2
}
}
//ks.h
class score
{
private:
int p;
//double read[7];
//double a[7];
public:
score(int pp)//构造函数
{
p = pp;
}
double min(double a[], int k)//定义两个参数,求所读取数组的最小值,两个参数需要从主函数中获得
{
double temp;
for (int j = 0; j<k; j++)
{
for (int i = 0; i<k-j-1; i++)//对数组进行排序
{
if (a[i]>a[i + 1])
{
temp = a[i];
a[i] = a[i + 1];
a[i + 1] = temp;
}
}
}
return a[0];//该函数最终返回值为数组的最小值
}
double max(double a[],int k)//定义两个参数,求所读取数组的最大值,两个参数需要从主函数中获得
{
double temp;
for (int j = 0; j<k; j++)//对数组进行排序
{
for (int i = 0; i<k-j-1; i++)
{
if (a[i]>a[i + 1])
{
temp = a[i];
a[i] = a[i + 1];
a[i + 1] = temp;
}
}
}
return a[k-1];//该函数最终返回值为数组的最大值
}
double sum(double a[], int k)//定义两个参数,用于求该数组所有元素的和
{
int i;
double sum = 0;
if (k<9)//如果给的参数中k的值小于9则去掉一个最高一个最低
{
for (i = 1; i<k - 1; i++)
{
sum = sum + a[i];
}
}
else//如果给的参数中k的值大于9则去掉两个最高两个最低
{
for (i = 2; i<k - 2; i++)
{
sum = sum + a[i];
}
}
return sum;//该函数返回一个值为数组所有数字的和
}
double aver(double a[],int k)//定义两个参数,用于求该数组的平均值
{
double sum=0;
double aver=0;
if (k<9)//裁判数目小于9去掉一个最高一个最低
{
for (int i = 1; i<k - 1; i++)
{
sum = sum + a[i];
}
aver = sum / (k - 2);
}
else//裁判数目大于9去掉两个最高两个最低
{
for (int i = 2; i<k - 2; i++)
{
sum = sum + a[i];
}
aver = sum / (k - 4);
}
return aver;//该函数最终返回值为该数组的平均值
}
};
对于这个小程序我认为程序的难点在于将文件中的信息读取出来,并且在读取后进行类型转换将字符串中的数据,转换成可以进行计算排序的数字类型数据。
相关文章推荐
- C++中利用文件输入对象(即ifstream对象)来读取文本文件中带空格的字符串以及混合输入数字与字符串
- 判断用npoi 读取 excel 文件中的数据类型是日期OR数字
- C++利用CStdioFile从txt文件中读取数据
- 用C#读取C/C++中struct数据类型生成的文件
- C/C++语言之由数字26引起的文件的数据保存与读取调试。
- 关于linux下C++中利用socket时的数据类型转换错误
- ADO.NET数据库编程 利用应用程序配置文件进行数据的读取
- 利用COM组件IPicture读取jpg、gif、bmp图片文件数据和显示图片的两个函数
- 利用C++的stringstream对各种数据类型转换
- C++ 读写文本文件、统计文件的行数、读取文件数据到数组
- C++ 简单读写文本文件、统计文件的行数、读取文件数据到数组
- C++ 简单读写文本文件、统计文件的行数、读取文件数据到数组
- XCode数据类型转换代码 文件读取,写入,XY坐标获取,ASCII转换等
- C++ 简单读写文本文件、统计文件的行数、读取文件数据到数组 (转)
- XCode数据类型转换代码 文件读取,写入,XY坐标获取,ASCII转换等
- C++读取以空格作为数据区分标记,以回车为行标记的txt文件到一个整数数组(字符串妙用)
- C++ 简单读写文本文件、统计文件的行数、读取文件数据到数组
- net控件中数据导到Excel的格式 首先,我们了解一下excel从web页面上导出的原理。当我们把这些数据发送到客户端时,我们想让客户端程序(浏览器)以excel的格式读取它,所以把mime类型设为:application/vnd.ms-excel,当excel读取文件时会以每个cell的格式呈现数据,如果cell没有规定的格式,则excel会以默认的格式去呈现该cell的数据。这样就给我们提供了自定义数据格式的空间,当然我们必须使用excel支持的格式。下面就列出常用的一些格式: 1) 文本
- 关于C++二进制文件读取转换,数据版本升级,增加字段等结构调整工具的思路。
- 使用Microsoft.Jet.OLEDB.4.0读取数据会出现当某一字段内分别含有文本和数字的混合数据时,某一类型的数据会产生丢失。