- 2
- 0
- 约3.34万字
- 约 46页
- 2026-01-31 发布于江苏
- 举报
2026年c语言考试题库100道
第一部分单选题(100题)
1、若有定义inta[5]={1,2,3,4,5};则以下表达式中与a[2]等价的是?
A.*(a+2)
B.*a+2
C.a[2]
D.a+2
【答案】:A
解析:本题考察数组与指针的关系。数组名a是数组首地址的常量指针,a[2]等价于*(a+2)(指针偏移后解引用)。A选项:*(a+2)直接解引用数组首地址偏移2个int类型后的元素,即a[2]的值,描述正确;B选项:*a+2等价于a[0]+2=1+2=3,仅数值巧合与a[2](值为3)相同,但表达式逻辑不同;C选项:a[2]是a[2]的地址,而非值;D选项:a+2是数组首地址偏移2个int类型后的地址,非a[2]的值。正确答案为A。
2、当一个一维数组作为函数参数传递给函数后,在该函数内部,以下说法错误的是?
A.数组名会退化为指向数组首元素的指针
B.仍可以使用sizeof运算符获取数组的总长度
C.可以通过数组下标修改原数组中的元素
D.函数内部可以通过数组名直接访问数组元素
【答案】:B
解析:本题考察数组参数传递特性。A正确,数组名作为参数传递时会退化为指向首元素的指针;B错误,函数内数组名退化为指针,sizeof(数组名)返回指针大小而非原数组长度;C正确,通过指针(数组名)可修改原数组元素;D正确,数组名退化为指针后仍可通过下标(如arr[0])访问元素。
3、若有函数`voidfunc(intarr[])`,调用`func(a)`(其中`a`是长度为10的整型数组),在函数内部执行`sizeof(arr)`的结果是?
A.10(数组元素个数)
B.40(数组总字节数,假设int为4字节)
C.指针变量的大小(通常为4或8字节)
D.编译错误
【答案】:C
解析:本题考察数组名作为函数参数的特性,正确答案为C。数组名作为函数参数时会退化为指向数组首元素的指针,此时`sizeof(arr)`计算的是指针变量的大小(而非数组大小),其值取决于系统位数(32位系统通常为4字节,64位为8字节);A选项错误,`sizeof`无法获取数组元素个数;B选项错误,数组总字节数需通过`sizeof(a)/sizeof(a[0])`计算;D选项错误,函数参数传递数组名合法。
4、以下关于递归函数的描述,正确的是?
A.递归函数必须有一个非递归终止条件,否则会导致栈溢出
B.递归函数的参数传递是值传递,因此每次递归调用都会复制所有参数
C.递归函数的返回值只能是int类型
D.递归函数的执行效率总是高于非递归实现
【答案】:A
解析:A正确,递归函数通过不断调用自身缩小问题规模,必须有终止条件(如if语句或switch-case),否则无限递归会导致栈空间耗尽,最终崩溃。B错误,递归参数传递是值传递,但“复制所有参数”不准确:若参数是大结构体,复制确实开销大,但这不是递归必须的特性。C错误,递归函数返回值类型无限制,可返回任意类型(如float、结构体、指针等)。D错误,递归存在重复计算(如斐波那契数列递归实现),且函数调用本身有栈开销,通常效率低于优化后的非递归实现。
5、以下关于数组作为函数参数传递的说法,正确的是?
A.数组作为函数参数时,是值传递,函数内修改不会影响原数组
B.数组作为函数参数时,是地址传递,函数内修改会影响原数组
C.数组作为函数参数时,是否影响原数组取决于数组长度
D.数组作为函数参数时,必须先定义为全局数组才能修改原数组
【答案】:B
解析:本题考察数组作为函数参数的传递特性。数组名在传递给函数时会退化为指向首元素的指针(地址传递),而非值传递(A错误)。因此函数内对数组元素的修改会直接影响原数组(B正确)。C错误,数组长度不影响传递方式;D错误,数组无论局部或全局,作为参数传递均为地址传递。
6、关于C语言函数参数传递的描述,正确的是?
A.函数参数传递时,实参的值会复制一份传给形参,修改形参不影响实参(值传递)
B.函数参数传递时,形参是实参的引用,修改形参会直接修改实参(引用传递)
C.C语言中所有参数都是按引用传递的,通过指针可修改实参
D.数组作为函数参数时,是按值传递的,即传递数组的整个拷贝
【答案】:A
解析:本题考察函数参数传递机制。C语言仅支持值传递,实参值复制给形参,修改形参不影响实参,因此A正确。B错误,C语言无引用传递,形参是实参的副本。C错误,C语言所有参数均为值传递,指针传递本质是传递地址值。D错误,数组作为参数传递的是首地址,而非整个数组拷贝。
7、以下代码运行后输出的结果是?
voidprintSize(intarr[]){
原创力文档

文档评论(0)