• 締切済み

C言語でのソースファイル

n個の整数データを入力し、最後に平均を出力 nは最初に入力する(nは自然数) 平均は小数部まで求める 実行例として 入力するデータ数は? 3 NO. 1 :12 NO. 2 :7 NO. 3 :4 以上3個の平均 :7.666667 こんな感じにしたいのですができません どなたか教えてください。 お願いします。

みんなの回答

  • yama5140
  • ベストアンサー率54% (136/250)
回答No.5

☆#1 補足ソースの重要な誤りは、for 文をいつまでループするかの「条件式」が、「代入」になっていることです。  「入力するデータ数『まで』入力を繰り返す」とすべきところが、「 y は、入力するデータ数」となっている。  for文の書式。   for( 式1; 条件式; 式2 ){     文   }   式1 → 条件式 → 文 → 式2(閉じ波括弧部分で)→ 条件式 → 文 → 式2・・・の順番   式1「のみ」が、一度だけ実行。   式2は、1回のループ「毎」の最後に実行(そして、「条件式」へ)。  このことから、補足ソースの for 文内の「文」としての y++; は不要です。   (注:No.3 さんのソースで、2バイト文字から「数」を取り出す部分では、2バイト目を指定するためソースのとおり i++; が必要) 蛇足 >入力するデータ数は? 3  この"3"は、もちろん、本チャンでは半角の 3 で「入力する」のですよね。  ( No.3 さんは、質問本文どおりに『全角』として回答) #include<stdio.h> void main( void ) {  int x, y, z, sum = 0;  double ave = -99.9;  printf( "入力するデータ数は? " );  scanf( "%d", &x );  for( y = 1; y <= x; y++ ){ // 動作の根幹に関わる誤りのあった行( = → <= )   printf( "No.%2d ", y );   scanf( "%d", &z );   sum += z;  }  if( x ) ave = (double)sum / (double)x;  printf( "以上 %d 個の平均は: %.6lf", x, ave ); } 注:インデントに全角空白を用いています。コピペ後、タブに一括変換して下さい。

全文を見る
すると、全ての回答が全文表示されます。
  • mk48a
  • ベストアンサー率56% (1133/2007)
回答No.4

