C言語の数字の出現回数のプログラミング

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
tovira

C言語の数字の出現回数のプログラミング

#1

投稿記事 by tovira » 15年前

初めまして。今大学のプログラミングが私苦手なので復習をしています。ですがやはりつまづいてしまうところはつまづいてしまいます@@;。下のC言語のプログラムについての質問です。
#include <stdio.h>

int main(void)
{
int i, j, ch;
int cnt[10] = {0};

while((ch = getchar()) != EOF){
if(ch >= '0' && ch <= '9') ++ cnt[ch - '0' ];
}

puts("数文字の出現回数");
for(i = 0; i<10;i++){
printf("'%d':",i);
for(j=0;j<cnt;j++)
putchar('*');
putchar('\n');
}
return 0;
}
質問内容についてですが、ほとんどといってわからない部分が多いのでひとつづつ書いていきます。
まず
while((ch = getchar()) != EOF){
if(ch >= '0' && ch <= '9') ++ cnt[ch - '0' ];
}
の部分はCtrl+Zをするまで数字を入力してまではわかるのですが次がわかりません。++ cnt[ch - '0']もcntのカッコの中が+されているのかcntそのものが+されるかわからないレベルです@@;。この部必要ないんじゃないかなと思って抜いてみたのですが、*が表示されてなく、必要とわかりました。けれどもなぜ必要なのかということが今になってもわかりません。
次に
for(i = 0; i<10;i++){
printf("'%d':",i);
for(j=0;j<cnt;j++)
putchar('*');
putchar('\n');
}
の部分ですが、この部分もさっぱりといってわかりません。詳しくいいますと、
for(i = 0; i<10;i++)
printf("'%d':",i);
の部分は数字をprintfで並べているのがわかります。(表形式)
その次にアスタリスクの個数で数字の個数を表示します。この部分なのですが、なぜ
for(j=0;j<cnt;j++)
putchar('*');
putchar('\n');
で出現回数分アスタリスクを表示できるのか意味がわかりません。
ほんと初心者みたいな質問ですみませんがどうしても100%理解したいので教えてください。

さかまき

Re:C言語の数字の出現回数のプログラミング

#2

投稿記事 by さかまき » 15年前

cnt[10]は'0'から'9'の出現回数を記録する変数の配列です。
cnt[0] = '0' の出現回数
  |
cnt[9] = '9' の出現回数
がセットされます。
cnt[ch - '0' ] は
ch='0' の時、cnt[0]
ch='1' の時、cnt[1]
 |
ch='9' の時、cnt[9]
になります。cnt[/url]の意味が理解できれば
if(ch >= '0' && ch <= '9') ++ cnt[ch - '0' ];
で出現回数をカウントアップしている事がわかると思います。
このプログラムの核ですので「この部必要ないんじゃないかな」どころでは無いです。

カウンターなので
for(j=0;j<cnt;j++) putchar('*'); によって
それぞれの個数だけアスタリスクが表示されます。
putchar('\n');は次のカウント表示する為の改行ですね。

たかぎ

Re:C言語の数字の出現回数のプログラミング

#3

投稿記事 by たかぎ » 15年前

まずはお約束
[flash 600,100]http://dixq.net/flash/kiyaku4.swf[/flash]

tovira

Re:C言語の数字の出現回数のプログラミング

#4

投稿記事 by tovira » 15年前

プログラムを良くよめばわかりました@@;。さかまきさんありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る