TransWikia.com

実行時に「inf」が表示されました

スタック・オーバーフロー 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」という表示は初めてなので聞いている次第です。
私のプログラムはどこがおかしいのでしょうか。ご回答よろしくお願いします。

One Answer

infは無限大を表すものです。(infinity)

main関数で宣言したhyoujunnhennsaを初期化せずに関数に渡して、内部で除算に使用しているので、0除算が起こっているのだと思います。

Answered by Sugiyama Koichi on February 8, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP