2026年C语言工程师公司笔试试题(含标准答案+详细解析)_第1页
2026年C语言工程师公司笔试试题(含标准答案+详细解析)_第2页
2026年C语言工程师公司笔试试题(含标准答案+详细解析)_第3页
2026年C语言工程师公司笔试试题(含标准答案+详细解析)_第4页
2026年C语言工程师公司笔试试题(含标准答案+详细解析)_第5页
已阅读5页,还剩4页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

2026年C语言工程师公司笔试试题(含标准答案+详细解析)适用岗位:嵌入式开发、后端开发、C/C++工程师、单片机开发考试时长:90分钟总分:100分题型分布:单选(20题)+判断(10题)+程序填空(2题)+程序改错(2题)+编程大题(2题)一、单项选择题(每题2分,共40分)每题仅有一个正确答案1.以下不属于C语言基本数据类型的是()A.intB.floatC.stringD.char2.在C语言中,sizeof(char)的值为()A.0B.1C.2D.43.下列关于局部变量和全局变量说法正确的是()A.局部变量默认初始值为0B.全局变量存储在栈区C.局部变量存储在栈区D.全局变量只能定义在函数内部4.指针变量int*p,则sizeof(p)在64位系统下结果为()A.2B.4C.8D.165.宏定义#defineN10关于宏的说法正确的是()A.N是变量,可以修改值B.宏替换发生在编译预处理阶段C.宏定义会做类型检查D.宏定义不能嵌套使用6.设有定义inta=2;a+=a-=a*a;,执行后a的值为()A.-4B.0C.-8D.47.C语言中,while(0)循环体执行次数为()A.0次B.1次C.无限次D.2次8.以下数组定义合法的是()A.intarr[];B.intarr[3]={1,2,3,4};C.intarr[2+3];D.intn=5;intarr[n];9.关于结构体说法错误的是()A.结构体可以嵌套定义B.结构体变量可以整体赋值C.结构体默认无内存对齐D.结构体可自定义复合数据类型10.char*s="hello";下列操作合法的是()A.s[0]='H';B.s++C.*s='a'D.s="world"11.函数内部static静态局部变量的特点是()A.每次调用函数都会重新初始化B.程序结束才释放内存C.存储在栈区D.作用域为整个工程12.以下关键字中,用于防止变量被修改的是()A.staticB.externC.constD.volatile13.递归函数必须包含的核心结构是()A.for循环B.递归终止条件C.static变量D.全局变量14.内存分配函数malloc所在头文件是()A.stdio.hB.stdlib.hC.string.hD.math.h15.下列关于volatile关键字作用正确的是()A.变量只读不可改B.禁止编译器优化,每次从内存读取C.变量常驻内存D.静态全局变量16.字符串"abc\n123"的实际长度为(不含结束符)()A.6B.7C.8D.917.位运算中,清零指定位数常用的操作是()A.与运算(&)B.或运算(|)C.异或(^)D.取反(~)18.函数形参intarr[]本质是()A.数组B.指针变量C.常量数组D.静态数组19.头文件#include<>和#include""的区别是()A.无区别B.<>先搜本地目录,""先搜系统目录C.<>搜系统目录,""先搜当前项目目录D.语法不同20.以下代码最终输出结果为()intx=1;if(3>2)x=2;elsex=3;printf("%d",x);A.1B.2C.3D.0二、判断题(每题1分,共10分)正确填√,错误填×1.C语言变量必须先定义后使用。()2.指针变量的类型决定了指针解引用时读取的字节数。()3.数组名是常量指针,不可以自增、自减。()4.static全局变量可以被其他文件访问。()5.switch语句括号内可以是浮点型变量。()6.空语句;在C语言中合法。()7.malloc分配的内存需要手动free,否则会造成内存泄漏。()8.字符串结束符'\0'会占用字符串内存空间。()9.函数嵌套定义在C语言中是允许的。()10.const修饰的变量绝对不能被修改。()三、程序填空题(每题5分,共10分)1.补充代码,实现字符串长度统计(不使用strlen函数)PlainText

intmy_strlen(char*s)

{

intlen=0;

while(_______)

{

len++;

s++;

}

returnlen;

}2.补充代码,实现交换两个整数的值(指针方式)PlainText

voidswap(int*a,int*b)

{

inttemp;

temp=_______;

*a=_______;

*b=temp;

}四、程序改错题(每题5分,共10分)找出代码中所有错误并修正,写出错误原因+正确代码1.下面代码存在多处错误,实现功能:输入字符串并打印PlainText

#include<stdio.h>

intmain()

{

char*str;

scanf("%s",str);

printf("%s",str);

return0;

}2.下面代码存在内存错误,实现动态数组赋值PlainText

#include<stdio.h>

#include<stdlib.h>

intmain()

