• ベストアンサー

プログラム(C)

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

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

最初の入力を別処理すれば最大値、最小値の初期値を悩まなくてすみますね。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; }

tadashi1111
質問者

お礼

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

その他の回答 (5)

回答No.6

>EOFの検出により入力の最終を判定する。とはどういうことですか? scanfやfscanfは、入力失敗したときにEOFが返ってきます。例えば"%d"で数字を読むときにアルファベットが入力されたときなどです。 キーボードから入力する場合、DOSの場合EOFはctrl-z、Unixはctrl-Dだったと思います。 fgetcはファイルから1文字読んでファイルの最後かファイルエラーだったらEOFを返します。ファイルの最後なのかファイルエラーだったのかは、foefやferrorで判断します。 fgetsはファイルから1行ずつ読み、ファイルの最後の行かファイルエラーだったらNULLを返します。 いろいろややこしいです。

tadashi1111
質問者

お礼

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

  • elmclose
  • ベストアンサー率31% (353/1104)
回答No.5

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が検出されます。

tadashi1111
質問者

補足

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

  • arukamun
  • ベストアンサー率35% (842/2394)
回答No.3

No.2のarukamunです。 コメントいわれすれましたね。 個数も入力するのかわからなかったので、ESCキーを押すと、最大値、最小値、平均値を出すようにしました。 No.2のプログラムでは負の整数は考えていませんが、必要ですか?

  • arukamun
  • ベストアンサー率35% (842/2394)
回答No.2

とりあえず、サンプルプログラムを書いておきますね。 #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 ; }

tadashi1111
質問者

補足

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

  • elmclose
  • ベストアンサー率31% (353/1104)
回答No.1

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とを出力; 以上のような感じでどうですか?

tadashi1111
質問者

補足

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

関連するQ&A

専門家に質問してみよう