You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言调用getArea函数报expected expression before int错误求解

问题根因及修复方案

你遇到的expected expression before int错误由多个语法、逻辑问题共同导致,逐一排查如下:

  • 1. 函数未提前声明:你在main函数上方的函数声明列表中,没有声明getArea函数,编译器在main中遇到getArea调用时无法识别该函数,再结合错误的参数定义触发语法报错。
  • 2. getArea参数定义语法完全错误:你写的double getArea(int[int][int])不符合C语言数组参数的定义规则,且调用逻辑错误:你现在是遍历每个二维数组元素时调用getArea,但计算三角形面积需要每行的3个元素作为三边,应该每遍历完一行调用一次函数。
  • 3. 局部变量未初始化:getArea内部的base、height没有赋值就直接参与计算,得到的结果是随机垃圾值。
  • 4. checkValidation逻辑错误:该函数定义返回值为double但没有return语句,且参数逻辑混淆:你传入的三个参数是三角形三边,不是底、高、面积,三边校验通过后应该返回合法标识,而不是空实现。
  • 5. 求和逻辑错误:你调用func1时传入的ArrayTwoTotal数组未初始化,里面没有存储任何计算得到的面积值,求和结果无意义。

修正后可运行代码

// 程序功能:生成18个随机数存入一维数组,转存为6行3列的二维数组,每行三个数作为三角形三边计算面积,最后求和
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>

#define COLMAX 3
#define ROWMAX 6

// 提前声明所有用到的函数
double getArea(int a, int b, int c);
int checkValidation(double a, double b, double c);
double func1(double values[][COLMAX], int rows);
int rand_int();

int main(void)
{
    double tArea = 0.0;
    int loop;
    int col;
    int row;
    int counter = 0;

    srand(time(NULL));
    int RandomArray[18];
    int ArrayTwo[ROWMAX][COLMAX];
    double ArrayTwoTotal[ROWMAX][COLMAX] = {0}; // 初始化存储面积的数组
    printf("\n一维数组内容\n");

    for(loop = 0; loop < 18; loop++)
    {
        RandomArray[loop] = rand_int();
        printf("%d ", RandomArray[loop]);
    }

    printf("\n二维数组内容(每行对应三角形三边)\n");
    for(row = 0; row < ROWMAX; row++)
    {
        for(col = 0; col < COLMAX; col++)
        {
            ArrayTwo[row][col] = RandomArray[counter];
            counter++;
            printf("%d\t", ArrayTwo[row][col]);
        }
        // 每行读取完三个数后调用面积计算函数
        double area = getArea(ArrayTwo[row][0], ArrayTwo[row][1], ArrayTwo[row][2]);
        ArrayTwoTotal[row][0] = area; // 将合法面积存入数组,不合法存0
        printf("对应三角形面积:%.2lf\n", area);
    }
    printf("\n");
    double total = 0.0;
    total = func1(ArrayTwoTotal, ROWMAX);
    printf("所有合法三角形面积总和是 %.2lf \n", total);
    system ("PAUSE");
    return 0;
}

// 校验三边是否可以构成三角形,合法返回1,不合法返回0
int checkValidation(double a, double b, double c)
{
    if ((a + b > c) && (b + c > a) && (a + c > b))
    {
        return 1;
    }
    printf("三边%.2lf、%.2lf、%.2lf无法构成三角形\n", a, b, c);
    return 0;
}

// 用海伦公式计算三角形面积,不合法返回0
double getArea(int a, int b, int c)
{
    double sideA = (double)a, sideB = (double)b, sideC = (double)c;
    if (!checkValidation(sideA, sideB, sideC))
    {
        return 0.0;
    }
    double p = (sideA + sideB + sideC) / 2.0;
    double area = sqrt(p * (p - sideA) * (p - sideB) * (p - sideC));
    return area;
}

// 计算所有面积总和
double func1(double ArrayTwoTotal[][COLMAX], int rows)
{
  double sum = 0.0;
  int i, j;
  for(i = 0 ; i < rows ; i++)
  {
    for(j = 0 ; j < COLMAX ; j++)
    {
      sum += ArrayTwoTotal[i][j];
    }
  }
  return sum;
}

// 生成1-100的随机整数
int rand_int()
{
    int x = 0;
    x = ((rand() % 100)+1);
    return x;
}

补充说明

原代码中你写的底乘高除以二的面积计算逻辑没有对应输入,因为你只有三边数据,所以替换为通用的海伦公式实现,如果你确实需要用底高计算,可以自行调整参数传入逻辑。

内容的提问来源于stack exchange,提问作者Darius _C02

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 06:15:02