【C语言】函数相关选择题

news2024/11/26 20:27:46


前言

关于函数相关的选择题。


题目一:

C语言规定,在一个源程序中,main函数的位置( )

A .必须在最开始

B .必须在库函数的后面

C .可以任意

D .必须在最后

题解:选择C。

  • main函数为C语言中整个工程的程序入口,对于定义位置是没有要求的。
  • main函数有且只有一个,当运行程序时,编译器会自动进行扫描,找到main函数,进入main函数,开始执行代码。

题目二:

关于C语言函数描述正确的是:( )

A .函数必须有参数和返回值

B .函数的实参只能是变量

C .库函数的使用必须要包含对应的头文件

D .有了库函数就不需要自定函数了

题解:选择C。

  • 选项A的错因。C语言中函数可以没有参数和返回值,当没有参数没有返回值时,称为无参无返回值函数,这是C语言允许的,但要注意,函数不能没有函数名。
  • 选项B的错因。C语言中函数的实参可以时变量、常量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。也就是说,当实参为表达式、函数之类的,必须要确认清楚是否有确定的值,如函数当成另一个函数的参数时,需要确认清楚该函数是否有返回值。
  • 选项C是正确的。使用库函数必须要包含对应的头文件。
  • 选项D的错因。在C语言中可以分为两类,分别为库函数和自定义函数,库函数由官方提供,自定义函数由自己提供,自定义函数在C语言中占据举足轻重的地位。

题目三:

以下叙述中不正确的是:( )

A .在不同的函数中可以使用相同名字的变量

B .函数中的形式参数是在栈中保存

C .在一个函数内定义的变量只在本函数范围内有效

D .在一个函数内复合语句中定义的变量在本函数范围内有效(复合语句指函数中的成对括号构成的代码)

题解:选择D。

  • 选项A是正确的。不同的函数就相当于不同的作用域,为独立的空间,使用相同名字变量不受影响。
  • 选项B是正确的。函数中的形参相当于该函数作用域内的局部变量,局部变量是放在栈区保存的。
  • 选项C是正确的。函数内定义的变量为该函数内的局部变量,当出了该函数,会自动销毁。
  • 选项D是错误的。函数内中复合语句中定义的变量只在该复合语句内有效,因为在复合语句内定义的变量,相当于该复合语句内的局部变量,局部变量的作用域为局部范围。具体如下列代码:
//函数内复合语句定义的变量只在复合语句内有效
void fun()
{
	{
		int a = 10;
	}
	printf("%d\n", a);
}
int main()
{
	fun();
	return 0;
}


题目四:

以下关于函数设计不正确的说法是:( )

A .函数设计应该追求高内聚低耦合

B .要尽可能多的使用全局变量

C .函数参数不易过多

D .设计函数时,尽量做到谁申请的资源就由谁来释放

高内聚,低耦合的概念:

  • 耦合:每个模块之间相互联系的紧密程度,模块之间联系越紧密,则耦合性越高,模块的独立性就越差!反之同理
  • 内聚:一个模块中各个元素之间的联系的紧密程度,如果各个元素(语句、程序段)之间的联系程度越高,则内聚性越高,即”高内聚“。

题解:选择B。

  • 选项A是正确的。函数设计的目的就是独立封装功能模块,其它模块出差不会影响该模块,并且模块内各个元素之间的联系紧密,更易于代码的维护。
  • 选项B的错因。函数应该遵循谁创建谁销毁,简单来说就是使用完该函数,函数内的元素应该随着函数进行销毁,如果在函数内尽可能多的全局变量,会造成数据混乱,全局变量的值不够明确。全局变量每个方法都可以访问,很难保证数据的正确性和安全性
  • 选项C是正确的。参数越少越好,否则用户在使用时体验不是很好,还得必须将所有参数完全搞明白才可以使用,并且容混淆。
  • 选项D是正确的。谁申请的谁维护谁释放,否则如果交给外部使用者释放,外部使用者可能不知道或者忘记,就会造成资源泄漏。

