gpt4 book ai didi

c - C 语言的周长计算

转载 作者:行者123 更新时间:2023-11-30 19:33:08 27 4
gpt4 key购买 nike

我正在尝试使用点之间的距离公式来计算任何几何图形的周长,但该函数没有提供应有的值。我不知道我做错了什么

#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)。在我的书中,你应该改变 floatdouble整个(并使用 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com