- 2
- 0
- 约3.27万字
- 约 45页
- 2026-01-31 发布于山东
- 举报
2026年c语言考试题库100道
第一部分单选题(100题)
1、已知intarr[5]={10,20,30,40,50};int*p=arr;执行p+=2;此时指针p指向的数组元素是?
A.arr[0]
B.arr[2]
C.arr[3]
D.arr[5]
【答案】:B
解析:数组名arr是数组首元素地址(等价于arr[0]),指针p初始指向arr[0]。执行p+=2后,指针偏移了2个int类型的大小(假设int占4字节,则地址偏移8字节),因此指向arr[2]。A是初始位置;C是p+=3的结果;D越界,arr的最大有效索引为4。
2、以下关于C语言函数参数传递方式的描述,正确的是?
A.值传递时,函数内对形参的修改会影响实参的值
B.指针传递时,函数内对形参指针指向的变量的修改会影响实参的值
C.数组名作为函数参数时,传递的是整个数组的完整拷贝
D.C语言中支持引用传递,引用参数可直接修改实参
【答案】:B
解析:A错误,值传递是实参值的拷贝给形参,函数内修改形参不会影响实参。B正确,指针传递时,形参是实参指针的拷贝,修改*形参即修改实参指向的值。C错误,数组名作为参数退化为指针,传递的是首元素地址,而非整个数组的拷贝(效率极低)。D错误,C语言不支持引用传递(引用是C++特性),仅支持值传递和指针传递。
3、以下函数中,能正确交换两个整数变量值的是?
A.voidswap(inta,intb){inttemp=a;a=b;b=temp;}
B.voidswap(int*a,int*b){inttemp=*a;*a=*b;*b=temp;}
C.voidswap(inta,intb){inttemp=a;a=b;b=temp;}
D.voidswap(inta[],intb[]){inttemp=a[0];a[0]=b[0];b[0]=temp;}
【答案】:B
解析:本题考察指针作为函数参数的作用。A选项为值传递,修改的是形参,无法影响实参;B选项通过指针传递实参地址,直接修改原变量值,可正确交换;C选项引用语法仅存在于C++,C语言不支持;D选项交换的是数组首元素,而非两个独立变量。正确答案为B。
4、以下关于数组作为函数参数传递的说法,正确的是?
A.数组作为函数参数时,是值传递,函数内修改不会影响原数组
B.数组作为函数参数时,是地址传递,函数内修改会影响原数组
C.数组作为函数参数时,是否影响原数组取决于数组长度
D.数组作为函数参数时,必须先定义为全局数组才能修改原数组
【答案】:B
解析:本题考察数组作为函数参数的传递特性。数组名在传递给函数时会退化为指向首元素的指针(地址传递),而非值传递(A错误)。因此函数内对数组元素的修改会直接影响原数组(B正确)。C错误,数组长度不影响传递方式;D错误,数组无论局部或全局,作为参数传递均为地址传递。
5、以下关于指针的说法,正确的是?
A.野指针是未初始化的指针,使用时可能导致未定义行为
B.空指针(NULL)不能进行任何指针运算
C.指针变量可以与浮点数直接比较
D.int*类型指针自增1时,地址增加1个字节
【答案】:A
解析:本题考察指针的基本概念。野指针因未初始化指向未知内存,使用时会导致未定义行为(如程序崩溃)(A正确)。B错误,空指针NULL可进行赋值、比较等运算(如p=NULL合法),但不能解引用(*NULL错误);C错误,指针应与同类型指针比较,与浮点数比较无意义;D错误,int*自增1的步长为4字节(假设int占4字节)。
6、执行以下代码后,变量c的类型和值是什么?
inta=5;
doubleb=3.14;
intc=a+b;
A.int类型,值为8.14
B.int类型,值为8
C.double类型,值为8.14
D.编译错误
【答案】:B
解析:本题考察C语言中的类型转换规则。当不同类型的变量参与算术运算时,会发生“算术转换”:int类型的a会被自动提升为double类型,与double类型的b相加,结果为double类型(值为8.14)。但由于变量c被定义为int类型,double类型的结果会被截断小数部分并转换为int类型,因此c的值为8(int类型)。选项A错误,因为int类型无法存储小数部分;选项C错误,变量c的类型是int而非double;选项D错误,代码无语法错误,类型转换合法但会发生精度丢失。
7、执行以下代码后,变量x的值为?intx=5;x=x+++
原创力文档

文档评论(0)