• ベストアンサー

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

以下のようなプログラム課題があるのですが、イマイチ問題のとっかかりがわかりません。 というかどのようなプログラムを書けばいいのかイメージが全然つかめません… %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

  • C言語でこのプログラムを完成させるには

    C言語でこのプログラムを完成させるには C言語初心者です。 1~6の乱数を100回発生させて、それぞれの出現回数をカウントし、ヒストグラムとして表示するプログラムを作成したいのですが上手くいきません。 #include <stdio.h> #include <time.h> #include <stdlib.h> int rnd(int m, int n) { return (int)(n-m+1)*(rand()/(RAND_MAX+0.1))+m; } int main(void) { int i, j, r; int hist[7]; for (i=1; i<7; i++) hist[i]=0; srand((unsigned)time(NULL)); for (i=0; i<100; i++) { r=6; while (6-- > 0) putchar('*'); putchar('\n'); } for (i=1; i<7; i++) { printf("%2d:", i); for (j=0; j<hist[i]; j++) printf("*"); printf("\n"); } return 0; } 何がいけないのでしょうか? よろしくお願いします。

  • プログラム

    下のようなプログラムを作ったのですが、10進2進変換をj=n>>2&1の部分にあるようなビットシフトではなく、 for(i=1;i<8;i++){printf("bit[%d]=%d\n",i,n%2);n=n/2;}に変えて剰余計算で行うプログラムにしたいのですが、分かる方がいましたら教えて下さい。お願いします。 #include <stdio.h> int main(void) { int i,j,n; i=2; printf("数字を入力="); scanf("%d",&n); printf("Dec=%d\n",n); printf("heX=0x%x\n",n); j=n>>2&1; printf("bit[%d]=%d\n",i,j); return(0); }

  • 2つのプログラムの違い

    どうしても分からなかったので投稿しました。よろしくお願いします。 #include<stdio.h> int main(void) { int c; while((c=getchar())!=EOF){ putchar(c); } return 0; } のプログラムをコマンドプロンプトで入力すると、 abc abc なんですが、 #include<stdio.h> int main(void) { int c,i; i=0; while ((c=getchar())!=EOF) { putchar(c); i++; printf("%d\n",i); } return 0; } の場合、 abc a1 a2 a3 4 になります。 自分は abc a1 a2 a3 になると思ったのですが、a3と4の隙間と4は何故出て来たのでしょうか?

  • 二次元配列の対各成分を書き出すプログラムについて

    実行結果が3,5,7を書き出すプログラムを作成したいです。1,5,9を書き出す(以下のプログラム)を書き出すものは出来たのですが、3,5,7を書き出すプログラムが解りません。誰か解る方、教えて下さい。 #include<stdio.h> int main(void){ int i,mt[3][3]= {{1,2,3}, {4,5,6},     {7,8,9}}; for(i=0;i<3;i++){ printf("%d",mt[i][i]); } printf("\n"); return(0); }

  • プログラムの添削

    以下のような数当てゲームを作りました.なるべくうまいプログラムを書けるようになりたいのですが,どのような改善点がありますか?よろしくお願いします. /*数当てゲームを作りなさい.*/ #include<stdio.h> void maegaki(void); /*このように関数を定義しまくることに意味はあるのか?main関数はすっきりするけど.*/ void in_check_out(int i); int main(void) { int i; int j; maegaki(); for(j=0;j<10;j++) { scanf("%d",&i); in_check_out(i); if(!(i-1)) return 0; printf("残り%d回です.\n",9-j); } return 0; } void maegaki(void) { printf("数当てゲームをはじめます.\nぼくの好きな整数を当ててください.\nチャンスは10回です.\nヒントはボゾン\n"); } void in_check_out(int i) { if(!(i-1)) { printf("正解!答えは1です.\n"); } else { printf("残念!\n"); if(i>1) printf("%dより小さいです.\n",i); else printf("%dより大きいです.\n",i); } }

  • 昇順に並べ替えるプログラム(続き)

    (C言語)実行例のような3つの整数を読み込み昇順に並べ替えるプログラムは途中までわかったのですがあとはどう修正・追加をすればいいのでしょうか? 実行例 1:45 2:43 3:38 昇順に並べ替えました。 1:38 2:43 3:45 途中までのプログラム #include<stdio.h> int main(void) { int n1,n2,n3; printf("1:"); scanf("%d",&n1); printf("2:"); scanf("%d",&n2); printf("3:"); scanf("%d",&n3); printf("昇順に並べ替えました。\n"); return 0; }

  • このプログラムのどこを直せばいいんでしょうか?

    いま、文字列strの中に文字cが含まれている個数を表示するプログラムを作っているんですが、下のように作っても、上手く行きません。 どこをどう直せばいいのか教えてください! #include <stdio.h> int str_chnum (const char str[],int d) { int i=0; int sum=0; while(str[i]!=0){ if(str[i]==d ){ sum++; } i++; } return(sum); } int main(void) { int c; char str[128]; puts("put sentence..."); scanf("%s",str); puts("search character..."); scanf("%d",&c); printf("there are %d %ds in this sentence.",str_chnum(str,c),c); return(0); }

  • C言語初心者です。

    C言語初心者です。 1^2-2^2+3^3-4^2…+99^2-100^2の値を求めるプログラムを作成したいのですが上手くいきません。 どこが足りないのですか? #include <stdio.h> int main(void) { printf("%d", 1^2 - 2^2 + 3^2 - 4^2 … + 99^2 - 100^2); return (0); } よろしくお願いします。

  • 素数であるかを判断するプログラムについて

    C言語を学習していて「独習C」48ページの次のプログラムが分かりませんでした。 ~~~~~~~~~~~~~~~~ #include <stdlib.h> #include <stdio.h> int main(void) { int num, i, is_prime; printf("判定したい数を入力してください"); scanf("%d", &num); /*ここからがわかりません*/ is_prime = 1; for(i=2; i<=num/2; i=i+1) if((num%i)==0) is_prime = 0; if(is_prime==1) printf("素数です"); else printf("素数ではありません"); return 0; } ~~~~~~~~~~~~~~~ 私はこうなると考えています。どこが間違っているでしょうか? numが0のとき、2<=0となり、素数 numが1のとき、2<=0.5となり、素数でない numが2のとき、2<=1となり、素数でない numが3のとき、2<=1.5となり、素数でない

  • C言語<素数を求めるプログラム>

    #include<stdio.h> int j; int prime(int n) { int i; if(n < 2) return 0; if(n == 2) return 1; if(n%2 == 0) return 0; for(i = 3; i*i<= n; i += 2){ if(n%i == 0) return 0; } return 1; } int main(void) { int n; for(n=1; n <= 1000; n++) { if(prime(n)){ printf("%d\n",n); j++; } } printf("素数の個数は全部で %d 件見つかりました。\n",j); return 0; } このプログラムは1から1000までの素数のみを表示させるプログラムでありますが、このアルゴリズムが全くわかりません。 int prime(int n)の中身のアルゴリズムがどういう仕組みになっているのかお分かりになりますでしょうか?

このQ&Aのポイント
  • 普段会わない友達への出産祝いについて悩んでいます。仲の良い友達夫婦に子供ができたので、友達グループでお金を出し合って贈ろうと思っています。しかし、そのグループの中に出産祝いを贈っていない子持ちの既婚者が3人います。
  • その3人には贈っていないのに、今回だけ贈ることになると申し訳なく感じるし、気分を悪くさせるかもしれません。この状況で出産祝いを贈る場合、子持ちの3人以外にも声をかけて贈る、もしくは私個人で贈る方がいいでしょうか。
  • 他にもいい方法があれば教えてください。
回答を見る