変数宣言をしたときにはじめから数値が代入されている


はじめに要素の数を指定して、数値を一つずつ入力していくとその最大値,最小値,平均値,最頻値,合計値を出力するプログラムをc言語で組んでいるのですが、その最頻値を出すために数値の出てきた回数を比較する配列の変数comを要素の数を聞いたあとに宣言したところ、まだ代入をしていないのに一番目の要素が"399423024"と異常に大きい数が代入された状態になっています。特にコードエラーは出てません。

実行環境はこちらです。  
<https://play.google.com/store/apps/details?id=app.compiler>

以下コード

[code]

    #include<stdio.h>
    int maxmin(void);
    
    int main(void)
    {
        maxmin();
        return 0;
    }
    int maxmin(void)
    {
        int a,i,l;
        double he,max=0,momax=0,min,mo;
        
        scanf("%d",&a);
         int com[a];
        double suu[a],mode[a],modee[a];
    
        for(i=0;i<a;i++){
            scanf("%lf",&suu[i]);
              
              for(l=0;l<=i+1;l++){
                if(suu[i]==mode[l]){
                    com[l]+=1;
                    break;
                }else{
                    if(mode[l]==0){
                        mode[l]=suu[i];
                        com[l]+=1;
                        break;
                    }
                }
              }
              
             if(i==0){
                min=suu[i];
             }
            printf("%d番目の数:%7.3f\n",i+1,suu[i]);
            if(suu[i]>max){
                max=suu[i];
            }else{
                if(suu[i]<min){
                    min=suu[i];
                }
            }
             he+=suu[i];
        }
         
         for(i=0;i<a;i++){
            if(com[i]>momax){
                for(l=0;l<a;l++){
                    modee[l]=0;
                    if(modee[l]==0){
                        break;
                    }
                }
                momax=com[i];
                modee[0]=mode[i];
            }else{
                if(com[i]==momax){
                    for(l=0;l<a;l++){
                        if(modee[l]==0){
                            modee[l]=mode[i];
                            break;
                        }
                    }
                }
            }
         }
         printf("%7.3f",modee[2]);
         printf("最頻値");
         for(i=0;i<a;i++){
            printf("%7.3f",modee[i]);
            if(modee[i+1]!=0){
                printf(",");
            }else{
                printf("\n");
                break;
            }
         }
    
        printf("最大値%7.3f\n最小値%7.3f\n平均値%7.3f\n合計値%7.3f\n",max,min,he/a,he);
        return 0;
    }
    
[/code]




専門用語で「自動変数」と呼ばれる種類の変数、この例では `int com[a];` などは、初期化を行わないと値が不定です。すなわち `0`
が入っているとは限りません。 `399423024` が入っていても全く正常です。

値 `0` が入っていてほしいのであれば `0` の代入が必要です。

