雪沫ヾ 逸觞
2020-07-06 15:03
采纳率: 100%
浏览 281

在使用自定义函数时,出现无法解析外部符号和外部命令的错误,求解决方法

图片说明

求解答!!!!!

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • 炽烈妖凰 2020-07-07 15:36
    已采纳

    错误挺多的,这个报错应该是返回值问题吧。
    这里你用到了double和int两种数据类型,double是双精度浮点型,占用空间是八个字节,int是整型,占用两个字节。简单理解的话double用来存比较精
    确或者大一点的小数也行,他们的存储规则是不一样的。
    每个函数都是有返回类型的,写在函数的最开头也就是函数名前面,当调用函数的时候会通过函数末尾的return语句把一个值返回出来,可以用来赋值或者
    做判断语句等。return语句执行时会返回一个值并跳出这个函数(return下面有别的语句的话不会再执行了),而return后面的那个值的数据类型必须与函
    数开头写的返回值类型是抑制的(不然计算机很傻的,它可搞不清楚你到底想返回什么类型的数据,不同类型存储规则又不一样,操作方法也不同)。返回
    值类型可以写成“void”,就是空类型,也就是说不返回数据,这样就不用写return(准确地说应该是不可以写return语句)。

    所以第一个问题就是add方法的返回值类型和return里面写的不一样,return的是int,返回时类型写的是double;
    第二个问题是y=add(p,q)小于10这个语句,判断符号的优先级是最高的,所以先进行判断,判断结果在C语言中只有0,1的区分,因此y得到的赋值是0或1,
    这个语句本身实质上是个赋值语句,而这个赋值语句对整个程序本身没有任何意义,赋值语句不知道能不能做判断,如果能的话结果肯定为真,因此这个
    for循环要不会报错,要不就是死循环;
    第三个就是main方法标注的返回值类型为int但是没有return语句。
    第四个问题就是,double要占用八个字节,int只占用两个字节,而你的程序中用的值都是很小的整数,用了很多double非常浪费存储空间。
    所以改一下:

    #include <stdio.h>
    
    int add(int p, int q)
    {
        return p + q;
    }
    
    void main() {
        int p, q;
        p = q = 0;
        for (; add(p, q) < 10; p++)
        {
            printf("%d ", p);
        }
    }
    

    所有数据类型改成int,节省存储空间,函数返回值相同,main方法的返回值改为void(因为它不需要返回数据),把多余的y去掉。

    点赞 打赏 评论
  • 泡视界 2020-07-06 15:27

    看错误是main中调用了无法识别的add。
    猜测 add 函数定义为double, return的时候为int

    点赞 打赏 评论
  • blownewbee 2020-07-06 15:38
    #include <stdio.h>
    
    double add(double p, double q)
    {
        return p + q;
    }
    
    int main() {
        double y, p, q;
        y = p = q = 0;
        for (; y = add(p, q) < 10; p++)
        {
            printf("%lf ", p);
        }
    }
    
    

    0.000000 1.000000 2.000000 3.000000 4.000000 5.000000 6.000000 7.000000 8.000000 9.000000

    问题解决的话,请点下采纳

    点赞 打赏 评论

相关推荐 更多相似问题