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

下载本文档

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

文档简介

C语言常见笔试题(含详细答案解析)本套题目整理互联网、软硬件、嵌入式企业校招高频笔试真题,题型覆盖选择、填空、程序输出、编程题,解析通俗易懂,贴合实际考试判分标准,无冗余理论,全部为笔试高频考点。一、单项选择题(15题,高频基础考点)1.C语言中,以下哪个是合法的标识符?A.123abc  B.abc_123  C.abc-123  D.int答案:B解析:C语言标识符规则:只能由字母、数字、下划线组成;不能以数字开头;不能是关键字。A以数字开头、C含减号、D是关键字,均不合法。2.以下关于char、short、int、long类型占用字节数说法,在32位系统下正确的是?A.char=1,short=2,int=4,long=4B.char=1,short=4,int=4,long=8C.char=2,short=2,int=4,long=4D.char=1,short=2,int=2,long=4答案:A解析:32位系统标准字节大小:char1字节、short2字节、int4字节、long4字节、longlong8字节、float4字节、double8字节。3.全局变量和局部变量的存储位置分别是?A.栈区、堆区  B.全局区、栈区  C.堆区、全局区  D.栈区、全局区答案:B解析:全局变量、静态变量存放在全局数据区;普通局部变量、函数形参存放在栈区;malloc动态申请的内存存放在堆区。4.以下运算符优先级最高的是?A.赋值=  B.逻辑与&&  C.算术+  D.逗号,答案:C解析:运算符优先级:算术运算符>关系运算符>逻辑运算符>赋值运算符>逗号运算符。5.设有定义inta=5;执行a+=a-=a*a;后a的值为?A.-15  B.-40  C.0  D.-20答案:B解析:复合赋值运算符从右向左计算。原式拆解:1.先算a*a=25;2.a-=25即a=5-25=-20;3.a+=-20即a=-20+(-20)=-40。6.数组intarr[5]={1,2};数组未初始化的元素值为?A.随机值  B.0  C.NULL  D.报错答案:B解析:C语言中,数组部分初始化时,未显式赋值的元素会默认自动初始化为0。7.以下关于指针说法错误的是?A.指针变量存储的是内存地址B.空指针可以直接解引用C.指针可以进行加减整数运算D.同类型指针可以相互赋值答案:B解析:空指针指向无效内存地址,直接解引用会触发程序崩溃,是笔试高频易错点。8.字符串charstr[]="hello";和charstr[5]="hello";以下说法正确的是?A.都能正常存储字符串  B.前者长度6,后者无法存储结束符C.长度一致  D.后者自动补结束符答案:B解析:"hello"实际包含5个字符+1个'\0'结束符,共6字节。str[]自动适配长度为6;str[5]只有5字节,无法存放结束符,不是合法C语言字符串。9.switch语句中,case后面不能跟的类型是?A.整型  B.字符型  C.浮点型  D.枚举型答案:C解析:switchcase仅支持整型、字符型、枚举类型,不支持浮点型、字符串,浮点精度无法精准匹配判断。10.break和continue语句说法正确的是?A.break只用于循环,continue只用于switchB.break跳出当前循环/switch,continue结束本次循环,进入下一次C.作用完全相同  D.continue可以跳出多层循环答案:B解析:break:终止当前循环或switch语句;continue:仅跳过本次循环剩余代码,直接执行下一次循环迭代。11.结构体struct变量的字节对齐原则,说法正确的是?A.按最小成员大小对齐  B.按最大基本成员大小对齐C.全部1字节对齐  D.无对齐规则答案:B解析:结构体默认字节对齐:整体对齐数为结构体中最大基本数据类型的字节数,成员偏移量、整体大小均为对齐数的整数倍。12.以下哪个函数可以动态分配内存?A.strlen()  B.malloc()  C.sizeof()  D.strcpy()答案:B解析:malloc、calloc、realloc为动态内存分配函数,需搭配free释放,避免内存泄漏。13.宏定义#defineN10说法错误的是?A.预处理阶段直接替换文本  B.无类型检查C.N是变量,可以修改值  D.编译前完成替换答案:C解析:宏定义是纯文本替换,不是变量,运行阶段无法修改值,且无数据类型检查。14.函数递归的必要条件是?A.循环结构  B.终止条件+递归递推公式C.全局变量  D.指针参数答案:B解析:递归必须具备两个条件:明确的终止条件(防止死递归栈溢出)、自身调用的递推逻辑。15.sizeof和strlen区别,说法正确的是?A.功能完全一致  B.sizeof求内存大小,strlen求有效字符长度(不含\0)C.strlen包含结束符  D.sizeof统计字符串字符数答案:B解析:sizeof是运算符,计算变量/数组占用总内存字节数;strlen是库函数,遍历字符串,统计'\0'之前的有效字符个数,不包含结束符。二、填空题(8道核心考点)1.C语言程序的入口函数是________。答案:main函数2.表达式3&&0的结果是________,3||0的结果是________。答案:0、1解析:逻辑运算非0为真(1),0为假(0)。&&全真为真,||一真为真。3.指针变量int*p;p+1偏移的字节数由________决定。答案:指针指向的数据类型(int类型4字节)4.静态局部变量使用________关键字修饰,只会初始化________次。答案:static、15.数组名作为函数参数时,会退化为________。答案:指针解析:数组传参不拷贝数组内容,仅传递数组首地址,等价于指针传参。6.释放动态内存的库函数是________。答案:free()7.const修饰指针intconst*p,不可修改的是________。答案:指针指向的内容(*p)解析:const在*前:内容不可改,指针地址可改;const在*后:地址不可改,内容可改。8.二维数组inta[3][4],a[2]代表________。答案:第三行一维数组的首地址三、程序输出题(笔试高频坑题)题1:写出程序运行结果c

