掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板2

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.26972

素数判定プログラム
投稿者---\99(2006/05/24 11:30:50)


整数をひとつ入力して、それが素数かどうかを判定するプログラムを作ったのですが、素数でないものを入力しても「素数です」といわれます。
どうもfor文が評価されていないような気がしますが、原因がわかりません。

// homework4.cpp : コンソール アプリケーションのエントリ ポイントを定義します。

#include <stdio.h>

int main(int argc, char* argv[])
{
    int number;
    int n = 2;
    int i;

    printf("1より大きい整数を入力してください: ");
    scanf("%d",&number);

    while (number <= 1) {
        printf("1より大きい整数を入力してください: ");
        scanf("%d",&number);
    }

    if (number == 2) {
        printf("%dは素数です\n",number);
        goto OUT;
    }
    else {
        for (; n == number - 1; n++) {
        i = number % n;

        if (i == 0) printf("%dは素数ではありません\n", number);
        if (i == 0) goto OUT;
    }
    }

    printf("%dは素数です\n", number);

OUT:

    return 0;

}


どうかよろしくお助けください。


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:素数判定プログラム 26973 kafuka 2006/05/24 11:38:12
<子記事> Re:素数判定プログラム 26974 iijima 2006/05/24 11:42:46


No.26973

Re:素数判定プログラム
投稿者---kafuka(2006/05/24 11:38:12)


> for (; n == number - 1; n++)

for文は条件を満たす間ループします。
条件を満たしたらループを抜けるではないので、この場合一度もループしません。


この投稿にコメントする

削除パスワード

No.26975

Re:素数判定プログラム
投稿者---あしっど(2006/05/24 11:44:11)


>>for (; n == number - 1; n++) {
なので、真ん中の条件判定式は<>=を使って以上以下の関係にしましょう。

>if (i == 0) printf("%dは素数ではありません\n", number);
>if (i == 0) goto OUT;
ついでにこういう書き方は見辛いので、{}を使ってください。



この投稿にコメントする

削除パスワード

No.26974

Re:素数判定プログラム
投稿者---iijima(2006/05/24 11:42:46)


    for (; n == number - 1; n++) { ... }

これだと「nが(number-1)と『等しい』間」{ ... }を実行します。
やりたいことは「nが(number-1)より『小さい』間」ではないでしょうか。



この投稿にコメントする

削除パスワード

No.26976

Re:素数判定プログラム
投稿者---\99(2006/05/24 14:08:26)


ありがとうございます。ループ条件を終了する条件と勘違いしてました。


この投稿にコメントする

削除パスワード

No.26989

Re:素数判定プログラム
投稿者---かずま(2006/05/26 01:35:00)


> ありがとうございます。ループ条件を終了する条件と勘違いしてました。

おめでとうございます。次は、なるべく goto を使わないようにすることです。
#include <stdio.h>

int main(void)
{
    int number, i;

    do {
        printf("1 より大きい整数を入力してください: ");
        if (scanf("%d", &number) != 1) return 1;
    } while (number <= 1);

    for (i = 2; number % i; i++)
        ;
    if (i == number)
        printf("%d は素数です\n", number);
    else
        printf("%d は素数ではありません\n", number);
    return 0;
}



この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