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

下载本文档

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

文档简介

C语言经典笔试真题(含详细答案解析)说明:本套试题为企业通用C语言笔试题型,涵盖基础语法、指针、数组、函数、结构体、内存、逻辑运算等核心考点,题型贴合真实招聘笔试,答案解析通俗易懂,适合求职刷题、基础考核。满分:100分考试时长:60分钟一、单项选择题(共10题,每题3分,共30分)1、以下不属于C语言基本数据类型的是()A、intB、floatC、stringD、char答案:C详细解析:C语言标准基本数据类型为整型int、浮点型float/double、字符型char,没有string字符串类型。字符串是通过字符数组或字符指针实现的,不属于基础原生数据类型。2、已知inta=5;执行a+=a-=a*a;后a的值为()A、-15B、-40C、0D、-20答案:B详细解析:复合赋值运算符优先级相同,运算顺序从右往左。第一步:先算a-=a*a,等价于a=a-a*a=5-25=-20;第二步:再算a+=a,等价于a=-20+(-20)=-40。3、以下关于指针的说法正确的是()A、指针变量可以存储任意数值B、指针变量的类型决定了取值的字节数C、空指针就是值为0的指针,无任何意义D、指针变量占用的内存大小随指向类型变化答案:B详细解析:A错误:指针只能存储内存地址,不能随意存普通数值;B正确:比如int指针取4字节,char指针取1字节,类型决定解引用取值长度;C错误:空指针用于标识指针不指向有效内存,避免非法访问,有实际作用;D错误:32位系统所有指针占4字节,64位系统占8字节,和指向类型无关。4、数组intarr[3][4];该数组占用的内存字节数是()A、12B、24C、48D、36答案:C详细解析:int类型默认占4字节。数组总元素个数=3*4=12个,总字节数=12*4=48字节。5、以下关键字中,不能修饰局部变量的是()A、staticB、autoC、externD、register答案:C详细解析:extern用于声明外部全局变量或外部函数,仅作引用声明,不能定义局部变量。static修饰静态局部变量,auto是局部变量默认属性,register是寄存器局部变量。6、C语言中函数内部定义的变量,默认存储在()A、代码段B、栈区C、堆区D、静态区答案:B详细解析:普通局部变量、函数形参存储在栈区,函数调用结束后自动释放;堆区由malloc动态开辟,静态区存放全局变量、static静态变量,代码区存放程序指令。7、已知char*p="hello";以下语句会报错的是()A、charch=*p;B、p++;C、p[0]='H';D、printf("%s",p);答案:C详细解析:字符串常量存储在只读常量区,不允许修改。p是指向字符串常量的指针,p[0]='H'属于修改只读内存,程序运行崩溃报错;指针变量p本身可以自增、取值、打印。8、switch语句中,关于default的说法正确的是()A、必须放在所有case之后B、必须存在C、可放在任意位置,匹配所有不满足case的情况D、执行完default一定会穿透答案:C详细解析:default可选、位置任意,作用是处理所有case不匹配的场景。switch穿透只针对无break的case,default本身不会触发穿透。9、以下关于结构体的说法错误的是()A、结构体可以嵌套定义B、结构体变量可以整体赋值C、结构体不占用内存对齐空间D、结构体成员可以是不同数据类型答案:C详细解析:C语言结构体存在内存对齐机制,为了提高CPU访问效率,结构体整体占用空间会大于等于所有成员字节之和,存在填充冗余字节。10、malloc函数的头文件是()A、stdio.hB、stdlib.hC、string.hD、math.h答案:B详细解析:malloc、free动态内存函数需引入stdlib.h;stdio.h用于输入输出,string.h用于字符串操作,math.h用于数学运算。二、填空题(共5题,每题4分,共20分)1、C语言中,一行单行注释的符号是______,多行注释的起止符号是______。答案://、/**/2、inta=10,b=3;表达式a%b的结果是______,a/b的结果是______。答案:1、3解析:%是取余运算,10对3取余余1;两个int相除结果向下取整,舍弃小数。3、数组名作为函数参数传递时,本质传递的是______。答案:数组首元素的地址解析:数组传参会退化为指针,函数内修改数组内容会影响原数组。4、定义无符号短整型变量a的语句是______。答案:unsignedshorta;5、指针变量p指向的地址赋值为NULL的作用是______。答案:清空指针指向,避免野指针,防止非法内存访问三、程序阅读题(共3题,每题8分,共24分)1、写出以下程序运行结果c

#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详细解析:continue会跳过本次循环剩余代码。循环i=1、2、3、4;偶数2、4跳过,只累加1+3=4。2、写出以下程序运行结果c

#include<stdio.h>

voidfun(intx)

{

x=100;

}

intmain()

{

inta=10;

fun(a);

printf("%d",a);

return0;

}答案:10详细解析:C语言函数参数传递为值传递,形参x是a的副本,修改x不会影响原变量a的值。3、写出以下程序运行结果c

#include<stdio.h>

intmain()

{

intarr[]={1,2,3,4,5};

int*p=arr;

printf("%d",*(p+2));

return0;

}答案:3详细解析:p指向数组首元素arr[0],p+2跳过两个int元素,指向arr[2],取值为3。四、编程大题(共2题,每题13分,共26分)1、编写程序,输入一个整数,判断该数是否为素数(质数),输出对应结果。标准答案代码:c

#include<stdio.h>

#include<math.h>

intmain()

{

intn,i,flag=1;

scanf("%d",&n);

//小于2的数不是素数

if(n<2)

{

flag=0;

}

//遍历判断是否能被整除

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,且只能被1和自身整除的整数;2.优化逻辑:只需遍历到根号n即可,无需遍历到n-1,减少循环次数;3.用flag标记状态,遍历结束后根据标记输出结果,逻辑清晰易懂。2、编写程序,实现两个整数的交换,要求使用指针方式完成。标准答案代码:c

#include<stdio.h>

//指针传参实现交换

voidswap(int*a,int*b)

{

inttemp=*a;

*a=*b;

*b=temp;

}

intmain()

{

intx,y;

printf("请输入两个整数:");

scanf("%d%d",&x,&y);

swap(&x,&y);

printf("交换后:%d%d\n",x,y);

return0;

}详细解析:1.普通值传递无法交换实参,必须通过指针传递变量地址;2.通过解引用指针,直

温馨提示

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

评论

0/150

提交评论