• C语言之:函数的声明和定义必备练习题


    笔者来自于一个普通二本,非科班出身,对于未来的打算博多!无法完事皆满意,所以,尽自己可能去实现!所以,打算转码中!!!C语言XX必备练习题,凝聚了笔者精华所有!请看到的读者认真思考,在进行……努力就能实现,成就更加高度的自己!

    1.

    作业标题(672)

    能把函数处理结果的二个数据返回给主调函数,在下面的方法中不正确的是:( )

    作业内容

    A.return 这二个数

    B.形参用数组

    C.形参用二个指针

    D.用二个全局变量

    答案解析(提交后可在已完成作业列表查看答案)

    答案解析:

    A:错误,一个函数只能返回一个结果

    B:正确,将形参存在数组中,修改数组中内容,可以通过数组将修改结果带出去

    C:正确,形参如果用指针,最终指向的是外部的实参,在函数中对指向指向内容进行修改,改变的就是外部的实参

    D:正确,全局变量不受函数的结束而结束,在函数中改变全局变量,主调函数中可以看到改变之后的结果

    因此,选择A

    2.

    作业标题(673)

    关于函数调用说法不正确的是:( )

    作业内容

    A.函数可以传值调用,传值调用的时候形参是实参的一份临时拷贝

    B.函数可以传址调用,传址调用的时候,可以通过形参操作实参

    C.函数可以嵌套定义,但是不能嵌套调用

    D.函数可以嵌套调用,但是不能嵌套定义

     

    答案解析(提交后可在已完成作业列表查看答案)

    答案解析:

    A:正确,形参按照值的方式传递,将来形参就是实参的一份临时拷贝,修改形参不会影响外部的实参

    B:正确,形参按照指针方式传递,将来形参就是实参地址的一份拷贝,形参指向的是实参,修改形参指针指向的内容,  就是在操作实参

    C:错误,C语言中,函数不能嵌套定义

    D:正确,函数可以嵌套调用,即:A()中调用B(),B()中调用A(),但是要控制好,否则就成为无限递归

    因此,选择C

    3.

    作业标题(674)

    在函数调用时,以下说法正确的是:( )

    作业内容

    A.函数调用后必须带回返回值

    B.实际参数和形式参数可以同名

    C.函数间的数据传递不可以使用全局变量

    D.主调函数和被调函数总是在同一个文件里

    答案解析(提交后可在已完成作业列表查看答案)

    答案解析:

    A:错误,函数可以没有返回值,如果没有返回值也就不需要待会任何结果

    B:正确,形参和实参在不同的函数中,即不同的作用域,因此形参和实参可以同名

    C:错误,可以使用全局变量传参

    D:错误,不一定,函数的定义可以放在任意的文件中,使用时只需要包含头文件即可

    因此,选择B

    4.

    作业标题(676)

    关于递归的描述错误的是:( )

    作业内容

    A.存在限制条件,当满足这个限制条件的时候,递归便不再继续

    B.每次递归调用之后越来越接近这个限制条件

    C.递归可以无限递归下去

    D.递归层次太深,会出现栈溢出现象

    答案解析(提交后可在已完成作业列表查看答案)

    答案解析:

    递归的两个条件:

     1. 将问题转化为其子问题,子问题要与原问题具有相同的解法

     2. 递归的出口

    A:正确,限制条件即递归的出口,如果限制条件满足,递归程序就可以退出了

    B:正确,因为每次递归,都是将原问题进一步缩小,缩小到限制条件时,就可以往回返,直到第一次递归调用

      比如:递归求和

    1. int Sum(int N)
    2. {
    3. if(N == 1)
    4. return 1;
    5. return Sum(N-1)+N;
    6. }

      假设:求Sum(4)的递归调用过程

    1. Sum(4)<----
    2. | |
    3. | |
    4. Sum(3)<----
    5. | |
    6. | |
    7. Sum(2)<----
    8. | |
    9. | |
    10. Sum(1)-----

     

     C:错误,递归不能无限递归下去,否则会造成死循环和栈溢出

     D:正确,因为每次递归,相当于都是一次新的函数调用,而每次函数调用系统必须给该函数划分栈帧空间,内部的递   归函数没有退出,上层的递归就不能退出,栈帧就会累积许多块,如果累积超过栈的总大小,就会栈溢出。

    5.

    作业标题(671)

    关于函数的声明和定义说法正确的是:( )

    作业内容

    A.函数的定义必须放在函数的使用之前

    B.函数必须保证先声明后使用

    C.函数定义在使用之后,也可以不声明

    D.函数的声明就是说明函数是怎么实现的

    答案解析(提交后可在已完成作业列表查看答案)

    答案解析:

    A:错误,函数的定义可以放在任意位置,函数的声明必须放在函数的使用之前

    B:正确

    C:错误,函数定义在使用之后,使用之前没有声明时,编译器编译时识别不了该函数

    D:错误,函数的声明只是告诉编译器函数返回值类型、函数名字以及函数所需要的参数,函数定义才是说明函数是怎么  实现的

    6.

    作业标题(675)

    根据下面递归函数:调用函数Fun(2),返回值是多少( )

    1. int Fun(int n)
    2. {
    3. if(n==5)
    4. return 2;
    5. else
    6. return 2*Fun(n+1);
    7. }

    作业内容

    A.2

    B.4

    C.8

    D.16

     参考答案为:

    1. Fun(2)--->返回16
    2. return 2*Fun(3) 2*8=16
    3. |__Fun(3):8
    4. return 2*Fun(4) 2*4=8
    5. |__Fun(4):4
    6. return 2*Fun(5) 2*2=4
    7. |__Fun(5):2
    8. return 2

     因此选择:D

    7.

    作业标题(686)

    求阶乘

    作业内容

    递归和非递归分别实现求n的阶乘(不考虑溢出的问题)

    1. /*
    2. Fac(N) = 1*2*3*……*N
    3. 递归方式实现:
    4. 1 N <= 1
    5. Fac(N)
    6. Fac(N-1)*N N >= 2
    7. */
    8. long long Fac(int N)
    9. {
    10. if(N <= 1)
    11. return 1;
    12. return Fac(N-1)*N;
    13. }
    14. /*
    15. 循环方式:从1乘到N即可
    16. */
    17. long long Fac(int N)
    18. {
    19. long long ret = 1;
    20. for(int i = 2; i <= N; ++i)
    21. {
    22. ret *= i;
    23. }
    24. return ret;
    25. }

     8.

    作业标题(687)

    打印一个数的每一位

    作业内容

    递归方式实现打印一个整数的每一位

    参考思路为:

    1. /*
    2. 思路:
    3. N N <= 9
    4. Print(N)
    5. Print(N-1), 打印N
    6. */
    7. void print(unsigned int n)
    8. {
    9. if(n>9)
    10. print(n/10);
    11. printf("%d ", n%10);
    12. }

     

     

  • 相关阅读:
    Leetcode 637. 二叉树的层平均值
    Django(10)-项目实战-对发布会管理系统进行测试并获取测试覆盖率
    Python + Django4 搭建个人博客(十四):实现用户登录和登出功能
    [Python] pop()函数
    mybatis的简单执行流程-面试用
    oracle 执行计划查看常用sql
    面试字节跳动—真实面试题分享
    [SpringMVC]REST入门案例与优化
    使用Postman拦截浏览器请求
    极狐GitLab CI x Vault,做好企业密钥安全合规管理
  • 原文地址:https://blog.csdn.net/weixin_64308540/article/details/126831443