• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C言語 入力した数値の平均値の近似値(関数を利用))

C言語 入力した数値の平均値の近似値(関数を利用)

このQ&Aのポイント
  • C言語で入力した数値の平均値の近似値を求める関数を作成し、最も近い値を出力するプログラムが正常に実行されない場合、どこが問題なのかを教えてください。
  • プログラムは、配列a[]と要素数nを受け取り、配列aの最初のn要素の平均値を返すaverage関数と、配列a[]と要素数nを受け取り、配列aの最初のn要素の中で平均値に最も近い値を返すclosest_to_average関数を作成しています。
  • しかし、数値を入力した後にプログラムが強制終了してしまい、正しい結果を出力できません。どこが間違っているのか、教えていただけないでしょうか?

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

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

前回の質問 http://okwave.jp/qa/q7925962.html で、c[i]に入力する部分は for(i=0;i<n;i=i+1) { scanf("%lf",&c[i]); sum=sum+c[i]; } こうなっていました。 sum=sum+c[i]は、今回は別の関数へ移ったので不要になります。 取り込む変数も c[]からa[]になりました。 それを考えて、今回のプログラムでの入力部分 for(i=0;i<n;i=i+1){ scanf("%d",a[i]); } と比較すると、違いがあるのがわかります。 どんなコンパイラを使っているか、わかりませんが コンパイラによっては、警告表示を高レベルに設定することで、今回のような不具合に「警告」を出すことができます # 例えば、 gcc なら -Wall オプションを付ける # Visual Studioなら、「警告レベル」を高いものにする 警告はエラーでは無いので、コンパイル自体は成功します。 実行に影響の無い警告もあります。それは無視してもいいでしょう。 ただ、多くの場合は、実際の動作の不具合に繋るものが多いです。 警告を出すようにして、警告の内容をよく確認した上で、無視する、または、正しく修正する、というのは、勉強の役に立つと思います。

butamushi
質問者

お礼

指摘していただいた部分を for(i=0;i<n;i=i+1){ scanf("%lf",&a[i]); } に修正したら成功しました。 初歩的なミスでしたね。 ありがとうございました。 またok-kaneto さんもありがとうございました。

その他の回答 (1)

  • ok-kaneto
  • ベストアンサー率39% (1798/4531)
回答No.1

>scanf("%d",a[i]); ここをよく見なおしてみましょう。 ・double型をscanfで入力するときの書式指定文字列は? ・scanf型に指定する変数で何か忘れていませんか?

関連するQ&A