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

下载本文档

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

文档简介

C语言校园招聘笔试题(含详细答案解析)考试说明:满分100分,考试时长90分钟,题型包含选择题、填空题、程序阅读题、编程题,适用于计算机、软件工程、电子信息等相关专业校园招聘技术笔试。注意事项:1.所有答案均写在答题区域内,书写清晰规范;2.代码题需保证语法正确、逻辑通顺,可正常编译运行。一、单项选择题(共15题,每题3分,共45分)1.以下不属于C语言基本数据类型的是()A.intB.floatC.stringD.char2.已知inta=5;执行a+=a-=a*a;后a的值为()A.-15B.-40C.0D.-203.以下关于switch语句说法正确的是()A.switch括号内可以是浮点型变量B.case语句必须有breakC.case常量值必须唯一D.default语句必须放在最后4.定义数组intarr[3][4];则该数组占用的内存字节数为()(int占4字节)A.12B.24C.48D.365.以下关于指针的说法错误的是()A.指针变量存储的是内存地址B.空指针不指向任何有效内存单元C.指针类型不同,占用内存大小不同D.可以对空指针进行解引用操作6.函数内部定义的未初始化的局部变量,默认值为()A.0B.随机垃圾值C.NULLD.17.以下关键字中,用于定义静态局部变量的是()A.externB.staticC.constD.volatile8.若有定义char*p="hello";以下操作合法的是()A.p[0]='H'B.*p='H'C.p++D.p="world"+19.宏定义#defineN10预处理阶段会执行的操作是()A.变量初始化B.简单文本替换C.类型定义D.内存分配10.结构体变量和结构体指针作为函数参数,以下说法正确的是()A.结构体传参效率更高B.结构体指针传参可节省内存开销C.二者传参效果完全一致D.结构体指针传参会拷贝整个结构体11.以下循环语句中,属于死循环的是()A.while(0){}B.for(;;){}C.do{}while(0);D.for(i=0;i<10;i++){}12.已知charstr[]="abcde";sizeof(str)的值为()A.5B.6C.7D.不确定13.位运算中,将变量指定位清零,应使用的运算符是()A.&B.|C.^D.~14.以下关于递归函数的说法错误的是()A.递归必须有终止条件B.递归层数过深会导致栈溢出C.递归代码一定比循环代码效率高D.递归本质是函数自身调用15.文件操作中,以只读方式打开文本文件的参数是()A."w"B."r"C."a"D."rw"二、填空题(共5题,每题3分,共15分)1.C语言程序的入口函数是________。2.表达式3&&0||5的结果是________。3.指针变量p指向数组首元素,p+1表示________。4.全局变量的作用域是________,存储在________区。5.销毁动态分配内存的函数是________。三、程序阅读题(共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;

}2.写出以下程序的运行结果PlainText

#include<stdio.h>

voidswap(int*a,int*b)

{

inttemp=*a;

*a=*b;

*b=temp;

}

intmain()

{

intx=10,y=20;

swap(&x,&y);

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

return0;

}3.写出以下程序的运行结果PlainText

#include<stdio.h>

intfun(intn)

{

if(n==1)

return1;

returnn+fun(n-1);

}

intmain()

