C言語 原因がわからない

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

C言語 原因がわからない

#1

投稿記事 by spica » 2年前

#include <stdio.h>
#include <math.h>

int main(void)
{
int i,a[100],b[100],c[100],max,mex,x,kokugo=0,eigo=0,suugaku=0,goukei=0,kheikin,eheikin,sheikin,heikin,khyouhen=0,ehyouhen=0,shyouhen=0,hyouhen=0,k[100],e[100],s[100],h[100],g[100],gh[100];
printf("読み込む人の人数を入力してください。"); scanf("%d",&x);
printf("それぞれの点数を入力してください。");
for(i=0; i<x; i++){
printf("%d人目の点数を入力してください。 \n",i+1);
printf("国語:"); scanf("%d",&a);
printf("英語:"); scanf("%d",&b);
printf("数学:"); scanf("%d",&c);
kokugo=kokugo+a;
eigo=eigo+b;
suugaku=suugaku+c;
goukei=goukei+a+b+c;
g=g[i]+a[i]+b[i]+c[i];
gh[i]=g[i]/x;

}
kheikin=kokugo/x;
eheikin=eigo/x;
sheikin=suugaku/x;
heikin=goukei/x;
for(i=0; i<x; i++){
khyouhen=khyouhen+(a[i]-kheikin)*(a[i]-kheikin);
ehyouhen=ehyouhen+(b[i]-eheikin)*(b[i]-eheikin);
shyouhen=shyouhen+(c[i]-sheikin)*(c[i]-sheikin);
hyouhen=hyouhen+(a[i]+b[i]+c[i]-heikin)*(a[i]+b[i]+c[i]-heikin);
}

khyouhen=khyouhen/x;
ehyouhen=ehyouhen/x;
shyouhen=shyouhen/x;
hyouhen=hyouhen/x;
for(i=0; i<x; i++){
k[i]=50+10*(a[i]-kheikin)/sqrt((double)khyouhen);
e[i]=50+10*(b[i]-eheikin)/sqrt((double)ehyouhen);
s[i]=50+10*(c[i]-sheikin)/sqrt((double)shyouhen);
h[i]=50+10*(g[i]-heikin)/sqrt((double)hyouhen);
}
printf("国語の合計点:%d \n",kokugo); printf("国語の平均点:%d \n",kheikin);
printf("英語の合計点:%d \n",eigo); printf("英語の平均点:%d \n",eheikin);
printf("数学の合計点:%d \n",suugaku); printf("数学の平均点:%d \n",sheikin);

for(i=0; i<x; i++){
printf("%d人目 \n",i+1);
printf("合計点:%d \n",g[i]);
printf("平均点:%d \n",gh[i]);
printf("国語の偏差値:%d \n",k[i]);
printf("英語の偏差値:%d \n",e[i]);
printf("数学の偏差値:%d \n",s[i]);
printf("合計点の偏差値:%d \n",h[i]);
}

return 0;
}

すべて1と入力したときの合計点、平均点の実行結果が17823147
それぞれの偏差値の実行結果が-2147483648
と明らかにおかしな数字になります。
g[i]やgh[i]の使い方が間違っているのだと思っていますが、原因がわかりません。わかる方教えて下さい。

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

Re: C言語 原因がわからない

#2

投稿記事 by box » 2年前

各々の点数や合計点がint型なのはいいとして、
平均点や偏差値といった小数点以下の値を取る変数がint型でいいんでしょうか。
自分ならdouble型にします。

それから、aとかbとかcとかxとか、一見何を表わしているのかわかりづらい変数名は
やめとく方がいいと思います。
例えば、国語の点数はjpn, 数学の点数はmath, 英語の点数はeng,
国語の平均はavg_jpn, 数学の平均はavg_math, 英語の点数はavg_engといった具合に
パッと見てイメージしやすい名前を付けるだけでもずいぶん見通しがよくなると思いますが
いかがでしょう。
「名は体を表す」という言葉は、変数名を付けるときにも言えると思います。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

返信

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