返信遅くなり申し訳ありません。かずまさん参考例を教えていただきありがとうございます。
プログラムが目的通りに動作してくれなかった原因
1.自作関数内で、数値の読み込み(scanf)をやろうとしたこと
2.関数内で、読み込んだ数値が-1出ない時にループを回すコードを書いていなかったこと
2.最後にmain関数で11個目の数値が読み込まれた時の処理のことを考えていなかったこと
3.無駄な引数を宣言していたこと
などがありました。
かずまさんの参考例を元にしながら、修正した点
1.main関数内で、数値の読み込みを行うようにする
2.関数内のforループは、読み込んだ数値が-1出ない時にループを回すようにする
3.main関数内で、11個目の数値が、読み込まれた時にどうするのかくこと。
4.無駄な引数は、消去したこと
プログラム(少し言葉を変えました)は、一応動きましたが、理解出来なかった点
1.
コード:
if (i == 11) { printf("入力は最大10個までです。\n"); return 1; }
main関数内のループは、iが0から10までしか増えないと思うのですが、ループを抜けた後に、ifの条件でどうしてi==10ではなく、i==11になるのでしょうか? 実際にiが10でやると、数値の嵐になりました。
又、return 1というのは、どういった意味なのでしょうか? 戻り値で1を返しいることぐらいしか分かりません。
2.出力は%fに変えてしまったのですが、出力の%gの方がよいのでしょうか?
返信遅くなり申し訳ありません。かずまさん参考例を教えていただきありがとうございます。
プログラムが目的通りに動作してくれなかった原因
1.自作関数内で、数値の読み込み(scanf)をやろうとしたこと
2.関数内で、読み込んだ数値が-1出ない時にループを回すコードを書いていなかったこと
2.最後にmain関数で11個目の数値が読み込まれた時の処理のことを考えていなかったこと
3.無駄な引数を宣言していたこと
などがありました。
かずまさんの参考例を元にしながら、修正した点
1.main関数内で、数値の読み込みを行うようにする
2.関数内のforループは、読み込んだ数値が-1出ない時にループを回すようにする
3.main関数内で、11個目の数値が、読み込まれた時にどうするのかくこと。
4.無駄な引数は、消去したこと
プログラム(少し言葉を変えました)は、一応動きましたが、理解出来なかった点
1.
コード:
if (i == 11) { printf("入力は最大10個までです。\n"); return 1; }
main関数内のループは、iが0から10までしか増えないと思うのですが、ループを抜けた後に、ifの条件でどうしてi==10ではなく、i==11になるのでしょうか? 実際にiが10でやると、数値の嵐になりました。
又、return 1というのは、どういった意味なのでしょうか? (数値が11個入力されたときに、戻り値の1をmainに返すという意味ですか?)
2.出力の変換指定は%fに変えてしまったのですが、出力の変換指定は%gの方がよいのでしょうか?
%fは、実数を出力し、%gは、実数を最適な形式で出力するとネットにかいてあったのですが、違いが良く分かりません。
まだまだ分かっておらず、申し訳ないのですが、教えて下さい。よろしくお願いします。
コード:
#include <stdio.h>
double 平均(double X[])
{
double heikin = 0;
int i;
for (i = 0; X[i] != -1; i++) {
heikin += X[i];
}
X[i] = -1;
return heikin / i;
}
double 変換平均(double X[], double Y[])
{
double sum = 0;
int i;
for (i = 0; X[i] != -1; i++) {
Y[i] = (X[i] - 100.0) / 100.0;
sum += Y[i];
}
Y[i] = -1;
return sum / i;
}
int main(void)
{
double X[11], Y[11], ave;
printf("100.0 から 200.0 の間の小数を入力してください(最大10個,-1で終了)\n");
int i;
for (i = 0; i < 11; i++) {
scanf_s("%lf", &X[i]);
if (X[i] == -1) break;
}
if (i == 11) { printf("入力は最大10個までです。\n"); return 1; }
printf("入力されたデータ:\n");
for (int i = 0; X[i] != -1; i++)
printf(" %f", X[i]);
printf("\n");
ave = 平均(X);
printf("入力されたデータの平均値は %f です。\n", ave);
ave = 変換平均(X, Y);
printf("0-1間変数への変換をかけたデータ:\n");
for (int i = 0; Y[i] != -1; i++)
printf(" %f", Y[i]);
printf("\n");
printf("変換をかけたデータの平均値は %f です。\n", ave);
return 0;
}
教えて下さい。よろしくお願いします。
コード:
#include <stdio.h>
double 平均(double X[])
{
double heikin = 0;
int i;
for (i = 0; X[i] != -1; i++) {
heikin += X[i];
}
X[i] = -1;
return heikin / i;
}
double 変換平均(double X[], double Y[])
{
double sum = 0;
int i;
for (i = 0; X[i] != -1; i++) {
Y[i] = (X[i] - 100.0) / 100.0;
sum += Y[i];
}
Y[i] = -1;
return sum / i;
}
int main(void)
{
double X[11], Y[11], ave;
printf("100.0 から 200.0 の間の小数を入力してください(最大10個,-1で終了)\n");
int i;
for (i = 0; i < 11; i++) {
scanf_s("%lf", &X[i]);
if (X[i] == -1) break;
}
if (i == 11) { printf("入力は最大10個までです。\n"); return 1; }
printf("入力されたデータ:\n");
for (int i = 0; X[i] != -1; i++)
printf(" %f", X[i]);
printf("\n");
ave = 平均(X);
printf("入力されたデータの平均値は %f です。\n", ave);
ave = 変換平均(X, Y);
printf("0-1間変数への変換をかけたデータ:\n");
for (int i = 0; Y[i] != -1; i++)
printf(" %f", Y[i]);
printf("\n");
printf("変換をかけたデータの平均値は %f です。\n", ave);
return 0;
}