![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
double型の配列 a[] と、要素数 n を受け取り、 a の最初の n 要素の平均を値として返す関数
double average(double a[], int n)
および、double型の配列 a[] と、要素数 n を受け取り、 a の最初の n 要素のなかで、それら n 要素の平均値と最も近い値を返す関数
double closest_to_average(double a[], int n)
を作成して、main関数で、平均値と最も近い値を出力しろ
という問題をやってみたのですが、私のプログラムでは実行して、数値を入力した後強制終了されてしまいます。
どこが間違えているのか教えていただけないでしょうか?
以下が私の作ったプログラムです。
----------------------------------------------------------------------
#include <stdio.h>
double average(double a[], int n)
{
int i;
double sum,avg;
sum=0;
for(i=0;i<n;i=i+1){
sum=sum+a[i];
}
avg=sum/n;
return(avg);
}
double closest_to_average(double a[], int n)
{
int i;
double avg,num1,num2,ans;
avg=average(a,n);
num1=avg-a[0];
if(num1<0){
num1=num1*(-1);
}
for(i=1;i<n;i=i+1){
num2=avg-a[i];
if(num2<0){
num2=num2*(-1);
}
if(num1>num2){
num1=num2;
ans=a[i];
}
}
return(ans);
}
int main (void)
{
int i,n;
double a[100];
double ans;
scanf("%d",&n);
for(i=0;i<n;i=i+1){
scanf("%d",a[i]);
}
ans=closest_to_average(a,n);
printf("%f",ans);
return(0);
}
----------------------------------------------------------------------
ちなみに「3 3.0 5.0 11.0」と入力すれば「5.000」となるはずです。
よろしくお願いします。
No.2ベストアンサー
- 回答日時:
前回の質問
http://oshiete.goo.ne.jp/qa/7925962.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なら、「警告レベル」を高いものにする
警告はエラーでは無いので、コンパイル自体は成功します。
実行に影響の無い警告もあります。それは無視してもいいでしょう。
ただ、多くの場合は、実際の動作の不具合に繋るものが多いです。
警告を出すようにして、警告の内容をよく確認した上で、無視する、または、正しく修正する、というのは、勉強の役に立つと思います。
指摘していただいた部分を
for(i=0;i<n;i=i+1){
scanf("%lf",&a[i]);
}
に修正したら成功しました。
初歩的なミスでしたね。
ありがとうございました。
またok-kaneto さんもありがとうございました。
No.1
- 回答日時:
>scanf("%d",a[i]);
ここをよく見なおしてみましょう。
・double型をscanfで入力するときの書式指定文字列は?
・scanf型に指定する変数で何か忘れていませんか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# 質問です 下記のコードを分かりやすく解説お願いします 初心者です #include ‹stdio.h 3 2022/05/26 22:03
- C言語・C++・C# このプログラミングの問題を教えてほしいです。 キーボードからデータ数nとn個のデータを入力し、平均値 3 2022/12/19 22:51
- C言語・C++・C# C言語でif文が予想と違う動きをする件について7 4 2023/03/20 00:26
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# c言語でユーザ関数を利用して複素数のべき乗と絶対値の数列を計算するプログラムが作りたいです。 3 2023/01/29 22:13
- C言語・C++・C# C言語初心者 ポインタについて、お助けください、、 2 2023/03/15 23:50
- C言語・C++・C# C言語(構造体) 3 2022/07/05 20:08
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語を実行すると-infが出てき...
-
doubleの変数にintとintの割り...
-
c言語で、繰り返し文の中で、0....
-
float型とdouble型の変数の違い...
-
プログラムでの数字につく”f”の...
-
C言語の型による処理速度の違い
-
C 開放してるのにエラー(doubl...
-
c言語 標準体重計算のプログラ...
-
C言語 関数プロトタイプ宣言の...
-
方程式を2分法を用いて解くプロ...
-
至急です! マクロ定義で #defi...
-
C言語でポインタを用いた平均,...
-
浮動小数点の定数
-
関数プロトタイプ無しで、引数...
-
C言語で
-
遺伝的アルゴリズムのプログラム
-
C言語の構造体の問題が分かりま...
-
C言語のデバック 領域の二重解...
-
C言語で台形公式を使った二重積...
-
指数の表示
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラムでの数字につく”f”の...
-
C言語を実行すると-infが出てき...
-
float型とdouble型の変数の違い...
-
doubleの変数にintとintの割り...
-
c言語で、繰り返し文の中で、0....
-
C言語 関数プロトタイプ宣言の...
-
関数におけるif文とreturn文に...
-
C 開放してるのにエラー(doubl...
-
C言語の型による処理速度の違い
-
至急です! マクロ定義で #defi...
-
doubleは常に%lfとするべきなのか
-
Cで3乗根を求める方法
-
-1.#IND00と出てしまうのですが...
-
C言語で-23乗を取り扱うには
-
C++で外積
-
2次方程式の解を求めるプログ...
-
方程式を2分法を用いて解くプロ...
-
ニュートン法
-
c言語のコンパイルエラー canno...
-
difftime()について
おすすめ情報