最近独学でC言語を始めたのですが
1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9
2 , 4 , 6 , 8 ,10 ,12 ,14 ,16 ,18
・
・
・
9 ,18 ,27 ,36 ,45 ,54 ,63 ,72 ,81
のような感じでコンソール画面で九九表をfor文一つで表示させたいのですが
どうしたらいいでしょうか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答6件
0
力技ですが・・・
c
1~/test/ctst >cat tst03.c 2#include <stdio.h> 3 4int main() 5{ 6 7 for( int i= 1; i < 10; i++ ){ 8 /* 1 2 3 4 5 6 7 8 9 */ 9 printf( "%2d, %2d, %2d, %2d, %2d, %2d, %2d, %2d, %2d\n", 10 i * 1, i * 2, i * 3, i * 4, i * 5, i * 6, i * 7, i * 8, i * 9 ); 11 } 12 13 return 0; 14} 15 16~/test/ctst >./a.out 17 1, 2, 3, 4, 5, 6, 7, 8, 9 18 2, 4, 6, 8, 10, 12, 14, 16, 18 19 3, 6, 9, 12, 15, 18, 21, 24, 27 20 4, 8, 12, 16, 20, 24, 28, 32, 36 21 5, 10, 15, 20, 25, 30, 35, 40, 45 22 6, 12, 18, 24, 30, 36, 42, 48, 54 23 7, 14, 21, 28, 35, 42, 49, 56, 63 24 8, 16, 24, 32, 40, 48, 56, 64, 72 25 9, 18, 27, 36, 45, 54, 63, 72, 81 26~/test/ctst >
投稿2016/02/18 09:30
編集2016/02/18 09:48総合スコア6851
0
掛け算を使わずに作ってみました。
99.c
c
1#include <stdio.h> 2 3#define N (10) // (N -1) * (N - 1) の掛け算の表をつくる 4#define FORM " %2d" // 一マスの書式 5// N = 21, FORM = " %3d" とすれば 20 * 20 の掛け算表が出力できる。 6 7int main() { 8 int base = 1; 9 int diff = 1; 10 int n = 1; 11 for (int i = 1; i <= N * (N - 1); i++) { 12 if (i % N == 0) { 13 printf("\n"); 14 base ++; 15 diff ++; 16 n = base; 17 } else { 18 printf(FORM, n); 19 n += diff; 20 } 21 } 22 return 0; 23}
実行結果
$ gcc 99.c $ ./a.out 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/02/18 12:46
総合スコア22324
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/02/18 14:39
0
for 文がもっと減るとこうなってくる
C
1#include <stdio.h> 2 3int rowMax; 4int columnMax; 5 6void PlotMultSub(int row, int column) 7{ 8 int nextRow = row+1, nextColumn = column; 9 10 printf(" %3i", row * column); 11 12 if (row == rowMax) 13 { 14 printf("\n"); 15 if (column == columnMax) 16 { 17 return; 18 } 19 nextRow = 1; 20 nextColumn++; 21 } 22 23 PlotMultSub(nextRow, nextColumn); 24} 25 26void PlotMultTable(int row, int column) 27{ 28 if (row <= 0 || column <= 0) 29 { 30 return; 31 } 32 rowMax = row; 33 columnMax = column; 34 PlotMultSub(1, 1); 35} 36 37int main () 38{ 39 PlotMultTable(9, 9); 40 return 0; 41}
投稿2016/02/20 07:59
編集2016/02/20 08:03総合スコア306
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/09/28 13:55
2016/09/30 08:24
0
c
1include <stdio.h> 2 3void main( void ) 4{ 5 for( int i = 1 , j = 1 ; ; i++ ) 6 { 7 printf ( "%2d" , i * j ) ; 8 if( i == 9 ) 9 { 10 printf ( "\n" ) ; 11 i = 0 ; 12 j++ ; 13 if ( j == 10 ) 14 break ; 15 } 16 } 17}
結構スタイリッシュにできたと思うのですが、どうでしょうか。
投稿2016/02/18 10:07
編集2016/02/18 12:40総合スコア10
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
ベストアンサー
こんにちは。
2重for文がベストと思いますが、for文1つに拘るのであれば、少しデバッグのしやすさに配慮して下記で如何でしょうか?
C
1#include <stdio.h> 2 3int main() 4{ 5 for (int i=0; i < 10*10; ++i) 6 { 7 if (((i/10)==0) || ((i%10)==0)) 8 continue; 9 10 if ((i%10) < 9) { 11 printf("%2d,", (i%10)*(i/10)); 12 } else { 13 printf("%2d\n", (i%10)*(i/10)); 14 } 15 } 16 17 return 0; 18}
単純に10進法で処理しているので効率が悪いです。9進法にて処理すれば効率は落ちません。
是非、9進法による処理にチャレンジされてみてください。
for (int i=0; i < 10*10; ++i)
は、for (int i=0; i < 9*9; ++i)
となり、かつ、if (((i/10)==0) || ((i%10)==0)) continue;
はやっぱり無くせる筈です。
投稿2016/02/18 09:23
編集2016/02/18 09:33総合スコア23272
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
2重for文をつかわずにということでしょうか?
if文を10個ほど使えば可能です。(switchのほうが見栄えいいかも)
どうすればというのはコードを知りたいのでしょうか?やり方でしょうか?(アイデア)
投稿2016/02/18 09:18
編集2016/02/18 09:23総合スコア65
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/02/18 09:23 編集
2016/02/18 09:25
2016/02/18 09:34
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/02/18 09:53
2016/02/18 10:12
2016/02/20 16:53 編集