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

Pascal代码中sqrt(d)非法表达式的原因及修复方法

Pascal代码中sqrt(d)非法表达式错误的原因与修复方案

先看你提供的原代码:

program latihan;
uses crt;

var
    a, b, c : integer;
    d : real;

begin
    write('a: ');
    readln(a);
    write('b: ');
    readln(b);
    c := a + b;
    d := a + b;
    sqr(c);
    writeln(c);
    sqrt(d);
    writeln(d:0:0);
end.

错误原因

在Pascal语法里,sqrt是有返回值的函数,不是无返回值的过程。函数必须有接收它返回值的操作——要么把结果赋值给一个变量,要么直接在表达式里使用(比如作为输出语句的参数)。单独写一行sqrt(d);属于无效语句,编译器会判定为非法表达式,因为它既没有把计算出的平方根存起来,也没有用这个结果做任何事。

顺带提一句:你代码里的sqr(c);也有同样的问题,sqr也是函数,单独写一行不会改变c的值,相当于白调用了。

修复方案

根据需求,有两种常见的修复方式:

方式1:把平方根结果保存到变量中

如果后续还要用到这个平方根的值,可以定义一个新的real变量,把sqrt(d)的结果赋值给它:

program latihan;
uses crt;

var
    a, b, c : integer;
    d, sqrt_d : real; // 新增变量存储平方根结果

begin
    write('a: ');
    readln(a);
    write('b: ');
    readln(b);
    c := a + b;
    d := a + b;
    c := sqr(c); // 修复sqr的问题:把平方结果赋值回c
    writeln(c);
    sqrt_d := sqrt(d); // 保存平方根结果
    writeln(sqrt_d:0:0); // 输出平方根
end.

方式2:直接在输出语句中调用sqrt

如果不需要保存结果,只是要输出平方根,可以直接把sqrt(d)作为writeln的参数:

program latihan;
uses crt;

var
    a, b, c : integer;
    d : real;

begin
    write('a: ');
    readln(a);
    write('b: ');
    readln(b);
    c := a + b;
    d := a + b;
    c := sqr(c); // 修复sqr的问题
    writeln(c);
    writeln(sqrt(d):0:0); // 直接输出sqrt的结果
end.

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 17:52:08