2.从键盘输入n个学生的学号和成绩,计算他们的平均成绩,并列出成绩最好的前t名学生的学号和分数。要求: (1)使用new动态分配数组。 (2)n和t的值从键盘输入。 (3)定义3个自定义函数:输入数据;计算平均成绩;输出前t个学生的学号和分数。 (4)主函数调用自定义函数。
时间: 2023-09-22 12:06:16 浏览: 310
### 回答1:
#include <iostream>
using namespace std;
void inputData(int n, int* id, int* score) {
for(int i=0; i<n; i++) {
cin >> *(id+i) >> *(score+i);
}
}
double calcAverage(int n, int* score) {
double sum = 0;
for(int i=0; i<n; i++) {
sum += *(score+i);
}
return sum/n;
}
void outputTop(int n, int t, int* id, int* score) {
for(int i=0; i<n-1; i++) {
for(int j=i+1; j<n; j++) {
if(*(score+i) < *(score+j)) {
swap(*(id+i), *(id+j));
swap(*(score+i), *(score+j));
}
}
}
for(int i=0; i<t; i++) {
cout << *(id+i) << " " << *(score+i) << endl;
}
}
int main() {
int n, t;
cin >> n >> t;
int* id = new int[n];
int* score = new int[n];
inputData(n, id, score);
double avgScore = calcAverage(n, score);
cout << "平均成绩:" << avgScore << endl;
cout << "前" << t << "名学生:" << endl;
outputTop(n, t, id, score);
delete[] id;
delete[] score;
return 0;
}
### 回答2:
题目要求实现一个程序,从键盘接收输入n个学生的学号和成绩,计算他们的平均成绩,并列出成绩最好的前t名学生的学号和成绩。下面是一个可能的实现:
#include <iostream>
using namespace std;
void input_data(int* student_ids, int* scores, int n) {
cout << "请输入学号和成绩:" << endl;
for (int i = 0; i < n; i++) {
cout << "学生" << i+1 << "的学号和成绩:";
cin >> student_ids[i] >> scores[i];
}
}
float calculate_average_score(int* scores, int n) {
float sum = 0;
for (int i = 0; i < n; i++) {
sum += scores[i];
}
return sum / n;
}
void output_top_students(int* student_ids, int* scores, int t) {
// 使用简单的冒泡排序对成绩进行降序排列
for (int i = 0; i < t; i++) {
for (int j = i+1; j < t; j++) {
if (scores[j] > scores[i]) {
// 交换学号和成绩
int temp_student_id = student_ids[i];
student_ids[i] = student_ids[j];
student_ids[j] = temp_student_id;
int temp_score = scores[i];
scores[i] = scores[j];
scores[j] = temp_score;
}
}
}
cout << "成绩最好的前" << t << "名学生的学号和成绩是:" << endl;
for (int i = 0; i < t; i++) {
cout << "学生" << i+1 << "的学号:" << student_ids[i] << ",成绩:" << scores[i] << endl;
}
}
int main() {
int n, t;
cout << "请输入学生的人数:";
cin >> n;
cout << "请输入要列出的前几名学生:";
cin >> t;
int* student_ids = new int[n];
int* scores = new int[n];
input_data(student_ids, scores, n);
float average_score = calculate_average_score(scores, n);
cout << "学生的平均成绩是:" << average_score << endl;
output_top_students(student_ids, scores, t);
delete[] student_ids;
delete[] scores;
return 0;
}
这个程序中,我们首先通过键盘输入学生的人数n和要列出的前几名学生t。然后使用new动态分配了两个数组,一个用来存储学生的学号,另一个用来存储学生的成绩。接下来,我们调用自定义函数input_data来接收从键盘输入的学生学号和成绩。然后,调用自定义函数calculate_average_score计算学生的平均成绩,并输出。最后,调用自定义函数output_top_students列出成绩最好的前t名学生的学号和分数。完成后,记得使用delete[]释放动态分配的内存。
### 回答3:
#include <iostream>
using namespace std;
// 输入数据函数
void input(int* num, int* score, int n) {
for (int i = 0; i < n; i++) {
cout << "请输入第" << i + 1 << "个学生的学号和成绩:" << endl;
cin >> num[i] >> score[i];
}
}
// 计算平均成绩函数
double average(int* score, int n) {
double sum = 0;
for (int i = 0; i < n; i++) {
sum += score[i];
}
return sum / n;
}
// 输出前t个学生的学号和分数函数
void outputTopStudents(int* num, int* score, int n, int t) {
cout << "成绩最好的前" << t << "名学生是:" << endl;
for (int i = 0; i < t; i++) {
cout << "学号:" << num[i] << ",成绩:" << score[i] << endl;
}
}
int main() {
int n, t;
cout << "请输入学生的个数n:";
cin >> n;
int* num = new int[n];
int* score = new int[n];
input(num, score, n);
cout << "请输入要列出成绩最好的前t名学生:";
cin >> t;
double avgScore = average(score, n);
cout << "学生的平均成绩为:" << avgScore << endl;
outputTopStudents(num, score, n, t);
delete[] num;
delete[] score;
return 0;
}
阅读全文