#include<stdio.h>

intmain()

{

inti=1;

switch(i)

{

case1:i++;

case2:i++;break;

case3:i++;

}

printf("%d",i);

return0;

}答案:3解析:case1无break,会穿透执行case2。i初始1,case1执行i=2,穿透case2执行i=3,遇到break结束。题2:写出程序运行结果c

#include<stdio.h>

intmain()

{

charstr[]="abcdef";

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

return0;

}答案:76解析:sizeof包含末尾'\0',总长度7;strlen只统计有效字符6个。题3:写出程序运行结果c

#include<stdio.h>

voidfun(intx)

{

x=100;

}

intmain()

{

inta=10;

fun(a);

printf("%d",a);

return0;

}答案:10解析:C语言函数传参为值传递,形参是实参的临时拷贝,修改形参不会影响实参原值。题4:写出程序运行结果c

#include<stdio.h>

intmain()

{

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

int*p=a;

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

return0;

}答案:1解析:后置++先取值后自增,先取出p指向的a[0]=1,打印完成后p再偏移一位。四、编程大题(校招必考基础编程)大题1:编写程序,实现反转字符串(不调用库函数)参考答案:c

#include<stdio.h>

//字符串反转函数

voidreverseStr(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];

printf("请输入字符串:");

scanf("%s",buf);

reverseStr(buf);

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

return0;

}大题2:求1-100之间所有偶数的和参考答案:c

#include<stdio.h>

intmain()

{

inti,sum=0;

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

{

//判断偶数

if(i%2==0)

{

sum+=i;

}

}

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

return0;

}大题3:指针实现两个整数交换(值传递无法实现,必须指针)参考答案:c

#include<stdio.h>

voidswap(int*a,int*b)

{

inttemp=*a;

*a=*b;

*b=temp;

}

intmain()

{

intx=10,y=20;

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

swap(&x,&y);

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

return0;

}五、笔试简答题(面试+笔试通用)1.栈内存和堆内存的区别?1.栈由系统自动分配、自动释放,堆由程序员手动malloc申请、free释放;2.栈空间小、速度快,堆空间大、速度慢

温馨提示

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

最新文档

评论

0/150

提交评论