スタック・オーバーフロー Asked by user41837 on February 8, 2021
データ数を入力し、そのデータの数だけの点数を読み込み、その点数と偏差値を表示するプログラムを作成したいのですが、
コンパイルは正しくできたものの、偏差値の部分がなぜか「inf」と表示されてしまいます。なぜでしょうか。
ソースコード
#include <stdio.h>
/* 要素数sizeの実数配列aに順に入力する */
void readDoubleArray(double a[], int size)
{
int i;
for(i=0;i<size;i=i+1) {
printf("%d番目?",i+1);
scanf("%lf" ,&a[i]);
}
}
/* 要素数sizeの実数配列aを順に出力する */
void printDoubleArray(double a[], int size)
{
int i;
for(i=0;i<size;i=i+1) {
printf("%f ",a[i]);
}
printf("n");
}
/* 要素数sizeの実数配列aの平均を *ave に,分散を *var に格納する */
void ave_var_double_array(double a[], int size, double *ave, double *var, double *hyoujunnhennsa, double *hensati)
{
int i;
double sum=0.0, dsum=0.0;
for(i=0;i<size;i=i+1) {
sum=sum+a[i];
*ave=sum/size;
}
for(i=0;i<size;i=i+1) {
dsum=dsum+(a[i]-*ave)*(a[i]-*ave);
*var=dsum/size;
}for(i=0;i<size;i=i+1) {
*var=(*hyoujunnhennsa)*(*hyoujunnhennsa);
*hensati=((10*(a[i]-*ave))/(*hyoujunnhennsa))+50;
}
}
int main(void)
{
double a[100], ave, var,hyoujunnhennsa,hensati ;
int num;
printf("データ数? ");
scanf("%d", &num);
readDoubleArray(a, num);
ave_var_double_array(a,num,&ave,&var,&hyoujunnhennsa,&hensati);
printf("得点: ");
printDoubleArray(a,num);
printf("偏差値: %.1fn",hensati);
return 0;
}
実行結果
$ ./a.out
データ数? 5
1番目?40
2番目?56
3番目?92
4番目?78
5番目?67
得点: 40.000000 56.000000 92.000000 78.000000 67.000000
偏差値: inf
コアダンプや、全てが0表示などは経験していますが、「inf」という表示は初めてなので聞いている次第です。
私のプログラムはどこがおかしいのでしょうか。ご回答よろしくお願いします。
infは無限大を表すものです。(infinity)
main関数で宣言したhyoujunnhennsaを初期化せずに関数に渡して、内部で除算に使用しているので、0除算が起こっているのだと思います。
Answered by Sugiyama Koichi on February 8, 2021
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP