倪先仁 2023-12-01 10:51 采纳率: 100%
浏览 3
已结题

【c语言】关于指针改写函数的实验

最近学了指针,想要借此改写一下简单函数引用的事例,但是无法运行,请问是哪里有误吗?感谢解答(合十)

img

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-12-01 12:52
    关注

    【以下回答由 GPT 生成】

    #include<stdio.h>
    
    int fac(int *n); // 声明函数 fac
    
    int main(void) {
        int n;
        scanf("%d", &n);
        fac(&n); // 通过指针调用函数
        printf("%d", n); // 输出结果
        return 0;
    }
    
    int fac(int *n) { // 改正函数类型为 int
        int f;
        if (*n < 0) {
            printf("n < data error?"); // 输出错误信息
        } else if (*n == 0 || *n == 1) {
            f = 1; // 如果 n 等于 0 或 1,结果为 1
        } else {
            f = fac(n - 1) * (*n); // 递归调用函数
        }
        *n = f; // 将结果赋值给传入的指针
        return f; // 返回结果
    }
    

    这个代码有几个错误需要修正: 1. 函数声明和定义的返回类型应该一致,因此将声明行改为 int fac(int *n); 2. 函数 fac 的类型应该为 int 而非 void 3. 在递归调用函数时,应该传入指针而非 *n - 1,因此改为 fac(n - 1) * (*n) 4. 在递归调用函数结束后,将结果赋值给传入的指针 *n = f 5. 最后,函数 fac 需要返回结果,因此在函数定义时加上 return f; 将结果返回给调用者。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月14日
  • 已采纳回答 12月6日
  • 创建了问题 12月1日

悬赏问题

  • ¥20 Qt Quick Android 项目报错及显示问题
  • ¥15 而且都没有 OpenCVConfig.cmake文件我是不是需要安装opencv,如何解决?
  • ¥15 oracleBIEE analytics
  • ¥15 github录制项目
  • ¥15 H.264选择性加密例程
  • ¥50 windows的SFTP服务器如何能批量同步用户信息?
  • ¥15 centos7.9升级python3.0的问题
  • ¥15 安装CentOS6时卡住
  • ¥20 c语言写的8051单片机存储器mt29的模块程序
  • ¥60 求直线方程 使平面上n个点在直线同侧并且距离总和最小