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

C语言调用自定义函数赋值时提示expected expression错误如何解决?

问题修复方案

核心错误原因

  • 第一类错误:赋值语句的类型标识语法错误
    你在create_table内给angle、t、d赋值的三行代码,直接在函数调用前加double属于无效语法。C语言中如果需要强制类型转换,必须将类型名包裹在括号中,写作(double)xxx;而你调用的三个函数本身返回值就是double类型,完全不需要额外转换,直接删掉赋值语句前的double即可。
  • 第二类错误:函数前置声明缺失/位置错误
    你提到已经尝试添加前置声明但无效,大概率是声明位置不对:三个被调用函数的定义都在create_table之后,必须在create_table的定义之前添加三个函数的前置声明,否则编译器编译到create_table时无法识别这三个自定义函数,同样会抛出表达式错误。
  • 可选兼容问题:如果使用C89标准编译,for循环头部定义double deg=0.0属于非法语法,需要将deg的定义移到create_table函数的变量声明区开头。

修复后的完整代码示例

// 提前定义PI、G
#define PI 3.1415926
#define G 9.8
#include <stdio.h>
#include <math.h>

// 正确添加前置声明,放在create_table之前
double degree_to_radian(double d);
double Projectile_travel_time(double a, double v);
double Projectile_travel_distance(double a, double v);

void create_table(double v)
{
  double angle,t,d;
  printf("\n\nAngle:\tTime:\tDistance\t\n");
  // 若使用C89标准,需将deg的声明移到此处:double deg;
  for(double deg=0.0; deg<=90.0; deg+=5.0)
  {
    // 删掉多余的double关键字
    angle = degree_to_radian(deg);
    t = Projectile_travel_time(angle, v);
    d = Projectile_travel_distance(angle, v);
    printf("%lf\t%lf\t%lf\n",angle,t,d);
  }
}


double Projectile_travel_time(double a, double v)
{
  double t;
  t=2*v*sin(a)/G;
  return t;
}


double Projectile_travel_distance(double a, double v)
{
  double d;
  d=pow(v,2)/G*sin(2*a);
  return d;
}


double degree_to_radian(double d)
{
  double rad;
  rad = d*PI/180;
  return rad;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 12:48:05