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
相关产品推荐
相关产品推荐

