我正在编写一个简单的程序,可以找到达到给定范围的完美数字。这就是我所拥有的:
#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编译器。有什么想法为什么编译器抱怨?
答案 0 :(得分:7)
您无法创建浮点大小
的数组double numbers[range];
参数必须是整数。想象一下,如果range
是2.5 - C将不允许2.5个双打的数组。数组必须具有整数个元素
答案 1 :(得分:2)
我不确定你知道double
的含义。
例如:您期望double numbers[1.23];
到底做什么? (修辞问题)
%
运算符还需要整数操作数(您可以使用fmod()
来获得分数模数,但我怀疑这是您想要的)。
答案 2 :(得分:1)
你的阵列:
double numbers[range];
需要数组的整数大小。使用诸如。
之类的演员表double numbers[(int)range];
与您对双变量的其他用法相同。