• 締切済み

配列にデータを10個読み込み、最大のものと、最小のものの差を求めるプログラム

#include <stdio.h> int main(){ double a,b[10]; int c,i; a=0; for(i=0;i<=10;i++) { scanf("%lf", &b[i] ); }if ( b[i] > a ){ b= a; }return 0;} 最大値と最小値を求めるのに、b=aを繰り返すにはどう書いたらいいですか?

みんなの回答

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.6

> 前者は、forループの中にifとelseがあるので forがどのように実行されるのか考えて見ましょう 初期値 、終了条件 、更新 が引数ですよね 終了条件が成立するまでループします ループの中の 最初のifは 初回かどうかのチェックしているだけです 初回なら dMin dMaxを入力された数値で初期化します 初回で無いなら dMin、dMaxと入力値を比較して条件が成立すればdMin,dMaxの更新をします 回答するときに ある程度検証したものをアップしています 実行してみるなど検証してみてから返答しても遅くないと思いますよ

  • aris-wiz
  • ベストアンサー率38% (96/252)
回答No.5

>質問する時に、なんとなく縦の長さを縮小したかったので これは分かっていましたが、 少し前の質問で、同じように行数を稼ごうとして、 コメントがでたらめな投稿が在ったので、 あえて突っ込みました。(言い方が酷かったのは申し訳ない) >printf("max = %lg, min = %lg\n", min, max); minとmaxがややっこしいですね。

  • mac_res
  • ベストアンサー率36% (568/1571)
回答No.4

#include <stdio.h> #include <stdlib.h> #include <values.h> #define N_BUF 1024 int main() { char buf[N_BUF]; double a, max, min, b[10]; int c, i; min = MAXDOUBLE; max = -min; for (i = 0; i < 10; i++) { fgets(buf, N_BUF, stdin); a = atof(buf); if (min > a) { min = a; } if (max < a) { max = a; } b[i] = a; } for (i = 0; i < 10; i++) { printf("b[%d] = %lg\n", i, b[i]); } printf("max = %lg, min = %lg\n", min, max); return 0; }

  • aris-wiz
  • ベストアンサー率38% (96/252)
回答No.3

コードは綺麗に書いてください。見る気が失せます。 せめて、コンパイルを通るコードを 提示していただけ無いでしょうか? ちなみに、ここでの「b=a」というのはC言語上では ありえません。aは実数型、bは実数配列型で異なる オブジェクト型を持っています。 そもそも最大と最小の差を求めるのに、 何故配列が必要なのかが理解できませんが。。。 10個というのはあくまでも入力の回数ですよね? 必要なのは。 ・最大を格納する変数 ・最小を格納する変数 ・入力用変数 入力 ↓ 現在の最大値より大きいなら最大に格納 ↓ 現在の最小より小さいなら最小に格納 ↓ 10回目の入力でなければ再度「入力へ」 ↓ 10回終わったので最大と最小の差を求める これでいけそうですが。。。

jlnh
質問者

補足

 ここでは、コンパイルできるコードがなく、自分なりにここまでできたというコードを書いただけです。質問する時に、なんとなく縦の長さを縮小したかったので、横に並べて書いていました。ずっとそうしていましたが、これからはそのままの形でペーストしようとおもいます。

回答No.2

int min_val = b[0]; int max_val = b[0]; for ( i = 1; i < 10; ++i ) {  min_valとb[i]を比較し必要ならmin_valを書き換え  max_valとb[i]を比較し必要ならmax_valを書き換え }

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

最小値と最大値を記憶する変数2個を準備しないといけないのではありませんか 入力のforが終了してからもう一度検査用のループをまわすとか 入力中に最大値 最小値を記憶しながらループするとか 前者なら double dMax, dMin, b[10]; for( i=0; i < 10; i++ ) {   scanf("%lf"< &b[i] );   if ( i == 0 ) {     dMax = dMin = b[0];   } else {     if ( b[i] < dMin ) {       dMin = b[i];     }     if ( b[i] > dMax ) {       dMax = b[i];     }   } } printf( "%lf\n", dMax - dMin ); 後者なら dMin = dMax = b[0]; for( i=1; i < 10; i++ ) {   if ( b[i] < dMin ) {     dMin = b[i];   }   if ( b[i] > dMax ) {     dMax = b[i];   } } printf( "%lf\n", dMax - dMin ); といった具合です ・・・ # 字下げには 全角スペースを使用しています

jlnh
質問者

補足

ありがとうございます。  前者は、forループの中にifとelseがあるので、 dMax = dMin = b[0]; } else {if ( b[i] < dMin ) { dMin = b[i]; }if ( b[i] > dMax ) { dMax = b[i]; を繰り返すことができるのですか?

関連するQ&A