-PR-
解決済み

改行について パート2

  • 暇なときにでも
  • 質問No.31991
  • 閲覧数90
  • ありがとう数5
  • 気になる数0
  • 回答数4
  • コメント数0

改行には\nを使いますがfor文やif文をたくさん使う場合のときはいったいどこに「3つごとに改行」などのif文を入れたらよいですか。
素数を100まで求めるとするとき以下のプログラミングになると思いますが。
#include <stdio.h>
main()
{
int i,n;

for (n == 2 ; n <= 100 ; n++){
for (i=2; i<n ;i++){
if(n%i == 0){
break;
}
}
if(i == n){
printf("%d ",i);
}

}
}
では、3つごとに表示するときは
  if(i%3==0){
printf("\n");
}
と、文はこうなると思います。これはどこに書き加えたらいいですか
通報する
  • 回答数4
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.4
レベル14

ベストアンサー率 24% (612/2465)

補足に対する回答
if(i == n){
printf("%d ",i);
j++;/*追加*/
if(j%3==0){/*追加*/
printf("\n");/*追加*/
}/*追加*/
}
元のソースに4行追加です。
変数jの初期化部分はh_hikitaさんのソースを参考にしてください。

注)条件分のJ!=0は不要でした。すみません。

またn==2でも実行できた理由は、コンパイラによってはAUTO変数を0に初期化するものや、たまたま割り当てられたアドレスが0の場合もあったりします。
後者の場合、修正してコンパイルしなおすと、別のバグが発生と言う事もあります。
また、前者の場合は初期化しなくても問題ないのですが、別OS等に移植した時に
大変な目にあったりします。
お礼コメント
noname#1519

早速実行してみました。n==2とn=2のちがいも=の1つの違いだけでも
バグの発生が起こったりするのですね。大変な目にあう前に勉強できました。ありがとうございます、無事解決です。
投稿日時 - 2001-01-24 16:57:08
関連するQ&A
-PR-
-PR-

その他の回答 (全3件)

  • 回答No.1
レベル14

ベストアンサー率 24% (612/2465)

変数jを追加し、jをインクリメントしそのjであまりを算出する。 printfの次の行に j++; if(j%3==0 && j!= 0){ printf("\n"); } nのループの外でjを初期化するのを忘れないように。 あと最初のforがn==2になっているがn=2の間違い? ...続きを読む
変数jを追加し、jをインクリメントしそのjであまりを算出する。
printfの次の行に
j++;
if(j%3==0 && j!= 0){
printf("\n");
}
nのループの外でjを初期化するのを忘れないように。
あと最初のforがn==2になっているがn=2の間違い?
補足コメント
noname#1519

n==2は n=2でした。ごめんなさい。
ただn==2でもできたので気付きませんでした。それとprintfの次ということは
if(i == n){
printf("%d",i);
}
の「 }」をとってprintf("%d",i);
j++
と入れたらよいのでしょうか。
投稿日時 - 2001-01-24 15:39:08


  • 回答No.2
レベル11

ベストアンサー率 40% (104/257)

こんな感じにでもなるかと思います。 #include <stdio.h> main() { int i,n; int j; //追加 j=0; //追加 //for (n == 2 ; n <= 100 ; n++){ ←nに初期値入ってないので一回も実行されない... for (n = 2 ; n <= 100 ; n++){ for ...続きを読む
こんな感じにでもなるかと思います。

#include <stdio.h>
main()
{
int i,n;

int j; //追加

j=0; //追加

//for (n == 2 ; n <= 100 ; n++){ ←nに初期値入ってないので一回も実行されない...
for (n = 2 ; n <= 100 ; n++){
for (i=2; i<n ;i++){
if(n%i == 0){
break;
}
}
if(i == n){
printf("%d ",i);

/* 追加部分始 */
j= (j+1) %3;
if(j==0)
printf("\n");
/* 追加部分終 */

}
}
}
}
お礼コメント
noname#1519

改行のやり方にしてもif(j%3==0)というやり方以外にも h hikitaさんのやり方もあるのですね。早速返事を(しかもご丁寧にコメント付きで)書いて下さりありがとうございます!!
投稿日時 - 2001-01-24 16:44:03
  • 回答No.3

 蛇足です(^_^;  プログラムを組む場合、大事なのは「データの出力され方」を頭の中で想像してみることです。  たとえば構造として、 1.数字を出力する。 2.数字を出力する。 3.数字を出力する。 4.改行する。 5.数字を出力する。 6.以下続く  こういうロジックになることは分かりますよね?  とすれば、「数字を3つ出力したあとで改行を出力する」というプログラムを組 ...続きを読む
 蛇足です(^_^;

 プログラムを組む場合、大事なのは「データの出力され方」を頭の中で想像してみることです。
 たとえば構造として、

1.数字を出力する。
2.数字を出力する。
3.数字を出力する。
4.改行する。
5.数字を出力する。
6.以下続く

 こういうロジックになることは分かりますよね?
 とすれば、「数字を3つ出力したあとで改行を出力する」というプログラムを組めばいいのです。
 ならば、if文としては「数字が3回出力されたかどうか」を判定することになります。
 すると、「数字を出力する前」に判定をしても意味がないですよね。数字が出力される前に行う判定は「これから3回目が出力されるかどうか」ですから。
 当然、判定文を挿入するのは「数字を出力したあと」ということになります。

 とまあ、こういうふうに考えていけばいいのです。
 今ここにロジックを追加すれば、プログラムはどういう挙動をするか、ということを考えながら組んでいきます。
 また、どうしても結果が想像できないときは、実際に適当な場所に入れてみて実際に動かしてみる、ということもよくやります。その結果が気に食わなければやりなおせばいいことですから。
 まあ、こういうのは慣れですから、言われなくてもすぐに感覚つかめるとは思いますが(笑)
お礼コメント
noname#1519

説明をしてくださった文章で改めて考えると、とても納得できました。あたりまえのことですが、数をこなして本に載っていたこと以外のものを自分で見つけていきたいです。まだまだ道のりは遠そうです,,,。
投稿日時 - 2001-01-24 16:48:34
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


新大学生・新社会人のパソコンの悩みを解決!

いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