n個の数値を入力して、その平均値にもっとも近い値を求めよ。(double型の配列を用いること)
nは実数データの前に最初に入力するものとする。
必要ならばnは100以下と仮定せよ。
答えは指数なしの表現で、欄の最小幅は8とし、精度は3とする。
という問題なのですが、作ってみたプログラムでは正しく動作できませんでした。
どこが違うのか教えてください。
以下が私の作ったプログラムです。
_____________________________________________________________________________________________________________________
#include <stdio.h>
int main (void)
{
int i,n;
double c[100],sum,avg,num1,num2,ans;
sum=0.0;
scanf("%d",&n);
for(i=0;i<n;i=i+1)
{
scanf("%lf",&c[i]);
sum=sum+c[i];
}
avg=sum/n;
num1=avg-c[0];
if(num1<0){
num1=num1*(-1);
}
for(i=1;i<n;i=i+1){
num2=avg-c[i];
if(num2<0){
num2=num2*(-1);
}
if(num1>num2);
num1=num2;
}
printf("%8.3f",num1);
return(0);
}
_____________________________________________________________________________________________________________________
ちなみに「3 3.0 5.0 11.0」と入力すれば「5.000」となるはずなのですが、
私のでは「4.667」と表示されてしまいます。
よろしくお願いします。
No.1ベストアンサー
- 回答日時:
if(num1>num2);
num1=num2;
ここが、おそらく意図したものではない、というのが1点
ここでは、「常に」num1=num2; が実行されます。
そのため、最後の |平均 - 11.0| が printf("%8.3f",num1); によって出力されています。
printf("%8.3f",num1);
ここで、num1(平均と値との差)を出力している、というのがもう1点
「差がnum1のときのc[?]の値」を出力する必要があります。
そのためには、「差がnum1のときのc[?]の値」をなんらかの方法で記録する必要があります。
?の値を記憶てもいいし、c[?]の値を記憶してもよいです。
そういえば、ansという変数は使われていませんね
kmee さんの言うとおり、まずif(num1<num2)のところが{}でくくれてなかったのでif文の中身が常に実行されてしまうようになっていました。
あと、出力するものも間違えてました。
if(num1<num2)のときにansにc[i]の値を代入させてansを出力したらできました。
助かりました。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 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# C言語でif文が予想と違う動きをする件について7 4 2023/03/20 00:26
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# C言語初心者 ポインタについて、お助けください、、 2 2023/03/15 23:50
- C言語・C++・C# C言語(構造体) 3 2022/07/05 20:08
- C言語・C++・C# C pointer? or... 2 2022/03/29 00:47
- Excel(エクセル) VBA フォルダ見える化のコードについて 2 2023/06/19 15:04
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- JavaScript JAVASCRIPT 2 2022/04/15 15:10
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
配列を使って魔方陣
-
#if 1 #elseの意味について
-
構文エラー";"が型の前にあり...
-
getcの改行判定
-
C言語のプログラミング (基礎...
-
c言語プログラミングで1から100...
-
C言語 数字以外を入力させない...
-
C言語のwhile文を使った素数判...
-
計算結果がlong型以上になる場...
-
C言語 重複しない4ケタの乱数...
-
raspberrypiでロータリエンコーダ
-
c言語for文
-
C言語基本 2次元配列(for文...
-
10進数からN進数に変換するプロ...
-
C言語で電卓を作成する。
-
和を求める問題
-
C言語 プログラム
-
for文を使用して値を代入したい...
-
while文について、c言語...
-
C言語 入力した数値の平均値の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
構文エラー";"が型の前にあり...
-
#if 1 #elseの意味について
-
for文の中にswitch文はいれられ...
-
getcの改行判定
-
C言語階乗の総和を求める
-
配列を使って魔方陣
-
while文について、c言語...
-
プログラミングで二番目に大き...
-
C言語 数字以外を入力させない...
-
c言語のwhile文を使った計算で...
-
C言語プログラムが理解できなくて…
-
C言語で電卓を作成する。
-
配列を関数に渡す方法
-
C言語の二分法のプログラムにつ...
-
c言語for文
-
scanf関数を用いての加減乗除%...
-
階乗のプログラム!!
-
計算結果がlong型以上になる場...
-
c言語プログラミングで1から100...
-
初心者です。for文、if文を使っ...
おすすめ情報