質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

4回答

6922閲覧

素数判定[C言語]

ISARIA

総合スコア19

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2015/05/16 03:35

編集2015/05/16 04:49

ある整数を与えて、素数かどうか判定するというプログラムを作ったのですが、コンパイル出来て実行してみたところ、プログラムが停止してしまいました。
ミスの場所を教えてください。解説もあればありがたいです。
よろしくお願いします!

#include<stdio.h>

void sosuu(int a)
{
int b=0;
for(int i=2;i<=a-1;i++)
{
b=a%i;
}
int kekka;
if(b==0) kekka=0;
else kekka=1;

if(kekka==1) printf("%dは素数である\n",a); else printf("%dは素数でない\n",a);

}

int main(void)
{
int n=0;
printf("ある数nを素数かどうか判定する\n");
printf("正の整数 n=");
scanf("%d",n);

sosuu(n);

}

補足です

コンパイルして、実行すると
C:\Users\TaKe\Desktop\授業第4回>quiz44
ある数nを素数かどうか判定する
正の整数 n=31
の31を入力すると
のような状態になり、quiz44.exeは動作を停止しましたっていう表示が出てきます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

もしもコンパイルができているのなら問題なく実行できるはずです。
ですので問題が発生するということはコンパイルが出来てないように思えますけど。だからコンパイルを通すために以下にすればいいと思うのですが。ちがうのかな。

lang

1#include<stdio.h> 2 3void sosuu(int a) 4{ 5 int b=0; 6 int i; 7 for(i=2;i<=a-1;i++) 8 { 9 b=a%i; 10 } 11 int kekka; 12 if(b==0) kekka=0; 13 else kekka=1; 14 15 if(kekka==1) printf("%dは素数である\n",a); 16 else printf("%dは素数でない\n",a); 17} 18 19int main(void) 20{ 21 int n=0; 22 printf("ある数nを素数かどうか判定する\n"); 23 printf("正の整数 n="); 24 scanf("%d",n); 25 26 sosuu(n); 27}

投稿2015/05/16 04:19

miu_ras

総合スコア902

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ISARIA

2015/05/16 04:51

ボーランドC++というコンパイラーを使っているので、サクラエディタで文書を作って、からコンパイルして実行しています。 Visual Studioではないので、少し違うかもです。
cateye

2015/05/16 11:44

bcpでもvcでも同じで、scanf()に関しては、swordoneさんの言うように、変数のアドレスを渡さないとだめですd^^
guest

0

lang

1#include <stdio.h> 2 3void sosuu(int a) { 4 int kekka = 1; 5 6 // a が 2 ... (a-1) で割り切れるかを調べる。 7 // 割り切れるものがあれば、a は素数ではない。 8 // 割り切れるものがあければ、a は素数である。 9 for (int i = 2; i <= a - 1; i++) { 10 if (a % i == 0) { 11 // 割り切れたので、素数ではない。 12 kekka = 0; 13 printf(" %d は %d で割り切れる。\n", a, i); 14 break; 15 } 16 } 17 18 if (kekka == 1) { 19 printf("%dは素数である\n", a); 20 } else { 21 printf("%dは素数でない\n", a); 22 } 23} 24 25int main(void) { 26 int n = 0; 27 printf("ある数nを素数かどうか判定する\n"); 28 printf("正の整数 n="); 29 scanf("%d", &n); 30 sosuu(n); 31 32 //for (int n = 1; n < 100; n++) { 33 // sosuu(n); 34 //} 35}

投稿2015/05/16 09:43

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

素数は、2以上その数の平方根までの素数でわれないものです。
が、面倒なので・・・
if( n <= 2 ){
return;// 2は素数
}
kekka= 1;
for( int i= 3; i < (n / 2); i += 2){
if( n % i == 0){
kekka= 0;
break;
}
}
....とかやりますね

投稿2015/05/16 07:08

編集2015/05/16 07:24
cateye

総合スコア6851

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cateye

2015/05/16 11:52

ちなみに「quiz44.exeは動作を停止しました」となるのは、scanf()の中でメモリの0番地(nが0なので)に書き込みが起こるからです。
guest

0

 標準入出力関数
ここによると,

lang

1 scanf("%d",n);

ここが,

lang

1 scanf("%d",&n);

こうでないといけないようです.
後,素数判定がおかしいと思います.
これでは「2」以外全部素数と判定されてしまいます.
例えば「6」が入力された時(もちろん素数ではない),forの最後に実行されるのは
b=6%5=1
なので,forを抜けたあと,kekkaは1になるので,「素数ではない」と出てしまいます.

投稿2015/05/16 03:39

編集2015/05/16 05:04
swordone

総合スコア20651

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問