问题描述:
大意是:
写一个程序,询问你10个学生的记录。每个记录由一个名称(不带空格)和三门课程的分数(整数,1到5)组成。输出以下列表,并计算每个学生和每个课程的平均分数(使用float)。输出每门课程的最低和最高分数。
评价标准:
(1)结果正确性;
(2)C++代码质量(紧凑合理);
(3)评论质量(干净准确);
(4)不允许使用printf和scanf等C函数。
刚开始学习C++,写出的东西可能很差甚至是错的,只是想通过这样一种方式来记录自己的学习历程并逼迫自己变得强大。
具体代码如下:
//8-1 student I
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
typedef struct student{ //定义结构类型student存储学生记录信息
string str; //使用string类型存储学生姓名
int score[3]; //使用数组存储学生的三门成绩
}S;
int main ( )
{
S s[10]; //定义结构数组存放10个学生记录
int sum1[3] = {0}; //存放每门学科十个学生分数的总和
int i, j;
ifstream in1;
in1.open( "student name.txt" ); //从文件"student name"读入学生姓名
if( !in1 )
cout << "error" << endl;
for( i = 0; i < 10; i++ )
in1 >> s[i].str;
ifstream in2;
in2.open( "score1.txt" ); //从文件"score1"读入学生第1门成绩
if( !in2 )
cout << "error" << endl;
for( i = 0; i < 10; i++ ){
in2 >> s[i].score[0];
sum1[0] += s[i].score[0];
}
ifstream in3;
in3.open( "score2.txt" ); //从文件"score2"读入学生第2门成绩
if( !in3 )
cout << "error" << endl;
for( i = 0; i < 10; i++ ){
in3 >> s[i].score[1];
sum1[1] += s[i].score[1];
}
ifstream in4;
in4.open( "score3.txt" ); //从文件"score3"读入学生第3门成绩
if( !in4 )
cout << "error" << endl;
for( i = 0; i < 10; i++ ){
in4 >> s[i].score[2];
sum1[2] += s[i].score[2];
}
int sum2[10] = {0}; //存放每名学生的总分
for( i = 0; i < 10; i++ )
sum2[i] += ( s[i].score[0] + s[i].score[1] + s[i].score[2] ) ;
float aver1[3], aver2[10]; //分别存放三门课的平均分和十名学生的平均分
for( i = 0; i < 3; i++ )
aver1[i] = sum1[i] / 10.0;
for( i = 0; i < 10; i++ )
aver2[i] = sum2[i] / 3.0;
cout << "no\t" << "name\t" << "score1\t"; //输出表头
cout << "score2\t" << "score3\t" << "average\t" << endl;
for( i = 0; i < 10; i++ ){ //输出学生基本信息和每名学生的平均成绩
cout << i + 1 << "\t" << s[i].str << "\t";
cout << s[i].score[0] << "\t" << s[i].score[1] << "\t";
cout << s[i].score[2] << "\t" << aver2[i] << "\t" << endl;
}
cout << "\t" << "average\t"; //输出每门学科平均值
for( i = 0; i < 3; i++ )
cout << aver1[i] << "\t";
cout << endl;
int min[3], max[3];
for( i = 0; i< 3; i++ ){
max[i] = 0;
min[i] = s[0].score[i];
for( j = 0; j < 10; j++ ){
if( s[j].score[i] > max[i] )
max[i] = s[j].score[i];
if( s[j].score[i] < min[i] )
min[i] = s[j].score[i];
}
}
cout << "\t" << "min\t"; //输出每门学科最小值
for( i = 0; i < 3; i++ )
cout << min[i] << "\t";
cout << endl;
cout << "\t" << "max\t"; //输出每门学科最大值
for( i = 0; i < 3; i++ )
cout << max[i] << "\t";
return 0;
}
这个其实可以把输出的结果也放在文本文件中,只需要添加语句:
ofstream out( "输出.txt" );
然后把后面的所有cout改写成out即可。