C言語のプログラミングについての質問です。
九九の表を表示させるという問題なのですが、
①二重ループ
②値の間に\tで空白を空ける
③末尾の空白を削除する
上記の条件がありまして③のところがわかりません。
どうすれば末尾の空白が削除できるのか教えてください。
宜しくお願い致します。
#include <stdio.h>
int main (void)
{
int i,j;
for(i=1;i<=9;i++){
for(j=1;j<=9;j++){
printf("%d\t",i*j);
}
printf("\n");
}
return 0;
}
1 2 3 4 5 6 7 8 9
2 4 6 8 10 12 14 16 18
3 6 9 12 15 18 21 24 27
4 8 12 16 20 24 28 32 36
5 10 15 20 25 30 35 40 45
6 12 18 24 30 36 42 48 54
7 14 21 28 35 42 49 56 63
8 16 24 32 40 48 56 64 72
9 18 27 36 45 54 63 72 81
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答9件
0
こういう方法もありますね。
C
1printf("%d%c", i*j, (j == 9) ? '\n' : '\t'); 2// 後ろの printf("\n"); は不要なので削除
投稿2016/06/21 15:21
総合スコア5938
0
こういう質問は色々な書き方が集まって参考になりますね。
とりあえず私の場合。
C
1int main (void) 2{ 3 int i,j; 4 for(i = 1; i <= 9; i++){ 5 for(j = 1; j <= 9; j++){ 6 if(j > 1){ 7 printf("\t"); 8 } 9 printf("%d", i * j); 10 } 11 printf("\n"); 12 } 13 return 0; 14}
ポイントは要はタブ(\t)の出力タイミングをどう制御するかです。
あとは%dの出力箇所は一か所にすることで、冗長性をなくしています。
末尾の空白が解決されていないという指摘を受けたので、問題ないという結果を貼り付けておきます。
1 2 3 4 5 6 7 8 9 2 4 6 8 10 12 14 16 18 3 6 9 12 15 18 21 24 27 4 8 12 16 20 24 28 32 36 5 10 15 20 25 30 35 40 45 6 12 18 24 30 36 42 48 54 7 14 21 28 35 42 49 56 63 8 16 24 32 40 48 56 64 72 9 18 27 36 45 54 63 72 81
投稿2016/06/22 00:35
編集2016/06/22 07:25総合スコア16998
0
面白そうなので(でもCは書けないので、考え方だけ)
方法1,空白の出力を文字の後ろではなく前に入れる。
方法2,1行たまるまで都度出力としないで、出力文字列として準備しておき、最終空白を削除して改行を挿入。
特に1はコロンブスかと。削除じゃないですけど。
投稿2016/06/25 13:52
退会済みユーザー
総合スコア0
0
今環境がないので未確認ですが・・・
C
1static const char EOT[]= "0\t\t\t\t\t\t\t\t\n"; 2 3int i; 4int j; 5for( i= 1; i <= 9; i++ ){ 6 for( j= 1; j <= 9; j++ ){ 7 printf("%d%c",i*j, EOT[j]); 8 } 9}
〔追記〕帰宅して作ってみました。
c
1~/test/ctst >cat tst03.c 2#include <stdio.h> 3 4int main() 5{ 6 for( int i= 1; i <= 9; i++ ){ 7 for( int j= 1; j <= 9; j++ ){ 8 printf( "%d%c", i*j,"0\t\t\t\t\t\t\t\t\n"[j]); 9 } 10 } 11 12 return 0; 13} 14~/test/ctst >./a.out 151 2 3 4 5 6 7 8 9 162 4 6 8 10 12 14 16 18 173 6 9 12 15 18 21 24 27 184 8 12 16 20 24 28 32 36 195 10 15 20 25 30 35 40 45 206 12 18 24 30 36 42 48 54 217 14 21 28 35 42 49 56 63 228 16 24 32 40 48 56 64 72 239 18 27 36 45 54 63 72 81 24~/test/ctst >
odの結果
~/test/ctst >./a.out >03.txt
~/test/ctst >od -xc 03.txt
0000000 0931 0932 0933 0934 0935 0936 0937 0938
1 \t 2 \t 3 \t 4 \t 5 \t 6 \t 7 \t 8 \t
0000020 0a39 0932 0934 0936 0938 3031 3109 0932
9 \n 2 \t 4 \t 6 \t 8 \t 1 0 \t 1 2 \t
0000040 3431 3109 0936 3831 330a 3609 3909 3109
1 4 \t 1 6 \t 1 8 \n 3 \t 6 \t 9 \t 1
0000060 0932 3531 3109 0938 3132 3209 0934 3732
2 \t 1 5 \t 1 8 \t 2 1 \t 2 4 \t 2 7
0000100 340a 3809 3109 0932 3631 3209 0930 3432
\n 4 \t 8 \t 1 2 \t 1 6 \t 2 0 \t 2 4
0000120 3209 0938 3233 3309 0a36 0935 3031 3109
\t 2 8 \t 3 2 \t 3 6 \n 5 \t 1 0 \t 1
0000140 0935 3032 3209 0935 3033 3309 0935 3034
5 \t 2 0 \t 2 5 \t 3 0 \t 3 5 \t 4 0
0000160 3409 0a35 0936 3231 3109 0938 3432 3309
\t 4 5 \n 6 \t 1 2 \t 1 8 \t 2 4 \t 3
0000200 0930 3633 3409 0932 3834 3509 0a34 0937
0 \t 3 6 \t 4 2 \t 4 8 \t 5 4 \n 7 \t
0000220 3431 3209 0931 3832 3309 0935 3234 3409
1 4 \t 2 1 \t 2 8 \t 3 5 \t 4 2 \t 4
0000240 0939 3635 3609 0a33 0938 3631 3209 0934
9 \t 5 6 \t 6 3 \n 8 \t 1 6 \t 2 4 \t
0000260 3233 3409 0930 3834 3509 0936 3436 3709
3 2 \t 4 0 \t 4 8 \t 5 6 \t 6 4 \t 7
0000300 0a32 0939 3831 3209 0937 3633 3409 0935
2 \n 9 \t 1 8 \t 2 7 \t 3 6 \t 4 5 \t
0000320 3435 3609 0933 3237 3809 0a31
5 4 \t 6 3 \t 7 2 \t 8 1 \n
0000334
~/test/ctst >
投稿2016/06/22 15:12
編集2016/06/23 13:40総合スコア6851
0
ループ内部のifは時間を食いますから、
#include <stdio.h>
int main (void)
{
int i,j;
for(i=1;i<=8;i++){
for(j=1;j<=8;j++){
printf("%d\t",ij);
}
printf("%d\n",ij); /* ループを抜けるとi=9になっている。
}
for(j=1;j<=8;j++){
printf("%d\t",i*j);
}
printf("%d",ij); / 行末の\tも消しています。
return 0;
}
こうしましょう。
投稿2016/06/21 19:32
編集2016/06/21 19:40総合スコア876
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
sprintf で文字列に変換しておいて末尾の空白を削除してから出力するという方法もありますね。
投稿2016/06/21 14:27
総合スコア28660
0
ベストアンサー
③末尾の空白を削除する
たぶんの下記のコードのようにj==9で処理を変えると実現できると思います。
C
1#include <stdio.h> 2int main (void) 3{ 4 int i,j; 5 for(i=1;i<=9;i++){ 6 for(j=1;j<=9;j++){ 7 if (j==9) { 8 printf("%d",i*j); 9 }else{ 10 printf("%d\t",i*j); 11 } 12 } 13 printf("\n"); 14 } 15 return 0; 16}
投稿2016/06/21 14:25
総合スコア338
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。