算数の九九を表示させるプログラム

このQ&Aのポイント
  • 九九の計算結果を表示するプログラムです
  • プログラム内の「%2d」は何を表しているのか分かりません
  • 縦9行、横9列に九九の計算結果がきれいに表示されます
回答を見る
  • ベストアンサー

printf( " %2d", p * q );

以下のプログラムは算数の九九を表示させるプログラムです。   #include <stdio.h> int main() { int p, q; for( p = 1 ; p <= 9 ; p++ ){ for( q = 1 ; q <= 9 ; q++ ) printf( " %2d", p * q ); printf( "\n" ); } return 0; }  以上のプログラムの中に「printf( " %2d", p * q );」とあります。  %2dは何を表しているのか分かりません?  (マス目みたいに縦9行、横9列きれいにそろうのも不思議なのですが?    これは次回の質問に回します。) よろしくお願いいたします。

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

  • ベストアンサー
  • jagd-doga
  • ベストアンサー率31% (14/45)
回答No.3

プログラムが動いているようですので、試してみればいいと思います。  ・%2d  ・%02d  ・%d  ・%4d  ・%04d 上記5通りくらい試して出力を比較すれば、 > (マス目みたいに縦9行、横9列きれいにそろうのも不思議なのですが? >   これは次回の質問に回します。) この疑問の答えも出てくるでしょう。 どうでしょうか。

gogatunijyuku
質問者

お礼

ご回答ありがとうございました。  %の意味をてっきり、÷→/と勘違いしていたところがあり、「書式指定文字」 とのことで、納得しました。C言語も実プログラムらしき面を少し実感しました、先が楽しみです^^

gogatunijyuku
質問者

補足

 分かりやすいご解説ありがとうございました。  以下試しました。 saijyo_739様のご解説の通りだと思います。 %2d 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  %02d 01 02 03 04 05 06 07 08 09 02 04 06 08 10 12 14 16 18 03 06 09 12 15 18 21 24 27 04 08 12 16 20 24 28 32 36 05 10 15 20 25 30 35 40 45 06 12 18 24 30 36 42 48 54 07 14 21 28 35 42 49 56 63 08 16 24 32 40 48 56 64 72 09 18 27 36 45 54 63 72 81 %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 %4d 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 %04d 0001 0002 0003 0004 0005 0006 0007 0008 0009 0002 0004 0006 0008 0010 0012 0014 0016 0018 0003 0006 0009 0012 0015 0018 0021 0024 0027 0004 0008 0012 0016 0020 0024 0028 0032 0036 0005 0010 0015 0020 0025 0030 0035 0040 0045 0006 0012 0018 0024 0030 0036 0042 0048 0054 0007 0014 0021 0028 0035 0042 0049 0056 0063 0008 0016 0024 0032 0040 0048 0056 0064 0072 0009 0018 0027 0036 0045 0054 0063 0072 0081

その他の回答 (4)

回答No.5

桁数指定をしています。この場合は、10進数の整数を2桁分だけ表示します。

回答No.4

> printf( " %2d", p * q ); pxqの計算結果を表示しています。 %2dは表示の書式で、%dで整数値を表示・%2dでは2文字分の幅で整数を表示となります。 九九の計算結果という事なので81=9x9が最大、最大の値で2桁で表示できる事から2桁で揃えて表示されているのだろうと思います。

  • jjon-com
  • ベストアンサー率61% (1599/2592)
回答No.2

キーワード「printf %2d」でGoogle検索して4番目にヒットするのがこちら。 http://www.geocities.jp/ky_webid/c/006.html

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

%2dのところが、後のp*qの値に置き換わって出力される、というのは理解できてますね? printfのマニュアルや解説を読んでください。%で始まる書式指定の方法が必ず載ってるはずです。

