学校の課題です。
0~99の整数を10個入力する。
0~9、10~19・・・90~99がそれぞれ何回ずつ入力されたかを数値とヒストグラムで表示する
プログラムを作成しなさい。
カウント数は配列に格納しなさい。
という問題なのですが
ヒントをくれませんか
まったくちんぷんかんぷんです
無題
-
ユーリ
Re:無題
#include <stdio.h>
main()
{
int data[10];
int a,b,i,h,j;
for(i=0;i<=10;i++){
printf("値を入力してください",i+1);
scanf("%d",a);
if(a==0||a<=99){
printf("もう一回入力しようよ");
}
}
for(h=0;h<=10;h++){
b=a%10;
for(j=1;j<=10;j++){
printf("*",b);
switch(h)
{
case 0:
printf("*",b);
break;
case 1:
printf("*",b);
break;
case 2:
printf("*",b);
break;
case 3:
printf("*",b);
break;
case 4:
printf("*",b);
break;
case 5:
printf("*",b);
break;
case 6:
printf("*",b);
break;
case 7:
printf("*",b);
break;
case 8:
printf("*",b);
break;
case 9:
printf("*",b);
break;
}
}
}
return 0;
}
作ってみたのですがうまくいきませんなぜでしょう
main()
{
int data[10];
int a,b,i,h,j;
for(i=0;i<=10;i++){
printf("値を入力してください",i+1);
scanf("%d",a);
if(a==0||a<=99){
printf("もう一回入力しようよ");
}
}
for(h=0;h<=10;h++){
b=a%10;
for(j=1;j<=10;j++){
printf("*",b);
switch(h)
{
case 0:
printf("*",b);
break;
case 1:
printf("*",b);
break;
case 2:
printf("*",b);
break;
case 3:
printf("*",b);
break;
case 4:
printf("*",b);
break;
case 5:
printf("*",b);
break;
case 6:
printf("*",b);
break;
case 7:
printf("*",b);
break;
case 8:
printf("*",b);
break;
case 9:
printf("*",b);
break;
}
}
}
return 0;
}
作ってみたのですがうまくいきませんなぜでしょう
-
やっくん
Re:無題
昨日も言いましたが、きちんとインデントをしてソースを<Pre> </Pre>で囲んで投稿しなきゃ見にくいですよ。
ユーリさんのソースで細かな点の指摘をさせてもらいます。
・scanfで入力した数値を入れたい変数には&を付けてください。
・if(a==0||a<=99)とありますが、これだと「aが0」または「aが99以下」の時となります。
・b=a%10ここは何をしたいのかわかりませんが、
「aを10で割った余りをbに入れる」って操作になっているのでこの課題では関係ないかと思います。
・一番大きなミスなのは、printf("*",b)のように書いてる部分ですね。
多分、ユーリさんは「*をb回表示させる。」といった意味で使ったのでしょうが、
printfで変数を扱う場合は
printf("%d",b);
のように変数がint型なら%dを書かなければなりません。この%dと書いたところにbの値が入ります。
ただ、bの値が入るだけなので仮にb=3とすると,
printf("%d×*", b);
のように記述しても、「3×*」と出力されるだけです。
%dのようなものを書式指定子といってC言語では重要なので復習してみてはどうでしょうか?
ちなみに以下が課題の答え?になると思います。
ユーリさんのソースで細かな点の指摘をさせてもらいます。
・scanfで入力した数値を入れたい変数には&を付けてください。
・if(a==0||a<=99)とありますが、これだと「aが0」または「aが99以下」の時となります。
・b=a%10ここは何をしたいのかわかりませんが、
「aを10で割った余りをbに入れる」って操作になっているのでこの課題では関係ないかと思います。
・一番大きなミスなのは、printf("*",b)のように書いてる部分ですね。
多分、ユーリさんは「*をb回表示させる。」といった意味で使ったのでしょうが、
printfで変数を扱う場合は
printf("%d",b);
のように変数がint型なら%dを書かなければなりません。この%dと書いたところにbの値が入ります。
ただ、bの値が入るだけなので仮にb=3とすると,
printf("%d×*", b);
のように記述しても、「3×*」と出力されるだけです。
%dのようなものを書式指定子といってC言語では重要なので復習してみてはどうでしょうか?
ちなみに以下が課題の答え?になると思います。
#include <stdio.h>
int main(void) {
int data[10]; //入力保存用(0-99)
//0-9,10-19,・・・,90-99のカウント用(カウンターなので初期値0)
int counter[10] = {0,0,0,0,0,0,0,0,0,0};
int i = 0,j;//ループで使う。
printf("値を入力してください\n"); //入力を促す
do{
printf("%d:", i + 1);
scanf("%d",&data);
if(data < 0 || data > 99){
printf("0-99までの値を入れてください\n");
continue; //もし入力値が0-99に含まれて居ないなら、while(i<10)に飛ぶ。
}
i++;
} while(i < 10);
for(i = 0; i < 10; i++){
if(data >= 0 && data <= 9) counter[0]++; //dataが 0- 9なら+1
else if(data >= 10 && data <= 19) counter[1]++; //dataが10-19なら+1
else if(data >= 20 && data[i] <= 29) counter[2]++; //data[i]が20-29なら+1
else if(data[i] >= 30 && data[i] <= 39) counter[3]++; //data[i]が30-39なら+1
else if(data[i] >= 40 && data[i] <= 49) counter[4]++; //data[i]が40-49なら+1
else if(data[i] >= 50 && data[i] <= 59) counter[5]++; //data[i]が50-59なら+1
else if(data[i] >= 60 && data[i] <= 69) counter[6]++; //data[i]が60-69なら+1
else if(data[i] >= 70 && data[i] <= 79) counter[7]++; //data[i]が70-79なら+1
else if(data[i] >= 80 && data[i] <= 89) counter[8]++; //data[i]が80-89なら+1
else if(data[i] >= 90 && data[i] <= 99) counter[9]++; //data[i]が90-99なら+1
}
//0-9 → 10-19 → ・・・ → 90-99の順に*の数を表示
for(i = 0;i < 10; i++){
printf("%2d - %2d:", i * 10, (i+1)*10-1);
for(j = 1; j <= counter[i];j++) printf("*");
printf("\n");
}
return 0;
}-
夢夢
Re:無題
すんごい単純ですけど、参考になれば。
※数字以外を入れるとおかしくなります。
※数字以外を入れるとおかしくなります。
#include <stdio.h>
#include <windows.h>//Sleep関数のみ
int main(void)
{
int a=0;
int i=0;
int ii=0;
int data[10]={0};
while(i<10){
printf("0~99を入力しろ。 %d回目",i+1);
scanf("%d",&a);
if(a>=0&&a<=99){
//ちゃんと入力した
for(ii=0;ii<10;ii++){
if(a>=ii*10&&a<=ii*10+9){
i++;
data[ii]++;
break;
}
}
}
}
//結果表示
for(i=0;i<10;i++){
printf("%d~%d:%d回\t",i*10,i*10+9,data);
for(ii=0;ii<10;ii++){
if(data>ii) printf("☆");
}
printf("\n");
}
Sleep(10000);
return 0;
}