C言語の数字の出現回数のプログラミング
Posted: 2010年1月05日(火) 08:39
初めまして。今大学のプログラミングが私苦手なので復習をしています。ですがやはりつまづいてしまうところはつまづいてしまいます@@;。下の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%理解したいので教えてください。
#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%理解したいので教えてください。