課題 1.1 3つの数の最大値


<問題>

3つの整数、a, b, cを入力し、一番大きい整数を出力しなさい。

<実行結果>

1番目の整数を入力してください: 2
2番目の整数を入力してください: 27
3番目の整数を入力してください: 5
一番大きい数は 27です。

<ヒント>




解答例

#include <stdio.h>

int main(void) {
    int a, b, c;
    int m;

    printf("1番目の整数を入力してください: ");
    scanf("%d", &a);
    printf("2番目の整数を入力してください: ");
    scanf("%d", &b);
    printf("3番目の整数を入力してください: ");
    scanf("%d", &c);

    /* 以下、最大値を求めプリントしよう。上のプログラムを使わないものでもよい */

/* 素直な条件
    if (a > b && a > c)
        m = a;
    if (b > a && b > c)
        m = b;
    if (c > a && c > b)
        m = c;
*/

/* if else の利用。{ } のない場合わけ
    if (a >= b)
        if (a >= c)
            m = a;
        else
            m = c;
    else if (b >= c)
        m = b;
    else
        m = c;
*/

/* 上のプログラムに { } をつけると 
    if (a >= b) {
        if (a >= c)
            m = a;
        else
            m = c;
    } else {
        if (b >= c)
            m = b;
        else
            m = c;
    }
*/

/* 勝ち抜き型。配列の要素の最大値を求めるときにも、このパターン */
    m = a;
    if (b > m)
        m = b;
    if (c > m)
        m = c;

    printf("一番大きい数は %dです。\n", m  );

    return 0;
}


/*
フィンランドのサエニエミによるプログラミングの学習に関する研究 Sajaniemi. J (2005)は、
プログラム中の変数の使い方(役割)に注目して、プログラムを読もう/作ろうと主張しています。

11の役割のうち、暫定最大値にあたるmは、most wanted holderという役割。
仮の訳語を付けました。皆さんのアイディアをお待ちします。 2023.9
*/

#define _CRT_SECURE_NO_WARNINGS  /* Visual Studioでscanfの警告オフ */

#include <stdio.h>

int main(void) {
    int a, b, c;
    int m;

    printf("1番目の整数を入力してください: ");
    scanf("%d", &a);                                                                          
    printf("2番目の整数を入力してください: ");
    scanf("%d", &b);
    printf("3番目の整数を入力してください: ");
    scanf("%d", &c);

    /* 勝ち抜き型。配列の要素の最大値を求めるときにも、このパターン */
    m = a;   /* mは暫定候補の値。「今のところ最も適当な値」を保持する変数。(暫定候補の変数 most wanted holder) */

    if (b > m)
        m = b;
    if (c > m)
        m = c;

    printf("一番大きい数は %dです。\n", m  );

    return 0;
}