乱数から最大値と最小値を求める

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

乱数から最大値と最小値を求める

#1

投稿記事 by sesuna » 2年前

C言語を勉強し始めて数日目の初心者です。「一週間で身につくC言語の基本」というサイト(https://c-lang.sevendays-study.com/prob ... l#problem5

のprob5-6、

「整数型の配列変数dataを作成し、以下の条件のとおりの初期値を入れるものとする。
●大きさは、10 
●値は、1から10の乱数 
このとき、実行例のように、値をすべて表示し、その中の最大値と最小値を表示するようにしなさい。」

という問題を下記のように書きましたが、どうも最小値の表示が乱数の一番最後の数値を拾ってしまいます。

コード:

#include <stdio.h>
#include <time.h>
#include <stdlib.h>

void main(){
    int a, max=0, min=10;
    int b[10];

    srand((unsigned)time(NULL));

    for(a=1; a<=10; a++){
        b[a] = rand() % 10 + 1;
        printf("%d  ",b[a]);

        if(b[a] >= max){
            max = b[a];
        }

        if(b[a] <= min){
            min = b[a];
        }
    }

    printf("\n");
    printf("最大値:%d\n", max);
    printf("最小値:%d\n", min);
}
実行結果例:
10 4 2 4 10 7 10 1 2 7
最大値:10
最小値:7


こちらのサイトから答えをそのままコピペして実行しても同じ様になってしまいます(https://github.com/shalad2/1-week-progr ... /prob5-6.c

上記のコードは何か間違っていますでしょうか?
それとも環境側の問題でしょうか?
初歩的な質問で申し訳ございません。
宜しくお願いいたします。

[環境]
os:win11,
コンパイラ名:MinGW-gcc
コードエディタ:VSCode

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

Re: 乱数から最大値と最小値を求める

#2

投稿記事 by box » 2年前

コード:

    int b[10];
こう書いたとき、配列bの添字として有効なのは
0~9の10個です。
したがって、

コード:

    for(a=1; a<=10; a++){
このループの回し方が間違っていますので、

コード:

    for (a = 0; a < 10; a++) {
または

コード:

    for (a = 0; a <= 9; a++) {
としなければなりません。まあ普通は前者でしょう。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

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

Re: 乱数から最大値と最小値を求める

#3

投稿記事 by box » 2年前

そもそもbは配列である必要性が全くない(後で再利用しているわけでもない)ので、
こんな感じでいいんじゃないでしょうか。

コード:

#include <stdio.h>
#include <time.h>
#include <stdlib.h>

int main(void)
{
    int num, i, max = 1, min = 10;

    srand((unsigned) time(NULL));
    for (i = 0; i < 10; i++){
        num = rand() % 10 + 1;
        printf("%d  ", num);

        if (num >= max) {
            max = num;
        }

        if (num <= min) {
            min = num;
        }
    }

    printf("\n");
    printf("最大値:%d\n", max);
    printf("最小値:%d\n", min);
    return 0;
}
p.s.
main()の型はintです。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

sesuna

Re: 乱数から最大値と最小値を求める

#4

投稿記事 by sesuna » 2年前

box様

非常に助かりました。
分かりやすいご回答ありがとうございました。

返信

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