自学内容网 自学内容网

【C语言】42道大厂笔试题目(选择题)

本篇博客给大家带来的是一些大厂笔试题目,题目难度:简单,适合小白快速入手C语言部分的大厂笔试难度。

🐟🐟文章专栏:C语言

🚀🚀若有问题评论区下讨论,我会及时回答

❤❤欢迎大家点赞、收藏、分享 你们的支持就是我创造的动力

今日思想:山不向我走来,我便向它走去!!

试题1:

用在switch语言中的关键字不包含哪个?( )

A. continue

B. break

C. default

D. case

答案:A

试题2:

下面哪个不是关键字:( )

A. int

B. struct

C. define

D. continue

答案:C

试题3:

关于main函数错误的是?

A. main函数是程序的入口

B. 一个C语言程序中可以写多个main函数

C. main函数的名字是可以随便改的,比如:mian

D. main函数的名字是固定的,一个工程中,有且仅有一个main函数

答案:BC

试题4:

C语言规定,在一个源程序中,main函数的位置( )

A. 必须在最开始

B. 必须在库函数的后面

C. 可以任意

D. 必须在最后

答案:C

试题5:

关于C语言中源文件和头文件说法正确的是?

A. C语言的源文件的后缀是.cpp

B. 头文件没什么用,只要有源文件就行了

C. C语言中源文件的后缀是.c,头文件的后缀是.h

D. C语言的源文件可以没有后缀

答案:C

试题6:

下面程序输出的结果是啥:

#include <stdio.h>

int main()
{
    printf("%5d\n", 123456);
    return 0;
}

A. 12345

B. 123456

C. 23456

D. 0

答案:A

试题7:

下面代码的结果是:( )

#include <stdio.h>
int main()
{
int a, b, c;
a = 5;
c = ++a;
b = ++c, c++, ++a, a++;
b += a++ + c;
printf("a = %d b = %d c = %d\n:", a, b, c);
return 0;
}

A. a = 8 b = 23 c = 8

B. a = 9 b= 23 c = 8

C. a = 9 b = 25 c = 8

D. a = 9 b = 24 c = 8

答案:B

试题8:

下面代码的执行结果是什么( )

#include <stdio.h>
int main() {
int x = 3;
int y = 3;
switch (x % 2) {
case 1:
switch (y)
{
case 0:
printf("first");
case 1:
printf("second");
break;
default: printf("hello");
}
case 2:
printf("third");
}
return 0;
}

A. secondthird

B. hello

C. firstsecond

D. hellothird

答案:B

试题10:

下面代码执行的结果是:( )

#include <stdio.h>

int main()
{
int i = 0;
for (i = 0; i<10; i++)
{
if (i = 5)
printf("%d ", i);
}
return 0;
}

A. 1 2 3 4 5 6 7 8 9 10

B. 5 5 5 5 5 5 5 5 5 5

C. 死循环的打印5

D. 0 1 2 3 4 5 6 7 8 9

答案:C

试题11:

关于if语句说法正确是:( )

A. if语句后面只能跟一条语句

B. if语句中0表示假,1表示真

C. if语句是一种分支语句,可以实现单分支,也可以实现多分支

D. else语句总是和它的对齐的if语句匹配

答案:C

试题12:

int func(int a)
{
    int b;
    switch (a)
    {
        case 1: b = 30;
        case 2: b = 20;
        case 3: b = 16;
        default: b = 0;
    }
    return b;
}

则func(1) = (      )

A. 30

B. 20

C. 16

D. 0

答案:D

试题13:

关于while(条件表达式) 循环体,以下叙述正确的是( )? (假设循环体里面没有break,continue,return,goto等等语句)  

A. 循环体的执行次数总是比条件表达式的执行次数多一次

B. 条件表达式的执行次数总是比循环体的执行次数多一次

C. 条件表达式的执行次数与循环体的执行次数一样

D. 条件表达式的执行次数与循环体的执行次数无关

答案:B

试题14:

在C语言中,以下哪个选项描述了变长数组(Variable Length Array,VLA)的特点?

A. 变长数组的大小在编译时确定,不能改变。

B. 变长数组的大小可能在运行时确定,比如使用变量来指定数组大小,一旦确定大小后,它的大小是固定的,无法改变。

C. 一旦确定大小后,它的大小是固定的,无法改变

