• ベストアンサー

C言語 素数判定

1000以下の素数を求めるプログラム kadai7-2.c を作成せよ。各素数を整数4桁で出力し、15個の素数を出力した時点で改行処理 を行うこと。作成したプログラムを提出せよ。 という問題なのですが、以下のプログラムを実行しても動きませんでした。どこが違うのでしょうか。ご指摘お願いします。 #include<stdio.h> #include<math.h> main(){ int i,j,ix,k,h; for (i=2;i<=1000;i++){ ix=(int)(sqrt((double)i)); k=0; for(j=2;j<=ix;j++){ if(i%j==0){ k=1; } } if(k==0){ printf("%4d",i); h+=1 if(h=15){ printf("\n"); h=0; } }

質問者が選んだベストアンサー

  • ベストアンサー
noname#48699
noname#48699
回答No.5

★ソースを掲載するのでしたら、必ずコンパイルしたものを・・。  (エラーが出たら、そのことを質問すれば・・) >以下のプログラムを実行しても動きませんでした。 このソースでは、「実行」の前のコンパイルがとおりません。 コンパイラが表示する、エラー・警告を理解しましょう。 ★プログラミング用テキストエディタを使いましょう。  フリーで使い勝手のいいものがたくさんあります。  "{"と"}"の「対」もチェックできます。 ★自分のコーディングの形にこだわりを持ちましょう。  例)if(h=15){ は、if( 15 = h ){ と if文では数を前(◆)にしましょう。  こうすることで、= がひとつ足りないという単純なコーディングミスを  コンパイラが検出してくれます。  if(h=15){ 自体はエラーではなく、常に「真」で冗長な文です。 ★コーディングでは、(タブを用い)必ず《インデント》しましょう。  下に、質問者様のソースを、全角空白2つでインデントしたものを示します。  }が2つ足りないことが判るでしょう。  (実際のコーディングでは、タブキー(\t)を用いて。ここでの全角空白は「回答」表現のため用いています) main(){  // 関数名に付く"{"は1カラム目の"}"と対とする   int i,j,ix,k,h=0;  // 修正   for (i=2;i<=1000;i++){     ix=(int)(sqrt((double)i));     k=0;     for(j=2;j<=ix;j++){       if( 0 == i%j ){  // ◆         k=1;         break;  // 追加(なぜ・どこへ?考えて)       }     }     if( 0 == k ){  // ◆       printf("%4d",i);       h+=1;  // 訂正       if( 15 == h ){  // 訂正 ◆         printf("\n");         h=0;       }     } ------質問者様のソースはここまで--------   }   return( 0 ); } こだわりを持って綺麗にコーディングする→バグとりが楽になります。

その他の回答 (4)

回答No.4

これ、以下の質問と丸っきり同じですね(それどころか投稿者も同じです・苦笑)。 http://oshiete1.goo.ne.jp/qa3616488.html まだ解けなかったんですか(笑)。 「エラトステネスの篩」のアルゴリズムは理解しましたか?

回答No.3

#include<stdio.h> #include<math.h> main(){ int i,j,ix,k,h; h = 0; /* 一応念のため */ for (i=2;i<=1000;i++){ ix=(int)(sqrt((double)i)); k=0; for(j=2;j<=ix;j++){ if(i%j==0){ k=1; } } if(k==0){ printf("%4d",i); /* セミコロンが足りない */ h+=1; /* h = 15じゃないよ。h == 15 だよね?。*/ if(h==15){ printf("\n"); /* やらねばならぬことはh=0ではない。*/ break; } } /* 閉じ括弧が足りない。 */ } return 0; }

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

どのようにうまくいかないかを説明しましょう h +=1 は行末の『;』の記述がありません if ( h=15 )では hが15になったかどうかのチェックはできません 比較演算子は == です if ( h = 15 )ですと hに15を代入してしまいこの式は0にならないので毎回改行するでしょう またhを0で初期化されていないので if(k==0)のブロック内でhが15に一致するかどうかは保障されません あとご提示のソースでは『}』が2個足りないようです

  • kou2000
  • ベストアンサー率29% (14/48)
回答No.1

そもそもコンパイルエラーでませんでしたか? 構文を間違えています。 せめてコンパイルエラーくらいは自力で解決しましょう。