• ベストアンサー

このプログラム課題を完成させるヒントを下さい。

以下のようなプログラム課題があるのですが、イマイチ問題のとっかかりがわかりません。 というかどのようなプログラムを書けばいいのかイメージが全然つかめません… %cってそもそもなんなのでしょうか?明解C言語にも載ってませんし… 正直、お手上げ状態ですのでどなたかご教授してくる方いましたらお願いします…。 print の %d と同じ出力を %c だけ使って実現しなさい. ヒント: 剰余演算子 % をつかいます. 502 % 100 = 2 #include <stdio.h> int main(void) { int d ; int i ; d = 502 ; for (i = 0 ; ??? ; ???) { printf("%c", ???) ; } ; return(0) ; } ;

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

  • ベストアンサー
noname#48699
noname#48699
回答No.4

★フォーマット指定子は、解決されましたよね。 http://www.k-cube.co.jp/wakaba/server/format.html ★文字と数の違いは理解されていますか。 参考URLにアスキーコード表を示します。 %c で扱う文字としての 5 は16進で 0x35 です。 ★数字の 502 を文字の '5','0','2' に分割できましたか。 質問本文中の 502 % 100 = 2 の 100 は「正しく」は、10 です。 502 であれば結果は同じですが、502 が例えば 456 の場合は、56 となり汎用性がありません。 末尾の 2 は、502 % 10 で求まりました。 これを文字の'2'にするには、2 + 0x30 = 0x32 だよね。 次に、真ん中の 0 は、・・わかるよね、502 / 10 % 10。 次に、先頭の・・・。 質問本文中にあるように◆for文を使う◆、ということで・・・。 【下3桁限定表示】 iNum = 123502; iKeta = 100; for( i = 0; i < 3; i++ ){ cKazu = iNum / iKeta % 10 + 0x30; printf( "%c", cKazu ); iKeta /= 10; } すっかり答えを書いちゃったけど、プログラムは10人いれば10種のプログラムができあがります。 暇な年寄りが書くとこうなる、くらいに思って下さい。 要は、上に書いたことが理解できたかなと・・・。

参考URL:
http://e-words.jp/p/r-ascii.html
iriiri_001
質問者

お礼

非常に丁寧な回答ありがとうございます。 なるほど、%cとはそういうものだったんですね。 数字502を1数字ずつに分解して文字に直して出力すれば良いのかぁ…。 それで今回の場合は問題に沿って、for分を使って3回プログラムを回せば良かったんですね。 問題の意味共にyamame3092さんの書いていただいた内容もしっかり理解できました。 アスキーコードを使った問題を解くのはほとんどやっていなかったので 今回の問題の方向性が掴めず非常に困っておりました。 今後の参考にさせてもらいます。本当に助かりました。 改めてありがとうございます。

その他の回答 (3)

  • tig33
  • ベストアンサー率50% (6/12)
回答No.3

printfで、ネット検索すれば、フォーマット指定子の説明が数多く説明されたHPが見つかります。 「man printf」 がつかえるのは、UNIX(LINUX)の世界ですね。 フォーマット指定子が理解できれば、解答はおのずから導き出せると思います。

  • php504
  • ベストアンサー率42% (926/2160)
回答No.2

%c int 引き数を unsigned char に変換して、その結果に対応する文字を出力する。 ASCIIコードであれば printf("%c", 0x31) ; で数字の"1"が出力されます

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.1

>イマイチ問題のとっかかりがわかりません。 穴埋めなんだから「とっかかり」もへったくれもないですね。 書いてあるじゃない。 >%cってそもそもなんなのでしょうか?明解C言語にも載ってませんし… man printf に載っています。 >このプログラム課題を完成させるヒントを下さい。 ヒント: 剰余演算子 % をつかいます.

関連するQ&A