D. 变长数组只能用于存储字符类型的数据。

答案:C

试题15:

给出以下定义:

char acX[] = "abcdefg";
char acY[] = { 'a','b','c','d','e','f','g'};

以下说法正确的是( )

A. 数组acX和数组acY等价

B. 数组acX和数组acY的长度相同

C. sizeof(acX)>sizeof (acY)

D. strlen (acX)>strlen (acY)

答案:C

试题16:

定义了一维 int 型数组 a[10] 后,下面错误的引用是:( )

A. a[0] = 1;

B. a[0] = 5*2;

C. a[10] = 2;

D. a[1] = a[2] * a[0];

答案:C

试题17:

关于一维数组描述不正确的是:( )

A. 数组的下标是从0开始的

B. 数组在内存中是连续存放的

C. 数组名表示首元素的地址

D. 随着数组下标的由小到大,地址由高到低

答案:D

试题18:

函数调用exec((vl,v2),(v3,v4),v5,v6);中,实参的个数是:( )

A. 3

B. 4

C. 5

D. 6

答案:B

试题19:

以下叙述中不正确的是:( )

A. 在不同的函数中可以使用相同名字的变量

B. 函数中的形式参数是在栈中保存

C. 在一个函数内定义的变量只在本函数范围内有效

D. 在一个函数内复合语句中定义的变量在本函数范围内有效(复合语句指函数中的成对括号构成的代码)

答案:D

试题20:

关于Debug和Release的区别说法错误的是:( )

A. Debug被称为调试版本,程序调试找bug的版本

B. Release被称为发布版本,测试人员测试的就是Release版本

C. Debug版本包含调试信息,不做优化。

D. Release版本也可以调试,只是往往会优化,程序大小和运行速度上效果最优

答案:D

试题21:

下面代码的结果是:( )

#include <stdio.h>
int main()
{
  int arr[] = {1,2,3,4,5};
  short *p = (short*)arr;
  int i = 0;
  for(i=0; i<4; i++)
  {
    *(p+i) = 0;
  }
   
  for(i=0; i<5; i++)
  {
    printf("%d ", arr[i]);
  }
  return 0;
}

A. 1 2 3 4 5

B. 0 0 3 4 5

C. 0 0 0 0 5

D. 1 0 0 0 0

答案:B

试题22:

以下系统中,int类型占几个字节,指针占几个字节,操作系统可以使用的最大内存空间是多大:( )

A. 32位下:4,4,2^32 64位下:8,8,2^64

B. 32位下:4,4,不限制 64位下:4,8,不限制

C. 32位下:4,4,2^32 64位下:4,8,2^64

D. 32位下:4,4,2^32 64位下:4,4,2^64

答案:C

试题23:

下面哪些描述是正确的?

A. 内存中每个bit位都有唯一的地址

B. 内存中每个字节都有地址,地址可以唯一标识一个内存单元的

C. C语言中地址就是指针,指针就是地址

D. C语言中只要有了地址就可以随意读写内存空间。

答案:BC

试题24:

下面代码的结果是:

#include <stdio.h>
int i;
int main()
{
    i--;
    if (i > sizeof(i))
    {
        printf(">\n");
    }
    else
    {
        printf("<\n");
    }
    return 0; 
}

A. >

B. <

C. 不输出

D. 程序有问题

答案:A

试题25:

能把函数处理结果的2个数据返回给主调函数,在下面的方法中不正确的是:( )

A. return 这2个数

B. 形参用数组

C. 形参用2个指针

D. 用2个全局变量

答案:A

试题26:

以下哪个操作可以避免野指针的出现?

A. 使用空指针(NULL)初始化指针变量

B. 在指针释放后将其设置为NULL

C. 确保指针始终指向有效的内存地址

D. 检查指针的有效性后再进行访问

答案:ABCD

试题27:

下面关于"指针"的描述不正确的是:( )

A. 当使用free释放掉一个指针内容后,指针变量的值被置为NULL

B. 32位系统下任何类型指针的长度都是4个字节

C. 指针的数据类型声明的是指针实际指向内容的数据类型

D. 野指针是指向未分配或者已经释放的内存地址

答案:A

试题28:

下面哪个是指针数组:( )

A. int* arr[10];

B. int * arr[];

C. int **arr;

D. int (*arr)[10];

答案:A

试题29:

如何定义一个int类型的指针数组,数组元素个数为10个:( )

A. int a[10]

B. int (*a)[10]

C. int *a[10];

D. int (*a[10])(int);

答案:C

试题30:

关于回调函数描述错误的是( )

A. 回调函数就是一个通过函数指针调用的函数

B. 回调函数一般通过函数指针实现

C. 回调函数一般不是函数的实现方调用,而是在特定的场景下,由另外一方调用。

D. 回调函数是调用函数指针指向函数的函数。

答案:D

试题31:

下面代码中print_arr函数参数设计哪个是正确的?( )

int arr[3][5] = {1,2,3,4,5,6,7,8,9,10};
 print_arr(arr, 3, 5);

A. void print_arr(int arr[][],int row, int col);

B. void print_arr(int* arr, int row, int col);

C. void print_arr(int (*arr)[5], int row, int col);

D. void print_arr(int (*arr)[3], int row, int col);

答案:C

试题32:

unsigned int a= 0x1234;
unsigned char b = *(unsigned char *)&a;

在32位大端模式处理器上变量b等于( )

A. 0x00

B. 0x12

C. 0x34

D. 0x1234

答案:A

试题33:

关于大小端字节序的描述正确的是( )

A. 大小端字节序指的是数据在电脑上存储的二进制位顺序

B. 大小端字节序指的是数据在电脑上存储的字节顺序

C. 大端字节序是把数据的高字节内容存放到高地址,低字节内容存放在低地址处

D. 小端字节序是把数据的高字节内容存放到低地址,低字节内容存放在高地址处

答案:B

试题34:

在小端机器中,下面代码输出的结果是:( )

#include <stdio.h>
int main()
{
    int a = 0x11223344;
    char *pc = (char*)&a;
    *pc = 0;
    printf("%x\n", a);
    return 0;
}

A. 00223344

B. 0

C. 11223300

D. 112233

答案:C

试题35:

在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是( )

struct A
{
int a;
short b;
int c;
char d;
};

struct B
{
int a;
short b;
char c;
int d;
};

A. 16,16

B. 13,12

C. 16,12

D. 11,16

答案:C

试题36:

由多个源文件组成的C程序,经过编辑、预处理、编译、链接等阶段会生成最终的可执行程序。下面哪个阶段可以发现被调用的函数未定义?( )

A. 预处理

B. 编译

C. 链接

D. 执行

答案:C

试题37:

下面哪个不是预处理指令:( )

A. #define

B. #if

C. #undef

D. #end

答案:D

试题38:

( ) 的作用是将源程序文件进行处理,生成一个中间文件,编译系统将对此中间文件进行编译并生成目标代码。

A. 预处理

B. 汇编

C. 生成安装文件

D. 编译

答案:A

试题39:

在X86下,小端字节序存储,有下列程序

#include<stdio.h>
int main()
{
  union
  {
    short k;
    char i[2];
  }*s, a;
  s = &a;
  s->i[0] = 0x39;
  s->i[1] = 0x38;
  printf("%x\n", a.k);
  return 0;
}

输出结果是( )

A. 3839

B. 3938

C. 380039

D. 不确定

答案:A

试题40:

关于枚举常量和#define 定义常量,下面哪个表述是不严谨的?

A. 可读性更好:枚举符号提供了有意义的标识符,可以更清晰地表达代码的意图。相比之下,#define定义的符号只是简单的文本替换,不具备语义上的含义。

B. 和#define定义的标识符比较枚举有类型检查,更加严谨。

C. 枚举常量是遵循作用域规则的,枚举声明在函数内,只能在函数内使用,#define定义的符号没有作用域概念,会在整个代码中进行文本替换

D. #define没有类型检查,使用更加方便,更加推荐使用

答案:D

试题41:

以下关于枚举的说法,哪个是正确的?

A. 枚举类型可以具有浮点数作为枚举值。

B. 枚举类型在内存中存储为整数。

C. 枚举类型可以包含字符串作为枚举值。

D. 枚举类型不能作为函数的参数传递。

答案:B

试题42:

以下哪个不是动态内存的错误( )

A. free参数为NULL

B. 对非动态内存的free释放

C. 对动态内存的多次释放

D. 对动态内存的越界访问

答案:A

完!!!! 


原文地址:https://blog.csdn.net/2403_84958571/article/details/144358326

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!