陌小浅scr 2020-07-06 15:03 采纳率: 80%
浏览 664
已采纳

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

图片说明

求解答!!!!!

  • 写回答

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去掉。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥20 java-OJ-健康体检
  • ¥15 rs485的上拉下拉,不会对a-b<-200mv有影响吗,就是接受时,对判断逻辑0有影响吗
  • ¥15 使用phpstudy在云服务器上搭建个人网站
  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况
  • ¥15 画两个图 python或R
  • ¥15 在线请求openmv与pixhawk 实现实时目标跟踪的具体通讯方法
  • ¥15 八路抢答器设计出现故障