- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用点之间的距离公式来计算任何几何图形的周长,但该函数没有提供应有的值。我不知道我做错了什么
#include <math.h>
int perimeter(int flag, dot d[]){
float result, sum1, sum2, sum3, quad1, quad2, op[flag], sum;
for(int c=0;c<flag;c++){
sum1=d[c+1].x-d[c].x;
sum2=d[c+1].y-d[c].y;
quad1=pow(sum1, 2);
quad2=pow(sum2, 2);
sum3=quad1+quad2;
result=sqrt(sum3);
op[c]=result;
}
for(int c=0;c<flag;c++){
sum+=op[c];
}return sum;
}
测试值:
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
typedef struct dot{
float x,y;
}dot;
int main(){
int flag=4;
dot d[flag];
d[0].x=9;
d[0].y=10;
d[1].x=21;
d[1].y=10;
d[2].x=21;
d[2].y=16;
d[3].x=9;
d[4].y=16;
float result, sum1, sum2, sum3, quad1, quad2, op[flag], sum=0.0;
for(int c=0;c<flag;c++){
sum1=d[c+1%flag].x-d[c].x;
sum2=d[c+1%flag].y-d[c].y;
quad1=pow(sum1, 2);
quad2=pow(sum2, 2);
sum3=quad1+quad2;
result=sqrt(sum3);
printf("distance %d: %d\n", c, result);
sum+=result;
}
printf("final result: %d\n", result);
}
控制台日志(打印步骤):
gcc version 4.6.3
distance 0: 0
distance 1: 1
distance 2: 2
distance 3: 3
final result: 26533904
最佳答案
您应该查找 hypot()
<math.h>
中声明的函数 header 。你最终可能会得到:
float perimeter(int n_dots, dot d[])
{
float sum = 0.0;
for (int i = 0; i < n_dots; i++)
{
int n = (i+1) % n_dots;
sum += hypotf(d[n].x - d[i].x, d[n].y - d[i].y);
}
return sum;
}
如果您需要报告计算的值,您可以捕获 hypotf()
的结果在将其添加到 sum
之前.
另请注意,您应该返回 float
值(value)。在我的书中,你应该改变 float
至double
整个(并使用 hypot()
代替 hypotf()
),但这在某种程度上是一个独立的问题。返回float
(或 double
)而不是 int
我认为相当重要。
您的代码的 MCVE ( Minimal, Complete, Verifiable Example ) 版本可能是:
#include <math.h>
#include <stdio.h>
typedef struct dot
{
float x, y;
} dot;
float perimeter(int n_dots, dot d[]);
int main(void)
{
enum { num_dots = 4 };
dot d[num_dots] =
{
{ .x = 9, .y = 10 },
{ .x = 21, .y = 10 },
{ .x = 21, .y = 16 },
{ .x = 9, .y = 16 },
};
printf("Perimeter: %.3f\n", perimeter(num_dots, d));
return 0;
}
float perimeter(int n_dots, dot d[])
{
float sum = 0.0;
for (int i = 0; i < n_dots; i++)
{
int n = (i + 1) % n_dots;
sum += hypotf(d[n].x - d[i].x, d[n].y - d[i].y);
}
return sum;
}
使用 VLA 可以防止您使用初始化程序,因此我将数组制作为常规的固定大小数组。
输出:
Perimeter: 36.000
对于给定的数据,这是正确的(四个边的长度分别为 12, 6, 12, 6)。
关于c - C 语言的周长计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46259478/
好吧,这不起作用!有什么问题呢。有人可以向我指出吗?我已经盯着它看了好几个小时了。我之前寻求过帮助,他提出了结构,但我并没有真正理解它,所以它不起作用。 没有得到正确的计算。我认为读取文件时可能出现问
我需要显示一个圆周。为了做到这一点,我认为我可以为很多 x 计算 y 的两个值,所以我做了: import sympy as sy from sympy.abc import x,y f = x**2
3个不同的类 1个用于处理Circle实例,1个用于Square实例,第3个用于比较之间他们(main) 。在 main 函数中,我找到了 circle (在 c1..c4 之间)和 square (
我是一名优秀的程序员,十分优秀!