電子書籍の厳選無料作品が豊富!

[問題]N人の生徒の期末試験の成績に対し、平均点と分散を求めることを考える。生徒の人数Nと、各々の3つの成績(数学・英語・国語)をキーボードから入力し、生徒1人1人の平均点と分散、および数学・英語・国語それぞれの平均点と分散を求めるプログラムを作りなさい。
なお生徒の人数は最大100人であり、成績は100点満点とする。また、平均点と分散は浮動小数点とすること。

これに対して私は以下のように作りました。
#include<stdio.h>
#include<math.h>
#define b<=100
void main(void){
int a,b,g,i;
int math[i];
int english[i];
int japan[i];
float h,z;

printf("生徒の人数を入力しなさい\n");
scanf("%d",&a);

for(i=0;i<a;i++){
printf("%d人目数学の点数を入力してください。\n",i);
scanf("%d",&math[i]);
}

for(i=0;i<a;i++){
printf("%d人目の英語の点数を入力してください。\n",i);
scanf("%d",&english[i]);
}

for(i=0;i<a;i++){
printf("%d人目の国語の点数を入力してください。\n",i);
scanf("%d",&japan[i]);
}

for(i=0;i<a;i++){
printf("%d人目の平均点は%fである\n",i,h);
h=(math[i]+english[i]+japan[i])/3;
printf("%d人目の分散は%fである\n",i,z);
g=(math[i]-h)*(math[i]-h)+(english[i]-h)*(english[i])+(japan[i]-h)*(japan[i]-h);
z=g/3;
}
}

…しかし、これではプログラムが走りませんでした。どこが違うのか指摘をよろしくお願いします。(ちなみに私はプログラムはほぼ初心者です笑)

A 回答 (3件)

「生徒1人1人の平均点と分散」の「分散」って, 何の分散を求めさせているんだろう. 教科ごとの点数の分散でいいんだろうか? ちょっと文章が謎だ.



余談:
いまどき (とはいえ 15年も前のなんだが) の C の規格では #1 のように書いてもいいんだけど, ふるくっさい規格に固執している処理系だとだめなんだよね.
    • good
    • 0

うちのgccはコンパイル通したが、普通cは配列の宣言時に変数を大きさとして使えないらしい。



入門にはCなんかよりもpythonとか分かりやすい言語のほうが良いです。

#include<stdio.h>
#define b 100
void main(void){
int math[b];
int english[b];
int japan[b];
int a,g,i;
float h,z;
~~
for(i=0;i<a;i++){
h=(math[i]+english[i]+japan[i])/3;
printf("%d人目の平均点は%fである\n",i,h);
g=(math[i]-h)*(math[i]-h)+(english[i]-h)*(english[i]-h)+(japan[i]-h)*(japan[i]-h);
z=g/3;
printf("%d人目の分散は%fである\n",i,z);
}
}
    • good
    • 0
この回答へのお礼

お礼が遅れました。ありがとうございます。うまく走りましたが今度は分散の計算が複数人になるとうまくいかなくなってしまいました…
(ちなみにC言語は学校でやらされてるんですよね笑)

お礼日時:2015/02/05 16:41

1. bは使っていないので消去。


2. int math[i];について、iは初期化されていないので不可能。english、japanについても同様。
3. int math[a];が正しいと思われる。aが格納された後に配列の初期化を。

以上より、プログラム冒頭は以下のように修正される。
#include<stdio.h>
#include<math.h>
void main(void){
int a,g,i;
float h,z;

printf("生徒の人数を入力しなさい\n");
scanf("%d",&a);

int math[a];
int english[a];
int japan[a];
    • good
    • 1
この回答へのお礼

ご回答ありがとうございます。箇条書きでとても分かりやすかったです!
…ですが"「constant expression」を付け忘れています。"とint math[a];の行で指摘されました。
もしよければでいいです。回答お願いします。

お礼日時:2015/02/04 22:44

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!