题目五:

函数调用exec((vl,v2),(v3,v4),v5,v6);中,实参的个数是:( )

A .3

B .4

C .5

D .6

题解:选择B。

  • 函数的实参可以是变量、常量、表达式、函数等等
  • 本题实参中有两个逗号表达式,逗号表达式的原则为从左到右计算,整个逗号表达式的值为最后一个元素。

题目六:

关于实参和形参描述错误的是:( )

A .形参是实参的一份临时拷贝

B .形参是在函数调用的时候才实例化,才开辟内存空间

C .改变形参就是改变实参

D .函数调用如果采用传值调用,改变形参不影响实参

题解:选择C。

  • 选项A是正确的。实参为调用该函数时的程序真实数据,而在调用函数时,系统会自动给该函数创建与实参同类型的临时变量,该变量称为形参,并且形参有自己的内存空间。
  • 选项B是正确的。在函数调用时,会对形参进行实例化,开辟内存空间。
  • 选项C的错因。函数的传参有两种,分别为传值和传址,当进行传值时,形参的改变不会影响实参,当进行传址时,形参的内容存储的是实参的内存地址,指向实参,访问实参地址时,修改数据会影响实参的值,但如果单纯修改形参的内容,即存储的地址,改为其它内存地址,这是不会影响实参的,这种还是相当于传值。
  • 选项D是正确的。函数传参分为传值和传址,传值不会影响实参。

题目七:

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

A .return 这2个数

B .形参用数组

C .形参用2个指针

D .用2个全局变量

题解:选择A。

  • 选项A的错因。return语句只能返回1个值。
  • 选项B是正确的。形参为数组时,其实接收的是实参传递过来的数组首元素地址,通过数组首元素地址,可以找到数组内的元素,进行修改,也就相当于将处理好的数据返回给了主调函数。
  • 选项C是正确的。形参用指针来接收主调函数传过来的值,实参传递的地址,属于传址,有了实参数据的地址,就可以访问实参,对数据进行修改。
  • 选项D是正确的。全局变量的作用域为整个工程,那就是说在函数中赋值新的数据时,全局变量的值也在修改,主调函数使用全局变量值时,可以接收到修改值。

题目八:

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

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

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

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

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

题解:选择C。

  • 选项A是正确的。函数进行传值调用,形参是实参的一份临时拷贝。
  • 选项B是正确的,函数进行传址调用时,形参指向了实参,可以通过形参操作实参。
  • 选项C的错因。函数不可以嵌套定义,可以嵌套调用。
  • 选项D是正确的。函数可以嵌套调用,不可以嵌套定义。

题目九:

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

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

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

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

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

题解:选择B。

  • 选项A的错因。函数可以为无返回类型函数,也就是说可以没有返回值。
  • 选项B是正确的。实参与形参均会开辟空间,互不影响,并且形参的作用域为函数内部,因此实参与形参是可以同名的。
  • 选项C的错因。函数间的数据传递可以使用全局变量,因为全局变量是公共的,作用域为整个工程,谁都可以使用。
  • 选项D的错因。C语言具有模块化开发特性,通常将函数的声明方式在.h头文件中,特意创建一个.c文件用来存放函数的定义(实现),最后在主调函数中包含.h头文件,调用函数定义。

题目十:

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

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

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

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

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

题解:选择B。

  • 选项A的错因。函数的使用有两种情况,情况一为函数已声明,情况二为函数没有声明但函数定义在函数使用之前,因此选项A是片面的,当函数已进行声明,函数的定义就可以不放在函数使用之前。
  • 选项B是正确的。C语言规定,函数必须保证先声明(定义)后使用。
  • 选项C的错因。函数定义在使用之后的前提是函数已声明。
  • 选项D的错因。函数的声明是告诉编译器,有一个有着返回类型 函数名(参数类型);的函数,而说明函数是怎么实现的是函数的定义(实现)。

题目十一:

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

A .2

B .4

C .8

D .16

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