関連するQ&A

  • printfについて

    他サイトにて非常に興味の有るコードがあったのですが、そのサイトは訳合って見れなくなってしまったのでこちらで聞かせてください。 下記のprintfの中の、%.*sはどう解釈したら良いのですか? % . * s それぞれどういう意味が有るのですか? 始めて見るパターンなので分かりません。 #include <stdio.h> #include <stdlib.h> #include <locale.h> int main(void) { char a[] = "あいaう"; char *p; int len; setlocale(LC_CTYPE, ""); for (p = a; *p; p += len) { len = mblen(p, MB_CUR_MAX if (len <= 0) break; printf("%d: %.*s\n", len, len, p); } return 0; }

  • C言語のポインタ

    あまり意識せずにポインタを使っているせいか,次のプログラムではまってしまいました. #include<stdio.h> #include<stdlib.h> int main(void) {  int *p, q;  p = (int *)malloc(sizeof(int));  q = (int *)malloc(sizeof(int));  *p = 2;  printf("%d\n", *p);  return 0; } コンパイルエラーで実行ファイルが出力されません. このプログラムで変数qはなぜポインタじゃないのでしょうか? 次にtypedefでptr_intという型を定義したプログラムは, 上のようなエラーが出力されず,期待とおりの結果になりました. #include<stdio.h> #include<stdlib.h> typedef int* ptr_int; int main(void) {  ptr_int p, q;  p = (int *)malloc(sizeof(int));  q = (int *)malloc(sizeof(int));  *p = 2;  *q = 3;  printf("%d\n", *p);  printf("%d\n", *q); return 0; } typedefすることでなぜエラーを回避することができるのでしょうか? よろしくおねがいします.

  • printf()で出力したいんですが?

    #include <stdio.h> int main( void ) { int air[4]; int i; i = 0; printf( "データ入力\n" ); do{ scanf( "%d\t", &air[ i++ ]); } while(air[ i - 1 ] > 0 ); printf( "%d\n", i ); return 0; } このプログラムはコンパイル出来ますが、期待していたprintf関数での出力ができません。 その理由として何がありますか?関数の使い方が間違っているのか、DO~WHILE文が使えない場所 なのか、もし直すとすればどう直せばいいのですか。

  • ポインタいついて教えてください

    ポインタがわかりません。 教えてください。 下の二つは、共に「100」を表記すると思いますが、 どこがどのように違うのですか。 また、f1()という関数をつくって、ここで scanfを使って、5つぐらい値を代入させて、 他の関数でこの値を使おうと思っています。 この場合下のどちらを使うのが、よろしいのでしょうか。 よろしくお願いします #include <stdio.h> int main(void) { int *p, q; q = 100; /* q に100を代入 */ p = &q; /* p にq のアドレスを割り当てる */ printf("%d", *p); return 0; } #include <stdio.h> int main(void) { int *p, q; p = &q; /* q のアドレスを得る */ *p = 100; /* ポインタを使ってq に値を代入する */ printf("%d", q); return 0; }

  • Cの九九を表示するプログラムについて

    九九の表示を変えたいんですけど #include <stdio.h> int main(void) { int x,y; for (x = 1;x <= 9;x++) { for (y = 1;y <= 9;y++) { printf(" %2d ", x * y); } printf("\n"); } return 0; } これを実行すると 1 2 3 4 5 6 7 8 9 2 4 6 8 10 12 14 16 18 . . 9 . . . . . . . 81 となるのですが、これを 1 * 1 1 * 2 1 * 3 . . . 1 * 9 1 * 2 . . 1 * 9 . . . . . 9 * 9 と表示させたいのですがどなたか知恵を貸していただきませんでしょうか?

  • printfの使い方

    #include <stdio.h> main() { printf("正しい?"); int a; int b; int c; printfをこのように使うと int がここでは 宣言できないとなってしまうのは何故ですか?

  • printfがなくても文字が現れるのはなぜ!?

    #include <stdio.h> #include <string.h> int main() { int hensuu = 0; int *p; p = &hensuu; printf("p=%p &hensuu=%p\n", p, &hensuu); printf("*p=%d\n", *p); *p = 100; printf("*p=%d\n", *p); printf("hensuu=%d\n", hensuu); }  以下、出力結果です。    p=0xff930a1c &hensuu=0xff930a1c *p=0 *p=100 hensuu=100  以上が結果ですが!   *p=100 は*p = 100;で終わっていますが!出力結果として文字が出てきたいるのはなぜですか!  宜しくお願いします。

  • %3dについて

    下記の実行例を参考に足りないコードを記述で書きプログラムを完成させよ。 <実行結果> 配列内容:10 22 34 60 54 <プログラム> #include<stdio.h> int main(void){ int num[]={10,22,34,60,54}; int i; printf("配列内容:"); ---------------------- -------------------- return(0); } こういう問題があって空欄の中に入る回答は for(i=o;i<5;i++){ printf("%3d",num[i]); } なんですが何故%dではなく、%3dなんでしょうか?? %3dはどういった場合に使うのでしょうか?? かなり基本的な質問ですいません。

  • printfを代入する?

    #include <stdio.h> int main(void) { int kaerichi,nyuuryokumoji; char moji[40]; printf("\n数字を入力してください:"); scanf("%d",&nyuuryokumoji); kaerichi=printf("%d",nyuuryokumoji); printf("\n入力数字の桁数は%dです\n",kaerichi); printf("\n文字を入力してください:"); scanf("%s",&moji); kaerichi=printf("%s",moji); printf("\n入力された文字は%dです\n",kaerichi); return(0); } このプログラムでkaerichi=print("d",nyuuryokumoji); とありますがどういう意味でしょうか? 変数に数字などを入れるのはわかるのですが printfをいれるというのがあまりよくわかりません あとどうして桁数がでるのでしょうか?

  • while doについて

    九九の表で、forの2重のプログラムは作成できたのですが、whileとdo~whileを使って書き直すやり方がわからないのです。 どうか教えてください。お願いします。 #include <stdio.h> main() { int i,j; for(j = 1; j <= 9; j++){ for(i = 1; i <= 9; i++) printf("%3d", j*i); printf("\n"); } }