0

非負の double の束を配列に読み込み、値の平均値と標準偏差を計算するプログラムを完成させています。次に、平均とスタンド偏差は、 B を取得することを表します。
次の部分で問題が発生しました。ここでは、 B を取得する数値の配列から最低スコアを見つけてから、 Bを取得しなかった配列内の最高値を見つける必要があります。私はこの部分で非常に問題を抱えているので、どんな助けも素晴らしいでしょう. また、次の場合にプログラムを停止する必要があります
EOFが入力されていますが、その部分もわかりません。そのため、それについての助けもいただければ幸いです。今のところ、代わりにすべての正の値で機能し、負の値が導入されたときに停止するようにしました。これが私のコードです:

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

int main () {
    int arr[100];
    int y, x;
    int i;
    double mean = 0;
    double std = 0;
    double this = 0;
    i = 0;

    printf("Enter next number, EOF to stop > ") ;
    scanf("%d",&x);
    while (x >= 0) {
        arr[i++] = x;
        printf ("Enter next number, EOF to stop > " );
        scanf("%d",&x);
    }

    y = i;

    double sum = 0;
    double sum1= 0;

    for(i = 0; i < y; i++){
        sum = sum + arr[i];
    }
    mean = sum / y;

    for (i = 0; i < y; i++){
        sum1 = sum1 + pow((arr[i] - mean), 2);
    }

    std = sum1 / ((float)y - 1);

    this = mean + sqrt(std);

    if (10 > y) {
        printf("**You must enter atleast 10 scores***\n");
        return 0;
    }

    printf("Mean = %.2lf, Standard Deviation = %.2lf\n", mean, sqrt(std));
    printf("Scores above %.2lf get a B\n", this);

    return 0;
}
4

3 に答える 3

0

コード:

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

int main () {
    int arr[100];
    int y, x;
    int i;
    double mean = 0;
    double std = 0;
    double margin = 0;
    i = 0;

    printf("Enter next number, EOF to stop > ") ;
    scanf("%d",&x);
    while (x >= 0) {
        arr[i++] = x;
        printf ("Enter next number, EOF to stop > " );
        scanf("%d",&x);
    }

    y = i;
    if (10 > y) {
        printf("**You must enter atleast 10 scores***\n");
        return 0;
    }

    double sum = 0;
    double sum1= 0;

    for(i = 0; i < y; i++){
        sum = sum + arr[i];
    }
    mean = sum / y;

    for (i = 0; i < y; i++){
        sum1 = sum1 + pow((arr[i] - mean), 2);
    }

    std = sum1 / ((float)y - 1.0);

    margin = mean + sqrt(std);


    printf("Mean = %.2lf, Standard Deviation = %.2lf\n", mean, sqrt(std));
    printf("Scores above %.2lf get a B\n", margin);

    int below = arr[0]; // highest value in the array that will not get a B
    int above = arr[0]; // lowest value in the array that will give a B

    for (i=0; i<y; i++) {
        if ((arr[i] > below) && (arr[i] < margin)) {
            below = arr[i];
        }
        else if ((arr[i] > margin) && (arr[i] < above)) {
            above = arr[i];
        }
    }

    return 0;
}
于 2013-05-10T07:07:28.253 に答える
0

まず、-ansi -pedantic C でプログラミングする場合は、すべての変数をブロックの先頭で定義する必要があります。例えば:

正しい: func() {

variable v1;
variable v2;

perform_stuff();

}

正しい: func() {

perform_stuff()

variable v1;

}

そして今、あなたの質問に: double 値の配列を保持したい場合、配列は int 型ではなく double 型である必要があります。

配列内の最小の数値を見つける: そのための可能なオプションはほとんどありません。最初に、ユーザーに最小値から最大値まで値を入力してから、配列 [0] (最初の位置 = 最小値) に到達するように求めることができます。 . ただし、できない/できない場合は、常にクイックソートを使用 してください: http://www.cquestions.com/2008/01/c-program-for-quick-sort.htmlバイナリ検索を使用して希望する値を見つけます: http://www.cquestions.com/2008/01/c-program-for-binary-search.html 希望する値を検索します。

または、O(N) の効率でこのように動作させることもできます。

int heighest_smaller_than_mean = 0;

int least_smaller_than_mean = 平均;

for(i = 0; i < 意味; i++) {

if(heighest_smaller_than_mean < arr[i])
heighest_smaller_than_mean = arr[i];

if(smallest_smaller_than_mean < arr[i])
smallest_smaller_than_mean = arr[i];

}

私があなたを正しく理解していることを願っています:)

于 2013-05-10T07:14:46.570 に答える