【笔试题】2019CVTE软件支持工程师笔试题(附超详细解答)

CVTE的软件支持工程师的笔试题主要分为选择题(20道)和编程题(2道),考查内容主要是C语言、Linux操作系统为主。编程题都比较简单,没有什么难度;选择题涉及的范围还是比较广的。不过有三点比较“坑”的地方:

  • 选择题都是多选框,没有单选或者多选的提示(也就是说,每道题都有可能是多选);
  • 编程题只给出了一个文本框,不提供编译的功能。并且,编程题是不能在本地IDE上进行编译的(也就是说,每道编程题都需要自己对自己的程序有信心);
  • 整个试卷没有“前一道”按钮(也就是说,一旦你选择了某个答案,就不能再退回去修改了)。

 

选择题

1、共享变量是指()访问的变量。

只能被系统进程

只能被多个进程互斥

只能被用户进程

可被多个进程

KEY:D

2、关于GPIO,下面的描述错误的有()。

GPIO可以用于外部SDRAM进行高速传输

GPIO可以用于模拟Flash的接口,对Flash存储器进行读写操作

GPIO可以由CPU编程决定方向,但不能查询其状态

CPU可以通过编程,决定GPIO是输入、输出的通信功能,但不能是双向的

KEY:ACD

3、一个PWM波形,输出低电平为200ms,高电平为300ms,请问这个方波的占空比是()。

42.9%

60%

66.7%

40%

KEY:B

4、线程相对于进程强调的是()。

同步与互斥

并行执行与资源共享

相互独立与互相制约

资源的分配和独占性

KEY:D

5、C语言中,函数内部定义的局部变量申请到的空间存储在哪个位置()。

data段

bss段

堆区

栈区

KEY:D

6、若已知一个栈的入栈顺序为1、2、3、4,其出栈顺序为P1、P2、P3、P4,则P2、P4不可能是()。

2、1

4、3

2、4

1、4

KEY:B

7、栈是一种按“后进先出”原则进行插入和删除操作的数据结构,因此,()必须用栈。

将一个元素序列进行逆序

实现函数或过程的递归调用及返回处理时

可执行程序的装入与卸载

链表节点的申请和释放

KEY:B

解答:栈是一种后进先出的数据结构。将一个元素序列逆置时,可以使用栈也可以不用。链表节点的申请和释放次序与应用要求相关,不存在“先申请后释放”的操作要求。可执行程序的装入与卸载,也不存在“后进先出”的操作要求。对于函数的递归调用与返回,一定是后被调用执行的先返回。

8、文件file1的访问权限为rw-r--r--,现要增加所有用户的执行权限和同组用户的权限,下列哪个命令是对的()

chmod a+x g+w file1

chmod a+x o+w file1

chmod 775 file1

chmod 765 file1

KEY:AC

9、下段程序中的a、b的值分为是()。

char str[20] = "0123456789";
int a = strlen(str);
int b = sizeof(str);

10、4

10、20

4、20

4、4

KEY:B

10、关于SPI和IIC总线的描述,正确的是()

IIC可以实现全双工,SPI不能实现全双工

IIC的数据输入输出用的是一根线,SPI则分别为数据输入和数据输出两根线

IIC的抗干扰能力比SPI强

SPI适合长距离传播

KEY:D

11、以下是线性顺序结构的是()。

顺序存储完全二叉树

双向链表

数组

顺序存储栈

KEY:ACD

12、Linux下有文件A和文件B,文件A中的内容是文件B的路径,下列说法错误的是()。

文件A叫做文件B的软链接或符号链接

它们的文件索引信息中文件的链接数并不会因为这种关系发生变化

它们的文件的索引信息inode号是相同的

访问文件A其实就是访问文件B

KEY:C

13、下列关于管道(pipe)通信的叙述中,正确的是()。

一个管道可以实现双向数据传输

一个管道只能由一个读进程和一个写进程对其操作

进程对管道进行读操作和写操作都可能被堵塞

管道的容量仅受磁盘容量大小限制

KEY:C

14、设栈S和队列Q的初始状态为空,元素e1、e2、e3、e4、e5、e6依次通过栈S,一个元素出栈后即进入队列Q,若6个元素出队的序列是e2、e4、e3、e6、e5、e1,则栈S的容量至少应该是()。

