C言語の教科書の練習問題で分からないところ

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
samusu0905
記事: 336
登録日時: 10年前

C言語の教科書の練習問題で分からないところ

#1

投稿記事 by samusu0905 » 10年前

C言語の教科書の練習問題で分からないところがでました。
文章を載せます。
「40人いる生徒の100m走のタイムを記録して、平均値を出すプログラムを作ってください。平均値を
出すだけではなく、一人一人の記録も呼び出せるようにしてください。」
これが練習問題の文章です。
コードは少ししか書いてませんが、何かヒントやアドバイスをお願いします。

コード:

#include <stdio.h>

int main()
{
	//student=生徒の数、m=100m走、sum=平均、kiroku=記録、Time=タイム、b=終了
	int student[40], m=100, sum=0, kiroku=0, Time=0, b=0;



	for( int i=1; i < 41; i++)
	{
		
		printf("student[%d] = %d\n", i, Time);
	}

	while(b == 0)
	{
		printf("終了する場合Enter");
		scanf("%c",&b);
		return 0;
	}
	return 0;
}

box
記事: 2002
登録日時: 13年前

Re: C言語の教科書の練習問題で分からないところ

#2

投稿記事 by box » 10年前

samusu0905 さんが書きました:

コード:

	int student[40], m=100, sum=0, kiroku=0, Time=0, b=0;
student[40]という配列を定義したとき、アクセスできる範囲は
student[0]~student[39]の40個です。
samusu0905 さんが書きました:

コード:

	for( int i=1; i < 41; i++)
このfor文では、student[1]~student[40]にアクセスしようとしています。
1個ずれています。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: C言語の教科書の練習問題で分からないところ

#3

投稿記事 by みけCAT » 10年前

box さんが書きました:
samusu0905 さんが書きました:

コード:

	int student[40], m=100, sum=0, kiroku=0, Time=0, b=0;
student[40]という配列を定義したとき、アクセスできる範囲は
student[0]~student[39]の40個です。
samusu0905 さんが書きました:

コード:

	for( int i=1; i < 41; i++)
このfor文では、student[1]~student[40]にアクセスしようとしています。
1個ずれています。
提示されたコードのfor文の中でstudentにアクセスしている部分は見当たりませんが、なんで1個ずれているとわかるのですか?
student[i-1]にアクセスすれば問題ないのではないでしょうか?

【追記】
おそらく、根拠は"student[%d]=%d"という表示形式ですね。(違っていたらごめんなさい)
表示と実際の処理コードは必ずしも一致させる必要はないですね。(一致させた方がわかりやすいかもしれないですが)

ついでに、個人的にはi < 41よりi <= 40の方がわかりやすいと思います。
最後に編集したユーザー みけCAT on 2014年6月13日(金) 09:07 [ 編集 1 回目 ]
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
ookami
記事: 214
登録日時: 13年前
住所: 東京都

Re: C言語の教科書の練習問題で分からないところ

#4

投稿記事 by ookami » 10年前

教科書の問題でしたら、平均値の出し方についての説明はありませんか?
その中で分からないところを重点的に考えるのがよいかと...

あとソースで気になったところですが...
・student=生徒の数なら int student[40]はおかしい。
・タイムはintでいいの?
・kirokuとTimeはどう使い分ける?
・m=100 は使う?
・sumなら合計、平均ならaverage等が望ましいかと。上記では混乱の元です。

samusu0905
記事: 336
登録日時: 10年前

Re: C言語の教科書の練習問題で分からないところ

#5

投稿記事 by samusu0905 » 10年前

boxさん>>回答有難うございます。
私のミスでした。
i <= 40;このようにすれば大丈夫そうですね。

みけCATさん>>回答有難うございます。
私のちょっとしたミスです。
すみません....。
>ついでに、個人的にはi < 41よりi <= 40の方がわかりやすいと思います。
確かにそうですね。その方が分かりやすいですね..。

ookamiさん>>回答有難うございます。
>教科書の問題でしたら、平均値の出し方についての説明はありませんか?
確認したところ、平均値の求め方の説明は書いてありませんでした。
一つ一つ答えますね。

>・student=生徒の数なら int student[40]はおかしい。
student[40]=生徒の数でした。失礼しました。
確かにstudent[40]に対し、student=生徒の数はおかしいですね。

>・タイムはintでいいの?
タイムはint型で大丈夫です。そこは問題ありません。

>・kirokuとTimeはどう使い分ける?
kirokuは40人一人一人のタイムの記録ということなので、
「kirokuは40人の平均値を出すときに使い、Timeは40人のkirokuを出すときに使う」
こんな感じで使い分ければいいかと。

>・m=100 は使う?
m=100 は100m走を表していますので、使います。

>・sumなら合計、平均ならaverage等が望ましいかと。上記では混乱の元です。
わかりました。平均値を求める場合はaverageなどが望ましいわけですね?
そうします。

皆さん色々と返答回答有難うございました。
私自信も自分のコードを再確認して感じましたが、少しおかしいと思う点がいくつかありました。
見直しして見ます。

samusu0905
記事: 336
登録日時: 10年前

Re: C言語の教科書の練習問題で分からないところ

#6

投稿記事 by samusu0905 » 10年前

この練習問題で分からない事は40人の100m走のタイムの記録を出す方法と、40人の記録の平均値を出す方法です。

naohiro19
記事: 256
登録日時: 13年前
住所: 愛知県

Re: C言語の教科書の練習問題で分からないところ

#7

投稿記事 by naohiro19 » 10年前

コード:

const int MaxStudents = 40;
int students[MaxStudents];
for(int i = 0; i < MaxStudents; i++){
...
}
のように書けば配列範囲のループにすることができます。

samusu0905
記事: 336
登録日時: 10年前

Re: C言語の教科書の練習問題で分からないところ

#8

投稿記事 by samusu0905 » 10年前

naohiro19さん>>回答有難うございます。
参考程度にしておきます。

samusu0905
記事: 336
登録日時: 10年前

Re: C言語の教科書の練習問題で分からないところ

#9

投稿記事 by samusu0905 » 10年前

あれから色々と試した結果出来ました。
皆さんアドバイス有難うございます。
練習問題を何回か読んでるうちに問われているが何なのか理解できました。
練習問題で問われていたことは、40人の100m走のタイムを記録する事(一人一人の記録を出す)
そして、平均値を出す。平均値は、40人の記録の合計/記録を計った人数 これでできました。
解決です。

閉鎖

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