回 帖 发 新 帖 刷新版面

主题:又是一个莫名其妙的问题

小弟近日练习函数又遇一奇怪的问题,题的原意是 输入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个回复)

沙发

因为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;

板凳

楼上的做得很正确.
要不然,编译器还认为是调用函数max呢,编译器当然说你少了()呀.

3 楼

那为什么用 max:=tmp;时编译器不认为是调用函数max呢?

4 楼

那是函数内部规定的一个赋值步骤吧``要不然函数不等于什么都没做么`

5 楼

书上说在用函数时,至少要有一条赋值语句,那也就是说也可以有两条或两条以上呀~~~

6 楼

To 5:

只要是赋值,多少条都可以,以最后能够到达的为准。

7 楼

那楼主那个程序出现问题了呢`?

8 楼

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 楼

oh~~no~~~我要疯了~~~~~
很明显是赋值语句呀~~~

10 楼

那不就节了么``
偶只是举了个夸张点的例子罢了~```

我来回复

您尚未登录,请登录后再回复。点此登录或注册