質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

2954閲覧

5つごとに表示を自動改行するC言語プログラム

KeiD

総合スコア26

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2020/07/17 05:33

5つごとに表示を改行するC言語プログラム

以下のプログラムを実行すると
(3, 5)
(5, 7)
(11, 13)
(17, 19)
(29, 31)
(41, 43)
(59, 61)
(71, 73)
(101, 103)
(107, 109)

と出力されますが、
( 3, 5) ( 5, 7) ( 11, 13) ( 17, 19) ( 29, 31)
(41, 43) ( 59, 61) ( 71, 73) (101, 103) ( 107, 109)
....
【上の表示も上下そろうように】

のように5つごとに自動で改行するにはどのほうなコードに変更すればよいでしょうか。
ご存じの方ご教示お願い致します。

#include <stdio.h>

int main(void) {
int i, chk;
int n;
int p1 = 2, p2;

for (p2 = 3; p2 <= 120; p2 += 2) {
chk = 0;
for (i = 3; i * i <= p2; i += 2) {
if (p2 % i == 0) {
chk = 1;
break;
}
}

if (chk == 0) {
if (p2 - p1 == 2) {
printf("(%d, %d)\n", p1, p2);
}
p1 = p2;
}
}

return 0;
}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YufanLou

2020/07/17 05:40

コードの前後は下記のように包んでください、読みやすくなります。 ```cpp // コード #include <stdio.h> ... ```
guest

回答2

0

ベストアンサー

C

1#include <stdio.h> 2 3int main(void) { 4 int n = 0; 5 int p1 = 2; 6 7 for (int p2 = 3; p2 <= 120; p2 += 2) { 8 int chk = 0; 9 for (int i = 3; i * i <= p2; i += 2) { 10 if (p2 % i == 0) { 11 chk = 1; 12 break; 13 } 14 } 15 16 if (chk == 0) { 17 if (p2 - p1 == 2) { 18 printf("(%3d, %3d)", p1, p2); 19 putchar(++n % 5 ? ' ' : '\n'); 20 } 21 p1 = p2; 22 } 23 } 24 25 return 0; 26}

投稿2020/07/17 05:53

Daregada

総合スコア11990

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KeiD

2020/07/17 06:05

ありがとうございます! putchar(++n % 5 ? ' ' : '\n'); の?は?なでしょうか?文字化けでしょうか? また、p2<1000では表示がそろいますが p2>1000こえると表示が以下のようにずれてしまいますがどうすれば直せますか? ( 3, 5) ( 5, 7) ( 11, 13) ( 17, 19) ( 29, 31) ( 41, 43) ( 59, 61) ( 71, 73) (101, 103) (107, 109) (137, 139) (149, 151) (179, 181) (191, 193) (197, 199) (227, 229) (239, 241) (269, 271) (281, 283) (311, 313) (347, 349) (419, 421) (431, 433) (461, 463) (521, 523) (569, 571) (599, 601) (617, 619) (641, 643) (659, 661) (809, 811) (821, 823) (827, 829) (857, 859) (881, 883) (1019, 1021) (1031, 1033) (1049, 1051) (1061, 1063) (1091, 1093)
Daregada

2020/07/17 06:12

いや、元のプログラムではp2が120までですよね。「p2の最大値を変更して、1000を超える値を設定する」というのは、あなたしか知らないことです。自分で直してください。printfの中で「%3d」となっているところ2カ所です。「3」は表示に使う桁数の最小値を示しています。 ?は「条件 ? 値1 : 値2」というC言語の三項演算子ですが、あなたには早すぎたようなので、以下のコードに置き換えてください。 if (++n % 5 != 0) { putchar(' '); } else { putchar('\n'); } これと同じ事をしています。
KeiD

2020/07/17 06:14

ありがとうございます。 初心者ですいません。
guest

0

5つごとに自動で改行する

C

1int n=0; 2 3for(ループ){ 4 ~~~ 5 printf(改行しない出力); 6 if(++n % 5 == 0) printf("\n"); 7 ~~~ 8}

上の表示も上下そろうように

%dでなく%3dのように桁数を指定します。

投稿2020/07/17 05:42

otn

総合スコア85901

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問