一直说在double int pt函数
之前有一个期望的表达式 #include <stdio.h>
int pt (int a, int b)
{
int c, result;
c = (a * a) + (b + b);
result = double sqrt (double c);
return result;
}
int main (void)
{
int d, e, f;
int pt (int a, int b);
printf("type enter after input of the two legs");
scanf("%i", &d);
scanf("%i", &e);
f = pt (d,e);
printf("the hypotenuse is %i", f);
return 0;
}
变化
result = double sqrt (double c);
result = sqrt(c);
由于隐式转换,当您将c
传递给sqrt
函数时,您不必将其强制转换为double
。如果您仍然想要进行cast,正确的方法是sqrt((double) c)
。
另外,#include <math.h>
用于sqrt
函数的使用。
注意:不需要将sqrt
的返回类型强制转换为int
(相关的,因为result
是int
类型)-但是一些编译器可能会给出关于隐式转换的警告(Credit to @MattMcNabb)。使用强制类型转换向其他编码器发出信号,表明精度损失是故意的,这也是一种很好的做法。
double sqrt (double c);
是函数声明。(它也是一个函数原型)。这是你宣布一个函数存在的方式,以及它接受什么参数和返回什么。c
这个词在这里没有任何意义,可以省略。
当你想调用一个函数时,你不重复这个信息。你只需要给出函数名,后跟一个值列表,例如sqrt(c)
。
在你的代码中,sqrt
没有被声明。函数必须在调用之前声明。不可能同时声明和调用一个函数;你得先申报。
(历史注释:从C99开始是这样的;在C89中,你可以调用一个未声明的函数,编译器会假设你希望函数声明返回int
;这将导致任何没有实际返回int
的函数的未定义行为。
你可以提供你自己的声明,只要它符合标准声明:
double sqrt(double);
然而,使用标准声明是一个更好的主意:
#include <math.h>
可以工作,因为文件math.h
包含double sqrt(double);
行(或类似的东西)。
那么你可以写:
result = sqrt(c);
注意,您不需要使用与此函数调用相关的任何强制类型转换。由于存在函数原型,编译器知道即使您提供了int
,它也应该将该int
转换为double
(它知道如何做),反之亦然。
这是在谈论你正在做的选角吗?你的铸件抱怨它应该是这样的:
你的结果是一个整数,所以你应该将它强制转换为int。但是如果你想将任何东西强制转换为double,它应该像
result = (double)sqrt((double) c)也就是double(sqrt((double) c)
,但如果您想将其强制转换为int则结果= (int)sqrt((double) c)或结果= int(sqrt((double) c))希望这对你有帮助