给定N个学生的基本信息,包括学号(由5个数字组成的字符串)、姓名(长度小于10的...
7-3 学生信息处理分数 10
作者 王和兴
单位 东北大学秦皇岛分校
题目描述:
给定N个学生的基本信息,包括学号(由5个数字组成的字符串)、姓名(长度小于10的不包含空白字符的非空字符串)和3门课程的成绩(区间内的整数),要求输出总分最高学生的姓名、学号和总分。
输入:
输入在一行中给出正整数N(≤10)。随后N行,每行给出一位学生的信息,格式为“学号 姓名 成绩1 成绩2 成绩3”,中间以空格分隔。
输出:
在一行中输出总分最高学生的姓名、学号和总分,间隔一个空格。题目保证这样的学生是唯一的。
输入样例:
5
00001 huanglan 78 83 75
00002 wanghai 76 80 77
00003 shenqiang 87 83 76
10001 zhangfeng 92 88 78
21987 zhangmeng 80 82 75
输出样例:
zhangfeng 10001 258
这题用结构体怎么做 可以使用结构体来表示学生的基本信息,然后通过循环读取每个学生的信息,并计算他们的总分。同时,可以使用一个变量,记录当前总分最高的学生的信息。
首先,定义一个结构体来表示学生的基本信息:
struct Student {
char id;// 学号
char name;// 姓名
int score1;// 成绩1
int score2;// 成绩2
int score3;// 成绩3
int totalScore;// 总分
};
接下来,根据输入的学生数量N,创建一个长度为N的学生数组,并循环读取每个学生的信息:
#include <stdio.h>
struct Student {
char id;// 学号
char name;// 姓名
int score1;// 成绩1
int score2;// 成绩2
int score3;// 成绩3
int totalScore;// 总分
};
int main()
{
int N;
scanf("%d", &N);
struct Student students;
int maxTotalScore = 0;// 最高总分
for (int i = 0; i < N; i++) {
scanf("%s %s %d %d %d", students.id, students.name, &students.score1, &students.score2, &students.score3);
students.totalScore = students.score1 + students.score2 + students.score3;
if (students.totalScore > maxTotalScore) {
maxTotalScore = students.totalScore;
}
}
// 找到总分最高的学生
for (int i = 0; i < N; i++) {
if (students.totalScore == maxTotalScore) {
printf("%s %s %d\n", students.name, students.id, students.totalScore);
break;
}
}
return 0;
}
这样,我们就可以找到总分最高的学生的姓名、学号和总分了。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 你的代码主要有两个问题:
首先,是在for循环里面动态创建结构体数组。这样创建的数组在每次循环结束后就会被销毁,未能达到保存所有学生信息的目的。你应在for循环之前定义具有N个元素的数组。
其次,学号应为字符串而不是整数,因为学号可能以0开始。
修改后的代码如下:
#include<iostream>
#include<string>
using namespace std;
struct Student
{
string ID;
string name;
int A;
int B;
int C;
int sum;
};
int main()
{
int N;
cin>>N;
Student sb;
for(int i=0;i<N;i++)
{
cin>>sb.ID>>sb.name>>sb.A>>sb.B>>sb.C;
sb.sum=sb.A+sb.B+sb.C;
}
int max=sb.sum;
int t=0;
for(int i=0;i<N;i++)
{
if(sb.sum>max)
{
max=sb.sum;
t=i;
}
}
cout<<sb.name<<" "<<sb.ID<<" "<<max<<endl;
return 0;
}
但是需要注意的是,这段代码只有在支持C++的编译器中才能正常运行,因为C++98并不直接支持在创建数组时使用变量作为数组长度。如果你使用的C++编译器不支持这一特性,你可以考虑使用vector。
求最佳答案
页:
[1]