簡體   English   中英

標准偏差公式

[英]Standard Deviation Formula

我有這個作業,我將在其中顯示提示:

編寫一個程序,從用戶那里讀入一組測試分數數據。 (測試分數應以十進制形式輸入以表示百分比等級)。 一旦用戶完成輸入測試分數(輸入 -1 將表示輸入結束),打印出輸入的測試數量、測試的平均值和標准偏差。 使用以下公式(Welford's method)計算標准偏差: (Standard Deviaton Formula)

您可以通過在處理輸入值時跟蹤計數(測試次數)、總和和平方和來計算此數量。 注意:雖然有其他方法可以計算標准偏差,但請使用此方法。 使用此方法是因為它只需要一次數據傳遞。 不要使用數組或向量。

現在下面的代碼是我到目前為止所擁有的。 在終端中,我得到了錯誤的平均值和標准數字。 偏差輸出(Terminal Output) 我的數學有問題嗎? 任何幫助表示贊賞。

 #include <iostream>
    #include <cmath>
    using namespace std;
    int main()

    double sum = 0;
    double sumSq = 0;
    double grade = 0;
    int numtests = 0;

    cout << "Enter the test scores. Once finished, enter -1 to end input.\n";
    cin >> grade;

    while(grade != -1)
    {
            cin >>grade;
            sum = sum + grade;
            sumSq = sumSq + pow(grade,2);
            numtests++;
    }

    double average =(sum/numtests);
    double std = (sumSq - numtests*pow(average,2)/(numtests - 1));

    cout << "The number of scores: "<<numtests<<"\n";
    cout << "Average: "<<average<<"\n";
    cout << "Std. Deviation: "<<std<<"\n";




    return 0;

}

我發現調試程序的好方法通常是假裝我是計算機,並嘗試一次一行地逐步執行程序,看看我做了什么。

如果我按照你的程序,在幾行之后我得到了聲明

cin >> grade;

然后我從輸入中讀取一個數字並將grade設置為該數字。

然后我進入while循環。 請注意,我從不回到while循環之前的任何行。 並且程序中沒有其他行接受來自cin任何輸入。 所以我再也沒有從cin讀過任何東西。

您可以在第一個數字后鍵入您想要的所有數字。 該程序沒有讀取它們中的任何一個。 它正忙着做你告訴它要做的事情,即在grade不等於 -1 時保持循環。 它將繼續循環,直到發生其他事情阻止程序運行,因為grade在循環中永遠不會改變。 每次到達循環頂部時, grade仍等於您輸入的第一個數字。

順便說一句,在循環末尾帶有breakif是完全多余的。 如果沒有if ,程序接下來將返回到循環的頂部,然后如果grade等於 -1,它將退出。 因此,如果grade在循環期間變為 -1,則無論哪種方式,您都會在循環結束時退出。

旁注:隨着while(grade != -1)if (grade != -1) break; 是多余的/多余的。

但是,當您嘗試對數字求平方時,您使用的是pow(2,x) ,它是“2 的 x 次方”——這不是您想要的。

要平方數x ,您需要: pow(x,2)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM