ページ 11

limits.hを使って任意の最大値、最小値を求める

Posted: 2012年12月04日(火) 16:37
by みなみ
5つの任意の最大値、最小値を求めるプログラムを作るのですが、友人にlimits.hを使えばより簡単に作れると言われ作ってみようと思ったのですが、signed int の最大値、最小値が求まるだけでうまく任意の5つの数字のMAX、MINを求められません。

コード:

#include <stdio.h>
#include <limits.h>
int main(void){
  int a[5];
  scanf("%d\n",a[0]);
  scanf("%d\n",a[1]);
  scanf("%d\n",a[2]);
  scanf("%d\n",a[3]);
  scanf("%d\n",a[4]);
  
  printf("MAX=%d, MIN=%d",INT_MAX,INT_MIN);
  return0;
}
どのように改善すればよいのか教えて頂けると助かります。

Re: limits.hを使って任意の最大値、最小値を求める

Posted: 2012年12月04日(火) 16:45
by h2so5
limits.hにそのような機能は存在しないと思います。

Re: limits.hを使って任意の最大値、最小値を求める

Posted: 2012年12月04日(火) 16:48
by box
みなみ さんが書きました:友人にlimits.hを使えばより簡単に作れると言われ
お友達の考えは間違っています。
それから、質問者さんの scanf() の書き方も間違っています。

私だったら、例えば次のように書きます。ほんの一例です。

コード:

#include <stdio.h>

#define N (5)

int main(void)
{
    int a[N], saidai, saishou, i;

    for (i = 0; i < N; i++) {
        printf("a[%d]=", i), scanf("%d", &a[i]);
    }
    for (saidai = saishou = a[0], i = 1; i < N; i++) {
        if (a[i] > saidai) {
            saidai = a[i];
        }
        if (a[i] < saishou) {
            saishou = a[i];
        }
    }
    printf("最大値:%d,最小値:%d\n", saidai, saishou);
    return 0;
}

Re: limits.hを使って任意の最大値、最小値を求める

Posted: 2012年12月04日(火) 17:44
by みなみ
そうだったのですか!その友人はパイソンを使っているようで実際に実行しているところを見てみたところで来ていたような気がしたので(3週間ほど前の事なのでよく覚えていません…汗)出来ると思っていました。

ご丁寧な解答本当にどうもありがとうございました!

Re: limits.hを使って任意の最大値、最小値を求める

Posted: 2012年12月05日(水) 02:27
by かずま
limits.h を使わないプログラムは、最初の1つの数と、残りの4つの数の処理が異なります。

コード:

#include <stdio.h>

int main(void)
{
    int i, n, min, max;

    scanf("%d", &n);
    min = max = n;
    for (i = 1; i < 5; i++) {
        scanf("%d", &n);
        if (n > max) max = n;
        if (n < min) min = n;
    } 
    printf("MAX=%d, MIN=%d\n", max, min);
    return 0;
}
limits.h を使ったプログラムは、5つの数の処理が同じです。

コード:

#include <stdio.h>
#include <limits.h>

int main(void)
{
    int i, n, min = INT_MAX, max = INT_MIN;

    for (i = 0; i < 5; i++) {
        scanf("%d", &n);
        if (n > max) max = n;
        if (n < min) min = n;
    } 
    printf("MAX=%d, MIN=%d\n", max, min);
    return 0;
}