整数をひとつ入力して、それが素数かどうかを判定するプログラムを作ったのですが、素数でないものを入力しても「素数です」といわれます。
どうも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;
}
どうかよろしくお願いします。
No.4ベストアンサー
- 回答日時:
#include <stdio.h>
int
main(void)
{
int number;
int n;
int i;
printf("1より大きい整数を入力してください: ");
scanf("%d", &number);
while (number <= 1) {
printf("1より大きい整数を入力してください: ");
scanf("%d", &number);
}
if (number == 2) {
printf("%dは素数です\n", number);
return 0;
}
else {
for (n = 2; n < number; n++) {
i = number % n;
if (i == 0) {
printf("%dは素数ではありません\n", number);
return 0;
}
}
}
printf("%dは素数です\n", number);
return 0;
}
ご丁寧にありがとうございます。
return 0を使うとそこでプログラムを終われるんですね。初めて知りました。
本当にありがとうございました。
No.5
- 回答日時:
for のループは、条件が成立する間なので、
他の人がご指摘の通り n == number - 1 の条件では、ループが継続しませんね。この誤りは私のせいですね。
すみません。<(_ _)>
----------------------------------------------------------------
#include <stdio.h>
int main(){
int number=1;
int n;
while (number <= 1) {
printf("1より大きい整数を入力してください: ");
scanf("%d",&number);
}
if (number != 2) {
if(0==(number & 1)){//偶数判定
printf("%dは素数ではありません\n", number);
return 0;
}
for (n=3; n*n <= number; n+=2) {
if(0 == number % n){
printf("%dは素数ではありません\n", number);
return 0;
}
}
}
printf("%dは素数です\n", number);
return 0;
}
ご丁寧にありがとうございます。
return 0を使うとそこでプログラムを終われるんですね。初めて知りました。
本当にありがとうございました。
No.3
- 回答日時:
for文の2番目のパラメータは「ループ条件」です。
つまりここに設定した条件が成立している間ループを続けます。
現状の n == number - 1 では、しょっぱなから条件が成立しないのでループせずに抜けてしまいます。
従ってこの場合は n < number または n <= number - 1 のように指定する必要がありますね。
No.1
- 回答日時:
for (; n == number - 1; n++) {
このfor()の処理としては、
for()に入ってきた時のnの値とnumberの値を比較して、
nがnumberより1小さい数字である間、繰り返し処理が行われる。
となります。
素数でない値、例えば 4 が入力された場合、どうなるでしょう?処理は行われるでしょうか?
そのfor()は、どういう条件で繰り返し処理が行われれば良いのか、
それを考えてみてください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# 至急教えてください!プログラミングの問題です。 割られる整数と割る整数を受け取って、商と余りを出力す 3 2022/07/05 10:23
- 大学・短大 C言語線形リストの問題です 3 2022/12/22 00:45
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
平均、最大値、最小値を表示す...
-
プログラミングについての質問...
-
C言語 exitの使い方
-
VBAでダブルコーテーション入り...
-
エラーの意味は? Lvalue req...
-
フォームを開くときに、コンボ...
-
Excel-vba 文字列と変数を...
-
EXCEL/VBA 変数の値をクリップ...
-
processing エラーで、 "cannot...
-
テキストボックスの値を変数に...
-
VB6.0-整数と余りを求める
-
ラジオボタンの値の取得につい...
-
C言語 列挙型(enum型)変数について
-
数字の位ごとの値を表示するプ...
-
整数xxxが大き過ぎますというエ...
-
Variant型で宣言してるのにEmpt...
-
vbsでテキストファイル内の文字...
-
【エクセル】 関数による電子...
-
VBAで配列のNULL判定
-
Rubyで1ミリ秒のsleepできない...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラミングについての質問...
-
C言語初心者です。次の問題で質...
-
素数を判定するプログラム
-
C言語の問題 1 つの文字をキー...
-
プレゼント交換プログラム
-
c言語で素数を判別するプログラ...
-
c言語でランタイムエラーの処理...
-
エクセルのマクロでの積分
-
c言語 プログラミング 等比数列...
-
C言語 累乗の計算
-
VBAでダブルコーテーション入り...
-
フォームを開くときに、コンボ...
-
EXCEL/VBA 変数の値をクリップ...
-
足して100になるような乱数のア...
-
Excel-vba 文字列と変数を...
-
C言語 exitの使い方
-
excelの、ある数式内の{}の意...
-
配列の値を置換するにはどうす...
-
C言語 列挙型(enum型)変数について
-
VisualStudio2022でC言語プログ...
おすすめ情報