【试卷页数】:共82页/预览前10页
【试卷大小】:5.24M
【下载方式】:百度网盘
【 提 取 码】:3y8r
【下载地址】:https://www.kaoshiji.cn/jsjkxjs/650.html
教材名称:《C程序设计》
主编:谭浩强
出版社:清华大学出版社
版次:2017年8月第五版
书刊号:ISBN:978-7-302-48144-7
目 录
考试集教材配套题库介绍
一、 单项选择题(60题)
二、 多项选择题(40题)
三、 判断题(40题)
四、 填空题(40题)
五、 名词解释题(40题)
六、 简答题(40题)
七、 论述题(15题)
八、材料分析题(5题)
考试集教材配套题库介绍
一、精准匹配教材,一站式学习解决方案
本网站专注于为高等教育教材,提供全章节配套题库服务,完全覆盖教材知识点。题库设计严格遵循教材章节结构,助力学习者系统掌握知识体系。
二、题库核心优势
1.题量丰富,解析详尽
每章独立题库,总计超千道高质量试题。每题均附标准答案+逐题解析,深入剖析考点,帮助学生举一反三。
2.灵活下载,多端适配
支持题库下载,满足打印、笔记等个性化学习需求。配套手机在线刷题小程序,随时随地碎片化学习,自动记录进度与错题。
小程序智能归纳易错题型,针对性强化薄弱环节。限时自测,还原真实考试环境,提升应试能力。
考试集官网[www.kaoshiji.cn]下载试题
关注微信公众号:百业先生,为您提供一站式服务。
扫一扫,码上刷题
考试集,让学习更简单!
第7章试卷-章节练习
第7章用函数实现模块化程序设计167
7.1为什么要用函数167
7.2怎样定义函数169
7.2.1为什么要定义函数169
7.2.2定义函数的方法170
7.3调用函数171
7.3.1函数调用的形式171
7.3.2函数调用时的数据传递172
7.3.3函数调用的过程174
7.3.4函数的返回值174
7.4对被调用函数的声明和函数原型176
7.5函数的嵌套调用179
7.6函数的递归调用181
7.7数组作为函数参数189
7.7.1数组元素作函数实参189
7.7.2一维数组名作函数参数191
7.7.3多维数组名作函数参数194
7.8局部变量和全局变量196
7.8.1局部变量196
7.8.2全局变量197
7.9变量的存储方式和生存期201
7.9.1动态存储方式与静态存储方式201
7.9.2局部变量的存储类别202
7.9.3全局变量的存储类别205
7.9.4存储类别小结209
7.10关于变量的声明和定义211
7.11内部函数和外部函数212
7.11.1内部函数212
7.11.2外部函数213
一、 单项选择题(60题)
1.以下哪项不是使用函数的好处?
A. 提高代码的可读性
B. 实现代码的重用
C. 使程序更加模块化
D. 增加程序的执行速度
正确答案:D
解析:使用函数可以提高代码的可读性、实现代码的重用以及使程序更加模块化,这些都是函数带来的编程上的优势。然而,函数的调用本身会涉及栈的操作、参数的传递等,这在某些情况下可能会略微降低程序的执行速度,尤其是在函数调用非常频繁时。因此,增加程序的执行速度不是使用函数的好处。
2.在C语言中,函数定义的正确顺序是?
A. 返回类型、函数名、参数列表、函数体
B. 函数名、返回类型、参数列表、函数体
C. 参数列表、函数名、返回类型、函数体
D. 返回类型、参数列表、函数名、函数体
正确答案:A
解析:在C语言中,函数定义的基本格式是:返回类型 函数名(参数列表) { 函数体 }。因此,正确的顺序是首先指定返回类型,然后是函数名,接着是参数列表(括号内),最后是函数体(大括号内)。
3.关于函数调用时的数据传递,以下说法错误的是?
A. 实参可以是常量、变量或表达式
B. 形参在函数被调用时分配存储单元
C. 实参和形参占用相同的存储单元
D. 形参在函数结束时释放存储单元
正确答案:C
解析:在函数调用时,实参的值会被复制到形参中,但实参和形参占用的是不同的存储单元。实参在调用函数的外部有定义,而形参在函数内部定义,并在函数被调用时分配存储单元,函数结束时释放。因此,修改形参的值不会影响实参。
4.在C语言中,以下哪个关键字用于声明一个函数原型?
A. void
B. extern
C. static
D. register
正确答案:B
解析:在C语言中,函数原型用于告诉编译器函数的返回类型、函数名以及参数类型,而不包含函数体。extern关键字(虽然通常可以省略)用于声明一个函数是在其他地方定义的,即声明一个函数原型。void用于指定无返回值的函数类型,static用于限制函数的作用域为文件内,register用于提示编译器将变量存储在寄存器中,它们都不是用来声明函数原型的。
5.关于局部变量和全局变量,以下说法正确的是?
A. 局部变量可以在所有函数中使用
B. 全局变量只能在定义它的函数中使用
C. 局部变量在函数调用结束后仍然存在
D. 全局变量在程序的整个生命周期内都存在
正确答案:D
解析:局部变量是在函数内部定义的,只能在定义它的函数内部使用,并且在函数调用结束后局部变量的存储单元被释放,因此不存在了。全局变量是在函数外部定义的,可以在程序的任何地方被访问,且在程序的整个生命周期内都存在。因此,选项D是正确的。
6.在C语言中,当一个函数需要返回多个值时,通常的做法是?
A. 使用多个return语句
B. 通过指针参数传递返回值
C. 定义一个结构体类型,通过返回结构体来实现
D. 使用全局变量来存储返回值
正确答案:C
解析:在C语言中,函数只能有一个返回值,且通过return语句返回。当需要返回多个值时,通常的做法是定义一个结构体类型,将需要返回的值作为结构体的成员,然后函数返回这个结构体的实例。这样,调用者可以通过访问结构体的成员来获取所有返回值。选项A错误,因为函数不能有多个return语句返回不同的值;选项B虽然可以通过指针参数修改调用者的变量,但不是返回值的直接方式;选项D使用全局变量可能导致数据的不一致性和难以维护。
7.以下关于函数嵌套调用的描述,错误的是?
A. 一个函数可以调用另一个函数
B. 函数可以嵌套调用,即一个函数在其执行过程中可以调用另一个函数
C. 函数嵌套调用的层数没有限制
D. 函数嵌套调用时,后调用的函数先返回
正确答案:C
解析:在C语言中,函数可以嵌套调用,即一个函数在其执行过程中可以调用另一个函数。这种调用是有限制的,通常受到系统栈空间的限制,因此函数嵌套调用的层数并不是没有限制的。当嵌套调用的层数过多时,可能会导致栈溢出错误。选项A、B和D都是关于函数嵌套调用的正确描述。
8.在C语言中,递归函数是指?
A. 一个函数体内调用了另一个函数
B. 一个函数体内调用了自身
C. 一个函数体内没有调用任何函数
D. 一个函数被多个函数调用
正确答案:B
解析:递归函数是指一个函数在其执行过程中直接或间接地调用了自身。这是解决某些问题(如阶乘、斐波那契数列等)的有效方法。选项A描述的是一般的函数调用,不是递归;选项C描述的是没有函数调用的函数,与递归无关;选项D描述的是函数被调用的情况,而不是函数自身的调用。
9.当一维数组名作为函数参数时,实际传递给函数的是?
A. 数组的首地址
B. 数组的所有元素
C. 数组的长度
D. 数组名本身
正确答案:A
解析:在C语言中,当一维数组名作为函数参数时,实际传递给函数的是数组的首地址(即数组第一个元素的地址)。函数通过这个地址来访问数组的元素。数组名本身在函数参数传递中并不直接传递,而是被转换为指向数组首元素的指针。选项B错误,因为实际传递的是地址而不是所有元素;选项C错误,因为数组长度不是通过数组名直接传递的;选项D错误,因为传递的是地址而不是数组名本身。
10.以下关于局部变量和全局变量的描述,正确的是?
A. 局部变量在程序执行过程中一直存在
B. 全局变量只能在定义它的文件中使用
C. 局部变量在其作用域内有效
D. 全局变量的值不能被改变
正确答案:C
解析:局部变量是在函数内部定义的变量,它们只在其定义的作用域内(通常是函数内部)有效。当函数执行完毕后,局部变量就被销毁了。因此选项A错误。全局变量是在函数外部定义的变量,它们在整个程序执行过程中都存在,并且可以在多个文件中使用(通过extern关键字声明),因此选项B错误。全局变量的值是可以被改变的,因此选项D错误。选项C正确地描述了局部变量的作用域特性。
11.在C语言中,关于内部函数(也称为静态函数)的描述,以下哪项是正确的?
A. 内部函数可以被其他文件中的函数调用
B. 内部函数只能在定义它的文件中被调用
C. 内部函数的作用域是整个程序
D. 内部函数必须声明为extern才能被调用
正确答案:B
解析:内部函数(在C语言中通常使用static关键字定义)的作用域被限制在定义它的文件内部。这意味着它们不能被其他文件中的函数调用,也不需要(也不应该)被声明为extern。因此,选项A和D都是错误的。选项C描述的是全局变量的作用域,而不是内部函数的作用域。
12.以下哪项不是全局变量的特点?
A. 全局变量在程序的整个生命周期内都存在
B. 全局变量可以被任何函数访问和修改
C. 全局变量通常用于在函数之间传递数据
D. 全局变量在定义时必须初始化
正确答案:D
解析:全局变量是在函数外部定义的,它们在程序的整个生命周期内都存在,并且可以被任何函数访问和修改。这使得全局变量成为在函数之间传递数据的一种方式。然而,全局变量在定义时并不一定要初始化,它们可以在定义时留待后续赋值。因此,选项D是错误的。
13.在C语言中,关于变量的存储类别,以下哪项描述是错误的?
A. auto变量是局部变量,存储在栈中
B. static变量在程序执行期间始终存在
C. register变量存储在寄存器中,访问速度很快
D. extern变量是全局变量,但只在定义它的文件中有效
正确答案:D
解析:extern变量是全局变量的一种,它的作用域可以跨越多个文件。通过在一个文件中使用extern关键字声明,可以在其他文件中访问和修改这个全局变量。因此,选项D中的“但只在定义它的文件中有效”是错误的描述。
14.当多维数组名作为函数参数时,实际传递给函数的是?
A. 数组的所有元素
B. 数组的首地址
C. 数组的形状(维度和大小)
D. 数组名本身所代表的指针
正确答案:B
解析:在C语言中,无论是一维数组还是多维数组,当数组名作为函数参数时,实际传递给函数的都是数组的首地址(即数组第一个元素的地址)。函数通过这个地址来访问数组的元素。数组的形状(维度和大小)并不是通过数组名直接传递的,而是需要额外的参数或约定来传递。数组名本身在函数参数传递中并不直接传递为指针,而是被转换为指向数组首元素的指针。
15.以下关于函数原型的描述,哪项是错误的?
A. 函数原型告诉编译器函数的返回类型
B. 函数原型必须包括函数的所有参数类型
C. 函数原型不包括函数体
D. 函数原型可以省略参数名
正确答案:B
解析:函数原型是函数的声明,它告诉编译器函数的返回类型、函数名以及参数的类型。然而,函数原型并不需要包括函数的所有参数名,只需要包括参数的类型。编译器在编译时并不需要知道参数的具体名字,只需要知道参数的类型以便进行类型检查。因此,选项B中的“必须包括函数的所有参数类型”是错误的描述,应该是“必须包括函数的每个参数的类型”。
16.在C语言中,关于递归函数的描述,以下哪项是错误的?
A. 递归函数是指在其执行过程中调用自身的函数
B. 递归函数必须有一个明确的终止条件
C. 递归函数的调用过程会形成一个调用栈
D. 递归函数总是比非递归函数更高效
正确答案:D
解析:递归函数是指在其执行过程中直接或间接调用自身的函数。递归函数的设计必须包含一个明确的终止条件,以防止无限递归导致的栈溢出。递归函数的每次调用都会将函数的状态压入调用栈中,直到达到终止条件,然后逐层返回。然而,递归函数并不一定总是比非递归函数更高效。在某些情况下,递归可能导致额外的栈空间使用和函数调用开销,从而降低效率。因此,选项D是错误的。
17.以下哪项不是函数原型的作用?
A. 提供函数的返回类型信息
B. 提供函数的参数类型信息
C. 提供函数的参数名信息
D. 为编译器提供函数调用时的类型检查
正确答案:C
解析:函数原型是函数的声明,它提供了函数的返回类型、函数名以及参数的类型信息。这些信息对于编译器进行类型检查是必要的。然而,函数原型并不需要提供函数的参数名信息,因为编译器在编译时只需要知道参数的类型,而不需要知道它们的名字。因此,选项C是错误的。
18.在C语言中,关于局部变量的描述,以下哪项是正确的?
A. 局部变量可以在任何位置定义
B. 局部变量的作用域是整个程序
C. 局部变量在函数调用结束后仍然存在
D. 局部变量在其定义的作用域内有效
正确答案:D
解析:局部变量是在函数内部或代码块内部定义的变量,它们的作用域被限制在定义它们的作用域内(通常是函数或代码块内部)。局部变量在函数调用结束后或代码块执行完毕后就会被销毁。因此,选项A(局部变量可以在任何位置定义)是错误的,因为局部变量必须在函数或代码块内部定义。选项B(局部变量的作用域是整个程序)也是错误的,因为那是全局变量的特点。选项C(局部变量在函数调用结束后仍然存在)同样是错误的,因为局部变量在函数调用结束后会被销毁。选项D(局部变量在其定义的作用域内有效)是正确的描述。
19.当使用一维数组名作为函数参数时,以下哪项描述是正确的?
A. 函数会接收到数组的所有元素
B. 函数会接收到数组的首地址
C. 函数会接收到数组的长度
D. 函数会接收到数组名本身
正确答案:B
解析:在C语言中,当一维数组名作为函数参数时,实际传递给函数的是数组的首地址(即数组第一个元素的地址)。函数通过这个地址来间接访问数组的元素。数组的长度和数组名本身并不是通过数组名直接传递给函数的。因此,选项B是正确的描述。
20.以下关于static变量的描述,哪项是错误的?
A. static变量在程序执行期间始终存在
B. static局部变量在函数调用结束后仍然保留其值
C. static全局变量只能被定义它的文件访问
D. static变量默认初始化为0
正确答案:C
解析:static变量在C语言中有两种用法:作为局部变量和作为全局变量(或称为文件作用域变量)。对于static局部变量,它们在函数调用结束后仍然保留其值,并且在程序的整个执行期间都存在。对于static全局变量(或文件作用域变量),它们的作用域被限制在定义它们的文件内部,但这并不意味着它们只能被定义它们的文件访问;实际上,它们可以通过声明为extern在其他文件中被访问(尽管这不是推荐的做法)。此外,static变量(无论是局部的还是全局的)在未被显式初始化时,默认会被初始化为0。因此,选项C中的描述是错误的,因为static全局变量并非只能被定义它的文件访问。
21.在C语言中,关于函数的嵌套调用,以下哪项描述是错误的?
A. 函数的嵌套调用是指在一个函数的内部调用另一个函数
B. 函数的嵌套调用可以多层进行,即一个被调用的函数内部还可以继续调用其他函数
C. 函数的嵌套调用中,内层函数的调用结果可以直接返回给外层函数
D. 函数的嵌套调用中,外层函数的局部变量可以被内层函数直接访问和修改
正确答案:D
解析:函数的嵌套调用确实是指在一个函数的内部调用另一个函数,并且可以多层进行。内层函数的调用结果可以通过返回值或参数传递的方式间接返回给外层函数。然而,外层函数的局部变量对于内层函数来说是不可见的,也就是说,内层函数无法直接访问和修改外层函数的局部变量。这是由C语言的变量作用域规则决定的。因此,选项D是错误的。
22.以下关于C语言中函数递归调用的描述,哪项是正确的?
A. 递归调用是指函数直接或间接地调用自身,且无需终止条件
B. 递归调用中,每次函数调用都会消耗一定的栈空间
C. 递归调用总是比非递归调用更高效
D. 递归调用无法用于解决迭代问题
正确答案:B
解析:递归调用是指函数直接或间接地调用自身,但必须有一个明确的终止条件,否则会导致无限递归和栈溢出。因此,选项A是错误的。递归调用中,每次函数调用都会将函数的状态(包括参数、局部变量等)压入调用栈中,因此会消耗一定的栈空间。这是递归调用的一个特点,也是其可能的一个缺点(如果递归深度过大,可能导致栈溢出)。因此,选项B是正确的。递归调用并不总是比非递归调用更高效,特别是在某些情况下,递归可能导致额外的函数调用开销和栈空间使用。因此,选项C是错误的。递归调用可以用于解决某些迭代问题,特别是那些具有递归性质的问题(如斐波那契数列、树的遍历等)。因此,选项D也是错误的。
23.在C语言中,当多维数组名作为函数参数时,以下哪项描述是正确的?
A. 函数会接收到数组的所有元素值的拷贝
B. 函数会接收到数组的首地址(即指向数组第一个元素的指针)
C. 函数会接收到数组的形状(维度和大小)信息
D. 函数需要显式地传递数组的每一个维度大小
正确答案:B
解析:在C语言中,当多维数组名作为函数参数时,实际传递给函数的是数组的首地址(即指向数组第一个元素的指针)。函数通过这个指针来间接访问数组的元素。数组的元素值并不会被拷贝到函数中,而是通过在原数组上的操作来修改或读取元素值。数组的形状(维度和大小)信息并不是通过数组名直接传递给函数的,而是需要额外的参数或约定来传递(例如,通过额外的参数来传递数组的行数和列数)。因此,选项B是正确的。
24.以下关于C语言中局部变量和全局变量的描述,哪项是错误的?
A. 局部变量是在函数内部定义的变量,其作用域仅限于该函数内部
B. 全局变量是在函数外部定义的变量,其作用域是整个程序
C. 局部变量在函数调用结束后会被销毁,其存储空间会被释放
D. 全局变量在程序执行期间始终存在,但其值可以被任何函数随意修改
正确答案:D
解析:局部变量确实是在函数内部定义的变量,其作用域仅限于该函数内部,且在函数调用结束后会被销毁。全局变量是在函数外部定义的变量,其作用域是整个程序,且在程序执行期间始终存在。然而,全局变量的值并不应该被任何函数随意修改,因为这样做可能会导致程序状态的不一致和难以调试的问题。全局变量通常用于在多个函数之间共享数据,但应该通过明确的接口(如函数)来访问和修改它们,以确保数据的一致性和可维护性。因此,选项D是错误的。
25.在C语言中,关于内部函数(也称为静态函数)和外部函数的描述,以下哪项是正确的?
A. 内部函数可以被其他文件中的函数调用
B. 外部函数只能在定义它的文件中被调用
C. 内部函数的作用域被限制在定义它的文件内部
D. 外部函数需要使用static关键字来声明
正确答案:C
解析:内部函数(也称为静态函数)是在文件内部定义的函数,其作用域被限制在定义它的文件内部。这意味着它们不能被其他文件中的函数调用。因此,选项A是错误的。外部函数是可以被其他文件中的函数调用的函数,它们的作用域是整个程序。因此,选项B也是错误的。外部函数不需要使用static关键字来声明,而是使用默认的或extern关键字来声明。因此,选项D也是错误的。只有选项C正确地描述了内部函数的作用域限制在定义它的文件内部。
26.在C语言中,关于函数的声明和定义,以下哪项描述是正确的?
A. 函数的声明和定义是相同的,都包含了函数的实现代码
B. 函数的声明不包含实现代码,只用于告诉编译器函数的名称、返回类型和参数类型
C. 函数的定义不包含实现代码,只用于在编译时提供函数的信息
D. 函数必须先声明后定义,否则编译器会报错
正确答案:B
解析:在C语言中,函数的声明和定义是不同的。函数的声明(也称为函数原型)不包含实现代码,只包含了函数的名称、返回类型、参数类型等信息,它的主要作用是告诉编译器这个函数的存在,以便在编译过程中进行类型检查。而函数的定义则包含了函数的实现代码,即函数体。此外,虽然通常建议函数先声明后定义,但并非强制要求,编译器在遇到函数调用时,如果找不到相应的函数声明或定义,会报错,但如果在后续代码中找到了对应的函数定义,则不会报错。因此,选项B是正确的。
27.以下关于C语言中内部函数(static函数)的描述,哪项是错误的?
A. 内部函数只能在定义它的源文件中被调用
B. 内部函数的作用域被限制在定义它的源文件内部
C. 内部函数在其他源文件中不可见
D. 内部函数不能通过指针间接调用
正确答案:D
解析:内部函数(static函数)是C语言中一种特殊的函数,它的作用域被限制在定义它的源文件内部,即它只能在定义它的源文件中被调用,在其他源文件中是不可见的。然而,这并不意味着内部函数不能通过指针间接调用。如果内部函数的地址被以某种方式(如通过函数指针)传递给其他函数,那么其他函数仍然可以通过这个指针来调用内部函数。因此,选项D是错误的。
28.在C语言中,关于全局变量的存储类别和生存期,以下哪项描述是正确的?
A. 全局变量存储在栈区,程序执行完毕后销毁
B. 全局变量存储在堆区,需要手动释放内存
C. 全局变量存储在静态存储区,程序执行期间始终存在
D. 全局变量的存储类别和生存期与局部变量相同
正确答案:C
解析:在C语言中,全局变量是定义在函数外部的变量,它的作用域是整个程序。全局变量存储在静态存储区(也称为全局数据区或数据段),在程序执行期间始终存在,程序执行完毕后才会销毁。栈区通常用于存储局部变量和函数调用时的临时变量,堆区则用于动态分配内存。因此,选项C是正确的。
29.以下关于C语言中函数递归调用的描述,哪项是错误的?
A. 递归调用是指函数直接或间接地调用自身
B. 递归调用必须有一个明确的终止条件,否则会导致无限递归
C. 递归调用中,每次函数调用都会创建一个新的函数栈帧
D. 递归调用无法用于解决需要迭代的问题
正确答案:D
解析:递归调用是C语言中一种重要的函数调用方式,它允许函数直接或间接地调用自身。递归调用必须有一个明确的终止条件,以防止无限递归导致的栈溢出。每次递归调用时,都会创建一个新的函数栈帧来保存函数的状态。递归调用可以用于解决许多需要迭代的问题,如斐波那契数列、阶乘计算、树的遍历等。因此,选项D是错误的。
30.在C语言中,关于数组作为函数参数传递的描述,以下哪项是正确的?
A. 数组作为函数参数时,会传递整个数组的拷贝
B. 数组作为函数参数时,会传递数组的首地址
C. 数组作为函数参数时,无法修改数组的元素值
D. 数组作为函数参数时,必须指定数组的大小
正确答案:B
解析:在C语言中,当数组作为函数参数传递时,实际上传递的是数组的首地址(即指向数组第一个元素的指针)。函数通过这个指针来间接访问数组的元素,因此可以修改数组的元素值。由于传递的是指针而不是整个数组的拷贝,所以效率较高。此外,数组的大小通常不是通过函数参数直接传递的,而是通过约定或额外的参数来传递。因此,选项B是正确的。
31.在C语言中,关于函数的嵌套调用,以下哪项描述是正确的?
A. 嵌套调用是指一个函数可以调用多个其他函数,但这些被调用的函数不能再次调用其他函数
B. 嵌套调用是指一个函数内部可以调用另一个函数,且被调用的函数也可以继续调用其他函数
C. 嵌套调用会增加程序的复杂性,因此应该尽量避免使用
D. 嵌套调用只适用于递归函数
正确答案:B
解析:在C语言中,嵌套调用是指一个函数内部可以调用另一个函数,且这个被调用的函数也可以继续调用其他函数。这种调用方式可以增加程序的灵活性,使函数之间能够相互协作完成复杂的任务。嵌套调用并不限于递归函数,任何函数都可以被嵌套调用。虽然嵌套调用可能会增加程序的复杂性,但在许多情况下它是必要的和有用的。因此,选项B是正确的。
32.以下关于C语言中局部变量和全局变量的描述,哪项是错误的?
A. 局部变量是在函数内部定义的,其作用域仅限于该函数内部
B. 全局变量是在函数外部定义的,可以被程序中的所有函数访问
C. 局部变量在函数调用结束后会被销毁,其存储空间会被释放
D. 全局变量在程序执行期间始终存在,但其值在所有函数中都是相同的
正确答案:D
解析:在C语言中,局部变量是在函数内部定义的,其作用域仅限于该函数内部,且在函数调用结束后会被销毁。全局变量是在函数外部定义的,可以被程序中的所有函数访问,且在程序执行期间始终存在。然而,全局变量的值并不是在所有函数中都是相同的,它可以在不同的函数中被修改,并且修改后的值会在整个程序中生效。因此,选项D是错误的。
33.在C语言中,关于函数的递归调用,以下哪项描述是错误的?
A. 递归调用是指函数直接或间接地调用自身
B. 递归调用必须有一个明确的终止条件,否则会导致无限递归
C. 递归调用中,每次函数调用都会占用一定的栈空间
D. 递归调用总是比非递归调用更高效
正确答案:D
解析:在C语言中,递归调用是指函数直接或间接地调用自身,且必须有一个明确的终止条件来防止无限递归。每次递归调用时,都会占用一定的栈空间来保存函数的状态。然而,递归调用并不总是比非递归调用更高效。在某些情况下,递归调用可能会导致额外的函数调用开销和栈空间使用,从而降低程序的效率。因此,选项D是错误的。
34.以下关于C语言中数组作为函数参数传递的描述,哪项是正确的?
A. 数组作为函数参数时,会传递整个数组的拷贝
B. 数组作为函数参数时,实际上传递的是数组的首地址
C. 数组作为函数参数时,无法修改数组的元素值
D. 数组作为函数参数时,必须明确指定数组的大小和类型
正确答案:B
解析:在C语言中,当数组作为函数参数传递时,实际上传递的是数组的首地址(即指向数组第一个元素的指针)。函数通过这个指针来间接访问数组的元素,并可以修改数组的元素值。由于传递的是指针而不是整个数组的拷贝,所以效率较高。在函数声明中,通常需要指定数组的类型,但不一定需要明确指定数组的大小(除非是通过指针数组或多维数组的方式传递)。因此,选项B是正确的。
35.在C语言中,关于内部函数(也称为静态函数)和外部函数的描述,以下哪项是错误的?
A. 内部函数只能在定义它的文件中被调用
B. 外部函数可以被其他文件中的函数调用
C. 内部函数的作用域被限制在定义它的文件内部
D. 外部函数需要使用static关键字来声明
正确答案:D
解析:在C语言中,内部函数(也称为静态函数)是在文件内部定义的函数,其作用域被限制在定义它的文件内部,即它只能在定义它的文件中被调用。外部函数是可以被其他文件中的函数调用的函数。然而,外部函数并不需要使用static关键字来声明,而是使用默认的或extern关键字来声明。static关键字用于声明内部函数或静态变量,以限制它们的作用域。因此,选项D是错误的。
36.在C语言中,关于函数的返回值,以下哪项描述是正确的?
A. 所有函数都必须有返回值
B. 函数的返回值类型必须与函数体内返回的值类型一致
C. 没有返回值的函数应定义为void类型
D. 函数的返回值可以通过函数名直接获取
正确答案:C
解析:在C语言中,并不是所有函数都必须有返回值。没有返回值的函数应该定义为void类型,表示该函数不返回任何值。对于有返回值的函数,其返回值类型必须与函数体内通过return语句返回的值类型一致。函数的返回值是通过函数调用获取的,而不是通过函数名直接获取。因此,选项C是正确的。
37.以下关于C语言中局部变量和全局变量的存储类别的描述,哪项是错误的?
A. 局部变量通常存储在栈区,其存储空间在函数调用时分配,在函数调用结束后释放
B. 全局变量存储在静态存储区,程序执行期间始终存在
C. 局部变量可以使用static关键字来延长其生存期至程序执行结束
D. 全局变量不能使用static关键字来声明
正确答案:D
解析:在C语言中,局部变量通常存储在栈区,其存储空间在函数调用时分配,在函数调用结束后释放。全局变量存储在静态存储区,程序执行期间始终存在。局部变量可以使用static关键字来声明为静态局部变量,从而延长其生存期至程序执行结束。同样地,全局变量也可以使用static关键字来声明,表示该全局变量的作用域仅限于定义它的文件内部。因此,选项D是错误的。
38.在C语言中,关于数组作为函数参数传递时,以下哪项描述是错误的?
A. 数组名作为函数参数时,传递的是数组的首地址
B. 数组作为函数参数时,可以在函数内部修改数组的元素值
C. 数组作为函数参数时,会传递整个数组的拷贝给函数
D. 可以通过指针数组来传递多个数组给函数
正确答案:C
解析:在C语言中,当数组作为函数参数传递时,实际上传递的是数组的首地址(即指向数组第一个元素的指针),而不是整个数组的拷贝。这样可以提高程序的效率,因为不需要复制整个数组。函数通过这个指针来间接访问数组的元素,并可以修改数组的元素值。此外,可以通过指针数组来传递多个数组给函数。因此,选项C是错误的。
39.以下关于C语言中内部函数和外部函数的描述,哪项是正确的?
A. 内部函数可以被其他文件中的函数调用
B. 外部函数的作用域被限制在定义它的文件内部
C. 内部函数只能在定义它的文件中被调用
D. 外部函数需要使用static关键字来声明
正确答案:C
解析:在C语言中,内部函数(也称为静态函数)是在文件内部定义的函数,其作用域被限制在定义它的文件内部,即它只能在定义它的文件中被调用。外部函数是可以被其他文件中的函数调用的函数,其作用域是整个程序。外部函数不需要使用static关键字来声明,而是使用默认的或extern关键字来声明。因此,选项C是正确的。
40.在C语言中,关于函数的嵌套调用和递归调用,以下哪项描述是错误的?
A. 嵌套调用是指一个函数内部可以调用另一个函数
B. 递归调用是指函数直接或间接地调用自身
C. 嵌套调用和递归调用都会增加程序的复杂性,但递归调用更容易导致栈溢出
D. 嵌套调用和递归调用在功能上没有任何区别,只是实现方式不同
正确答案:D
解析:在C语言中,嵌套调用是指一个函数内部可以调用另一个函数,这是实现模块化程序设计的常用手段。递归调用是指函数直接或间接地调用自身,通常用于解决需要迭代或递归的问题。虽然嵌套调用和递归调用都会增加程序的复杂性,但它们在功能上有明显的区别。嵌套调用可以实现函数之间的协作,而递归调用则通常用于解决特定类型的问题(如斐波那契数列、树的遍历等)。此外,递归调用更容易导致栈溢出,因为每次递归调用都会占用一定的栈空间。因此,选项D是错误的。
下载地址
同类推荐
第10章试卷《C程序设计》谭浩强主编教材-清华大学出版社-2017年8月第五版-ISBN:978-7-302-48144-7-章节练习题库
加入收藏第9章试卷《C程序设计》谭浩强主编教材-清华大学出版社-2017年8月第五版-ISBN:978-7-302-48144-7-章节练习题库
加入收藏第8章试卷《C程序设计》谭浩强主编教材-清华大学出版社-2017年8月第五版-ISBN:978-7-302-48144-7-章节练习题库
加入收藏第6章试卷《C程序设计》谭浩强主编教材-清华大学出版社-2017年8月第五版-ISBN:978-7-302-48144-7-章节练习题库
加入收藏第5章试卷《C程序设计》谭浩强主编教材-清华大学出版社-2017年8月第五版-ISBN:978-7-302-48144-7-章节练习题库
加入收藏第4章试卷《C程序设计》谭浩强主编教材-清华大学出版社-2017年8月第五版-ISBN:978-7-302-48144-7-章节练习题库
加入收藏第3章试卷《C程序设计》谭浩强主编教材-清华大学出版社-2017年8月第五版-ISBN:978-7-302-48144-7-章节练习题库
加入收藏第2章试卷《C程序设计》谭浩强主编教材-清华大学出版社-2017年8月第五版-ISBN:978-7-302-48144-7-章节练习题库
加入收藏第1章试卷《C程序设计》谭浩强主编教材-清华大学出版社-2017年8月第五版-ISBN:978-7-302-48144-7-章节练习题库
加入收藏