アプリ版:「スタンプのみでお礼する」機能のリリースについて

C言語 プログラミング

ごめんなさい。間違いの指摘をお願いします。
関数はこのままでお願いします

/* 等比数列を求めるプログラム */

#include <stdio.h>
#include <math.h>

int main()
{
double a, b, c, result;
int n;

printf("初項を入力してください:");
scanf("%lf", &a);
printf("公比を入力してください:");
scanf("%lf", &b);
printf("項数を入力してください:");
scanf("%d", &n);

c = pow ( b, n-1 );

for (int i=0; i<n; i++){
printf("%f\n",a);
a*c;
}
return 0;
}

A 回答 (5件)

No.4 はい。

公比<>0は等比数列の大前提です。
powとforを理解するための実習問題に、業務システムを開発する時のような値チェックは
本来理解すべき箇所を見付けづらくする害悪ですので入れていません。
    • good
    • 0

公比に 0 を入れるとアウトになる可能性は理解できていますよね>#3.

    • good
    • 0

間違いの指摘というよりは、途中で力尽きた感じがしましたので、


できるだけシンプルな形で、動作するものにしました。
(こちらでは、scanfをscanf_sに変更の上、Visual studio 2017で動作確認済)

以下がそちらで動作しましたら、プログラムを見比べて頂いて、
おかしかった箇所に気づいて下さればと思います。

/* 等比数列を求めるプログラム */

#include <stdio.h>
#include <math.h>

int main()
{
double a, b;
int n;

printf("初項を入力してください:");
scanf("%lf", &a);
printf("公比を入力してください:");
scanf("%lf", &b);
printf("項数を入力してください:");
scanf("%d", &n);

for (int i = 0; i < n; i++) {
printf("%lf\n", a * pow(b, i));
}
return 0;
}
    • good
    • 1

・for の中, 「a*c;」ってなにをしている?


・result って変数はどこで使っている?
・公比 0, 項数 1 を入れるとアウト.
・そもそも「等比数列を求める」が意味不明.
    • good
    • 0

> 間違いの指摘をお願いします。


> 関数はこのままでお願いします

おお、最近では珍しく潔いですね(笑)。

では。
ぶっちゃけた話、forが要りません。pow関数を使う限り、繰り返しをする必要がないのです。
つまり、「プログラムがどーの」って話じゃなくって、数学的に

「等比数列の式を定義通りに組み立てれば良いだけ」

なんで、例えば

printf("%f\n", a*pow(b, n-1));

でもすれば充分でしょう。
あと、pow関数の項数(n)は基本的にdouble型なんですが・・・・ここは自動でキャストしてくれるのかな?

いずれにせよ、

1. pow関数を使う(非常にアタマの良い選択です)なら繰り返しは要らない
2. 逆に繰り返しを使え、と言う指定ならpow関数が要らない

と言う事ですね。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!