我在运行下面的程序时收到“非法使用浮点数”的错误。
我该如何解决。
#include<stdio.h>
#include<conio.h>
int main() {
float x,op;
printf("enter the value of x");
scanf("%f",&x);
op=(x^1/2+x^2/3+x^3/4)/(x^5/2+x^7/2);
printf("Final Op is %f\n",op);
return 0;
}
答案 0 :(得分:3)
在C中,^
用作按位XOR运算符。每个操作数应具有整数类型。
2每个操作数应具有整数类型 4
的按位异或^
运算符的结果是操作数[...]
您需要标准库函数powf
:
float powf(float x, float y);
在您的计划中加入math.h
标题。
另请注意,正如@Jens Gustedt 1/2
指出的那样,2/3
和3/4
都会返回0
,因为它们是整数除法。您需要将其更改为1.0/2
,2.0/3
和3.0/4
。
答案 1 :(得分:0)
在C和相关语言中,^
是按位XOR运算符。对于取幂,您需要pow()
或powf()
。
变化:
op=(x^1/2+x^2/3+x^3/4)/(x^5/2+x^7/2);
为:
op = (pow(x, 1./2) + pow(x, 2./3) + pow(x, 3./4)) / (pow(x, 5./2) + pow(x, 7./2));
确保#include <math.h>
。
另外,您可能希望获得一本关于C的好的入门书,并阅读有关运算符和数学库函数的内容。
#include <stdio.h>
#include <math.h>
int main()
{
float x, op;
printf("Enter the value of x: ");
scanf("%f", &x);
op = (pow(x, 1./2) + pow(x, 2./3) + pow(x, 3./4)) / (pow(x, 5./2) + pow(x, 7./2));
printf("\nFinal op is %f\n", op);
return 0;
}
答案 2 :(得分:0)
op
表达式有两个问题:
^
不是C中的指数运算符,它是按位XOR和必需的整数操作数。/
的两个操作数都是整数时,则执行整数除法,其截断为最接近零的整数。例如7/2 == 3
。您必须使一个或两个操作数浮点执行浮点除法,以便7.0/2.0 == 3.5
#include <math.h>
...
op = ( pow( x, 1.0/2.0 ) +
pow( x, 2.0/3.0 ) +
pow( x, 3.0/4.0) ) /
( pow( x, 5.0/2.0 ) +
pow( x, 7.0/2.0 ) ;
请注意,表达式涉及对float
的隐式强制转换。在C89中,数学函数是为double
定义的 - 因此无法避免演员表。 C99提供float
个变体;例如powf()
,C ++重载它们,以便类型由操作数决定;例如pow(7.0f/2.0f)
。