双倍之前的预期表达

时间:2014-07-16 01:15:14

标签: c double

继续说在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;
 }

3 个答案:

答案 0 :(得分:4)

更改

result = double sqrt (double c);

result = sqrt(c);

由于隐式转换,当您将c传递到double函数时,不必将sqrt投射到sqrt((double) c)。如果您仍想进行演员表,那么正确的方法是#include <math.h>

另外,sqrt使用sqrt函数。


注意:不需要将int的返回类型强制转换为result(因int类型为{{1}}而相关) - 但是有些编译器可能会发出有关隐式转换的警告(Credit to @MattMcNabb)。将演员阵容告知其他编码人员,精确损失是故意的也是一种好习惯。

答案 1 :(得分:2)

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(它知道如何操作),反之亦然。

答案 2 :(得分:0)

谈论你正在做的演员? 你的演员抱怨它应该是这样的:

你的结果是一个整数,所以你应该将它强制转换为int .. 但如果你想把任何东西加倍,它应该如下

result =(double)sqrt((double)c) 或另一种方式是双倍(sqrt((double)c)

但是如果你想把它转换为int那么 result =(int)sqrt((double)c) 要么 result = int(sqrt((double)c)) 希望这有助于好运