题解:选择D。

  • 对于递归的题目,最好的解决方式是画图
  • 请看图解:


题目十二:

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

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

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

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

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

题解:选择C。

  • 选项A是正确的。函数递归存在限制条件,如果不存在限制条件,函数将无限递归,反复调用创建函数,直到程序崩溃,这也是函数递归必须遵循的条件之一。
  • 选项B是正确的。函数递归中,每次递归要越来越接近限制条件,直到递归不再继续,如果不接近限制条件,会导致无限递归,直到程序崩溃,这也是函数递归必须遵循的条件之一。
  • 选项C的错因。递归不可以无限递归下去,函数是存放在栈区的,当进行递归时,每创建一个函数就会从栈顶进入,栈区也是有上限的,当无限递归,栈区存放不下时,就会导致栈溢出情况。
  • 选项D是正确的。递归层次太深时,声明需要调用多次函数,那就会多个函数入栈,这样栈区存储不下时,就会导致栈溢出。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1578393.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

快速理解vim编辑器和软硬连接

刚开始学习linux基础命令时最难搞懂的应该就是vi和ln命令了😭,写这篇文章主要想和大家分享一下我对这两个命令的理解,希望能更快的帮助到那些还没搞懂的同学😜 首先我们要知道vim编辑器主要分为三个工作模式,分别是图上…

python中的split()用法

在Python中,split() 是一个字符串方法,用于将字符串按照指定的分隔符分割成一个列表。如果没有提供分隔符,那么它会默认按照任何空白字符(如空格、换行符、制表符等)进行分割。 这里是 split() 方法的一些基本用法&am…

K8s学习九(配置与存储_存储)

存储管理 Volumes HostPath 将节点上的文件或目录挂载到 Pod 上,此时该目录会变成持久化存储目录,即使 Pod 被删除后重启,也可以重新加载到该目录,该目录下的文件不会丢失 效果就是容器里的数据和主机里的数据进行共享 配置文…

Hadoop安装部署-SecondaryNameNode备份版

Hadoop分布式文件系统支持NameNode节点的高可用性,本文主要描述Secondary NameNode数据备份版本的安装部署。 如上所示,NameNode主节点同步数据到NameNode备份节点,当NameNode主节点发生故障变得不可用时, NameNode主节点重新启动…

【多线程】多线程下使用集合类

一.Java中线程安全的集合类 Java中提供了多种线程安全的集合类,它们可以在多线程环境下安全地被多个线程同时访问而无需外部同步。以下是一些常见的线程安全集合类: Vector: 类似于 ArrayList 的动态数组,但是所有方法都是同步的&#xff0…

ThinkPhp8 框架使用 mysql find_in_set 函数

前言: 使用mysql 存储一些标签时 会使用逗号拼接的存储方法 比如 1,2,3,11 一般情况下 查询 1 可能会用到 like %1% 但这样查询的不够准确 因为11也会被查询到 如果每次都多一个逗号 1,2,3,11, 查询时 like %1,% 这样存储有点不太符合程序设计 解决方案 ----------- 官网…

Linux 5.10 Pstore 功能测试

目录 简介环境配置内核配置参考备注 简介 Pstore(Persistent store support)是用于系统发生oops或panic时,自动保存内核log buffer中的日志。随着功能不断完善,Duo S使用Linux 5.10已经支持保存console日志、ftrace消息和用户空间日志的收集&#xff0c…

【Shell语言学堂】Shell 脚本练习1

Shell 脚本练习 shell语言实战 Shell 脚本练习💧CSDN划过手的泪滴t现有一个脚本可传入n个参数,要求在脚本中实现在终端输出第n个参数之前的所有参数(不包含第n个参数)编写一个计算bmi体质指数的脚本,该脚本需要用户输入身高和体重信息&#x…

登录信息失效后多次请求提示合并成一次

