配列の問題

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

配列の問題

#1

投稿記事 by 柏餅 » 14年前

以前応用が利かないとトピックをたてたものです
ここ数日忙しくなかなかこれませんでした、返信してくださった皆様申し訳ありませんでした。

for文の流れは大体は理解できましたが、またしても壁が・・・
それは配列で、このプログラムの

コード:

#include <stdio.h>
#define NUMBER 80

int main(void)
{
	int i, j;
	int num;			//実際の人数
	int ten[NUMBER];		//学生の点数
	int bmp[11] = {0};	//分布

	printf("人数を入力してください");
	do{
		scanf("%d", &num);
		if (num < 1 || num > NUMBER){				
			printf("\a要[1以上%d以下] :", NUMBER);	
		}
	} while (num < 1 || num > NUMBER);				

	puts("点数を入力してください");
	for(i = 0; i < num; i++){
		printf("%2d番", i + 1);
		do {
			scanf("%d", &ten[i]);
			if(ten[i] < 0 || ten[i] > 100){
				printf("\a要 [0以上100以下] :");
			}
		} while (ten[i] < 0 || ten[i] > 100);
		
		bmp[ten[i] / 10]++; //この部分と
	}

	puts("\n[ 分布グラフ ]");    
	printf("      100:");
	for(j = 0; j < bmp[10]; j++)  //ここの読み方、流れ?というか意味が???です
		putchar('+');
	putchar('\n');

	for(i = 9; i >= 0; i--){
		printf("%3d - %3d:", i * 10, i * 10 + 9);
		for(j = 0; j < bmp[i]; j++){  //ここも同様にどう読めばいいかがわかりません
			putchar('*');
		}
	putchar('\n');
	}                 	
return 0;
}
実行すると
人数を1 ~ 80まで入力し次に点数を0以上100以下を入力して
100点は何人いたか(+)で表示
0 ~ 9 点は何人いたか(*)で表示
10 ~ 19点は何人いたか(*)で表示
と、これが90 ~ 99まで表示されます。

現在ここでつまづいていて、非常にもどかしく先に進めません
ご回答お願いします。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

Re: 配列の問題

#2

投稿記事 by softya(ソフト屋) » 14年前

前の回答は読まれましたか?
少なくともマナーと【フォーラムルール】としてお礼を言って解決として閉じる様にお願いします。
もし、解決していないなら終了せずに続けることをお勧めします。
http://dixq.net/forum/viewtopic.php?f=3 ... +%E9%A4%85


で、今回の質問ですが他の人が書いたプログラムが理解出来ないということでよろしいですね?
私やUltimateさんの書いたprinttfを挟む手法とか試されましたか?
ぜひ、それを挟んだプログラムを書いて掲載してください。
ちなみに、添付されたコードは全角空白が紛れ込んでいるらしくエラーになるので確認をお願いします。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
へろりくしょん
記事: 92
登録日時: 14年前
住所: 福岡

Re: 配列の問題

#3

投稿記事 by へろりくしょん » 14年前

以前のスレッドを読んでませんので何がしたいのかよくわかりません。

配列がどういう物であるかは分かっているのでしょうか。

とりあえず紙に書いてみればいいと思いますよ。

配列の要素数分の□を書いて、それから状態遷移でも図で書いてみれば一発だと思います。

ちなみに配列というのは、連続して並んだ箱です。
int hoge; は箱が1つです。
int baa[10]; は箱が10個です。

baa[3]; と言えば
□□□□□□□□□□
    ↑
これです。

int hoge[10], baa[10]; で
hoge[baa[3]] といえば

int foo = baa[3];
hoge[foo];
と同じような意味になります。

閉鎖

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