c ++ SAT评分读者分配,计算标准差错误

时间:2018-02-14 01:37:21

标签: c++ function math netbeans dev-c++

我正在制作一个可以读取20个SAT成绩的程序。将读取分数并将其存储到2D阵列中。我写了两种方法,我认为这是我的问题的根源。我肯定知道的是计算STD功能。我收到了错误消息:

1 [main] satscores_proj1 1920 cygwin_exception :: open_stackdumpfile:将堆栈跟踪转储到satscores_proj1.exe.stackdump

我正在使用带有cygwin编译器软件包的netbeans,但是当我尝试使用DevC ++运行它时,会弹出这条消息:

C:\ Dev-Cpp \ HW Assignments \ satScores.cpp在函数void compute_std(int (*)[2], int, int, double&, double&)' call of overloaded中,pow(int,int)'不明确

#include <cstdlib>
#include <iostream>
#include <iomanip> 
#include <string>
#include <fstream>
#include <cmath>
#include <cctype>

using namespace std;

int main() 
{
    int sat[10][2], mathAvg, verbAvg;
    double mathStd, verbStd;

    void describe_program();
    void read_scores(int sat[10][2]);
    void compute_means(int sat[10][2], int& mathAvg, int& verbAvg);
    void compute_std(int sat[10][2],int mathAvg, int verbAvg, double& mathStd, double& verbStd) ;
    void show_results(int sat[10][2], int mathAvg, int verbAvg, double mathStd,  double verbstd);
    bool again();

    describe_program();
    read_scores(sat);
    compute_means(sat, mathAvg, verbAvg);
    compute_std(sat, mathAvg, verbAvg,  mathStd, verbStd);
    //show_results(sat, mathAvg, verbAvg, mathStd, verbStd);
    //again();
    return 0;
}

/*
 * 
 */

void compute_means(int sat[10][2], int& mathAvg, int& verbAvg)
{
    int mathScoreSum =0;
    int mathCount = 0;
    int verbScoreSum = 0;
    int verbCount = 0;

    for(int i = 0; i<10; i++)    
    {
        for(int j = 0; i<2; j++)
        {
            if(j==0){
                mathScoreSum += sat[i][j];
                mathCount++;
            }

            else{
                verbScoreSum += sat[i][j];
                verbCount++;
            }
        }
    }
    mathAvg = mathScoreSum / mathCount;
    verbAvg = verbScoreSum / verbCount;
}


void compute_std(int sat[10][2],int mathAvg, int verbAvg, double& mathStd, double& verbStd) 
{
    double mathVariance = 0;
    double verbVariance = 0;

    for(int i = 0; i<10; i++)    
    {
        for(int j = 0; i<2; j++)
        {

            if(j==0){
                mathVariance += pow((sat[i][j] - mathAvg), 2);
            }

            else{
                verbVariance += pow((sat[i][j] - mathAvg), 2);
            }

            mathStd = sqrt(mathVariance/9);
            verbStd = sqrt(verbVariance/9);
        }
    }
}

是否有人熟悉这两个错误?

2 个答案:

答案 0 :(得分:2)

您的细分错误是由for(int j=0;i<2;j++)引起的i。很明显,如果你使用调试器。使用调试器:)

编译错误是由函数pow的多个声明引起的。我尝试执行::pow(等等。您也可以执行(double)variable之类的显式转换,以消除过载问题。

另外,对于从不执行相同代码两次的代码,您不应该使用循环:

    for(int j = 0; j<2; j++)
    {
        if(j==0){
            mathScoreSum += sat[i][j]; //<--first, j is 0
            mathCount++;
        }

        else{
            verbScoreSum += sat[i][j]; //<--second, j is 1
            verbCount++;
        }
    }

应该是:

mathScoreSum += sat[i][0]; //<--first iteration of loop
mathCount++; //<--first iteration of loop
verbScoreSum += sat[i][1]; //<--second iteration of loop
verbCount++; //<--second iteration of loop

(或者,您可以设置ScoreSum[2]Count[2]而不是当前的4个目标变量,并分配给循环中的那些变量。)

以下是删除不必要的j循环的完整示例:

void compute_std(int sat[10][2],int mathAvg, int verbAvg, double& mathStd, double& verbStd)
{
    double mathVariance = 0;
    double verbVariance = 0;

    for(int i = 0; i<10; i++)
    {
        mathVariance += pow((sat[i][0] - mathAvg), 2);
        verbVariance += pow((sat[i][1] - verbAvg), 2);
    }
    mathStd = sqrt(mathVariance/9);
    verbStd = sqrt(verbVariance/9);
}

答案 1 :(得分:0)

using namespace std尝试区分std::pow函数和pow函数时,您#include <cmath>会产生潜在冲突。