{

printf("%d",fun(4));

return0;

}四、编程题(共2题,第1题10分,第2题12分,共22分)1.编写C语言程序,输入一个正整数,判断该数是否为素数(质数),并输出判断结果。(素数:大于1,且只能被1和自身整除的整数)2.编写C语言程序,实现数组冒泡排序。要求:自定义整型数组,输入数组元素,通过冒泡排序将数组元素从小到大排序,最终输出排序后的数组。参考答案及详细解析一、单项选择题答案及解析1.答案:C解析:C语言基础数据类型包含整型(int)、浮点型(float、double)、字符型(char),没有string字符串类型,字符串通过字符数组或字符指针实现。2.答案:B解析:赋值运算符从右向左运算,初始a=5;先算a*a=25,再算a-=25,即a=5-25=-20;最后算a+=-20,即a=-20+(-20)=-40。3.答案:C解析:switch括号内仅支持整型、字符型、枚举型;case可省略break,会发生穿透现象;default可放在任意位置;case常量值必须唯一,不能重复。4.答案:C解析:二维数组共3行4列,总元素个数12个,单个int占4字节,总内存=12*4=48字节。5.答案:D解析:空指针指向无效内存地址,禁止解引用操作,会导致程序崩溃;同一系统中,所有指针变量占用内存大小一致。6.答案:B解析:局部变量存储在栈区,未初始化时默认是随机垃圾值;全局变量、静态变量默认初始值为0。7.答案:B解析:static用于定义静态变量,局部静态变量生命周期贯穿整个程序,作用域仅限当前函数;extern声明外部变量,const修饰常量。8.答案:C解析:char*p="hello"指向字符串常量区,常量内容不可修改,因此A、B错误;指针可以进行自增运算,p++合法;D选项指针运算语法错误。9.答案:B解析:宏定义是预处理指令,编译前仅做纯文本替换,不参与编译、不分配内存、不做类型校验。10.答案:B解析:结构体传参需要拷贝整个结构体数据,内存开销大、效率低;结构体指针传参仅传递地址,开销小、效率高,可直接修改原结构体数据。11.答案:B解析:for(;;)无循环终止条件,是标准死循环;while(0)、do{}while(0)循环不执行;普通for循环正常结束。12.答案:B解析:sizeof计算数组实际内存大小,字符串默认末尾自带'\0'结束符,"abcde"共5个有效字符+1个结束符,总计6字节。13.答案:A解析:与运算(&):0与任何数运算结果为0,可实现指定位清零;或运算(|)用于置1,异或(^)用于翻转指定位。14.答案:C解析:递归每次调用函数都会开辟栈空间,存在函数调用开销,效率通常低于循环;递归必须设置终止条件,否则会栈溢出。15.答案:B解析:"r"只读打开文件,文件不存在则打开失败;"w"清空写入,文件不存在则创建;"a"追加写入。二、填空题答案及解析1.main函数解析:C语言程序固定从main函数开始执行,是程序唯一入口。2.1解析:逻辑运算短路特性,3&&0结果为0,0||5结果为真,C语言中真用1表示。3.指向数组下一个元素的地址解析:指针加减运算以指向的数据类型大小为单位,int型指针p+1,地址偏移4字节,指向后一个元素。4.整个程序、全局(静态)解析:全局变量定义在函数外,程序全程可访问,存储在全局静态区,程序结束后释放内存。5.free()解析:malloc/calloc/realloc用于动态分配内存,free函数用于手动释放动态内存,避免内存泄漏。三、程序阅读题答案及解析1.运行结果:4解析:循环i取值1、2、3、4;i为偶数时执行continue跳过累加,仅累加i=1、3,s=1+3=4。2.运行结果:x=20,y=10解析:函数传递变量地址,通过指针解引用直接修改主函数中x、y的原值,实现两个变量数值交换。3.运行结果:10解析:递归计算1-4累加和,fun(4)=4+fun(3)、fun(3)=3+fun(2)、fun(2)=2+fun(1)、fun(1)=1,最终结果4+3+2+1=10。四、编程题参考答案1.素数判断程序PlainText

#include<stdio.h>

#include<math.h>

intmain()

{

intnum,i,flag=1;

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

scanf("%d",&num);

//小于2的数不是素数

if(num<2)

{

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

return0;

}

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

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

{

if(num%i==0)

{

flag=0;

break;

}

}

if(flag==1)

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

else

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

return0;

}代码思路:排除小于2的非素数,通过遍历2到数值平方根的数,判断是否存在因数,设置标记位区分素数与非素数,减少循环次数提升效率。2.数组冒泡排序程序PlainText

#include<stdio.h>

intmain()

{

intarr[10];

intn,i,j,temp;

printf("请输入数组元素个数:");

scanf("%d",&n);

printf("请输入%d个整数:",n);

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

{

scanf("%d",&arr[i]);

}

//冒泡排序核心逻辑

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;

}

}

}

//输出排序后数组

printf("排序后的数组:");

for(

温馨提示

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

评论

0/150

提交评论