题目描述
现有N(N≤1000)名同学,座号分别为1~N。每名同学需要设计一个结构体记录以下信息:
学号(不超过100000的正整数),三门学业分别为语数英三科的成绩(0到100的整数),素质拓展成绩(0到150)和综合分数。
其中综合分数按照学业总成绩的70%和素质拓展成绩的30%进行相加得到。
顺序输入N名同学的学号、三门学业成绩和素拓成绩,统计得到他们的综合分数,并根据综合分数判断是否“优秀”,综合分数达到200分就算优秀。
输入格式
第一行正整数 N。
接下来N行,每行5个整数,依次代表学号、语数英成绩和素拓成绩,空格隔开。
输出格式
N行,第i行输出第i个学生的综合分数(保留一位小数),如果该生优秀的话,则在后面再输出其学号,空格隔开。
#include <iostream>
#include <iomanip>
using namespace std;
struct Student {
int id;
int chinese;
int math;
int english;
int quality;
double score;
};
int main() {
int n;
cin >> n;
Student students[n];
for (int i = 0; i < n; i++) {
cin >> students[i].id >> students[i].chinese >> students[i].math >> students[i].english >> students[i].quality;
students[i].score = students[i].chinese + students[i].math + students[i].english + students[i].quality * 0.3;
cout << fixed << setprecision(1) << students[i].score;
if (students[i].score >= 200) {
cout << " " << students[i].id;
}
cout << endl;
}
return 0;
}
#include <iostream>
#include <iomanip>
using namespace std;
struct Student {
int studentID;
int chineseScore;
int mathScore;
int englishScore;
int qualityScore;
float compositeScore; // 综合分数
};
int main() {
int N;
cin >> N;
Student students[N];
// 输入学生信息并计算综合分数
for (int i = 0; i < N; i++) {
cin >> students[i].studentID >> students[i].chineseScore >> students[i].mathScore >> students[i].englishScore >> students[i].qualityScore;
students[i].compositeScore = (students[i].chineseScore + students[i].mathScore + students[i].englishScore) * 0.7 + students[i].qualityScore * 0.3;
}
// 输出综合分数和是否优秀
cout << fixed << setprecision(1); // 设置输出小数点后一位
for (int i = 0; i < N; i++) {
cout << students[i].compositeScore;
if (students[i].compositeScore >= 200) {
cout <<" "<<students[i].studentID;
}
cout << endl;
}
return 0;
}
参考代码
#include <stdio.h>
// 定义学生结构体
struct Student {
int id; // 学号
int chinese; // 语文成绩
int math; // 数学成绩
int english; // 英语成绩
int expand; // 素拓成绩
float score; // 综合分数
};
int main() {
int n;
scanf("%d", &n); // 输入学生数量
struct Student stu[n]; // 定义学生数组
// 依次输入每名学生的信息,计算综合分数并判断是否优秀
for (int i = 0; i < n; i++) {
scanf("%d %d %d %d %d", &stu[i].id, &stu[i].chinese, &stu[i].math, &stu[i].english, &stu[i].expand);
stu[i].score = (stu[i].chinese + stu[i].math + stu[i].english) * 0.7 + stu[i].expand * 0.3;
printf("%.1f", stu[i].score);
if (stu[i].score >= 200) {
printf(" %d", stu[i].id);
}
printf("\n");
}
return 0;
}
我可以解决这个问题。
首先,我们需要设计一个结构体来记录每名同学的学号和成绩信息,代码如下:
struct StudentInfo {
int id; // 学号
double score; // 成绩
};
接下来,在主函数中创建一个数组来存储所有学生的信息,并依次输入每个学生的学号和成绩。然后,我们可以遍历数组,计算每名同学的综合分数,并根据综合分数判断是否优秀(综合分数达到200分即为优秀)。最后,输出每名学生的学号、成绩和综合分数,以及是否优秀。代码如下:
#include <iostream>
using namespace std;
struct StudentInfo {
int id; // 学号
double score; // 成绩
};
int main() {
const int n = 5; // 学生个数
StudentInfo students[n];
for (int i = 0; i < n; i++) {
cout << "请输入第" << i + 1 << "名学生的学号和成绩:" << endl;
cin >> students[i].id >> students[i].score;
}
for (int i = 0; i < n; i++) {
double comprehensiveScore = students[i].score * 0.6 + students[i].id * 0.4;
cout << "学生" << students[i].id << "的成绩为:" << students[i].score << ",综合分数为:" << comprehensiveScore << ",";
if (comprehensiveScore >= 200) {
cout << "优秀" << endl;
} else {
cout << "不优秀" << endl;
}
}
return 0;
}
输入输出格式如下:
输入:
请输入第1名学生的学号和成绩:
101 89.5
请输入第2名学生的学号和成绩:
102 78
请输入第3名学生的学号和成绩:
103 92
请输入第4名学生的学号和成绩:
104 66.5
请输入第5名学生的学号和成绩:
105 83.5
输出:
学生101的成绩为:89.5,综合分数为:88.6,不优秀
学生102的成绩为:78,综合分数为:80.8,不优秀
学生103的成绩为:92,综合分数为:94,优秀
学生104的成绩为:66.5,综合分数为:68.6,不优秀
学生105的成绩为:83.5,综合分数为:85.6,不优秀
希望这个解决方案可以帮助到您!