• 締切済み

プログラミング C言語

C言語入門書に書いてありました。 int prime[500] int ptr=0; prime[ptr++]=2; prime[ptr++]=3; これは下のようになると書いてあるのですが prime[0]=2 prime[1]=3 prime[2]=5 prime[3]=7 どのようにしてこのようになるのでしょうか? 教えてくださいm(_ _ )m

みんなの回答

回答No.3

その後にこんなプログラムがくっついていたとか? int number; int idx; for (number = 2; ptr < sizeof(prime) / sizeof(prime[0]); number++) { bool is_devided = false; for (idx = 0; idx < ptr; idx++) { if (number % prime[idx] == 0) { is_devided = true; break; } } if (!is_devided) { prime[ptr++] = number; } } こうするとこれまで見つけた素数で割れなかったものを素数としてprime配列に加えていくので、必然的にprime[499] = 3571まで埋まりますが... 10,000個見つけるとかなってくると、調べたい値の平方根以上の素数で割れるか見ても無駄なので、平方根を超えたら打ち切るというプログラムを書いたほうが良いかもしれません。 int should_less_than = (int)sqrt((float)(number)); for (idx = 0; idx < ptr; idx++) { if (prime[idx] > should_less_than) break; if (number % prime[idx] == 0) { is_devided = true; break; } } というわけで、そこに書いてあるプログラムだけでは期待通りの動作はしないですね。

CooLNight
質問者

お礼

ここだけじゃ出来ないんですね。わかりましたありがとうございますm(_ _ )m

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

> prime[2]=5 > prime[3]=7 提示されたプログラムの中に、prime[2],prime[3]に関するものはありません。 よって、上記のようになるかどうかはわかりません。 ここに書いてない箇所でやっているのでしょう。 ptr ++ のように、後ろに ++ と付けた場合 (1)まず、 ptr の値を使用します、 int ptr=0; prime[ptr++]=2; /* → prime[0]=2; の意味になる*/ (2)ptrの値を1増やします。(ptr = ptr + 1 ;の意味→0+1=1) prime[ptr++]=3; は、ptr=1になっているので prime[1]=3; そのあとで ptr = ptr + 1 ;→ ptr = 1+1 ;→ptr =2; よく、for文等で単独で i ++ などと使われますが、これも同じ動作をしています。 単独で使われた場合、式の値(iの値)を他で利用していないだけです。

CooLNight
質問者

お礼

ここだけじゃ出来ないんですね。わかりましたありがとうございますm(_ _ )m

  • kokorone
  • ベストアンサー率38% (417/1093)
回答No.1

質問文が不完全ですよね。 prime[0]=2 prime[1]=3 までは、問題文とおりです。 ptr++ は、ptrを処理した後、ptr=ptr+1を実行するというコードです。 つまり、 prime[ptr] = 2; ptr = ptr +1; prime[ptr] = 3; ptr=ptr +1; という処理です。

CooLNight
質問者

お礼

ここだけじゃ出来ないんですね。わかりましたありがとうございますm(_ _ )m

関連するQ&A