C++第15周项目4扩展——带姓名的多科成绩单

课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565

【项目4-多科成绩单】用二维数组score[][4]保存同学们的高数、英语、C++成绩及总成绩(在此假设学生的学号为整型的连续值,用数组的行下标作学号)。在此基础上,完成下面的操作:
(1)设计输入成绩的函数,输入3科成绩后可以自动求出总分,并将数据全保存到数组中;
(2)输出各门课及总分的最高成绩、最低成绩、平均成绩和成绩的标准偏差;
(3)输出考得总分最高、最低同学的人数及对应的学号。
要求:学生人数num在main()函数中输入,score[][4]数组也是main()函数的局部变量,最好将其他功能也设计成函数,使main()函数尽可能地简单。
【项目4扩展(选做)-带姓名的多科成绩单】增加用数组string name[]表示同学们的姓名,使姓名与成绩的下标保持一致(例如name[1]和score[1][0]、score[1][1]、score[1][2]和score[1][3]表示同一位同学的数据)。据此,将项目4中的第(3)项任务改为输出总分最高的同学的姓名。
扩展题参考解答:

#include<iostream>
#include<cmath>
#include<string>
using namespace std;
double max(double s[][4],int n,int i); //求第i门课的最高成绩,i=3时是总分,下类似
double min(double s[][4],int n,int i);
output_result(string name[],double s[][4],int n);

int main()
{
	int i,num;
	string temp;
	double score[100][4]; //设一个班最多100人,实际按输入来
	string name[100];
	cout<<"输入学生人数:";
	cin>>num;
	//(1)输入成绩并求出总分
	cout<<"输入学生成绩(按姓名、高数、英语、C++的顺序依次输入:)"<<endl;
	for(i=0;i<num;++i)
	{
		cin>>name[i]>>score[i][0]>>score[i][1]>>score[i][2];
		score[i][3]=score[i][0]+score[i][1]+score[i][2];
	}
	cout<<"输入的学生成绩为:"<<endl;
	cout<<"学号\t姓名\t高数\t英语\tC++\t总分"<<endl;
	for(i=0;i<num;++i)
	{
		cout<<i<<'\t'<<name[i]<<'\t';
		cout<<score[i][0]<<'\t';
		cout<<score[i][1]<<'\t';
		cout<<score[i][2]<<'\t';
		cout<<score[i][3]<<endl;
	}

	//(3)输出考得总分最高、最低同学的人数及对应的学号。
	output_result(name,score,num);
	return 0;
}

//求第i门课的最高成绩,i=3时是总分,下类似
double max(double s[][4],int n,int j)
{
	double m=s[0][j];
	for(int i=1;i<n;++i)
		if (m<s[i][j])
			m=s[i][j];
		return m;
}
double min(double s[][4],int n,int j)
{
	double m=s[0][j];
	for(int i=1;i<n;++i)
		if (m>s[i][j])
			m=s[i][j];
		return m;
}
//输出考得总分最高、最低同学的人数及对应的学号。
output_result(string name[],double s[][4],int n)
{
	double m=max(s,n,3);
	int i,c=0;
	bool first=true;
	cout<<"总分最高分为"<<m;
	for(i=0;i<n;++i)
	{
		if(s[i][3]==m)//直接用s[i][3]==m可能会因精度而错误
			++c;
	}
	cout<<",有"<<c<<"人达到最高分,他们的姓名是:";
	for(i=0;i<n;++i)
	{
		if(s[i][3]==m)
			if(first)
			{
				cout<<name[i];
				first=false;
			}
			else
			{
				cout<<"、"<<name[i];
			}
	}
	cout<<endl;
	//关于最低成绩
	m=min(s,n,3);
	c=0;
	first=true;
	cout<<"总分最低分为"<<m;
	for(i=0;i<n;++i)
	{
		if(s[i][3]==m)
			++c;
	}
	cout<<",有"<<c<<"人达到最低分,他们的姓名是:";
	for(i=0;i<n;++i)
	{
		if(s[i][3]==m)
			if(first)
			{
				cout<<name[i];
				first=false;
			}
			else
			{
				cout<<"、"<<name[i];
			}
	}
	cout<<endl;
}
时间: 2024-07-29 16:08:45

