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ランキング
-
プログラムでの数字につく”f”の...
-
float型とdouble型の変数の違い...
-
doubleの変数にintとintの割り...
-
c言語で、繰り返し文の中で、0....
-
至急です! マクロ定義で #defi...
-
C言語で-23乗を取り扱うには
-
floating point not loadedとは?
-
C言語の型による処理速度の違い
-
数値を指数部と仮数部に分離したい
-
C 開放してるのにエラー(doubl...
-
int とdoubleの比較
-
関数におけるif文とreturn文に...
-
-1.#IND00 をデバッグしたい
-
C言語を実行すると-infが出てき...
-
doubleは常に%lfとするべきなのか
-
相互相関関数
-
C++で割り算の結果を昇順に出力...
-
C言語でポインタを用いた平均,...
-
配列を戻り値にして逆行列を求...
-
Cで3乗根を求める方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラムでの数字につく”f”の...
-
doubleの変数にintとintの割り...
-
C 開放してるのにエラー(doubl...
-
Cで3乗根を求める方法
-
float型とdouble型の変数の違い...
-
至急です! マクロ定義で #defi...
-
C言語の型による処理速度の違い
-
int とdoubleの比較
-
関数におけるif文とreturn文に...
-
C言語初心者 構造体 課題について
-
c言語のコンパイルエラー canno...
-
C言語 関数プロトタイプ宣言の...
-
C言語を実行すると-infが出てき...
-
float?数字の後にLがつくもの
-
数値を指数部と仮数部に分離したい
-
difftime()について
-
浮動小数点数が表示されないん...
-
たくさんの数の平均を求める方...
-
DWORDの警告
-
-1.#IND00と出てしまうのですが...
おすすめ情報