关于#双精度#的问题,如何解决?

【问题描述】输入一批学生(人数不超过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类型输入

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^