電子書籍の厳選無料作品が豊富!

n個の整数値をキーボードから打ちその最大値、最小値、平均値を表示するプログラムがわかりますか?平均値は小数第一位までもとめます。

A 回答 (6件)

最初の入力を別処理すれば最大値、最小値の初期値を悩まなくてすみますね。

limits.hをインクルードしてintの最大値INT_MAXと最小値INT_MINを使う手もありますが。。

#include <stdio.h>

int main(void) {
 int i,n,data,max,min,sum;
 /* nを入力 */
 printf("n? "); scanf("%d",&n);
 if (n<1) { printf("n error\n"); return -1;}
 /* 最初のデータ */
 printf("data %d?",1); scanf("%d",&data);
 max=min=sum=data;
 /* 2回目以降のデータ */
 for (i=1; i<n; i++) {
  printf("data %d?",i+1); scanf("%d",&data);
  if (data>max) max=data;
  if (data<min) min=data;
  sum += data;
 }
 /* 表示 */
 printf("最大=%d 最小=%d 平均=%.1f\n",max,min,sum,(double)sum/(double)n);
 return 0;
}
    • good
    • 1
この回答へのお礼

ありがとうございます。やってみます。

お礼日時:2004/10/25 20:45

>EOFの検出により入力の最終を判定する。

とはどういうことですか?

scanfやfscanfは、入力失敗したときにEOFが返ってきます。例えば"%d"で数字を読むときにアルファベットが入力されたときなどです。
キーボードから入力する場合、DOSの場合EOFはctrl-z、Unixはctrl-Dだったと思います。

fgetcはファイルから1文字読んでファイルの最後かファイルエラーだったらEOFを返します。ファイルの最後なのかファイルエラーだったのかは、foefやferrorで判断します。

fgetsはファイルから1行ずつ読み、ファイルの最後の行かファイルエラーだったらNULLを返します。
いろいろややこしいです。
    • good
    • 0
この回答へのお礼

今ごろすみません。N04なのですが実行したら
<n?となり入力しても最大値などが表示されなく終了してしまいます。どうしたらいいでしょうか?

お礼日時:2004/11/16 18:41

No.1です。

nが与えられているのではなく、EOF検出まで入力を続けるのでしたら、

max=-99999;min=99999;sum=0;n=0;
while (EOF!=scanf("......", ......) /*scanfでnumに格納*/)
{
  max<numならばmax=num;
  min>numならばmin=num;
  sum+=num;
  n++;
}
maxとminとsum/nとを出力;

以上です。

>EOFの検出により入力の最終を判定する。とはどういうことですか?
キーボードからでしたら、EOFに相当するのは、CTRL-D(Ctrlキーを押しながらDを押す)だったように記憶しています。
scanf の代わりにfscanfを使うとファイルからの入力ができます。ファイルからの入力の場合は、ファイルの終了時にEOFが検出されます。

この回答への補足

ありがとうございます。上のようなプログラムも作ってみます。

補足日時:2004/10/25 20:47
    • good
    • 0

No.2のarukamunです。



コメントいわれすれましたね。
個数も入力するのかわからなかったので、ESCキーを押すと、最大値、最小値、平均値を出すようにしました。

No.2のプログラムでは負の整数は考えていませんが、必要ですか?
    • good
    • 0

とりあえず、サンプルプログラムを書いておきますね。



#include <stdio.h>
#include <conio.h>

int main()
{
int i,ival,imax,imin,isum,icnt ;

icnt = 0 ;
imax = 0 ;
imin = 0x7ffffff ;
isum = 0 ;
ival = 0 ;
do {
i=getch();
if ( i >= '0' && i <= '9' ){
printf("%c",(char)i);
ival *= 10 ;
ival += i-'0' ;
} else if ( ival > 0 && ( i == 0x0d || i == 0x1b ) ){
printf("\n");
icnt ++ ;
isum += ival ;
if ( ival > imax ){
imax = ival ;
}
if ( ival < imin ){
imin = ival ;
}
ival = 0 ;
}
} while ( i != 0x1b );
printf("max : %d\nmin : %d\nave : %d.%1d\n",imax,imin,isum/icnt,(10*isum/icnt)%10);

return icnt ;
}

この回答への補足

ありがとうございます。一度試してみます☆

補足日時:2004/10/25 20:24
    • good
    • 0

nが与えられているものとすると



max=-99999;min=99999;sum=0;
i=1からnまで繰り返し、
{
  scanf()等で整数値を得て、numに格納;
  max<numならばmax=num;
  min>numならばmin=num;
  sum+=num;
}
maxとminとsum/nとを出力;

以上のような感じでどうですか?

この回答への補足

ありがとうございます☆やってみます。聞きたいんですけど小数第一位までだとfloatを使って%6.1fを使えばいいんですよね?追加でEOFの検出により入力の最終を判定する。とはどういうことですか?終わりにしたいときにEOFと竜力すばいいのですか?文が長くなりすみません・・・。

補足日時:2004/10/25 19:52
    • good
    • 0

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