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

下载本文档

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

文档简介

C语言笔试真题(含详细答案解析)说明:本套试题适配初学、校招基础笔试场景,涵盖语法、指针、数组、函数、结构体、程序逻辑等核心考点,题型贴合企业真实笔试,答案解析通俗详细,无冗余话术。满分:100分考试时长:90分钟一、单项选择题(共15题,每题2分,共30分)1.以下不属于C语言基本数据类型的是()A.intB.floatC.stringD.char答案:C解析:C语言基础数据类型包含整型int、浮点型float/double、字符型char;string是C++、Java等语言的字符串类型,C语言无原生string类型,C语言字符串依靠字符数组实现。2.在C语言中,定义常量的关键字是()A.defineB.constC.staticD.extern答案:B解析:const用于定义只读常量;define是预处理宏定义,不属于变量常量定义关键字;static是静态修饰符,extern是外部变量声明修饰符。3.已知inta=5;执行a+=a-=a*a;后a的值为()A.-15B.-40C.0D.-20答案:B解析:赋值运算符从右往左运算。第一步:a*a=25;第二步:a=a-25=5-25=-20;第三步:a=a+(-20)=-20-20=-40。4.以下关于指针的说法,正确的是()A.指针变量可以直接赋值整数B.空指针指向内存0地址C.指针没有数据类型D.野指针是初始化后的指针答案:B解析:指针变量不能直接赋值整数,必须赋值地址;指针有类型,决定解引用时读取的字节数;野指针是未初始化、指向随机内存的指针;空指针NULL默认指向内存0地址,是合法的空地址标识。5.数组intarr[3][4];该数组占用的内存字节数是()(int占4字节)A.12B.24C.48D.36答案:C解析:数组总元素数=3*4=12个,单个int占4字节,总字节数=12*4=48。6.C语言中函数返回值类型默认是()A.voidB.intC.charD.float答案:B解析:C语言旧标准中,函数未指定返回值类型时,默认默认为int整型;新标准C99及以后要求必须显式声明返回值类型。7.以下循环语句中,属于死循环的是()A.while(0){}B.for(;;){}C.do{}while(0);D.if(1){}答案:B解析:for循环三个表达式均可省略,默认循环条件恒为真,是典型死循环;while(0)、dowhile(0)仅执行0次或1次;if不是循环语句。8.结构体变量在内存中的对齐方式,默认是()A.1字节对齐B.成员最大字节对齐C.4字节对齐D.8字节对齐答案:B解析:结构体默认内存对齐规则:以结构体中占用字节最大的成员为对齐单位,提升内存访问效率。9.以下关键字中,不能用来修饰局部变量的是()A.staticB.externC.autoD.register答案:B解析:extern用于声明外部全局变量/函数,不用于定义局部变量;static可定义静态局部变量,auto是局部变量默认修饰符,register是寄存器局部变量。10.字符串charstr[]="abcde";sizeof(str)的结果是()A.5B.6C.7D.4答案:B解析:sizeof计算数组实际内存大小,字符串末尾默认隐藏结束符'\0',共计5个字符+1个结束符,总长度6。11.位运算中,将指定位清零的操作是()A.与运算&B.或运算|C.异或^D.取反~答案:A解析:与运算规则:0&任意数=0,1&任意数=任意数,可精准清零指定位;或运算用于置1,异或用于翻转位。12.全局变量和静态局部变量的存储位置是()A.栈区B.堆区C.静态常量区D.全局静态区答案:D解析:普通局部变量存栈区;malloc动态内存存堆区;全局变量、static静态变量存全局静态区。13.以下if语句写法,语法正确的是()A.if(a>b);B.if(a>b)thenC.ifa>bD.if(a>b){}答案:D解析:if语句条件必须带括号;A选项if后加分号,代表语句结束,无执行逻辑;C语言无then关键字;C选项缺少括号,语法错误。14.关于malloc函数,说法错误的是()A.申请堆区内存B.需要手动free释放C.申请的内存会自动初始化D.申请失败返回NULL答案:C解析:malloc申请的堆内存不会自动初始化,内存为随机脏值;calloc才会初始化内存为0。15.枚举类型enum的默认起始取值是()A.1B.0C.-1D.随机值答案:B解析:枚举常量默认从0开始依次递增,未手动赋值时,第一个枚举值为0,后续依次+1。二、填空题(共10空,每空2分,共20分)1.C语言中,单行注释符号是______,多行注释起始符号是______。答案://、/*2.指针变量p指向数组首元素,p++代表______。答案:指针向后偏移一个数组元素的字节大小3.函数递归调用的两个必要条件:______、______。答案:递归终止条件、递归递推公式(自身调用)4.int*p=NULL;对p进行解引用*p会导致______错误。答案:段错误(内存访问非法)5.预处理指令以______符号开头。答案:#6.变量的四大特性:作用域、______、存储类型、______。答案:生命周期、链接属性7.二维数组arr[m][n]中,arr[i][j]的等价指针写法是______。答案:*(*(arr+i)+j)三、程序阅读题(共3题,每题6分,共18分)1.写出以下程序运行结果PlainText

