OOP Assignment-001 Students I

问题描述:

大意是:
写一个程序,询问你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即可。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

房东的小黑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值