主题:又是一个莫名其妙的问题
131110620
[专家分:0] 发布于 2005-07-26 22:15:00
小弟近日练习函数又遇一奇怪的问题,题的原意是 输入A,B,C三数,然后定义一函数MAX,选出最大数,然后根据MAX算出一个M的值,公式也给了,程序如下:
program E57b;
var
a,b,c:integer;
m:real;
function max(a,b,c:integer):integer;
begin
if a>b
then max:=a
else max:=b;
if [i][b]max<c[/b][/i]
then max:=c;
end;
begin
read(a,b,c);
m:=max(a,b,c)/(max(a+b,b,c)*max(a,b,b+c ));
writeln('m=',m)
end.
运行时系统却提示粗体处处缺少“(”,请各位高手指点迷津,谢!!
回复列表 (共15个回复)
沙发
jzyray [专家分:20610] 发布于 2005-07-26 23:27:00
因为max是一个函数,只能设置返回值(赋值)。
如果要读取,那么应该用临时变量:
function max(a,b,c:integer):integer;
var
tmp:integer;
begin
if a>b
then tmp:=a
else tmp:=b;
if tmp<c
then tmp:=c;
max:=tmp;
end;
板凳
zhsas [专家分:1680] 发布于 2005-07-26 23:41:00
楼上的做得很正确.
要不然,编译器还认为是调用函数max呢,编译器当然说你少了()呀.
3 楼
口口and枕头 [专家分:1550] 发布于 2005-07-26 23:53:00
那为什么用 max:=tmp;时编译器不认为是调用函数max呢?
4 楼
MagicG [专家分:650] 发布于 2005-07-29 12:04:00
那是函数内部规定的一个赋值步骤吧``要不然函数不等于什么都没做么`
5 楼
口口and枕头 [专家分:1550] 发布于 2005-07-29 13:36:00
书上说在用函数时,至少要有一条赋值语句,那也就是说也可以有两条或两条以上呀~~~
6 楼
jzyray [专家分:20610] 发布于 2005-07-29 14:29:00
To 5:
只要是赋值,多少条都可以,以最后能够到达的为准。
7 楼
口口and枕头 [专家分:1550] 发布于 2005-07-29 17:16:00
那楼主那个程序出现问题了呢`?
8 楼
MagicG [专家分:650] 发布于 2005-07-29 18:57:00
TO :7
function max(a,b,c:integer):integer;
begin
if a>b
then max:=a
else max:=b;
if max<c
then max:=c;
end;
因为他MAX这个函数后面必须要跟三个参数(a,b,c)所以他的程序如果不知道他想干吗的话可能会出现2种理解,两中修改方式:
方式1:象1楼的解决办法,也就是正确的理解,那么用中间变量解决就行
方式2:是错误的方式,不过可以给你解释你想不通的问题,就是程序认为是函数里面调用函数,而那个函数必须要跟参数,所以出错了`
9 楼
口口and枕头 [专家分:1550] 发布于 2005-07-30 00:29:00
oh~~no~~~我要疯了~~~~~
很明显是赋值语句呀~~~
10 楼
MagicG [专家分:650] 发布于 2005-07-30 14:48:00
那不就节了么``
偶只是举了个夸张点的例子罢了~```
我来回复