#include<stdio.h>

intmain()

{

inti,s=0;

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

{

if(i%2==0)

continue;

s+=i;

}

printf("%d",s);

return0;

}答案:4解析:循环遍历1-4,偶数触发continue跳过累加,仅累加奇数1、3,1+3=4。2.写出以下程序运行结果PlainText

#include<stdio.h>

voidswap(inta,intb)

{

intt=a;

a=b;

b=t;

}

intmain()

{

intx=10,y=20;

swap(x,y);

printf("%d%d",x,y);

return0;

}答案:1020解析:函数传参为值传递,仅交换形参的值,不会影响主函数实参,原值不变。如需交换实参,需传递指针。3.写出以下程序运行结果PlainText

#include<stdio.h>

intmain()

{

charstr[]="hello";

char*p=str;

printf("%d%d",sizeof(str),sizeof(p));

return0;

}答案:64(32位系统)/68(64位系统)解析:sizeof(str)计算数组总长度,含'\0'共6字节;sizeof(p)计算指针变量本身大小,32位系统指针占4字节,64位占8字节。四、简答题(共2题,每题6分,共12分)1.简述栈区、堆区、全局静态区的区别?答案解析:1.栈区:存放普通局部变量、函数参数、函数返回地址;由系统自动分配释放,空间小、速度快,超出作用域自动销毁;2.堆区:存放malloc/calloc动态申请的内存;由程序员手动申请、手动free释放,空间大、速度慢,不主动释放会造成内存泄漏;3.全局静态区:存放全局变量、static静态变量;程序启动分配内存,程序结束后释放,生命周期贯穿整个程序运行过程。2.简述指针和数组名的区别?答案解析:1.数组名是数组首地址的常量地址,不能进行自增、赋值等修改操作;指针是变量,可以随意修改指向;2.sizeof(数组名)计算整个数组的内存大小,sizeof(指针)仅计算指针变量本身大小;3.数组名指向的内存空间固定,指针的指向可以随时变更。五、编程大题(共2题,每题10分,共20分)1.编写C语言程序,实现输入一个整数,判断该数是否为素数(质数)。参考答案代码:PlainText

#include<stdio.h>

#include<math.h>

intmain()

{

intn,i,flag=1;

scanf("%d",&n);

//小于2的数不是素数

if(n<2)

{

flag=0;

}

//遍历2到根号n,判断是否能被整除

for(i=2;i<=sqrt(n);i++)

{

if(n%i==0)

{

flag=0;

break;

}

}

if(flag==1)

printf("%d是素数\n",n);

else

printf("%d不是素数\n",n);

return0;

}思路解析:素数定义为大于1,且除了1和自身外无其他因数的数。只需遍历2到根号n,若存在能整除的数则不是素数,优化循环次数提升效率。2.编写程序,实现数组冒泡排序,对整型数组从小到大排序。参考答案代码:PlainText

#include<stdio.h>

//冒泡排序函数

voidbubbleSort(intarr[],intn)

{

inti,j,temp;

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

{

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

{

//前数大于后数则交换,升序排序

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

{

temp=arr[j];

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

arr[j+1]=temp;

}

}

}

}

intmain()

{

intarr[5]={9,3,5,1,7};

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

bubbleSort(arr,len);

//输出排序后数组

for(inti=0;i<le

温馨提示

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

评论

0/150

提交评论