You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

调用自定义函数后出现Expected expression before double错误求助

解决你的C语言函数调用错误与三角形面积计算问题

嘿,作为C语言新手第一次用自定义函数就踩坑很正常,咱们来一步步解决你的问题!

首先,你遇到的"Expected expression before double"错误原因

你在调用area函数时写了:

Area = double area(ax, ay, bx, by, cx, cy);

这是函数声明的写法,不是函数调用的正确方式!函数调用时不需要在函数名前加返回类型double,编译器已经通过你开头的函数声明double area(double a, double b, double c, double d, double e, double f);知道了返回类型,所以正确的调用应该是:

Area = area(ax, ay, bx, by, cx, cy);

还有两个隐藏的问题需要修正

1. scanf格式符错误

你用%f来读取double类型变量,但%f是给float类型用的,读取double必须用%lf,否则会导致输入的数据读取错误。所以你的scanf语句应该改成:

scanf("%lf%lf%lf%lf%lf%lf", &ax, &ay, &bx, &by, &cx, &cy);

2. 三角形三边计算逻辑错误

你当前的三边计算逻辑完全不对(比如T1L3=ab1+cb1;这根本不是两点间距离),三角形的三边应该是三个顶点两两之间的直线距离,正确的计算方式是用两点间距离公式

  • 边1:点A(ax,ay)到点B(bx,by)的距离:sqrt(pow(bx-ax, 2) + pow(by-ay, 2))
  • 边2:点B(bx,by)到点C(cx,cy)的距离:sqrt(pow(cx-bx, 2) + pow(cy-by, 2))
  • 边3:点C(cx,cy)到点A(ax,ay)的距离:sqrt(pow(ax-cx, 2) + pow(ay-cy, 2))

另外,你计算海伦公式的时候,括号多了一层(((p-T1L2)*(p-T1L3))),虽然不影响结果,但可以简化成(p-T1L2)*(p-T1L3)

修正后的完整代码

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

// 函数声明:计算三角形面积,参数依次是三个顶点的x、y坐标
double area(double ax, double ay, double bx, double by, double cx, double cy);

int main() {
    double ax, ay, bx, by, cx, cy, Area;
    // 用%lf读取double类型变量
    scanf("%lf%lf%lf%lf%lf%lf", &ax, &ay, &bx, &by, &cx, &cy);
    // 正确调用自定义函数,不需要加double
    Area = area(ax, ay, bx, by, cx, cy);
    printf("area: %.2f\n", Area); // 用%.2f控制输出小数位数更美观
    return 0;
}

double area(double ax, double ay, double bx, double by, double cx, double cy) {
    // 计算三角形的三条边
    double side1 = sqrt(pow(bx - ax, 2) + pow(by - ay, 2));
    double side2 = sqrt(pow(cx - bx, 2) + pow(cy - by, 2));
    double side3 = sqrt(pow(ax - cx, 2) + pow(ay - cy, 2));
    
    // 海伦公式计算面积
    double p = (side1 + side2 + side3) / 2;
    double area = sqrt(p * (p - side1) * (p - side2) * (p - side3));
    return area;
}

额外小提示

  • 给变量起有意义的名字(比如把a,b,c,d,e,f改成ax,ay,bx,by,cx,cy),这样代码可读性更高,也不容易出错。
  • 如果担心浮点数精度问题,海伦公式对于小坐标的三角形足够用,但如果是非常大的坐标,可能会有精度损失,不过作为新手练习完全没问题。

内容的提问来源于stack exchange,提问作者Cristina Sb

火山引擎 最新活动