C++第15周项目4扩展——带姓名的多科成绩单的相关文章

2014秋C++第14周项目2参考-带姓名的成绩单

课程主页在http://blog.csdn.net/sxhelijian/article/details/39152703,课程资源在云学堂"贺老师课堂"同步展示,使用的帐号请到课程主页中查看.  [项目2-带姓名的成绩单]设score[8]数组中存储8名同学的C++成绩,增加一个数组string name[8]并赋初值,表示同学们的姓名.这两个数组中,每名同学的姓名与成绩的下标要始终保持一致(例如name[i]和score[i]表示同一位同学(下标为i)的姓名和C++成绩,否则会张冠

C++第15周项目1扩展1 -数组类

课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565,本周题目链接:http://blog.csdn.net/sxhelijian/article/details/9018813 [项目1-扩展1]建立专门的数组类处理有关数组的操作项目1情况见:http://blog.csdn.net/sxhelijian/article/details/9052881 要求:在MyArray基础上增加下面的成员或友元函数,扩充MyArra

2013级C++第15周项目——二维数组

课程主页在:http://blog.csdn.net/sxhelijian/article/details/11890759 [项目1-折腾二维数组]创建一个长度为5行4列的二维整型数组,通过初始化,为数组中的前两列的10个元素赋初值,然后通过键盘输入,使后两列的10个元素获得值,将所有元素值乘以3后保存在数组中.输出数组时,按行序优先输出,再按列序优先输出(输出的第一行是数组中的第一列--,其实输出的就是"转置"),再将数组"倒"着输出(即最后一行最后一列的最先输

2013-C++第15周项目参考解答链接集

课程主页在:http://blog.csdn.net/sxhelijian/article/details/11890759 [项目1-折腾二维数组]创建一个长度为5行4列的二维整型数组,通过初始化,为数组中的前两列的10个元素赋初值,然后通过键盘输入,使后两列的10个元素获得值,将所有元素值乘以3后保存在数组中.输出数组时,按行序优先输出,再按列序优先输出(输出的第一行是数组中的第一列--,其实输出的就是"转置"),再将数组"倒"着输出(即最后一行最后一列的最先输

C++第15周项目3——带姓名的成绩单

课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565 [项目3-带姓名的成绩单]设score数组中存储同学们的C++成绩,增加一个数组string name[20]并赋初值,表示同学们的姓名.这两个数组中,同学的姓名与成绩的下标保持一致(例如name[1]和score[1]表示同一位同学的姓名和C++成绩).请(1)输出按成绩排序后的同学的名单:(2)输出按同学姓名排序后的成绩单(排序对象是字符串).提示:排序中交换scor

C++第13周项目2扩展——最大公约数

课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565 [项目2扩展--最大公约数] 分别用非递归函数和递归函数,用辗转相除法求两个正整数a和b的最大公约数,并体会迭代法和递归法在处理问题上各自的思路. 参考解答: //迭代解法 #include "iostream" using namespace std; int gcd(int x, int y); void main() { int m,n; cout<

C++第12周项目6扩展——三角函数表

课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565 [项目6扩展(选做)-编制三角函数表] 要求在main()函数中调用show_sin_table(min_angle, max_angle),显示角度值为min_angle到max_angle之间的所有角度(间隔为1度)的正弦值.要求不能用数学库函数,将项目6中的mysin函数拷贝到这个程序中,用于计算sin值.例如show_sin_table(0, 90)可以显示出所有

C++第10周项目5扩展参考——在北京买房

课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565 [项目5扩展:在北京买房]现在北京有一套房子,价格200万,假设房价每年上涨10%,一个软件工程师每年固定能赚40万.如果他想买这套房子,不贷款,不涨工资,没有其他收入,每年不吃不喝不消费,那么他需要几年才能攒够钱买这套房子?  参考解答: #include <iostream> using namespace std; int main( ) { double hou

C++第10周项目1扩展参考——求和

课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565 [项目1扩展(选做)]从键盘输入20个整数,输出它们的和. //用for循环完成,其他循环自行完成 #include <iostream> using namespace std; int main( ) { int sum=0,i,n; for(i=0;i<20;++i) { cin>>n; sum+=n; } cout<<"s