確認はしていないですが、 -----> int x,y,z,sum; double ave;/*平均値*/ y=1; ※1 これの意図が不明。単なる初期化? sum=0; printf("入力するデータ数は? "); scanf(" %d", &x); ※2 変数xを入力データ数とする if(x>1) ※3入力データ数が1の場合計算されない(x>0)とするべきか?あと、1>xの場合の処理も記述すべき { for(y=1; y=x; y++){ ※4 yはループのカウンター?一般的にカウンターにはi,j,kを用いた方がわかりやすい printf("No .%d",y); y++; ※5 この行はいらないと思われる。for文でy++しているのでfor文を回るとy=y+2になってしまう。 scanf("%d", &z); sum=sum+z; } ave=sum/x; ※6 このままではintの割り算になっているので、sum、xをdoubleにキャストする printf("以上%d個の平均は:%.6f",x,ave); ※7 aveはdoubleなので、%.6lfのほうが良いはず <----- ※5が原因で、入力するデータ数を奇数にするとfor文の終了条件を満たさなくなります。

全文を見る
すると、全ての回答が全文表示されます。
  • ssk38
  • ベストアンサー率44% (22/49)
回答No.3

#include <stdio.h> #include <stdlib.h> #include <string.h> int input_integer(char buf[1024]) { fgets(buf, 1024, stdin); if (buf[strlen(buf)-1] == '\n') { buf[strlen(buf)-1] = '\0'; } return atoi(buf); } int input_integer_SJIS(char buf[1024]) { int i,j=0,len; char ascii[1024] = {0}; char SJIS[10]; char tmp[3]; strcpy(SJIS, "0"); len = strlen(fgets(buf, 1024, stdin)); if (buf[strlen(buf)-1] == '\n') { buf[strlen(buf)-1] = '\0'; len--; } for (i=0; i<len; i++) { i++; ascii[j++] = buf[i] - SJIS[1] + '0'; } return atoi(ascii); } int main(int argc, char *argv[]) { int i; int num,sum = 0; char bufnum[1024]; char bufsum[1024]; printf("入力するデータ数は? "); fflush(stdout); num = input_integer_SJIS(bufnum); if (num < 0) { /* エラー処理 */ return 1; } for (i=0; i<num; i++) { printf("NO.%2d :", i); fflush(stdout); sum += input_integer(bufsum); } printf("以上%s個の平均 :%lf\n", bufnum, 1.0*sum/num); return 0; }

全文を見る
すると、全ての回答が全文表示されます。
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

ave=sum/x; printf("以上%d個の平均は:%.6f",x,ave); とした場合 aveには sum/xの整数部しか代入されないでしょう sum も x も intで宣言されていますので sun/xという式もintで評価されます ave = sum; ave = ave / x; または ave /= x; キャストをするなら ave = (double)sum / x; または ave = (double)sum / (double)x; といった具合でいいでしょう printfでdoubleを出力する際は lfのほうがいいかもしれません > printf("以上%d個の平均は:%.6lf", x, ave);

llion222
質問者

補足

言われたとおりにしてみましたができませんでした そもそもデータ入力数を入力した後のNO.? :がずっと続きます

全文を見る
すると、全ての回答が全文表示されます。
  • mk48a
  • ベストアンサー率56% (1133/2007)
回答No.1

ここの場合、課題の丸投げは禁止されているので、自分でここまでやったけどうまくいかなかったというソースを提示するのがルールです。 まぁ、数値の入力にはscanfを使い、計算結果の小数部まで求めるので、doubleの変数に代入すれば良いかと。(計算時にキャストしてもよいけど面倒そうなので) まずは自分の書いたソースを不完全でも良いから出してください。

llion222
質問者

補足

すいません。出すつもりでしたが途中で投稿してしまいました。 #include<stdio.h> void main(void) { int x,y,z,sum; double ave; y=1; sum=0; printf("入力するデータ数は? "); scanf(" %d", &x); if(x>1){ for(y=1; y=x; y++){ printf("No .%d",y); y++; scanf("%d", &z); sum=sum+z; } ave=sum/x; printf("以上%d個の平均は:%.6f",x,ave); } }

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • c言語プログラミングの質問です。

    整数NとN個の整数を受け取り,受け取ったN個の整数のうち最大のものを表示するプログラムを記述せよ. ただし,N>0とする. 入出力例 入力 ⇒ 出力 3 2 1 8 ⇒ 8 5 13 14 11 12 15 ⇒ 15 2 -1 -2 ⇒ -1 という問題です。「3つの数の中から~」という場合はそれぞれa,b,cとおいて比較できるのですが、この問題のような場合はどうすればいいですか。

  • ★C言語の問題です★

    C言語のプログラムの問題なんですが、どなたか以下の問題の1問でも解ける方がいればご回答おねがいします! または、アドバイスだけでもいいのでよろしくお願いします。 【問題】 1 西暦1868年から2007年までの年号を入力して和暦に変更して出力するプログ  ラムを作成するプログラム。  例 入力 1868  出力 明治元年       2007     平成19年 2 整数配列が-32768から32767の範囲の数しか扱えないとしたとき、10桁の整数同士  の足し算を行うプログラム。 3 3桁の整数の値を入力していき、-9999が入力されたところで、それまでに入力  された数の個数と合計を整数で、平均を浮動小数点数で出力するプログラム。 4 3つの文字列”Happy”と“New”と“Year”をつないで1つの文字列として出力する  プログラム。 5 学籍番号、氏名、出席からなる10人分のデータがある。出席の悪いものから並び替  えて表示するプログラム。  例  CA180002 山田太郎 70  CA170001 山田次郎 60  データは、適当なものを使います。

  • c言語プログラミングについて

    回答お願いします!! 3つの整数値をキーボードから入力し、その平均値を求めるものを出力しなさい。 ただし、3つの整数値から平均値を戻り値として返す。 関数double average(intx,inty,intz)を作成し、これを使って平均値の値を出力すること 平均値は小数第二位まで出力せよ 上記の問題がどうしても分かりません!

  • プログラム(C)

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

  • C言語 10進数→2進数

    キーボードで入力された1以上の正の整数n(1~15)を2進数(4bit)で出力するプログラムを作りたいんですが、 出力例に書かれている内容、 -出力例- 正の整数:12 整数 12 を2進数表記すると下位bitより 0011 となります。 ---- 上記の下位bit、というのはどういう意味でしょうか? また、この下位bitというものをどうやってプログラム上で 表記すればいいのでしょうか? 教えてください。

  • C言語について  

    わからないのでよろしくお願いします。何回やってもうまく表示できません。 整数を入力し、入力された整数の数だけ「*」を横一列に表示し、最後に改行するプログラムを while 文を使って作りなさい。 但し、0または負の値が入力された場合は、「*」は表示せず、改行のみを表示すること。 ▼10が入力された場合の実行例 ********** #include<stdio.h> int main(void) { int n, kai; scanf("%d",&n); printf("\n nyuryoku=%d",n); while(0<kai){ kai=kai--; printf("*"); } kai=n; printf("\n"); }

  • c言語でのプログラミング

    キーボードから複数個の正整数値を読み込み,合計値と平均値(小数第1位まで)を表示するプログラムを作りなさい。 ただし入力数値の個数はプログラミング時には決定していない。 負整数が入力されたら入力値はもうなくなったと判断することとし,負の数は計算には使用しないこととする。またデータは少なくとも1つは入力されるものとする。(p02ex15.c) 検証は1から10までの数字すべてを与え,合計値55,平均値5.5が表示されることを確かめること。 (「1,2,3,4,5,6,7,8,9,10,-1」(-1はデータ終わりの合図)を入力して確かめなさい。) また,1から5までの数字すべてを与え,合計値15,平均値3が表示されることを確かめること。 (「1,2,3,4,5,-1」(-1はデータ終わりの合図)を入力して確かめなさい。) このプログラムのソースコードを教えて下さい。 解説もよろしくお願いします。

  • C言語の課題

    C言語の問題です。 正の整数nを入力し、1以上n以下の整数を順次表示例通りに表示すること。0以下の整数が入力されることを考慮する必要はない。 実行例 1*2*3*4*5* 教えて頂けないでしょうか?

  • C言語の課題で

    C言語の課題で 「成績集計プログラム 入力件数nをキーボードより入力し、n人分のテストデータを入力する。その際、合計点、最高点、最低点を求め、最後に平均点を計算しそれぞれを出力するプログラムを作成せよ。ただし、平均点は実数型とし小数点第2位まで出力する。平均点以外の変数は整数型とする。」というのが出ました。 #include <stdio.h> int main(void) { int n,a,b,c; int res,i; printf("入力件数を入力して下さい。\n"); scanf("%d",&n); for(i = 1; i <= n; i++) { printf("点数を入力して下さい。\n"); scanf("%d",&a); printf("%d人目=>%d\n",i,a); if(i == res) break; } return 0; } ここまでは、出来たのですが、後が分かりません。どなたか教えていただけませんか?お願いします。

  • 至急で、C言語の問題で解答解説お願いします。

    1実数を3つ(a,b,c)を読み込み3辺とする三角形ができるか判定(d(d-a)(d-b)(d-c)>0のとき三角形となる)しできなければ、三角形ではありません!というメッセージを表示し、できる場合は以下のヘロンの公式を用いて三角形の面積を求めるプログラムをC言語で答えてください。d=(a+b+c)/2 s=√{d(d-a)(d-b)(d-c) 2maxの整数値(≧1)をキーボードから入力し、その値に対応した図形を出力するプログラムをC言語で答えてください。 例 max1 max2 max3 * ** *** * ** *** * ** *** ** *** *** 3整数nをキーボード入力しnの値に応じて以下の図形を表示するプログラムをc言語で答えてください。 n=3 n=4 n=5 3 4 5 45 56 67 678 789 890 0123 1234 56789 4整数n(≧0)を入力し歯科の計算を実行するC言語プログラムを答えてください。2つの自然数nとmを読み込みn個の中からm個を取り出すときの組み合わせの数を計算せよ。ただし、n!を計算する関数long fact (int n)を定義し必ずそれを用いること。 5 1つのscanfで2つの10進数を入力し8進数と16進数で表示するプログラムをC言語で答えてください。 6 実数aを入力し少数第1位で四捨五入する関数g(a)をマクロ定義で入力した値の少数第1位を四捨五入して出力するプログラムをC言語で答えてください。 7 4つの実数w,x,y,zを読み込みその最大値を出力するプログラムをC言語で答えてください。ただし、2つの実数の大きいほうを求める関数 double my may (double x,double y)を定義し、その関数を用い、if文を用いないでc言語で答えてください。