アセロラ

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

アセロラ

#1

投稿記事 by 最小値が出てこない » 8年前

5人の点数を入力して合計と平均、最大値、最小値を出力したいのですが、最小値だけ出てきません。
何が問題なのでしょうか?
恐らく初歩的なミスかもしれませんが、よろしくお願いします。

コード:

#include<stdio.h>
#define num 5
int main(void)
{
	int a[num];
	int i, j, k;
	int sum, max, min, ave;

	sum = 0;
	max = 0;
	min = 0;

	printf("テストの点数を入力\n");
	for (i = 0; i < num; i++){
		scanf("%d", &a[i]);
		sum += a[i];
		ave = sum / 5;

		if (max < a[i]){
			max = a[i];
			if (min > a[i]){
			min = a[i];
		}
		
		}
	
	}
	printf("合計:%d,平均:%d,最大値:%d,最小値:%d\n", sum,ave,max,min);
	return 0;
}

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: アセロラ

#2

投稿記事 by みけCAT » 8年前

最小値が出てこない さんが書きました:何が問題なのでしょうか?
  • maxおよびminの初期値を0に決め打ちしてしまうのはよくありません。
  • minを更新する処理を含むif文の位置がおかしいです。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アセロラ

Re: アセロラ

#3

投稿記事 by アセロラ » 8年前

何処の部分のif文を入れれば出力されるでしょうか?
いろいろ試しましたが、どうしても出てくれません。

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: アセロラ

#4

投稿記事 by みけCAT » 8年前

アセロラ さんが書きました:何処の部分のif文を入れれば出力されるでしょうか?
if文を入れる…???
むしろminを更新する部分のif文をmaxを扱うif文から出すべきです。
また、今のコードから全く変えずに適当にテストしたところ、きちんと出力されました。

ところで、せっかくnumを定義しているのにaveの計算で5というマジックナンバーを用いているのもよくないですね。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アセロラ

最小値が出てこない

#5

投稿記事 by アセロラ » 8年前

コード:

#include<stdio.h>
#define num 5
int main(void)
{
	int a[num];
	int i, j, k;
	int sum, max, min, ave;

	sum = 0;
	max = 0;
	min = 0;

	printf("テストの点数を入力\n");
	for (i = 0; i < num; i++){
		scanf("%d", &a[i]);
		sum += a[i];
		ave = sum / num;

		
		if (max < a[i]){
			max = a[i];
		}
		else if (min > a[i]){
			
			min = a[i];
		}
	
	}
	printf("合計:%d,平均:%d,最大値:%d,最小値:%d\n", sum,ave,max,min);
	return 0;
}
出力自体はできるのですが、数字を入力した後に最小値だけどんな数字を入れても0になってしまいます。

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: 最小値が出てこない

#6

投稿記事 by みけCAT » 8年前

アセロラ さんが書きました:出力自体はできるのですが、数字を入力した後に最小値だけどんな数字を入れても0になってしまいます。
本当ですか?
最小値が0にならない入力が存在すると思うのですが…処理系の不都合でしょうか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アセロラ

最小値が出てこない

#7

投稿記事 by アセロラ » 8年前

入力しても、

テストの点数を入力
37
45
83
68
45
合計:278,平均:55,最大値:83,最小値:0
続行するには何かキーを押してください...

とでできます。

box
記事: 2002
登録日時: 13年前

Re: アセロラ

#8

投稿記事 by box » 8年前

機能別に関数を分ける方が、結果として見通しがよくなると思います。
入力は入力に徹する。
最大値を求めるのはそれに徹する。
最小値を求めるのはそれに徹する。

コード:

#include <stdio.h>

#define N (5)

int getTensuu(int *tensuu)
{
    int goukei, ten, i;

    printf("テストの点数を入力してください\n");
    for (goukei = i = 0; i < N; i++) {
        printf("%d人目:", i + 1), scanf("%d", &ten);
        tensuu[i] = ten, goukei += ten;
    }
    return goukei;
}

int getSaidai(int *tensuu)
{
    int saidai = tensuu[0], i;

    for (i = 1; i < N; i++) {
        if (tensuu[i] > saidai) {
            saidai = tensuu[i];
        }
    }
    return saidai;
}

int getSaishou(int *tensuu)
{
    int saishou = tensuu[0], i;

    for (i = 1; i < N; i++) {
        if (tensuu[i] < saishou) {
            saishou = tensuu[i];
        }
    }
    return saishou;
}

int main(void)
{
    int tensuu[N], goukei;

    goukei = getTensuu(tensuu);
    printf("合計は%d点\n", goukei);
    printf("平均は%f点\n", (double) goukei / N);
    printf("最大は%d点\n", getSaidai(tensuu));
    printf("最小は%d点\n", getSaishou(tensuu));
    return 0;
}
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

box
記事: 2002
登録日時: 13年前

Re: アセロラ

#9

投稿記事 by box » 8年前

最大値と最小値を求める関数を一緒くたにするなら

コード:

#include <stdio.h>

#define N (5)

int getTensuu(int *tensuu)
{
    int goukei, ten, i;

    printf("テストの点数を入力してください\n");
    for (goukei = i = 0; i < N; i++) {
        printf("%d人目:", i + 1), scanf("%d", &ten);
        tensuu[i] = ten, goukei += ten;
    }
    return goukei;
}

void getSaidaiSaishou(int *tensuu, int *saidai, int *saishou)
{
    int i;

    for (*saidai = *saishou = tensuu[0], i = 1; i < N; i++) {
        if (tensuu[i] > *saidai) {
            *saidai = tensuu[i];
        }
        if (tensuu[i] < *saishou) {
            *saishou = tensuu[i];
        }
    }
}

int main(void)
{
    int tensuu[N], goukei, saidai, saishou;

    goukei = getTensuu(tensuu);
    printf("合計は%d点\n", goukei);
    printf("平均は%f点\n", (double) goukei / N);
    getSaidaiSaishou(tensuu, &saidai, &saishou);
    printf("最大は%d点\n", saidai);
    printf("最小は%d点\n", saishou);
    return 0;
}
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

かずま

Re: 最小値が出てこない

#10

投稿記事 by かずま » 8年前

アセロラ さんが書きました:入力しても、

テストの点数を入力
37
45
83
68
45
合計:278,平均:55,最大値:83,最小値:0
続行するには何かキーを押してください...

とでできます。
[ 0 37 45 83 68 45 ] の最大値は 83、
[ 0 37 45 83 68 45 ] の最小値は 0
であっています。
入力は 37 からでも、プログラムが 0 からになっていますよ。

閉鎖

“C言語何でも質問掲示板” へ戻る