2

3

4

1

KEY:B

15、MMU是Memory Mangement Unit的缩写,即内存管理单元,下列关于MMU说法错误的是()。

MMU作为转换器,将程序和数据的虚拟地址(编译时的连接地址)转换成实际的物理地址,即在物理主存中的地址

MMU提供了一些资源以允许使用虚拟存储器

在带MMU的操作系统控制下,运行的任务必须知道其他与之无关的任务的存储需求情况,这就简化了各个任务的设计

MMU提供的一个关键服务是使各个任务作为各自独立的程序在其自己的私有存储空间中运行

KEY:C

16、若用n个权值构造一棵最优二叉树(哈夫曼树),则该二叉树的结点总数为()。

2n-1

2n

2n+1

2n+2

KEY:A

17、下列关于查看当前Linux的系统状态(如CPU使用、内存使用、负载情况)命令的描述,正确的是()。

可以使用top命令分析CPU使用,内存使用,负载等情况

可以使用free查看内存整体的使用情况

可以使用cat /proc/meminfo查看内存更详细的情况

以上描述都不正确

KEY:ABC

18、下列关于makefile描述正确的是()。

主要包含了五个东西:显式规则、隐晦规则、变量定义、文件指示和注释

makefile文件保存了编译器和连接器的参数选项

在Makefile不可以使用include关键字把别的Makefile包含进来

默认的情况下,make命令会在当前目录下按顺序找寻文件名为“GNUmakefile”、“makefile”、“Makefile”的文件, 找到了解释这个文件

KEY:ABCD

19、执行完下列语句后,y的值为()。

int x, y, z;
x = y = 5;
z = ++x || ++y;

6

5

1

不确定

KEY:B

20、以下程序段执行后的结果为()。

#include 

void main()
{
	short *p, *q;
	short arr[15] = { 0 };
	p = q = arr;
	p++;

	printf("%d", p - q);
	printf("%d", (char *)p - (char *)q);
	printf("%d", sizeof(arr) / sizeof(*arr));

	return 0;
}

011

1215

121

1115

KEY:B

 

编程题

1、要求实现下面的函数,杨辉三角算法基础:

输入一个整型值N(>10)代表杨辉三角的阶数,例如输入3,输出

1
1 1
1 2 1

同时输出第N阶的值相加之和,例如第3阶(1+2+1=4)。

解答:杨辉三角形,比较简单:

#include

int main()
{
	int n;
	scanf("%d", &n);

	int i, j, a[100][100], m = 0;
	for (i = 0; i <= n; i++) {
		for (j = 0; j <= n; j++) {
			a[i][0] = 1;
			a[i][i] = 1;
		}
	}

	for (i = 2; i <= n; i++) {
		for (j = 1; j <= i - 1; j++)
			a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
	}

	for (i = 0; i <= n; i++) {
		for (j = 0; j <= i; j++) {
			printf("%d ", a[i][j]);
			if (i == n) {
				m += a[i][j];
			}
		}
		printf("\n");
	}
	printf("%d ", m);

	return 0;

}

2、小C的信用卡支付密码是一串长度为6的数字,为了防止遗忘小C把它写在纸上,但是经过了加密,加密规则是:将这个6位整数的每一位数字都加上5,然后用每位数字分别对10求出余,接着用这6个余数来替换原来每位上的数字,最后将第一位和最后一位数字交换。请编写代码实现此加密过程。

例:输入34567,每一位加上5之后变成8 9 10 11 12,替换第一位和最后一位后输出29018。

提示:请实现encode函数:

char *encode(const char *psw_in, char *psw_out);

解答:主要掌握怎么将int与char之间如何进行转换就可以了,逻辑什么的倒是蛮简单:

char *encode(const char *psw_in, char *psw_out) {
	int i;
	char temp;

	for (i = 0; i < 6; i++)
		psw_out[i] = (psw_in[i] - '0' + 5) % 10 + '0';

	temp = psw_out[5];
	psw_out[5] = psw_out[0];
	psw_out[0] = temp;

	return psw_out;
}

【笔试题】2019CVTE软件支持工程师笔试题(附超详细解答)_第1张图片

 

你可能感兴趣的:(《面试》笔试面试)