現在、関数を使用して数式を実行するプログラムをcで作成しています。読み取られる可能性のあるデータは、0を除く2つの精度浮動小数点数が最大100万です。配列に読み込まれた数値の数を数えようとするとエラーが発生しますが、何らかの理由でデフォルト値毎回私はプログラムを実行します。したがって、たとえば、値を入力しないと、264,1つの値265,2つの値266などが得られます。私は正確な合計を得るためにカウントから264を引くことができると思うが、なぜこれが起こっているのか、264がどこから来るのかを知りたい。私は以下のコードを添付しました。ありがとうございました。カウント関数は常に少なくとも264を返します。C
#include <stdio.h>
#include <stdlib.h>
#define N 1000000
int count_num(double numbers[]);
double sum(double numbers[]);
double max(double numbers[]);
double min(double numbers[]);
double ar_mean(double numbers[]);
double har_mean(double numbers[]);
double variance(double numbers[]);
int main(void)
{
double numbers[N];
int i =0;
while(scanf("%lf.2",&numbers[i])!=EOF&&i<N)
{
i++;
}
int count=count_num(numbers);
printf("Count: %d\n", count);
}
int count_num(double numbers[])
{
int count=0;
for(int i=0;i<N;i++)
{
if((numbers[i]!=0)&&(numbers[i]!=0.0))
{
count++;
}
}
return count;
}
2つの問題がありますが、主なものは、Cが値をデフォルトに初期化しない(つまり、2倍の配列が0の配列に初期化されない)ということです。それでもまだなぜあなたが* 264を得るのかを説明するべきではありません... –
まず、 'count_num'では、常に' N'サイズの配列全体を調べています。配列は意味があります。残りは予期しないゴミです。そのゴミを分析して数える点は何ですか? – AnT
スタックに3.8 MBの配列を置くことは私には賢明ではないようです。 –