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


前言

关于函数相关的选择题。


题目一:

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.mzph.cn/news/801115.shtml

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

相关文章

牛顿:Archetype AI 的开创性模型,实时解读真实世界的新宠儿

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

英语学习笔记-音节划分和字母发音对照表

国际音标 音节划分 英语音节以元音为主体构成的发音单位,一般说来元音发音响亮,可以构成音节,辅音发音不响亮,不能单独构成音节 ((m] (n] [I] 例外)。 从单词拼写形式上看,有几个元字组就有几个音节 音节划分规则 长…

[通俗易懂]《动手学强化学习》学习笔记1-第1章 初探强化学习

文章目录 前言第1章 初探强化学习1.1 简介序贯决策(sequential decision making)任务:强化学习与有监督学习或无监督学习的**区别**:改变未来 1.2 什么是强化学习环境交互与有监督学习的区别1:改变环境 (说…

GPU环境安装与虚拟环境安装(适用于Windows下的李沐GPU)

之前我是用的都是VMware的虚拟机且安装的是cpu的pytorch版本,因为想要使用GPU,最终实现了在Windows上使用GPU,并且相关原理也在参考文章或视频内,可以通过原理自行挑选自己所需的配置并安装。 文章目录 1.GPU安装1.1 名词解释1.2 卸载旧版本的CUDA1.3 版本选择步骤(Nivida显卡…

ubuntu安装

一、安装虚拟机 https://www.vmware.com/products/workstation-pro/workstation-pro-evaluation.html 下载后运行安装向导,一直Next即可 许可证: https://zhuanlan.zhihu.com/p/685829787#:~:textpro,17%E5%AF%86%E9%92%A5%EF%BC%9AMC60H-DWHD5-H80U9-6…

【SpringCloud】Nacos 配置管理

目 录 一.统一配置管理1. 在 nacos 中添加配置文件2. 从微服务拉取配置 二.配置热更新1. 方式一2. 方式二 三.配置共享1. 添加一个环境共享配置2. 在 user-service 中读取共享配置3. 运行两个 UserApplication,使用不同的 profile4. 配置共享的优先级5. 多服务共享配…

如何使用vscode启动Flask并实现无公网IP远程访问内网服务

文章目录 1. 安装部署Flask2. 安装Cpolar内网穿透3. 配置Flask的web界面公网访问地址4. 公网远程访问Flask的web界面 本篇文章主要讲解如何在本地安装Flask,以及如何将其web界面发布到公网进行远程访问。 Flask是目前十分流行的web框架,采用Python编程语…

LeetCode初级算法书Java题解日常更新

LeetCode初级算法高效题解(含思路注释) 文章目录 LeetCode初级算法高效题解(含思路注释)前言一、数组1.删除排序数组中的重复项2.买卖股票的最佳时机 II3.旋转数组4.存在重复元素 总结 前言 决定用四个月过一下算法 一、数组 1.…

【绩效管理】帮助零售企业建立分层分类绩效考核体系项目纪实

购物中心张经理评价:“员工的绩效管理一直是困扰我公司的难题,我们只懂得怎么经营,至于怎么做人力资源管理,真是一点都不懂。这次华恒智信为我们提供的服务对我们的帮助很大。基于企业实际调研情况,华恒智信专家明确指…

Linux-等待子进程

参考资料:《Linux环境编程:从应用到内核》 僵尸进程 进程退出时会进行内核清理,基本就是释放进程所有的资源,这些资源包括内存资源、文件资源、信号量资源、共享内存资源,或者引用计数减一,或者彻底释放。…

PANet网络

PANet(Path Aggregation Network)是一种用于语义分割任务的神经网络结构,旨在解决多尺度特征融合的问题。该网络结构由中国科学院计算技术研究所提出,在2018年的论文中首次提出。 PANet的主要目标是解决语义分割任务中多尺度信息…

电脑开机启动项设置

电脑开机启动项设置 一、Windows 系统: 1、Windows 系统,可以通过【系统配置实用程序】来设置开机启动项: 1)、按【WinR】组合键,打开【运行】对话框。 2)、输入【msconfig】,点击【确定】或…

Transformer 模型及其典型应用研究

摘要: Transformer 模型是一种基于自注意力机制的深度学习架构,在自然语言处理等领域取得了巨大成功。本文介绍了 Transformer 模型的原理和结构,并探讨了其在语言翻译、文本生成、对话系统、语言模型、图像处理和推荐系统等典型应用领域的研…

Java中的Stream流常用接口和方法

​TOC 第一章:Stream流是什么 1.1)简单介绍 学习Stream流就绕不开Lambda表达式, 需要了解Lambda表达式可以看一下这篇–>:Lambda表达式学习 1.其实“流”是个抽象概念,我们把现实世界中与Stream流有相同特性的…

一条SQL查询语句的执行顺序

SQL常用字段书写顺序 SELECT:选择要查询的列。 FROM:指定数据来源,即表名。 JOIN:根据指定的连接条件将多个表连接在一起。 ON:指定连接条件,即哪些列的值匹配时,应该将两个表中的行组合在一起。…

【Angular】什么是Angular中的APP_BASE_HREF

1 概述: 在这篇文章中,我们将看到Angular 10中的APP_BASE_HREF是什么以及如何使用它。 APP_BASE_HREF为当前页面的基础href返回一个预定义的DI标记。 APP_BASE_HREF是应该被保留的URL前缀。 2 语法: provide: APP_BASE_HREF, useValue: /gfgapp3 步骤: 在app.m…

SAP ERP 公有云有哪些模块?

随着全球化竞争的加剧和企业管理需求的日益复杂化,越来越多的企业开始采用云端企业资源计划(ERP)系统来优化业务流程。SAP ERP 公有云(SAP S/4HANA Cloud, public edition)作为一款领先的云端ERP解决方案,为…

不要再使用 @Builder 注解了!有深坑呀!

曾经,我在《千万不要再随便使用 lombok 的 Builder 了!》 一文中提到 Builder 注解的其中一个大坑会导致默认值失效! 最近阅读了 《Oh !! Stop using Builder》 发现 Builder 的问题还不止一个,Builder 会让人误以为是遵循构建器…

掌握Linux虚拟网络设备:从基础到应用的全面指南

在现代计算环境中,尤其是云计算☁️、容器化📦和微服务架构🏗️大行其道的时代,了解和掌握Linux虚拟网络设备变得极为重要。本文将深入探讨Linux虚拟网络设备的世界,带你了解它们是什么、包含哪些类型、为什么需要它们…

揭秘淘宝商品详情数据接口(Taobao.item_get)

淘宝商品详情数据接口(Taobao.item_get)是一种允许开发者通过API访问淘宝平台上的商品详情信息的接口。通过该接口,开发者可以获取到商品的标题、价格、销量、描述等详细信息,为商品展示和销售提供数据支持。 请求示例&#xff0…