C语言面试笔试题(含详细答案解析)_第1页
C语言面试笔试题(含详细答案解析)_第2页
C语言面试笔试题(含详细答案解析)_第3页
C语言面试笔试题(含详细答案解析)_第4页
C语言面试笔试题(含详细答案解析)_第5页
已阅读5页,还剩2页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C语言面试笔试题(含详细答案解析)适用场景:初级开发、嵌入式开发、后端开发校招/社招面试笔试考试时长:60分钟满分:100分说明:题目均为企业高频真题,覆盖基础语法、指针、数组、结构体、内存、预处理、程序逻辑等核心考点一、单项选择题(共10题,每题3分,共30分)1、以下关于C语言变量定义的说法,正确的是()A、变量可以先使用后定义B、变量名可以以数字开头C、变量必须先定义后使用D、关键字可以作为变量名2、sizeof(int)在32位操作系统下的结果是()A、1B、2C、4D、83、以下运算符中,优先级最高的是()A、++B、+C、&&D、=4、定义数组inta[5];以下说法错误的是()A、数组下标范围是0~4B、数组总共包含5个元素C、a[5]是合法的数组元素D、数组名a代表数组首元素地址5、指针变量char*p;该指针变量的sizeof大小为(32位系统)()A、1B、4C、8D、不确定6、以下关于static关键字的说法,错误的是()A、static修饰局部变量,变量生命周期延长至程序结束B、static修饰全局变量,仅当前文件可访问C、static修饰的变量,默认初始值为0D、static可以修饰函数形参7、字符串charstr[]="abcde";sizeof(str)的结果是()A、5B、6C、7D、不确定8、全局变量和局部变量的区别,说法正确的是()A、局部变量存放在全局数据区B、全局变量生命周期随函数结束而销毁C、全局变量默认初始值为0,局部变量无默认初始值D、局部变量可以跨文件访问9、以下哪个不是C语言合法的循环语句()A、forB、whileC、do-whileD、loop10、malloc函数的作用是()A、释放堆区内存B、在堆区动态分配内存C、在栈区分配内存D、初始化内存空间二、填空题(共5题,每题4分,共20分)1、C语言中,程序入口函数是________。2、指针变量本质是存放________的变量。3、结构体属于C语言________类型,不占用固定内存空间,需自定义结构。4、free函数用于释放________内存,不能释放栈区内存。5、#define属于C语言________指令,在预处理阶段执行。三、程序改错题(共2题,每题8分,共16分)找出以下代码中的错误,说明原因并修改正确。1、交换两个整数变量的值PlainText

voidswap(inta,intb)

{

inttemp=a;

a=b;

b=temp;

}

intmain()

{

intx=10,y=20;

swap(x,y);

return0;

}2、动态内存分配代码PlainText

intmain()

{

int*p=malloc(4);

*p=100;

free(p);

free(p);

return0;

}四、编程题(共2题,每题12分,共24分)1、编写C语言程序,实现求1~100之间所有偶数的和。2、编写函数,实现字符串反转(不使用库函数),例如输入"abc123",输出"321cba"。五、简答题(共1题,10分)简述C语言中栈内存和堆内存的区别(从分配方式、生命周期、大小、管理方式四个维度说明)。参考答案及详细解析一、单项选择题答案1、C解析:C语言强制要求变量先定义后使用;变量名不能数字开头、不能使用关键字,ABD错误。2、C解析:32位系统下int类型固定占4字节,64位系统中int仍为4字节,long为8字节。3、A解析:运算符优先级:自增运算符>算术运算符>逻辑运算符>赋值运算符。4、C解析:数组a[5]下标为0-4,a[5]属于数组越界,是非法访问,会造成内存脏数据、程序崩溃等问题。5、B解析:32位系统下所有指针变量统一占4字节,64位系统占8字节,与指针指向的数据类型无关。6、D解析:static关键字不能修饰函数形参,形参存储在栈区,随函数调用创建销毁,static修饰无意义且语法报错。7、B解析:字符串默认末尾隐藏结束符'\0',sizeof会统计结束符,5个有效字符+1个结束符,总共6字节。8、C解析:全局变量存放在全局数据区,程序运行全程有效;局部变量存放在栈区,函数结束销毁,无默认初始化值。9、D解析:C语言标准循环语句仅for、while、do-while三种,loop不属于C语言关键字。10、B解析:malloc是标准库函数,用于在堆区手动分配指定大小内存;free用于释放堆内存。二、填空题答案1、main2、内存地址3、自定义构造4、堆区5、预处理三、程序改错题答案第一题错误原因:函数传参为值传递,swap函数内部修改的只是形参的值,不会影响主函数实参,无法实现交换效果。修改方案:改为指针传参,通过地址修改原始变量值。PlainText

voidswap(int*a,int*b)

{

inttemp=*a;

*a=*b;

*b=temp;

}

intmain()

{

intx=10,y=20;

swap(&x,&y);

return0;

}第二题错误原因:对同一块堆内存重复释放(二次free),会导致程序内存错乱、崩溃,是典型的内存操作错误;同时malloc分配后未做空指针判断。修改方案:仅释放一次内存,增加空指针校验。PlainText

#include<stdlib.h>

intmain()

{

int*p=malloc(4);

if(p==NULL)//判空,避免分配失败

{

return-1;

}

*p=100;

free(p);

p=NULL;//释放后置空,避免野指针

return0;

}四、编程题答案第一题:1~100偶数求和PlainText

#include<stdio.h>

intmain()

{

inti,sum=0;

//遍历1-100所有数字

for(i=1;i<=100;i++)

{

//判断是否为偶数

if(i%2==0)

{

sum+=i;

}

}

printf("1~100偶数和为:%d\n",sum);

return0;

}运行结果:1~100偶数和为2550第二题:字符串反转(无库函数)PlainText

#include<stdio.h>

//字符串反转函数

voidstrReverse(char*str)

{

//计算字符串长度

intlen=0;

while(str[len]!='\0')

{

len++;

}

//首尾交换字符

inti,j;

chartemp;

for(i=0,j=len-1;i<j;i++,j--)

{

temp=str[i];

str[i]=str[j];

str[j]=temp;

}

}

intmain()

{

charbuf[100]="abc123";

strReverse(buf);

printf("反转后字符串:%s\n",buf);

return0;

}运行结果:反转后字符串:321cba五、简答题答案1、分配方式:栈内存由系统自动分配,定义局部变量、函数形参时自动开辟空间;堆内存需要程序员手动调用malloc、calloc等函数手动分配。2、生命周期:栈内存随函数调用创建,函数执行结束后系统自动释放;堆内存从手动分配开始,直到手动调用free释放或程序结束才销毁。3、内存大小:栈空间固定且较小,由系统预设,超出会出现栈溢出;堆

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论