アプリ版:「スタンプのみでお礼する」機能のリリースについて

#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を繰り返すにはどう書いたらいいですか?

A 回答 (6件)

> 前者は、forループの中にifとelseがあるので


forがどのように実行されるのか考えて見ましょう
初期値 、終了条件 、更新
が引数ですよね
終了条件が成立するまでループします

ループの中の 最初のifは 初回かどうかのチェックしているだけです
初回なら dMin dMaxを入力された数値で初期化します
初回で無いなら dMin、dMaxと入力値を比較して条件が成立すればdMin,dMaxの更新をします

回答するときに ある程度検証したものをアップしています
実行してみるなど検証してみてから返答しても遅くないと思いますよ
    • good
    • 0

>質問する時に、なんとなく縦の長さを縮小したかったので


これは分かっていましたが、
少し前の質問で、同じように行数を稼ごうとして、
コメントがでたらめな投稿が在ったので、
あえて突っ込みました。(言い方が酷かったのは申し訳ない)

>printf("max = %lg, min = %lg\n", min, max);
minとmaxがややっこしいですね。
    • good
    • 0

#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;
}
    • good
    • 0

コードは綺麗に書いてください。

見る気が失せます。
せめて、コンパイルを通るコードを
提示していただけ無いでしょうか?
ちなみに、ここでの「b=a」というのはC言語上では
ありえません。aは実数型、bは実数配列型で異なる
オブジェクト型を持っています。

そもそも最大と最小の差を求めるのに、
何故配列が必要なのかが理解できませんが。。。
10個というのはあくまでも入力の回数ですよね?

必要なのは。
・最大を格納する変数
・最小を格納する変数
・入力用変数

入力

現在の最大値より大きいなら最大に格納

現在の最小より小さいなら最小に格納

10回目の入力でなければ再度「入力へ」

10回終わったので最大と最小の差を求める
これでいけそうですが。。。

この回答への補足

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

補足日時:2007/11/15 13:48
    • good
    • 0

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を書き換え
}
    • good
    • 0

最小値と最大値を記憶する変数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 );

といった具合です ・・・
# 字下げには 全角スペースを使用しています

この回答への補足

ありがとうございます。 

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

補足日時:2007/11/15 13:43
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!