プロが教える店舗&オフィスのセキュリティ対策術

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

A 回答 (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 );
}
こだわりを持って綺麗にコーディングする→バグとりが楽になります。
    • good
    • 0

これ、以下の質問と丸っきり同じですね(それどころか投稿者も同じです・苦笑)。



http://oshiete1.goo.ne.jp/qa3616488.html

まだ解けなかったんですか(笑)。
「エラトステネスの篩」のアルゴリズムは理解しましたか?
    • good
    • 0

#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;
}
    • good
    • 0

どのようにうまくいかないかを説明しましょう



h +=1 は行末の『;』の記述がありません

if ( h=15 )では hが15になったかどうかのチェックはできません
比較演算子は == です
if ( h = 15 )ですと hに15を代入してしまいこの式は0にならないので毎回改行するでしょう

またhを0で初期化されていないので if(k==0)のブロック内でhが15に一致するかどうかは保障されません

あとご提示のソースでは『}』が2個足りないようです
    • good
    • 0

そもそもコンパイルエラーでませんでしたか?



構文を間違えています。

せめてコンパイルエラーくらいは自力で解決しましょう。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!