- ベストアンサー
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; } }
- みんなの回答 (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)
- cametan_42
- ベストアンサー率62% (162/261)
これ、以下の質問と丸っきり同じですね(それどころか投稿者も同じです・苦笑)。 http://oshiete1.goo.ne.jp/qa3616488.html まだ解けなかったんですか(笑)。 「エラトステネスの篩」のアルゴリズムは理解しましたか?
- himajin100000
- ベストアンサー率54% (1660/3060)
#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)
どのようにうまくいかないかを説明しましょう 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)
そもそもコンパイルエラーでませんでしたか? 構文を間違えています。 せめてコンパイルエラーくらいは自力で解決しましょう。