Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
计算斜边的C程序_C_Function_Hypotenuse - Fatal编程技术网

计算斜边的C程序

计算斜边的C程序,c,function,hypotenuse,C,Function,Hypotenuse,我对编码相当陌生,目前正在学习C。在课堂上,我被指派编写一个程序,用我们自己的函数计算三角形的斜边。然而,我编写的代码似乎有问题 #include <stdio.h> #include <math.h> double hypotenuse(double x, double y, double z); int main(void) { double side1, side2, side3, counter; side3 = 1; for (c

我对编码相当陌生,目前正在学习C。在课堂上,我被指派编写一个程序,用我们自己的函数计算三角形的斜边。然而,我编写的代码似乎有问题

#include <stdio.h>
#include <math.h>

double hypotenuse(double x, double y, double z);

int main(void) {
    double side1, side2, side3, counter;

    side3 = 1;

    for (counter = 0; counter <= 2; counter++) {
        printf("Enter values for two sides: ");
        scanf_s("%d %d", &side1, &side2);

        printf("%.2f\n", hypotenuse(side1, side2, side3));
    }

    return 0;
}

double hypotenuse(double x, double y, double z) {
    x *= x;
    y *= y;
    z = sqrt(x + y);

    return z;
}
#包括
#包括
双斜边(双x,双y,双z);
内部主(空){
双面1,双面2,双面3,计数器;
侧3=1;

对于(counter=0;counter您不需要side3变量-它不用于计算。您可以使用函数
斜边
返回结果,因此您可以直接输出
sqrt
的结果。我使用Ubuntu Linux并以这种方式编写。如果您喜欢,请查看

#include <stdio.h>
#include <math.h>

double hypotenuse(double x, double y) {
    double z = sqrt(x * x + y * y);
    return z;
}

int main(void) {
    double b1, b2, counter;
    for (counter = 0; counter <= 2; counter++) {
        printf("Enter values for two sides: ");
        scanf("%lf %lf", &b1, &b2);
        printf("%.2f\n", hypotenuse(b1, b2));
    }
    return 0;
}

作为查看此问题的任何人的参考:

您不需要编写自己的函数。标准C提供:

7.12.7.3
hypot
功能

#include <math.h>
double hypot(double x, double y);
float hypotf(float x, float y);
long double hypotl(long double x, long double y);
简介

#include <math.h>
double hypot(double x, double y);
float hypotf(float x, float y);
long double hypotl(long double x, long double y);
#包括
双低血压(双x,双y);
浮点数f(浮点数x,浮点数y);
长双下斜线(长双x,长双y);
请注意,您可能需要链接到
-lm
,尽管在C标准的函数文档中没有明确列出,也没有。它可能在标准的其他地方有文档记录


(-可能寿命更长。)

OP的代码有一些问题:

关键问题:代码应该生成编译器警告,因为scanf()被指示将&side1视为int*。打开所有编译器警告以节省时间。使用的代码是%d”,而不是匹配的%lf”
读取
双精度
。还应检查返回值以验证输入

double side1, side2, side3, counter;
...
// scanf_s("%d %d", &side1, &side2);
if (scanf_s("%lf %lf", &side1, &side2) != 2) puts("Input error");

不需要
size3
。使用2个参数调用
斜边()



次要:使用的代码<代码>“%.2f”
打印斜边值。选择OP代码的输入值可能没问题,但一般来说,这是一个糟糕的选择。如果输入值变化很小,如0.001和0.002,输出将打印0.00的舍入值。对于非常大的值,结果将显示许多不重要的数字,如OP在
13089903050019420868中找到的数字0850288727868915862901750748094271410143‌​232.00

开发和调试时,请考虑使用<代码>“%E”<代码>、<代码>“%g”<代码>或<代码>“%a”<代码>以查看相关的<代码>双



请注意,
x*x+y*y
容易出现过流/欠流,即使在数学上
sqrt(x*x+y*y)
double
范围内。这是标准函数
hypot(x,y)
的一个优点,因为它通常能很好地处理这些边缘情况。

使用正确的格式说明符! double的格式说明符不是%d!其余可以

#include <stdio.h>
#include <math.h>

double hypotenuse(double x, double y, double z);

int main(void) {
    double side1, side2, side3, counter;

    side3 = 1;

    for (counter = 0; counter <= 2; counter++) {
        printf("Enter values for two sides: ");
        scanf("%lf %lf", &side1, &side2);

        printf("%.2f\n", hypotenuse(side1, side2, side3));
    }

    return 0;
}

double hypotenuse(double x, double y, double z) {
    x *= x;
    y *= y;
    z = sqrt(x + y);

    return z;
}
#包括
#包括
双斜边(双x,双y,双z);
内部主(空){
双面1,双面2,双面3,计数器;
侧3=1;

对于(counter=0;counter您发布的代码不会导致“side3未定义”。“result是一个非常长的数字”-结果是什么?
%d%d”
-->
%lf%lf”
(也
printf(%.2f\n),side3=斜边(side1,side2,side3));
)130899030500194208680850288727868915862901750748094271410143232.00这是号码。我不知道它从哪里来。你在用什么编译器?当然
scanf_s(“%d%d”、&side1和&side2)
应该会生成一个编译器警告。谢谢你的评论!我知道几乎每种编程语言都内置了库函数。但是,我还是一个初学者,所以教授希望我们尝试编写自己的函数,以了解它是什么样子的。再次感谢你!@Sean我添加了它,以便任何想要计算的人都可以使用它e hypotuse的值-但谁不在乎是否使用库函数-可以看到有一个标准函数可以这样做。不知道有函数可以这样做的人甚至可能不知道从哪里开始查找。有太多的文档编写,几乎需要知道答案你可以找到它。
#include <stdio.h>
#include <math.h>

double hypotenuse(double x, double y, double z);

int main(void) {
    double side1, side2, side3, counter;

    side3 = 1;

    for (counter = 0; counter <= 2; counter++) {
        printf("Enter values for two sides: ");
        scanf("%lf %lf", &side1, &side2);

        printf("%.2f\n", hypotenuse(side1, side2, side3));
    }

    return 0;
}

double hypotenuse(double x, double y, double z) {
    x *= x;
    y *= y;
    z = sqrt(x + y);

    return z;
}
#include <stdio.h>
#include <math.h>

double hypotenuse(double x, double y);

int main(void) {
    double side1, side2, counter;



    for (counter = 0; counter <= 2; counter++) {
        printf("Enter values for two sides: ");
        scanf("%lf %lf", &side1, &side2);

        printf("%.2f\n", hypotenuse(side1, side2));
    }

    return 0;
}

double hypotenuse(double x, double y) {
    x *= x;
    y *= y;
    return sqrt(x + y);


}