还剩6页未读,继续阅读
文本内容:
中软c语言面试题及参考答案
一、选择题(共15题,每题2分,共30分)
1.以下关于C语言数据类型的描述,错误的是?A.int类型在32位系统中通常占4字节B.float类型的精度比double高C.char类型可以存储一个字符或ASCII码值D.void类型表示无类型,通常用于函数返回值或指针
2.以下哪个不是C语言的关键字?A.auto B.struct C.typedef D.string
3.执行以下代码后,变量a的值是?int a=3;if a2a++;else a--;printf%d,a;A.2B.3C.4D.
54.表达式10/3+10%3的结果是?A.3B.4C.5D.
65.C语言中,以下哪个循环结构在执行前会先判断条件?A.do-while B.while C.for D.switch
6.关于指针的描述,正确的是?A.指针变量可以直接进行加减整数运算B.指针变量不可以进行比较运算C.void*类型的指针可以直接赋值给任意类型的指针,无需强制类型转换D.32位系统中,指针变量的大小是8字节
7.以下代码的输出结果是?int x=10;int*p=x;*p=20;printf%d,x;第1页共8页A.10B.20C.不确定D.编译错误
8.C语言中,以下哪个函数不能用于动态内存分配?A.malloc B.calloc C.realloc D.free
9.C语言中,字符串的结束标志是?A.\0B.0C.空格D.NULL
10.以下代码的输出结果是?int arr[]={1,2,3,4,5};int*p=arr;printf%d,*p+2;A.1B.2C.3D.
511.C语言中,函数的默认存储类别是?A.auto B.static C.extern D.register
12.关于数组的描述,正确的是?A.数组的大小在定义时必须是常量表达式B.数组元素的类型可以不同C.数组名作为函数参数时不会退化为指针D.数组可以直接进行赋值操作(如arr1=arr2)
13.以下代码的输出结果是?int a=1,b=2;a=a+++b++;printf%d,a;A.3B.4C.5D.
614.以下代码的输出结果是?int i=0;while i3{printf%d,i;i++;}A.012B.000C.123D.
21015.以下代码的输出结果是?int x=3;if x2x++;else x--;printf%d,x;A.2B.3C.4D.5
二、填空题(共15题,每题2分,共30分)第2页共8页
1.在C语言中,变量的存储类别包括auto、static、extern和______
2.表达式10/3+10%3的结果是______
3.C语言中,______函数用于计算字符串的长度,其原型在头文件______中声明
4.以下代码中,变量a的最终值是______int a=5;a+=a-=a*2;
5.数组int arr
[5]={1,2,3};则arr
[3]的值是______,arr
[4]的值是______
6.指针变量p指向一个int类型的变量x,则*x表示______,p+1表示______
7.C语言中,函数调用时,若参数为数组名,传递给函数的是______,这种传递方式称为______
8.以下代码的输出结果是______int i=0;while i3{printf%d,i;i++;}
9.结构体struct Student{char name
[20];int age;}stu;则访问结构体变量stu的age成员的方式是______
10.C语言中,______语句用于提前结束循环,______语句用于跳过当前循环的剩余部分,进入下一次循环
11.变量int p;p=intmalloc10*sizeofint;该语句的作用是______
12.以下代码中,变量a和b的最终值分别是______和______int a=1,b=2;a=b;b=a;
13.字符串Hello在内存中存储时,需要______个字节,其中一个字节是______第3页共8页
14.C语言中,______关键字用于定义常量,______关键字用于定义枚举类型
15.函数funint x{return x0x+funx-1:0;}调用fun3的返回值是______
三、分析代码输出题(共5题,每题4分,共20分)
1.以下代码的输出结果是?#include stdio.hvoid funcint x{x=x+10;}int main{int a=5;funca;printf%d,a;return0;}
2.以下代码的输出结果是?#include stdio.hint main{int arr[]={1,2,3,4};int*p=arr+2;printf%d,*p+1;return0;}
3.以下代码的输出结果是?#include stdio.hint main{int a=10,b=20;int*p=a,*q=b;p=q;printf%d%d,*p,*q;return0;}
4.以下代码的输出结果是?#include stdio.hint main{int i,sum=0;for i=1;i=3;i++{sum+=i;}printfsum=%d,sum;return0;}
5.以下代码的输出结果是?#include stdio.hvoid swapint*a,int*b{int temp=*a;*a=*b;*b=temp;}第4页共8页int main{int x=3,y=5;swapx,y;printf%d%d,x,y;return0;}
四、简答题(共5题,每题8分,共40分)
1.请简述C语言中数组和字符串的区别,并说明如何正确比较两个字符串和复制字符串
2.什么是指针?简述指针与数组的关系,以及数组名作为函数参数时的传递方式
3.解释C语言中的动态内存分配函数malloc、calloc、realloc的作用,并说明free函数的作用及注意事项
4.请说明C语言中的static关键字在不同场景下的作用(至少列举3种场景)
5.什么是函数的参数传递?C语言中参数传递有哪两种主要方式?请举例说明它们的区别
五、编程题(共3题,每题10分,共30分)
1.编写一个函数,统计字符串中字符(空格)的个数并返回函数原型int count_spaceconst char*str;
2.编写一个函数,将一个整数数组中的元素逆序排列,要求在原数组上操作,不使用额外数组函数原型void reverse_arrayintarr[],int len;
2.编写一个函数,判断一个字符串是否为回文(正读和反读都一样)函数原型int is_palindromeconst char*str;
六、改错题(共3题,每题5分,共15分)
1.以下代码的功能是计算1到10的和,但存在错误,请找出并改正#include stdio.h第5页共8页int main{int sum=0,i=1;for i=1;i10;i++sum+=i;printfsum=%d,sum;return;}
2.以下代码尝试交换两个整数a和b的值,但函数调用错误,请找出并改正#include stdio.hvoid swapint a,int b{int temp=a;a=b;b=temp;}int main{int x=3,y=5;swapx,y;printf%d%d,x,y;return0;}
3.以下代码试图通过指针修改变量的值,但存在错误,请找出并改正#include stdio.hint main{int x=5;int*p;*p=x;printf%d,*p;return0;}参考答案汇总
一、选择题
1.B
2.D
3.C
4.B
5.B
2.A
7.D
8.D
9.A
10.C
3.C
12.A
13.A
14.A
15.C
二、填空题
1.register
2.
43.strlen,string.h
4.-
105.0,
02.变量x的值,指针p所指向的下一个int类型变量的地址
7.数组首地址,地址传递
8.
0129.stu.age
10.break,continue
3.动态分配10个int类型大小的连续内存空间,并将首地址赋给指针p
12.2,
213.6,\
014.const,enum
15.6
三、分析代码输出题第6页共8页
1.
52.
43.
20204.sum=
65.53
四、简答题
1.数组是相同数据类型元素的集合,字符串是由字符组成的序列(以\0结尾)比较字符串用strcmp函数,复制用strcpy函数
2.指针是存储变量地址的变量;指针与数组的关系数组名是数组首元素地址,可通过指针偏移访问数组元素;数组名作为函数参数时退化为指向首元素的指针(地址传递)
3.mallocn分配n字节连续空间;callocn,size分配n个size字节空间并初始化为0;reallocp,new_size调整p指向的内存大小freep释放p指向的内存,注意不可重复释放,释放后需置NULL1局部变量延长生命周期,仅初始化一次;2全局变量/函数限制作用域,仅当前文件可见;3结构体成员所有实例共享该成员
4.参数传递是将实参值传给形参的过程两种方式传值传递(形参为副本,修改不影响实参)和传址传递(形参为指针,修改指向值影响实参)例如void func1inta{a++;}void func2int*a{*a++;}main中int x=3;func1x;x=3;func2x;x=4
五、编程题
1.int count_spaceconst char*str{int count=;while*str!=\0{if*str==count++;str++;}returncount;}
2.void reverse_arrayint arr[],int len{int i,temp;fori=0;ilen/2;i++{temp=arr[i];arr[i]=arr[len-1-i];arr[len-1-i]=temp;}}
3.int is_palindromeconst char*str{int len=0,i;charp=charstr;while*p!=\0{len++;p++;}for i=0;第7页共8页ilen/2;i++{if str[i]!=str[len-1-i]return0;}return1;}
六、改错题
1.错误循环条件i10(应i=10),return后缺少分号改正for i=1;i=10;i++{...}return0;
2.错误swap函数参数为传值传递,无法交换实参改正voidswapint*a,int*b{int temp=*a;*a=*b;*b=temp;}main中swapx,y;
3.错误指针p未初始化,指向随机地址改正intx=5;intp=x;或p=intmallocsizeofint;*p=x;第8页共8页。
个人认证
优秀文档
获得点赞 0