【问题描述】输入一批学生(人数不超过100)的成绩,计算所有学生的平均分,并输出成绩高于平均分的学生成绩。
【输入形式】第一行输入人数,第二行输入成绩,成绩以空格间隔。成绩用双精度表示。
【输出形式】第一行输出平均分(保留一位小数),后续行输出学生序号(从1号开始编序)及成绩(保留一位小数),每行输出一个学生
【样例输入】3
79 89 67
【样例输出】78.3
1 79.0
2 89.0
#include <iostream>
#include <iomanip> //用于控制输出格式,保留小数位数
using namespace std;
int main()
{
int n;
double sum = 0;
cin >> n;
double score[n];
for(int i = 0; i < n; i++)
{
cin >> score[i];
sum += score[i];
}
double avg = sum / n;
cout << fixed << setprecision(1) << avg << endl; //保留一位小数输出平均分
for(int i = 0; i < n; i++)
{
if(score[i] > avg)
cout << i+1 << " " << fixed << setprecision(1) << score[i] << endl; //保留一位小数输出成绩
}
return 0;
}
该回答引用于ChatGPT:
在 C++ 中,使用双精度(double)进行计算和存储浮点数即可解决问题。下面是一个简单的示例程序:
#include <iostream>
#include <iomanip> // 用于控制输出格式
using namespace std;
int main() {
int n;
double sum = 0, average, score;
double scores[100];
// 输入人数和成绩
cin >> n;
for (int i = 0; i < n; i++) {
cin >> scores[i];
sum += scores[i];
}
// 计算平均分
average = sum / n;
// 输出平均分并输出高于平均分的学生成绩
cout << fixed << setprecision(1) << average << endl; // 控制保留一位小数输出
for (int i = 0; i < n; i++) {
if (scores[i] > average) {
cout << i + 1 << " " << fixed << setprecision(1) << scores[i] << endl;
}
}
return 0;
}
程序中首先定义了一个双精度数组 scores
用于存储输入的成绩,然后通过循环输入每个学生的成绩,并累加求和。接着计算平均分并输出。最后再通过循环遍历所有学生成绩,输出高于平均分的学生成绩及其对应的序号。
在输出的时候可以使用 setprecision()
函数来控制保留小数位数,使用 fixed
控制输出的格式。例如上面的程序在输出平均分和学生成绩时都使用了 fixed << setprecision(1)
的格式控制,保留一位小数输出。
以double类型输入
不知道你这个问题是否已经解决, 如果还没有解决的话:输出:
请输入这4名学生的5门成绩:
100 89 86 88 87
100 89 86 50 20
100 89 86 88 87
100 89 86 88 60
第一门课的平均成绩为:400.000000
学号为1的学生平均成绩在90分以上或全部课程成绩在85分以上。
学号为3的学生平均成绩在90分以上或全部课程成绩在85分以上。