{

int*p=malloc(4);

p[0]=10;

p[1]=20;

printf("%d",p[1]);

return0;

}五、编程大题(每题15分,共30分)1.基础编程:编写C语言程序,实现冒泡排序,对整型数组从小到大排序,要求封装排序函数、主函数测试。2.进阶编程:编写程序,实现字符串反转功能,输入任意字符串,输出反转后的字符串,禁止使用库函数。六、标准答案+超详细解析(一)单项选择题答案解析1.答案:C解析:C语言基础数据类型为int、char、float、double,无string字符串类型,字符串通过字符数组/字符指针实现。2.答案:B解析:char类型固定占用1字节,是C语言最小内存单元。3.答案:C解析:局部变量存储在栈区,无默认初始值;全局变量存储在静态区,默认初始值为0,定义在函数外部。4.答案:C解析:64位系统所有指针变量统一占用8字节,32位系统为4字节。5.答案:B解析:宏是预处理简单文本替换,无类型检查、不是变量、不可修改,预处理阶段执行。6.答案:C解析:赋值运算符从右向左运算,先算a*a=4,a-=4得a=-2,a+=-2最终a=-8。7.答案:A解析:while循环条件为真(非0)执行,0为假,循环执行0次。8.答案:C解析:A未初始化非法;B数组越界;D变量定义数组属于变长数组,标准C不支持;C常量表达式定义数组合法。9.答案:C解析:结构体默认存在内存对齐,提升CPU读取效率。10.答案:D解析:字符串常量存只读数据区,不能修改内容(A、C错);s是指针变量,可以重新赋值指向新字符串(D对),s++语法合法但会造成地址偏移,常规业务不使用。11.答案:B解析:static局部变量存储在静态区,只初始化一次,程序结束释放,作用域仍为当前函数。12.答案:C解析:const修饰变量为只读变量,禁止修改;volatile防止编译器优化。13.答案:B解析:递归必须设置终止条件,否则无限递归栈溢出。14.答案:B解析:malloc、free动态内存函数头文件为stdlib.h。15.答案:B解析:volatile强制变量每次从内存读取,禁止CPU缓存优化,多用于嵌入式寄存器变量。16.答案:A解析:\n为1个转义字符,有效字符为a、b、c、\n、1、2、3共7?修正:abc(3)+\n(1)+123(3)=7,标准答案:B17.答案:A解析:与运算可指定位清零,或运算置1,异或翻转。18.答案:B解析:函数数组形参本质降级为指针,sizeof(arr)得到指针大小。19.答案:C解析:<>优先搜索系统库目录,""优先搜索当前项目目录。20.答案:B解析:3>2条件成立,执行x=2,else不执行。(二)判断题答案解析1.√解析:C语言强类型语言,变量必须先定义后使用。2.√解析:指针类型决定解引用读取字节数,int*读4字节,char*读1字节。3.√解析:数组名是地址常量,不支持自增自减修改。4.×解析:static全局变量仅限当前文件内部使用,外部文件无法访问。5.×解析:switch表达式仅支持整型、字符型,不支持浮点型。6.√解析:单独分号为空语句,语法合法。7.√解析:堆区内存手动申请手动释放,不free造成内存泄漏。8.√解析:'\0'是字符串结束标志,占用1字节内存。9.×解析:C语言禁止函数嵌套定义,仅允许嵌套调用。10.×解析:const指针可通过其他地址修改指向内容,并非绝对不可修改。(三)程序填空题答案1.答案:*s!='\0'或*s解析:遍历字符串,遇到结束符停止计数。2.答案:*a、*b完整代码:PlainText

voidswap(int*a,int*b)

{

inttemp;

temp=*a;

*a=*b;

*b=temp;

}(四)程序改错题答案错题1解析错误1:char*str未分配内存,野指针,直接scanf写入会程序崩溃;修正:定义字符数组开辟内存charstr[100];正确代码:PlainText

#include<stdio.h>

intmain()

{

charstr[100];

scanf("%s",str);

printf("%s",str);

return0;

}错题2解析错误1:malloc仅申请4字节,只能存放1个int,访问p[1]越界;错误2:malloc返回值未强制转换,未判断空指针;修正:申请2个int空间malloc(2*sizeof(int))正确代码:PlainText

#include<stdio.h>

#include<stdlib.h>

intmain()

{

int*p=(int*)malloc(2*sizeof(int));

if(p==NULL)return1;

p[0]=10;

p[1]=20;

printf("%d",p[1]);

free(p);

p=NULL;

return0;

}(五)编程大题标准答案1.冒泡排序完整代码PlainText

#include<stdio.h>

//冒泡排序:从小到大

voidbubble_sort(intarr[],intn)

{

inti,j;

for(i=0;i<n-1;i++)

{

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

{

if(arr[j]>arr[j+1])

{

inttemp=arr[j];

arr[j]=arr[j+1];

arr[j+1]=temp;

}

}

}

}

intmain()

{

intarr[6]={5,2,9,1,5,6};

intlen=sizeof(arr)/sizeof(arr[0]);

bubble_sort(arr,len);

//遍历打印

for(inti=0;i<len;i++)

{

printf("%d",arr[i]);

}

return0;

}2.字符串反转完整代码(无库函数)PlainText

#include<stdio.h>

//手动求字符串长度

intget_len(char*s)

{

intlen=0;

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

{

len++;

}

returnlen;

}

//字符串反转

voidstr_rev(char*s)

{

温馨提示

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

评论

0/150

提交评论