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

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

ただいまの
回答率

90.47%

  • C

    3825questions

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

素数判定[C言語]

解決済

回答 4

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 2,497

ISARIA

score 18

ある整数を与えて、素数かどうか判定するというプログラムを作ったのですが、コンパイル出来て実行してみたところ、プログラムが停止してしまいました。
ミスの場所を教えてください。解説もあればありがたいです。
よろしくお願いします!
------------------
#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は動作を停止しましたっていう表示が出てきます。
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 4

checkベストアンサー

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 20:52

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

    キャンセル

0

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

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

#include<stdio.h> 

void sosuu(int a) 
{ 
    int b=0; 
    int i;
    for(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); 
}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/05/16 13:51

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

    キャンセル

  • 2015/05/16 20:44

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

    キャンセル

0

#include <stdio.h>

void sosuu(int a) {
  int kekka = 1;

  // a が 2 ... (a-1) で割り切れるかを調べる。
  // 割り切れるものがあれば、a は素数ではない。
  // 割り切れるものがあければ、a は素数である。
  for (int i = 2; i <= a - 1; i++) {
    if (a % i == 0) {
      // 割り切れたので、素数ではない。
      kekka = 0;
      printf("  %d は %d で割り切れる。\n", a, i);
      break;
    }
  }

  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);

  //for (int n = 1; n < 100; n++) {
  //  sosuu(n);
  //}
}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.47%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • C

    3825questions

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