数列

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
大熊
記事: 45
登録日時: 2年前

数列

#1

投稿記事 by 大熊 » 2年前

添付写真の計算をして表示するプログラムを完成させ、0未満の数を入力したとき, 「入力エラー」と表示し再度入力を促すようにしたいです。かいたコードはうまくいきません。値を入力して終わってしまいます

コード:

#include <stdio.h>

int main(void)
{
    int i, n, sign;
    double sum;
    n = 0;
    while (1) {
        printf("0以上の整数を入力> ");
        scanf("%d", &n);
        if (n>0) {
            break;
        } else {
            printf("入力エラー\n");
    
    }    
    sign = 1;
    sum = 0;
    for (sign=0; sign<=n ; sign++) {
        sum += (1/sign);
        sign *= -1;
    }
    printf("%f\n", sum);
    return 0;
}
添付ファイル
スクリーンショット (2440).png
スクリーンショット (2440).png (10.65 KiB) 閲覧数: 5181 回

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: 数列

#2

投稿記事 by みけCAT » 2年前

提示されたコードは } が足りないため、そもそもコンパイルエラーになって値の入力すらできないはずです。
また、もし実行できたとしても、

コード:

sum += (1/sign);
は整数のゼロ除算なので強制終了の原因になりますね。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

大熊
記事: 45
登録日時: 2年前

Re: 数列

#3

投稿記事 by 大熊 » 2年前

みけCAT さんが書きました:
2年前
提示されたコードは } が足りないため、そもそもコンパイルエラーになって値の入力すらできないはずです。
また、もし実行できたとしても、

コード:

sum += (1/sign);
は整数のゼロ除算なので強制終了の原因になりますね。
どのように計算すればいいのですか

box
記事: 2002
登録日時: 13年前

Re: 数列

#4

投稿記事 by box » 2年前

コード:

#include <stdio.h>

int getIteration(void)
{
    int n;

    do {
        printf("0以上の整数を入力> ");
        scanf("%d", &n);
        if (n >= 0) break;
        printf("入力エラー\n");
    } while (n < 0);
    return n;
}

double calcPI_4(int n)
{
    double sum, x;
    int i;

    for (sum = i = 0; i <= n; i++) {
        x = 2 * i + 1;
        if (i % 2 != 0) x = -x;
        sum += 1 / x;
    }
    return sum;
}

void printAnswer(double s)
{
    printf("%f\n", s);
}

int main(void)
{
    printAnswer(calcPI_4(getIteration()));
    return 0;
}
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

box
記事: 2002
登録日時: 13年前

Re: 数列

#5

投稿記事 by box » 2年前

どのように計算すればいいのですか
その数列の一般項の分母にあたる
2i+1
を適切に計算するコードを追加する。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

返信

“C言語何でも質問掲示板” へ戻る