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

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介: C语言之:函数的声明和定义必备练习题

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


 比如:递归求和


int Sum(int N)
   {
     if(N == 1)
       return 1;
     return Sum(N-1)+N;
   }

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


 

Sum(4)<----
        |       |
        |       |
      Sum(3)<----
        |       |
        |       |
      Sum(2)<----
        |       |
        |       |
      Sum(1)-----


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


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


5.


作业标题(671)


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


作业内容


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


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


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


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


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


答案解析:


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


B:正确


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


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


6.


作业标题(675)


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


int Fun(int n)      
{ 
  if(n==5)   
    return 2;     
  else     
    return 2*Fun(n+1);      
}

作业内容


A.2


B.4


C.8


D.16


参考答案为:


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

因此选择:D


7.


作业标题(686)


求阶乘


作业内容


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


/*
Fac(N) = 1*2*3*……*N
递归方式实现:
        1    N <= 1
Fac(N)
        Fac(N-1)*N    N >= 2
*/
long long Fac(int N)
{
    if(N <= 1)
        return 1;
    return Fac(N-1)*N;
}
/*

循环方式:从1乘到N即可

*/
long long Fac(int N)
{
    long long ret = 1;
    for(int i = 2; i <= N; ++i)
    {
        ret *= i;
    }
    return ret;
}

8.


作业标题(687)


打印一个数的每一位


作业内容


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


参考思路为:


/*

思路:

       

N   N <= 9
Print(N)
              Print(N-1), 打印N
*/
 void print(unsigned int n)
 {
  if(n>9)
    print(n/10);
  printf("%d ", n%10);
 }


相关文章
|
23天前
|
存储 Serverless C语言
【C语言基础考研向】11 gets函数与puts函数及str系列字符串操作函数
本文介绍了C语言中的`gets`和`puts`函数,`gets`用于从标准输入读取字符串直至换行符,并自动添加字符串结束标志`\0`。`puts`则用于向标准输出打印字符串并自动换行。此外,文章还详细讲解了`str`系列字符串操作函数,包括统计字符串长度的`strlen`、复制字符串的`strcpy`、比较字符串的`strcmp`以及拼接字符串的`strcat`。通过示例代码展示了这些函数的具体应用及注意事项。
|
24天前
|
安全 编译器 C语言
C语言常量的定义与使用的注意点
在 C 语言中,常量是在程序运行期间值不变的量,通过字面值、`#define` 或 `const` 关键字定义。字面常量直接在代码中表示固定值,如整数 `100`、浮点数 `3.14`、字符 `&#39;A&#39;` 和字符串 `&quot;Hello, World!&quot;`;`#define` 用于定义宏,如 `#define PI 3.14159`;`const` 则定义不可变变量,如 `const int daysInWeek = 7`。常量可用于数组大小、循环边界等场景,并能提升代码的可读性和可维护性。使用时需注意作用域、类型安全和命名,避免直接使用数字(魔法数字)。
|
26天前
|
存储 算法 C语言
数据结构基础详解(C语言):单链表_定义_初始化_插入_删除_查找_建立操作_纯c语言代码注释讲解
本文详细介绍了单链表的理论知识,涵盖单链表的定义、优点与缺点,并通过示例代码讲解了单链表的初始化、插入、删除、查找等核心操作。文中还具体分析了按位序插入、指定节点前后插入、按位序删除及按值查找等算法实现,并提供了尾插法和头插法建立单链表的方法,帮助读者深入理解单链表的基本原理与应用技巧。
|
26天前
|
存储 C语言
C语言程序设计核心详解 第十章:位运算和c语言文件操作详解_文件操作函数
本文详细介绍了C语言中的位运算和文件操作。位运算包括按位与、或、异或、取反、左移和右移等六种运算符及其复合赋值运算符,每种运算符的功能和应用场景都有具体说明。文件操作部分则涵盖了文件的概念、分类、文件类型指针、文件的打开与关闭、读写操作及当前读写位置的调整等内容,提供了丰富的示例帮助理解。通过对本文的学习,读者可以全面掌握C语言中的位运算和文件处理技术。
|
26天前
|
存储 C语言
C语言程序设计核心详解 第七章 函数和预编译命令
本章介绍C语言中的函数定义与使用,以及预编译命令。主要内容包括函数的定义格式、调用方式和示例分析。C程序结构分为`main()`单框架或多子函数框架。函数不能嵌套定义但可互相调用。变量具有类型、作用范围和存储类别三种属性,其中作用范围分为局部和全局。预编译命令包括文件包含和宏定义,宏定义分为无参和带参两种形式。此外,还介绍了变量的存储类别及其特点。通过实例详细解析了函数调用过程及宏定义的应用。
|
1月前
|
Linux C语言
C语言 多进程编程(三)信号处理方式和自定义处理函数
本文详细介绍了Linux系统中进程间通信的关键机制——信号。首先解释了信号作为一种异步通知机制的特点及其主要来源,接着列举了常见的信号类型及其定义。文章进一步探讨了信号的处理流程和Linux中处理信号的方式,包括忽略信号、捕捉信号以及执行默认操作。此外,通过具体示例演示了如何创建子进程并通过信号进行控制。最后,讲解了如何通过`signal`函数自定义信号处理函数,并提供了完整的示例代码,展示了父子进程之间通过信号进行通信的过程。
|
1月前
|
C语言
C语言 字符串操作函数
本文档详细介绍了多个常用的字符串操作函数,包括 `strlen`、`strcpy`、`strncpy`、`strcat`、`strncat`、`strcmp`、`strncpy`、`sprintf`、`itoa`、`strchr`、`strspn`、`strcspn`、`strstr` 和 `strtok`。每个函数均提供了语法说明、参数解释、返回值描述及示例代码。此外,还给出了部分函数的自实现版本,帮助读者深入理解其工作原理。通过这些函数,可以轻松地进行字符串长度计算、复制、连接、比较等操作。
|
1月前
|
SQL 关系型数据库 C语言
PostgreSQL SQL扩展 ---- C语言函数(三)
可以用C(或者与C兼容,比如C++)语言编写用户自定义函数(User-defined functions)。这些函数被编译到动态可加载目标文件(也称为共享库)中并被守护进程加载到服务中。“C语言函数”与“内部函数”的区别就在于动态加载这个特性,二者的实际编码约定本质上是相同的(因此,标准的内部函数库为用户自定义C语言函数提供了丰富的示例代码)
|
2月前
|
C语言
【C语言】字符串及其函数速览
【C语言】字符串及其函数速览
26 4
|
2月前
|
机器学习/深度学习 编译器 Serverless
C语言中函数
C语言中函数
22 0
下一篇
无影云桌面