计算斜边的C程序
我对编码相当陌生,目前正在学习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
#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.3hypot
功能
#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中找到的数字0850288727868915862901750748094271410143232.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);
}