最小値が出力できない、(ド素人質問です)

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら

トピックに返信する


答えを正確にご入力ください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[flash]: OFF
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: 最小値が出力できない、(ド素人質問です)

Re: 最小値が出力できない、(ド素人質問です)

#6

by usao » 1年前

maxやminの「初期値」を決めるのに苦労しているのであれば,
INT_MIN,INT_MAX で初期化しとく形の方が楽に感じられるかもしれない.

Re: 最小値が出力できない、(ド素人質問です)

#5

by box » 1年前

typoその他があったので一部手を加えました。よかったら適当に使ってください。

コード:

#include <stdio.h>

int main(void)
{
    int n, max, min, total = 0, times = 0;

    while (1) {
        printf("input integer(if you input 0, this program will end) ");
        scanf("%d", &n);
        if (n == 0) {
            break;
        }
        if (times == 0) {
            max = min = n;
        }
        else {
            if (n > max) {
                max = n;
            }
            if (n < min) {
                min = n;
            }
        }
        printf("current max is %d\n", max);
        printf("current min is %d\n", min);
        times++;
        total += n;
    }
    if (times != 0) {
        printf("total is %d\n", total);
        printf("iteration is %d\n", times);
        printf("average is %f\n", (double) total / times);
        printf("max is %d\n", max);
        printf("min is %d\n", min);
    }
    return 0;
}

Re: 最小値が出力できない、(ド素人質問です)

#4

by box » 1年前

いきなりゼロを入力したときにゼロ割りが起きそうなので、
こんな風にするのがよいでしょう。フラグ変数は使いませんでした。

コード:

#include <stdio.h>

int main(void)
{
    int n, max, min, total = 0, times = 0;

    while (1) {
        printf("input number(if you inout 0, this program will end) ");
        scanf("%d", &n);
        if (n == 0) {
            break;
        }
        if (times == 0) {
            max = min = n;
        }
        else {
            if (n > max) {
                max = n;
            }
            if (n < min) {
                min = n;
            }
        }
        times++;
        total += n;
    }
    if (times != 0) {
        printf("iteration is %d\n", times);
        printf("average is %f\n", (double) total / times);
        printf("max is %d\n", max);
        printf("min is %d\n", min);
    }
    return 0;
}

Re: 最小値が出力できない、(ド素人質問です)

#3

by みけCAT » 1年前

コード:

        if (n == 0)
            break;
        else
        {
            min = n;
            max = n;
        }
の部分で、0でない値が入力された場合常にminおよびmaxをnに設定してしまいますね。
ここでは、最初の入力でのみminおよびmaxを設定するようにするとよいでしょう。
例えば

コード:

int n, average, max, min;
int isFirst = 1; /* 最初の入力かを表す変数を追加 */
    int total = 0;
    int times = 0;
    while (1)
    {
        printf("数字を入力して下さい(0で終了)");
        scanf("%d", &n);
        if (n == 0)
            break;
        else
        {
            /* 最初の入力でのみminおよびmaxを設定する */
            if (isFirst)
            {
                min = n;
                max = n;
                isFirst = 0;
            }
        }

Re: 最小値が出力できない、(ド素人質問です)

#2

by box » 1年前

仕様の確認です。
10回数値を入力して
数字を入力して下さい(0で終了)
10回という回数が決まっているのか、0を入力するまでずっと
入力し続けるのか、どちらですか?
本質とはあまり関係ないかもしれませんが、コードを書く上ではずいぶん違ってくると思います。

最小値が出力できない、(ド素人質問です)

#1

by たろ » 1年前

C言語を始めたてのド素人の質問です。
10回数値を入力して平均・最大値・最小値を出力するというプログラムで最小値の値が最大値になってしまいます、、、
どなたかお助けいただけますと幸いです。

コード:

int n, average, max, min;
    int total = 0;
    int times = 0;
    while (1)
    {
        printf("数字を入力して下さい(0で終了)");
        scanf("%d", &n);
        if (n == 0)
            break;
        else
        {
            min = n;
            max = n;
        }
        if (n < min)
            min = n;

        printf("最小値は%dです\n", min);

        if (max < n)
            max = n;

        printf("最大値は%dです\n", max);


        total += n;
        times += 1;
    }

    printf("合計値=%d\n", total);
    printf("%d回繰り返しました\n", times);
    printf("平均は%fです\n", (float)total / times);
    printf("最小値は%dです\n", min);
    printf("最大値は%dです\n", max);
    
出力結果

数字を入力して下さい(0で終了)1
最小値は1です
最大値は1です
数字を入力して下さい(0で終了)2
最小値は2です
最大値は2です
数字を入力して下さい(0で終了)3
最小値は3です
最大値は3です
数字を入力して下さい(0で終了)
0
合計値=6
3回繰り返しました
平均は2.000000です
最小値は3です
最大値は3です
最大値は3です

ページトップ