ページ 1 / 1
C言語の教科書の練習問題で分からないところ
Posted: 2014年6月13日(金) 01:56
by samusu0905
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;
}
Re: C言語の教科書の練習問題で分からないところ
Posted: 2014年6月13日(金) 07:38
by 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個ずれています。
Re: C言語の教科書の練習問題で分からないところ
Posted: 2014年6月13日(金) 08:18
by みけCAT
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の方がわかりやすいと思います。
Re: C言語の教科書の練習問題で分からないところ
Posted: 2014年6月13日(金) 08:54
by ookami
教科書の問題でしたら、平均値の出し方についての説明はありませんか?
その中で分からないところを重点的に考えるのがよいかと...
あとソースで気になったところですが...
・student=生徒の数なら int student[40]はおかしい。
・タイムはintでいいの?
・kirokuとTimeはどう使い分ける?
・m=100 は使う?
・sumなら合計、平均ならaverage等が望ましいかと。上記では混乱の元です。
Re: C言語の教科書の練習問題で分からないところ
Posted: 2014年6月13日(金) 18:01
by samusu0905
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などが望ましいわけですね?
そうします。
皆さん色々と返答回答有難うございました。
私自信も自分のコードを再確認して感じましたが、少しおかしいと思う点がいくつかありました。
見直しして見ます。
Re: C言語の教科書の練習問題で分からないところ
Posted: 2014年6月13日(金) 18:37
by samusu0905
この練習問題で分からない事は40人の100m走のタイムの記録を出す方法と、40人の記録の平均値を出す方法です。
Re: C言語の教科書の練習問題で分からないところ
Posted: 2014年6月13日(金) 19:33
by naohiro19
コード:
const int MaxStudents = 40;
int students[MaxStudents];
for(int i = 0; i < MaxStudents; i++){
...
}
のように書けば配列範囲のループにすることができます。
Re: C言語の教科書の練習問題で分からないところ
Posted: 2014年6月13日(金) 20:12
by samusu0905
naohiro19さん>>回答有難うございます。
参考程度にしておきます。
Re: C言語の教科書の練習問題で分からないところ
Posted: 2014年6月14日(土) 14:04
by samusu0905
あれから色々と試した結果出来ました。
皆さんアドバイス有難うございます。
練習問題を何回か読んでるうちに問われているが何なのか理解できました。
練習問題で問われていたことは、40人の100m走のタイムを記録する事(一人一人の記録を出す)
そして、平均値を出す。平均値は、40人の記録の合計/記録を計った人数 これでできました。
解決です。