不计算程序中的最低和最高成绩。 (c++) (fstream)

Posted

技术标签:

【中文标题】不计算程序中的最低和最高成绩。 (c++) (fstream)【英文标题】:Doesn't calculate min and max grades in program. (c++) (fstream) 【发布时间】:2017-06-01 10:53:05 【问题描述】:

这个程序的重点是打开并阅读一个文本文件,其中包含学生的学术代码 -> aem 和他/她的总体成绩。然后,如果某个学生的成绩大于5,它会在名为成功的文本上写他/她的学术代码,以及成绩等。 我的问题是它正确计算了这 5 名学生的平均成绩,但没有计算最高和最低成绩。当我运行程序时,出现的窗口显示课程的正确平均值,但最高和最低成绩始终为 0。 谁能帮我?可能我没有以正确的方式比较它们。

#include <iostream>
#include <fstream>

using namespace std;
const int arraySize = 5;

int main(int argc, char** argv)

    ifstream d;
    d.open("students.txt");
    ofstream b;
    b.open("succesful.txt");
    ofstream c;
    c.open("unsuccesful.txt");

    int aem;
    double a[arraySize];
    int min, max;
    double grades, average;
    grades = average = 0;
    min = max = 0;

    for (int i = 0; i < arraySize; i++)
    
        d >> aem >> a[i];
        grades = grades + a[i];
        average = grades / arraySize;

        if (a[i] >= 5) b << aem << " " << a[i] << endl;
        else c << aem << " " << a[i] << endl;
    

    for (int i = 0; i < arraySize; i++)
    
        if (a[i] = max)
            max = a[i];
        break;
        if (a[i] = min)
            min = a[i];
        break;
    


    cout << "The average is:" << average;
    cout << "Maximum is:" << max;
    cout << "Minimum is:" << min;
    d.close(); c.close(); b.close();
    system("pause");
    return 0;

【问题讨论】:

请将代码粘贴为文本,而不是图像。 您的最后一个循环除了将a[1] 设置为max (0) 之外什么都不做。想一想,它会帮助你找到问题:) 我需要以某种方式比较它们吗?之前,为了功能? = 是分配。相等比较是==。 (一个体面的编译器应该警告你这一点。) 另外,看看那些breaks 并仔细考虑会发生什么。 (试着向自己解释为什么把它们放在那里。) 【参考方案1】:
int main(int argc, char** argv)

argcargv 不需要在这里。可以只是int main()

int min, max;
double grades, average;
grades = average = 0;
min = max = 0;

声明后赋值是不必要且低效的。此外,0 是整数,而不是浮点数。你可以初始化它们:int min = 0, max = 0;double grades = .0, average = .0;

grades = grades + a[i];

可简写为grades += a[i];

average = grades / arraySize;

此语句毫无意义地位于 for 循环中。您可以在循环之后执行此操作。

for (int i = 1; i < arraySize; i++) 

您忘记了a 的第零个元素。 int i = 1; 必须替换为 int i = 0;

if (i >= max)
    max = i; 
if (i <= min)
    min = i;

您将a[i] 误认为i。如果a[i]max 已经比较相等,则无需将a[i] 分配给max。它们可以是:

if (a[i] > max)
    max = a[i]; 
if (a[i] < min)
    min = a[i];

还有,

system("pause");

std::system 取决于系统环境,可能会出现意外行为。它应该被替换为:

std::cout << "Press enter key." << std::endl;
std::cin.get();

【讨论】:

以上是关于不计算程序中的最低和最高成绩。 (c++) (fstream)的主要内容,如果未能解决你的问题,请参考以下文章

第十七周自由练习项目——acm 学生最高最低成绩

java基础 利用java计算一个同学成绩的最高最低平均分

C语言 计算10个学生成绩的最高分最低分和平均分

java编程:输入某个班学生的成绩,输入-1时,表示输入结束。计算该班的学生人数、最高分、最低分和平均分

这个程序如何返回最高分的学生号和课程号?用函数做。

1查询成绩表的总分数,平均分,最低分和最高分。用sql语句怎么写