0

特定の範囲までの完全な数を見つける簡単なプログラムを書いています。ここに私が持っているものがあります:

#include<sys/types.h>
#include<sys/time.h>
#include<time.h>
#include<errno.h>
#include<fcntl.h>
#include<signal.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<strings.h>    
#include<unistd.h>


void Compute(double range);

int main(int argc, char** argv[])
{
  double range = 40000000;

  printf("range: %f\n", range);

  Compute(range);
}

void Compute(double range)
{
  double numbers[range];

  double total = 0;
  double sum = 0;
  double num;
  double j;

  for(num = 1; num < range; num++){
    sum = 0;

    for(j = 1; j < num; j++){
      if((num % j) == 0){
        sum+=j;
      }
    }

    if(sum == num){
      numbers[total] = sum;
      total++;
    }

  } 

  printf("Total: %f\n", total);

  for(j = 0; j < total; j++){
    printf("%f \n", numbers[j]);
  }

}

ただし、プログラムをコンパイルしようとすると、メソッドerror: expression must have integral type内のほとんどすべての操作でエラーが発生し続けますCompute()。整数データ型では問題なく動作しますが、double. インテル C コンパイラーを使用しています。コンパイラが不平を言っている理由はありますか?

4

3 に答える 3

7

浮動小数点サイズの配列は作成できません

double numbers[range];

引数は整数でなければなりません。2.5 だったと想像してみてくださいrange- C は 2.5 倍精度の配列を許可しません。配列には整数の要素が必要です

于 2012-11-23T23:10:55.843 に答える
3

私はあなたが何doubleを意味するのか分かりません。

例: 具体的に何をするdouble numbers[1.23];と思いますか? (修辞的な質問)

%演算子には整数オペランドも必要です (分数のモジュラスを取得するために使用できますが、fmod()それが必要かどうかは疑問です)。

于 2012-11-23T23:13:20.403 に答える
1

あなたの配列:

double numbers[range];

配列の整数サイズが必要です。などのキャストを使用します。

double numbers[(int)range];

double 変数の他の使用法と同じです。

于 2012-11-23T23:13:23.703 に答える