0

3 つの異なる計算オプションを使用して、統計計算機を作成しています。問題は、2 番目のオプションを選択するたびに、1 番目のオプションと 2 番目のオプションの両方の回答を出力することです。3 番目のオプションを選択すると、3 番目のオプションの答えが表示されます (間違った答えですが、おそらく式のミスです)。結果は次のとおりです。

Please Enter a number of inputs
3
Please enter number 1
1
Please enter number 2
2
Please enter number 3
3
Statistical Calculator Menu
(1) Mean
(2) Standard Deviation
(3) Range
(4) Restart/Exit
2
Here is the Mean 2.0Standard Devition is 0.8

各関数を呼び出す方法に問題があるのではないかと思いましたが、そうではないことがわかります。それで、初期化していない値かもしれないと思ったのですが、そうでもないようです。ここでどこが間違っていたのかを確認するために、別の目が必要です。

#include <stdio.h>
#include <conio.h>
#include <math.h>

const int MAX_DATA=8;
void menu(float numbers[], int amount);
float mean(float numbers[],int amount);
float standard_dev(float numbers[], int amount);
float range( float numbers[], int amount);

int main()
{
    int i=0, amount=0;
    float numbers[MAX_DATA];
    printf("Please Enter a number of inputs \n");
    scanf("%d", &amount);
    if (amount>MAX_DATA)
    {
        printf("You entered too many numbers");
    }
    else
    {
        for (i=0; i<amount; i++)
        {
            printf("Please enter number %d\n", i+1);
            scanf("%f",&numbers[i]);
        }
        menu(numbers,amount);
    }
    getch();
    return 0;
}
void menu(float numbers[],int amount)
{
    int input2=0;
    printf("Statistical Calculator Menu");
    printf("\n(1) Mean\n(2) Standard Deviation\n(3) Range\n(4) Restart/Exit\n");
    scanf("%d",&input2);
    if(input2==1)
    {
        mean(numbers,amount);
    }
    if  (input2==2)
    {
        standard_dev(numbers,amount);
    }
    if (input2==3)
    {
        range(numbers,amount);
    }
}
float mean(float numbers[],int amount)
{
    int i;
    float sum=0;
    float average=0;
    for (i=0; i<amount; i++)
    {
        sum=sum+numbers[i];
    }
    average=sum/amount;
    printf("Here is the Mean %.1f", average);
    return average;
}
float standard_dev(float numbers[], int amount)
{
    float sdev=0,dev=0,sumsqr=0,variance=0;
    int i;
    float mean2=0;
    mean2=mean(numbers,amount);
    for (i=0; i<amount; i++)
    {
        dev=numbers[i]-mean2;
        sumsqr+=dev*dev;
    }
    variance=sumsqr/(float)amount;
    sdev=sqrt(variance);
    printf("Standard Devition is %.1f", sdev);
    return sdev;
}
float range(float numbers[],int amount)
{
    int i;
    float diff=0;
    for (i=0; i<=amount; i++)
    {
        diff=numbers[amount]-numbers[1];
    }
    printf("%f\n",diff);
    return diff;
}
4

1 に答える 1

1
float standard_dev(float numbers[], int amount)
{
 float sdev=0,dev=0,sumsqr=0,variance=0;
 int i;
 float mean2=0;
 mean2=mean(numbers,amount); // Here it is.

実際に何かを出力する関数を呼び出しますmean:)関数にブール値フラグを追加して、出力したいときにshouldPrintそれを渡すことができます。true

また、この問題は、コードをデバッグするだけで簡単に解決できます...実際に見ても解決しない場合...

于 2012-10-06T21:57:57.813 に答える