在通常的业务场景中经常会出现进入页面之后一次性发送好多个请求,如果登录信息失效,那就会出现很多提示 类似这种多个提示的,看起来不美观,希望改成可以把在短时间内出现相同的错误信息,只提示一次,其他的就不提示了 实现思路 通常业务中每一个请求的code都是有具体的意思,可以…

虚拟机VMware启动虚拟机刚启动有网之后没网

虚拟机VMware启动虚拟机刚启动有网之后没网 害,感觉这种调试的事情是真的浪费时间 如题,对于这种情况,一句话,就是你本地的DHCP虚拟机服务以及NAT网络服务没启动 本机windowR,输入services.msc 进入服务 然后 喏,…

【MATLAB源码-第182期】基于matlab的QPSK调制解调系统频偏估计及补偿算法仿真,对比补偿前后的星座图误码率。

操作环境: MATLAB 2022a 1、算法描述 在通信系统中,频率偏移是一种常见的问题,它会导致接收到的信号频率与发送信号的频率不完全匹配,进而影响通信质量。在调制技术中,QPSK(Quadrature Phase Shift Keyi…

LowCodeEngine基础教程

一、技术介绍 1、应用场景 LowCodeEngine支持一下四种通用场景:中后台页面、移动端页面、流程、可视化报表。 2、低代码的特点 3、低代码在阿里巴巴实践 4、开发痛点 中后台页面中,对于页面的视觉冲击、视觉炫酷要求并不是很敏感,更多的是…

【Linux进阶之路】ARP欺骗实验

正文 话不多说,直接干! 首先我们需要准备一下环境,先配置VMARE,然后下载KALI的虚拟机。 详细的安装教程视频:点击跳转,下载KALI可能要半个小时,中间可以看个剧玩个游戏缓一缓。 配置好之后&am…

K8s学习八(配置与存储_配置)

配置与存储 配置管理 ConfigMap ConfigMap的创建 一般用于去存储 Pod 中应用所需的一些配置信息,或者环境变量,将配置于 Pod 分开,避免应为修改配置导致还需要重新构建 镜像与容器。configmap缩写为cmkubectl create cm -h来查看创建命令…

java+mysql图书管理系统制作教程v1.0.0完整版

本人QQ:2711138299,需要源码的可以加我,附带数据库备份文件,以及建立数据库表 下面是我写在有道云笔记里面的教程,由于复制粘贴后,代码都混乱在一起了,不建议大家观看,所以想看详细教程的也可以…

拥有自己的云环境-域名及备案

序 唠叨两句 之前的文章,讲了如何购买一台云服务器,然后购买之后,如何操作云服务器。当买完云服务器之后,我们就可以使用云服务器提供的公网ip,访问到我们的服务器上。但是,这样怎么能体现我们一个老程序…

Hybrid混合开发 和 Android平台JSBridge的原理

书接上篇:移动端研发技术的进化历程 纯原生开发主要面临动态化和开发成本两个问题,而针对这两个问题,诞生了一些跨平台的动态化框架。 针对原生开发面临的问题,业界一直都在努力寻找好的解决方案,而时至今日&#xf…

【深度学习】图像风格混合——StyleGAN原理解析

1、前言 上一篇,我们讲了PGGAN的模型原理,本章我们就来讲解一下StyleGAN,这个模型能够自由控制图像的风格,细节变化等等,生成用户想要的图像,甚至从某种程度上说,其可以实现AI换脸。 PS&#…

[StartingPoint][Tier1]Pennyworth

Important Jenkins是一个用于自动化构建、测试和部署软件项目的开源持续集成和持续部署(CI/CD)工具。它允许开发团队自动执行和监控在软件开发过程中的重复性任务,例如构建代码、运行测试、部署应用程序等。Jenkins提供了一个易于使用的Web界…

ST表的解释

介绍 ST表:一种用于高效处理区间查询的数据结构。它可以在O(1)的时间复杂度内回答某一区间的最值查询(最小值、最大值等)。ST表使用动态规划的思想,通过预处理的方式来快速计算出各个区间的最值。 st算法的主要思想就是将所求的…