初めまして。今大学のプログラミングが私苦手なので復習をしています。ですがやはりつまづいてしまうところはつまづいてしまいます@@;。下の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%理解したいので教えてください。
C言語の数字の出現回数のプログラミング
Re:C言語の数字の出現回数のプログラミング
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');は次のカウント表示する為の改行ですね。
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');は次のカウント表示する為の改行ですね。