解题思路:
创建结构体将学号,姓名,成绩等不同的数据类型组合在一起形成新的数据类型Student。在主函数中定义变量N用来保存学生人数,因为学生的数量不是一个,所以用数组来保存学生的信息,接着定义Ane_sum,Two_sum,Three_sum来保存各课成绩的总成绩。用Ane_aver,Two_aver,Three_aver保存各课成绩的平均成绩。


因为运用到数组保存信息,所以用for循环来输入学生的信息,代码如下:

for(i=0;i<N;i++)
    {
        cin>>student[i].Id;
        cin>>student[i].Name;
        cin>>student[i].Ane_score;
        cin>>student[i].Two_score;
        cin>>student[i].Three_score;
    }


当学生的信息都输入之后,需要先求出每门成绩的总和才能求平均成绩,这里为了让代码简短一些,所以求每门成绩的总和与每个学生自己总成绩的代码写在了一起,计算完这些成绩后即可输出,代码如下:

for(i=0;i<N;i++)
    {
        Ane_sum+=student[i].Ane_score;
        Two_sum+=student[i].Two_score;
        Three_sum+=student[i].Three_score;
        student[i].Sum_score=student[i].Ane_score
                            +student[i].Two_score
                            +student[i].Three_score;
    }
    //定义新的变量保存每门成绩的平均成绩
    double Ane_aver=Ane_sum/N;
    double Two_aver=Two_sum/N;
    double Three_aver=Three_sum/N;
    //输出每门课的平均成绩
    cout<<Ane_aver<<" "
        <<Two_aver<<" "
        <<Three_aver<<endl;


最后找出总分最高的同学,需要通过for循环遍历所有的同学,然后使用打擂台的方法找出总分数最高的同学。所谓的打擂台即为假设数组中第一个同学是分数最高的,即为擂主,然后和后边的同学一一进行比较,如果后边同学的成绩有更高的,则替换掉现有擂主成为新的擂主,接着和后边的同学继续比较,直到找出分数最高的同学位置,代码如下:

//找到分数最高的同学
    for(i=1;i<N;i++)
    {
        if(student[0].Sum_score<student[i].Sum_score)
        {
            student[0].Id=student[i].Id;
            student[0].Name=student[i].Name;
            student[0].Ane_score=student[i].Ane_score;
            student[0].Two_score=student[i].Two_score;
            student[0].Three_score=student[i].Three_score;
            student[0].Sum_score=student[i].Sum_score;
        }
    }



注意事项:
在寻找到分数最高的同学时不要只替换总成绩,应把全部的数据都替换掉。


参考代码:

#include<iostream>
#include<string>
using namespace std;
//创建学生结构体
struct Student
{
    string Id;
    string Name;
    double Ane_score;
    double Two_score;
    double Three_score;
    double Sum_score;
};
int main()
{
    int N;
    cin>>N;
    Student student[N];
    double Ane_sum=0;
    double Two_sum=0;
    double Three_sum=0;
    int i;
    //输入学生信息
    for(i=0;i<N;i++)
    {
        cin>>student[i].Id;
        cin>>student[i].Name;
        cin>>student[i].Ane_score;
        cin>>student[i].Two_score;
        cin>>student[i].Three_score;
    }
    //求每门成绩的总成绩和每个学生的总成绩
    for(i=0;i<N;i++)
    {
        Ane_sum+=student[i].Ane_score;
        Two_sum+=student[i].Two_score;
        Three_sum+=student[i].Three_score;
        student[i].Sum_score=student[i].Ane_score
                            +student[i].Two_score
                            +student[i].Three_score;
    }
    //定义新的变量保存每门成绩的平均成绩
    double Ane_aver=Ane_sum/N;
    double Two_aver=Two_sum/N;
    double Three_aver=Three_sum/N;
    //输出每门课的平均成绩
    cout<<Ane_aver<<" "
        <<Two_aver<<" "
        <<Three_aver<<endl;
    //找到分数最高的同学
    for(i=1;i<N;i++)
    {
        if(student[0].Sum_score<student[i].Sum_score)
        {
            student[0].Id=student[i].Id;
            student[0].Name=student[i].Name;
            student[0].Ane_score=student[i].Ane_score;
            student[0].Two_score=student[i].Two_score;
            student[0].Three_score=student[i].Three_score;
            student[0].Sum_score=student[i].Sum_score;
        }
    }
    //输出最高分数同学的各项信息
    cout<<student[0].Id<<" "
        <<student[0].Name<<" "
        <<student[0].Ane_score<<" "
        <<student[0].Two_score<<" "
        <<student[0].Three_score<<endl;
    return 0;
}


点赞(0)
 

0.0分

12 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 6 条评论

cuyu2077 2年前 回复TA
#include<stdio.h>
#include<string.h>

