- ベストアンサー
このプログラムみてもらえますか?
課題は標準入力から正整数aを読み込み、aが素数であるか否か判定するプログラムを作れ、です。 #include <stdio.h> int main(void) { int a,b,c; for(;;){ printf("正整数を入力して下さい。\n"); scanf("%d",&a); c=a%b; for(b=2;b=a-1;b=b+1){ if(c==0) printf("素数でない。\n"); break; } printf("素数です。\n"); break; return(0); } } コンパイルはできますが、実行すると9が「素数です」と表示されます^^; よろしくおねがいします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
いっぱい間違ってるので、ストレートに回答を。 #include <stdio.h> int main(void) { int a,b,c; printf("正整数を入力して下さい。\n"); scanf("%d",&a); /* 正整数と言ってもゼロとかマイナスを入れられると困る */ if (c < 1) { printf("入力ミス\n"); return 0; } c = a; /* 1を入れられた時のおまじない */ for (b = 2;b < a;b++) { c = a % b; if (c == 0) { printf("素数でない。\n"); break; } } /* ループ終了時、cが0なら上で「素数でない」と表示した筈 */ if (c != 0) { printf("素数です。\n"); } return 0; }
その他の回答 (3)
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
ダメダメです。 #include <stdio.h> int main(void) { int a,b,c; for(;;){ printf("正整数を入力して下さい。\n"); scanf("%d",&a); c=a%b; ← このときbはいくつ? for(b=2;b=a-1;b=b+1){ ← 条件式 b=a-1 って? if(c==0) ← cの値はループの外で確定済 printf("素数でない。\n"); break; ← 最初のループで即脱出 } printf("素数です。\n"); break; ← 無限ループになってない return(0); ← 上のbreakのせいでここには来ない } } 勉強し直し。
- kokorone
- ベストアンサー率38% (417/1093)
c=a%b; for(b=2;b=a-1;b=b+1){ が逆です。 for(b=2;b=a-1;b=b+1){ c=a%b; それから、内部変数は初期化してから使いましょう。 c=a%b; for(b=2;b=a-1;b=b+1){ では、bが初期化されていません。
- elngr
- ベストアンサー率25% (1/4)
プログラム全部は理解していませんが、最初にc=a%b;した時に bの値が決まっていないということに気がつきました。