typedef struct student
{
	char id[50];
	char name[50];
	int g[3];
	int sum;
}stu;

int sum(stu student)
{
	int sum = 0;
	sum = student.g[0] + student.g[1] + student.g[2];
	return sum;
}

double avg_s(stu student[], int num, int sub)
{
	int sum = 0;
	int avg = 0;
	for (int i = 0; i < num; i++)
	{
		sum += student[i].g[sub];
	}
	avg = sum / num;
	return avg;
}

void max_s(stu student[], int num)
{
	int cnt = 0;
	int max = student[0].sum;
	int max_id = 0;
	while (cnt < num - 1)
	{
		if (student[cnt].sum < student[cnt + 1].sum)
		{
			max = student[cnt + 1].su
Blank 2年前 回复TA
你好我想问一下,我这个为啥会编译结果对一半。
Blank 2年前 回复TA
if ((a[0].s1 + a[0].s2 + a[0].s3) > (a[1].s1 + a[1].s2 + a[1].s3)) {
		strcpy_s(b.id, a[0].id);
		strcpy_s(b.name, a[0].name);
		b.s1 = a[0].s1;
		b.s2 = a[0].s2;
		b.s3 = a[0].s3;
	}
	else {
		strcpy_s(b.id, a[1].id);
		strcpy_s(b.name, a[1].name);
		b.s1 = a[1].s1;
		b.s2 = a[1].s2;
		b.s3 = a[1].s3;
	}
	if (N > 2) {
		for (int i = 2; i < N; i++) {
			if ((b.s1 + b.s2 + b.s3) < (a[i].s1 + a[i].s2 + a[i].s3)) {
				strcpy_s(b.id, a[i].id);
				strcpy_s(b.name, a[i].name);
				b.s1 = a[i].s1;
				b.s2 = a[i].s2;
				b.s2 = a[i].s2;
			}
		}
	}
	cout << b.id << " " << b.name << " " << b.s1 << "
Blank 2年前 回复TA
@Blank if ((a[0].s1 + a[0].s2 + a[0].s3) > (a[1].s1 + a[1].s2 + a[1].s3)) { 		strcpy_s(b.id, a[0].id); 		strcpy_s(b.name, a[0].name); 		b.s1 = a[0].s1; 		b.s2 = a[0].s2; 		b.s3 = a[0].s3; 	} 	else { 		strcpy_s(b.id, a[1].id); 		strcpy_s(b.name, a[1].name); 		b.s1 = a[1].s1; 		b.s2 = a[1].s2; 		b.s3 = a[1].s3; 	} 	if (N > 2) { 		for (int i = 2; i < N; i++) { 			if ((b.s1 + b.s2 + b.s3) < (a[i].s1 + a[i].s2 + a[i].s3)) { 				strcpy_s(b.id, a[i].id); 				strcpy_s(b.name, a[i].name); 				b.s1 = a[i].s1; 				b.s2 = a[i].s2; 				b.s2 = a[i].s2; 			} 		} 	} 	cout << b.id << " " << b.name << " " << b.s1 << " " << b.s2 << " " << b.s3 << endl; 	return 0; }
Blank 2年前 回复TA
#include<iostream>
using namespace std;
#include<cstring>
struct recording {
	char id[10];
	char name[20];
	int s1, s2, s3;
};
void input(recording a[],int i) {
	cin >> a[i].id >> a[i].name >> a[i].s1 >> a[i].s2 >> a[i].s3;
}
int main() {
	int N,num1=0,num2=0,num3=0;
	recording a[100]={ }, b;
	cin >> N;
	for (int i = 0; i < N; i++) {
		input(a,i);
	}
	for (int i = 0; i < N; i++) {
		num1 += a[i].s1;
		num2 += a[i].s2;
		num3 += a[i].s3;
	}
	cout << num1 / N << " " << num2 / N << " " << num3 / N << endl;
	if ((a[0].s1 + a[0].s2 + a[0].s3) > (a[1].s1 + a[1].s2 + a[1].s3)) {
		strcpy_s(b.id, a[0]
渐变 2年前 回复TA
#include<stdio.h>
struct Student
    {
        
        char id[101];
        char name[101];
        int score_c1;
        int score_c2;
        int score_c3;
        double score_sum;
        
    };
int main()
{
    int n;
    scanf("%d",&n);
    Student student[n];
    int s1,s2,s3,x,ss;
    ss=s1=s2=s3=0;
    for (int i=0;i<n;i++)
    {
    scanf("%s %s %d %d %d", &student[i].id, &student[i].name, &student[i].score_c1,&student[i].score_c2, &student[i].score_c3);
    s1+=student[i].score_c1;
    s2+=student[i].score_c2;
    s3+=student[i].score_c3;
    student[i].score_sum=student[i].score