当前位置: 首页 > news >正文

【03】厦门立林科技——立林科技 嵌入式 校招笔试,题目记录及解析

厦门立林科技——立林科技 嵌入式 校招笔试,题目记录及解析

  • 1.下面的程序的输出是()。
  • 2.在头文件中#ifndef/#define/#endif的作用是
  • 4.执行下面程序中的输出语句后,输出的结果是()
  • 6.在32位处理器上,运行如下程序后p的值为()。
  • 10.设有两字符串“Beijing".“China"分别存放在字符串数组str1[15], str2[15]中,下面语句中能把“China”连接到Beijing”之后的为()。
  • 12.若已定义char s[10];测则在下面表达式中表示s[1]的地址有误的是
  • 14.执行下面程序,运行结果是()。
  • 15.设有程序段:char s[] =“china";char *p; p = s;则下面叙述正确的是()。
  • 重要问题 无论什么时候都不要在main外面初始化,除非声明并初始化
  • 16.已有函数max(a, b),为了使函数指针变量p指向函数max,正确的赋值方法是()。
  • 17.在32位处理器下执行以下程序,以下选项正确的是()。
  • 18.定义一个函数实现交换x和y的谊,并将结果正确返回。能够实现此功能的是
  • 19.对以下代码理解正确的是()。
  • 21.执行下面程序,运行结果是
  • 23.执行下面程序运行结果是
  • 25.在32位的处理器上,定义以下结构体,则语句printf("%d",sizdof(struct s);的输出结果是) 。
  • 26.在32位ARM处理器上,执行如下程度,输出结果为()。
  • 27.有以下说明,则值为210的表达式是()
  • 31.域名服务DNS的正向解析是().
  • 32.TCP和UDP协议的相似之处是。
  • 33.以下用于文件传输的协议是()。
  • 34.对于下列说法,错误的是。
  • 35.在以太网中实现IP地址到MAC地址的解析,主要通过()协议实现。
  • 36.linux所有服务的启动脚本都存放在()目录中。
  • 38.以下对信号的理解不正确的是()。
  • 43.以下关于UART描术正确的
  • 44.执行以下程序段,*c的结果是()
  • 45.在stm32单片机中,以下对中断理解正确的是()。
  • 46.使用DMA技术的目的是()。
  • 47.指令周期是指()。
  • 48.主存贮器和CPU之间增加cache的目的是()。
  • 49.没有外存贮器的计算机监控程序可以存放在()。
  • 50.用2条8位的数据总线传输64位二进制代码,需要传输几次()。

厦门立林科技——立林科技 嵌入式 校招笔试,题目记录及解析

1.下面的程序的输出是()。

#include <stdio.h
#define ADD(X) X+X
void main()
{int m = 1, n = 2, k = 3, sum;sum = ADD(m + n) * k; printf(" %d\n", sum);
}
A: 19
B:9
C:12
D:10
D

对比宏定义加括号 和 不加括号
ADD(X) X+X 和 ADD(X) (X)+(X)

#define ADD(X) X+X
ADD(m + n) * k = X + X * k =  1 + 2 + 1 + 2 * 3 = 4 + 6 = 10
#define ADD(X) (X)+(X)
ADD(m + n) *  k = X + X * k =1+2+1+2* 3 = 3+3*3 = 12

在这里插入图片描述

在这里插入图片描述

2.在头文件中#ifndef/#define/#endif的作用是

A:让编译器认为该文件为头文什
B:避免头文件重复包含
C:C语言强制规定并无实际意乂
D:以上都不对
B 

1. 作用
防止头文件被重复引用,防止被重复编译。

2. 简介
#ifndef 它是if not define的简写,是宏定义的一种,确切的说是预处理功能(宏定义、文件包含、条件编译)三种中的一种——条件编译。

使用#ifndef可以避免以下错误:如果在.h文件中定义了全局变量,一个C文件包含了.h文件多次,如果不加#ifndef宏定义,会出现变量重复定义的错误;如果加了#ifndef则不会出现这种错误.

4.执行下面程序中的输出语句后,输出的结果是()

#include <stdio.h>
void main()
{int i, j;i = 0x10; //hex(10) = Dec(16);j = 17;printf("“%d,%d\n", i - j, i + j);
}
A  1,32
B -1,32
C 1,33
D -1,33
i = 0x10; //hex(10) = Dec(16);
D

6.在32位处理器上,运行如下程序后p的值为()。

unsigned long *p =(unsigned long *)0x80001000;
*p = 0x10001234;p += 5;
A:Ox10001248
B:0x80001005
C:0x80001014

运行出错,p地址冲突;
应该是 A或 C,或者 D 选项,报错
在这里插入图片描述

如果
unsigned long *p =(unsigned long *)0x80001000;p += 5;结果:0x80001000 + 4*5 = 0x80001014  //注意 4*5 = 20 十六进制是14 

在这里插入图片描述

如果
unsigned long *p = 0x10001234;p += 5;结果:0x10001234+ 4*5 = 0x10001234 +14 = 0x10001248 //注意 4*5 = 20 十六进制是14 

在这里插入图片描述

10.设有两字符串“Beijing".“China"分别存放在字符串数组str1[15], str2[15]中,下面语句中能把“China”连接到Beijing”之后的为()。

A: strcpy(str1, str2);
B: strcpy(str1, “China");
C: strcat(str1, "China");
D: strcat("Beijing". str2);
C

strcat(str1, “China”);// strcat(str1,str2);
在这里插入图片描述

12.若已定义char s[10];测则在下面表达式中表示s[1]的地址有误的是

A: &s[1]
B: &s[0] + 1
C: s +1
D: S++
D

测试

void main()
{char s[5] = {1,2,3,4,5};char* p = &s[1];char* q = &s[0] + 1;char* k = s + 1;char* j = s++;printf(" %p\n", p);printf(" %p\n", q);printf(" %p\n", k);//printf(" %p\n", j);
}

在这里插入图片描述
在这里插入图片描述

14.执行下面程序,运行结果是()。

char* s = "abcde";
s += 2;
printf("%s",s);
A:字符’c的地址
B:不确定
C: cde
D:字符c'
C

15.设有程序段:char s[] =“china";char *p; p = s;则下面叙述正确的是()。

A: *p与s[0]相等
B: 数组s中的内容和指针变量p中的内容相等O
C: s数组长度和p所指向的字符串长度相等
D: s和p完全相同
A B C
void main()
{char s[10] = "china";char* p;p = s;printf("  *p = %c\n", *p);printf("s[0] = %c\n", s[0]);printf("p = %s\n", p);printf("s = %s\n", s);printf("\nstrlen(s) = %d\n", strlen(s));//s数组长度printf("strlen(p) = %d\n", strlen(p));//p所指向的字符串长度printf("sizeof(s) = %d\n", sizeof(s));//s数组占用空间大小,包含结束符,若定长是容量printf("sizeof(p) = %d\n", sizeof(p));//指针占用空间大小
}

在这里插入图片描述
strlen,求字符串长度,即字符个数;
sizeof,求字符串空间大小= 个数 * 单位字节数;

	int a[] = {1,2,3};int b[10] = {1,2,3};printf("\nsizeof(a) = %d\n", sizeof(a));//s数组占用空间大小(可理解数组容量)printf("sizeof(b) = %d\n", sizeof(b));s数组占用空间大小,若定长是容量

在这里插入图片描述

重要问题 无论什么时候都不要在main外面初始化,除非声明并初始化

变量定义到外面 p =s就报错;
变量定义到 main里面就可以运行;
为什么?
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

无论什么时候都不要在main外面初始化,除非声明并初始化;

验证发现,确实如此;
在这里插入图片描述
如果要在main外面初始化,那么在声明的时候就初始化,声明和赋值不能写成两行;

char s[10] = "china";
char* p = s;
int a = 120;
void main(){}

“我觉得应该和代码的执行顺序有关,函数外,只负责分配内存,不负责执行任何东西,你的p = s;压根就没执行,因为main才是程序执行的入口”

“跟全局变量和局部变量 存储位置有吧? ”

C语言中局部变量存在栈里,全局变量存静态存储区。

局部变量空间上分配,这个局部变量所在的函数被多次调用时,每次调用这个局部变量在栈上的位置都不一定相同。局部变量也可以在堆上动态分配,但是记得使用完这个堆空间后要释放之。

全局变量全部存放在静态存储区,在程序开始执行时给全局变量分配存储区,程序行完毕就释放。在程序执行过程中它们占据固定的存储单元,而不动态地进行分配和释放;

16.已有函数max(a, b),为了使函数指针变量p指向函数max,正确的赋值方法是()。

A: *p = max(a, b);
B: *p = max;
C:p = max;
D:p = max(a, b);
C

函数指针示例

int max(int a, int b) {return  a > b ? a : b;
}void main()
{//定义函数指针int (*p)(int a, int b);//赋值,函数指针变量p指向函数maxp = max;//调用printf("(*p)(5,8) = %d\n",(*p)(5,8));	
}

在这里插入图片描述

17.在32位处理器下执行以下程序,以下选项正确的是()。

char code[]="Hello world!";
char *p = code;
long a = 1000;
int n = 10;
A : sizeof(code) == 11
B : sizeof( p ) == 12
C : sizeof(a) == sizeof(n)
D : 以上都不对
C

在这里插入图片描述
long是长整型 long int的缩写形式,int是整型。
后者包含前者,前者是后者的一种类型。所以说他俩没区别,但又有点小不一样。
写代码的时候用int,是默认,用long是专门标注强调,另外,long还分有无符号。
就好比去吃早点,不强调不吃芫荽,店家可能就会默认给你放上。

long和int在不同环境的编译器下需要的存储大小不同。
在这里插入图片描述

32位机中,
char1个字节
short2个字节
int4个字节
long4个字节64位机中,
char1个字节
short2个字节
int4个字节
long8个字节 //但是,我在64位系统,x86,x64编译都是4
void main()
{char a = 10;short b = 10;int c = 10;long d = 1000;float e = 12;double f = 5;printf("  char %d\n", sizeof(a));printf(" short %d\n", sizeof(b));printf("   int %d\n", sizeof(c));printf("  long %d\n", sizeof(d));printf(" float %d\n", sizeof(e));printf("double %d\n", sizeof(f));
}

64位系统,x86编译
在这里插入图片描述
64位系统,x64编译
在这里插入图片描述

18.定义一个函数实现交换x和y的谊,并将结果正确返回。能够实现此功能的是

//A
swapa(int x, int y) {int temp;temp = x;x = y;y = temp;
}//B
swapb(int* x, int* y)
{int temp;temp = x;x = y;y = temp;
}//C
swapc(int* x, int* y) {int temp;temp = *x;*x = *y;*y = temp;
}//D
swapd(int *x, int *y){int* temp;temp = x;x = y;y = temp;
}
C
void main()
{int a = 5, b = 9;swapa(a, b);printf("%d,%d\n", a, b);int c = 5, d = 9;swapb(&c, &d);printf("%d,%d\n", c, d);int e = 5, f = 9;swapc(&e, &f);printf("%d,%d\n", e, f);int g = 5, h = 9;swapd(&g, &h);printf("%d,%d\n", g,h);
}

在这里插入图片描述

(1)将指针作为实参,可以对该指针指向的对象,也就是实参进行修改

void swap2(int *n1, int *n2)
{int tmp;tmp = *n1;*n1 = *n2;*n2 = tmp;    
} 
swap(&a,&b);

使用引用形参达到目的

void swap(int &x, int &y)
{int t;t=x;x=y;y=t;
}
swap(&a,&b);

引用方式出错
在这里插入图片描述

19.对以下代码理解正确的是()。

(1) char *p = malloc(5);
(2) memcpy(p, "123456", 5);
(3) strcpy(p, "123456");
(4) free(p);*p=1;

A:(2)会导敌指针越界
B:(3)会导致指针计越界
C:(4)必然会使系统死机
D:以上都确

D 

21.执行下面程序,运行结果是

#include <stdio.h>
long fib(int n){if (n > 2) {return (fib(n - 1) + fib(n - 2));}else {return 2;}
}
void main(){printf("%din", fib(3));
}
A: 2
B: 4
C: 6
D: 8

在这里插入图片描述

23.执行下面程序运行结果是

#include<stdio.h>
int w =3;
int fun(int k){if (k ==0)return w; return (fun(k-1)* k); //阶乘
}
void main()
{
int w=10;
printf("%dIn", fun(5)*w);
}
A 360
B 3600
C 1080
D 1200

在这里插入图片描述

n*(n-1),
直到 n=1时,f(n-1) = f(0), return w; w=3;
即,fun(5) = 5*4*3*2*1*3 = 120*3;
fun(5)*w = 360 *10 = 3600;

25.在32位的处理器上,定义以下结构体,则语句printf(“%d”,sizdof(struct s);的输出结果是) 。

struct s{int a;char b;float f;
};

四字节对齐

12

26.在32位ARM处理器上,执行如下程度,输出结果为()。

typedef struct {char a;int b;char c;int d;
}_str_1_t;typedef struct {char a;char c;int b;int d;
}_str_2_t;printf("%d,%d", sizeof(_str_1_t), sizeof(_str_2_t));
16,12

在这里插入图片描述
64位也是16,12
在这里插入图片描述

27.有以下说明,则值为210的表达式是()

int x0[] = { 110, 120 }, x1[] = { 210, 220 };struct s x[] = { {100}, {200} }, *p= x;x[0].b = x0;
x[1].b = x1;A: *p->b
B: (++p)->a
C: *(p++)->b
D: *(++p)->b
D

31.域名服务DNS的正向解析是().

A将域名转换为物理地址.
B将域名转换为为IP地址
CIP地址转换为物理地址
D:将IP也转专换为域名
B 

1、DNS的作用
正向解析:根据域名查找对应的IP地址
反向解析:根据IP地址查找对应的域名

DNS系统的分布式数据结构
在这里插入图片描述

2、DNS概述
在日常生活中人们习惯使用域名访问服务器,但机器间互相只认IP地址,域名与IP地址之间是多对一的关系,一个Ip地址不一定只对应一个域名,且一个域名只可以对应一个Ip地址,它们之间的转换工作称为域名解析,域名解析需要由专门的域名解析服务器来完成,整个过程是自动进行的。

32.TCP和UDP协议的相似之处是。

A:都是面向连接的协议
B:邹是面向上连接的协议
C传输层协议
D以均不对
D 

33.以下用于文件传输的协议是()。

A: HTML
B: SMTP
C: FTP
D: POP
C 

FTP协议用于文件传输。

FTP是File Transfer Protoco文件传输协议的缩写,FTP用于在网络上进行文件传输的一套标准协议,使用客户/服务器模式。它属于网络传输协议的应用层。文件传送和文件访问之间的区别在于:前者由FTP提供,后者由如NFS等应用系统提供。

FTP协议能操作任何类型的文件而不需要进一步处理,就像MIME或Unicode一样。但是,FTP有着极高的延时,这意味着,从开始请求到第一次接收需求数据之间的时间,会非常长;并且不时的必须执行一些冗长的登录进程。

34.对于下列说法,错误的是。

A: TCP协议可以提供可靠的数据流传输服务
B:TCP协议可以提供面向连接的数据流传输服务
C:TCP协议可以提供全双工的数据流传输服务
D:TCP协议可以提供面向非连接的数据流传输服务
D

35.在以太网中实现IP地址到MAC地址的解析,主要通过()协议实现。

A: RTP
B: ARP
C: IGMP
D: ICMP
B

ARP协议 Address Resolution Protocol 地址解析协议

36.linux所有服务的启动脚本都存放在()目录中。

A: /boot
B: /etc/init.d
C:/opt
D: /proc/sys
B

38.以下对信号的理解不正确的是()。

A:信号是一种异步通信方式
B:信号只用在用户空间进程通信,不能和内核空间交互
C:信号是可以被屏蔽的
D:信号是通过软中断实现的
B 

43.以下关于UART描术正确的

A:全双工、异步通信方式
B:半双工、同步通信方式
C:全双工、同步通信方式
D:半双工、异步通信方式
A
全双工、异步;
TX发送端、RX接收端;
UART空闲状态通常保持在高电平,起始位给一个低电平,然后读取数据,停止位给一个高电平。

44.执行以下程序段,*c的结果是()

char test[10] ={0,1,2,3,4,5,6,7,8, 9};
short *a = test;
a++;//short加2字节
int *b =a;
b++;//int加4字节
unsigned char *c=b;
c++;//char加1字节
A:7
B:6
C:2
D: 8

共,加加7字节,c= a+7

A
	64位系统,x64,x86运行结果一样printf("%d\n",*c);	printf("%p\n", test);printf("%p\n", a);//short加2字节printf("%p\n", b);//int加4字节printf("%p\n", c);//char加1字节

在这里插入图片描述
在这里插入图片描述

45.在stm32单片机中,以下对中断理解正确的是()。

A:GPIO无法产生中断
B:多个中断同时产生采取随机进入中断函数的方式
C:在main函数的while中执行某个函数时产生中断,需等到该函数执行完中断函数中执行
D:在中断处理函数中尽量不要处理比较复杂的逻辑
D 

46.使用DMA技术的目的是()。

A:解决CPU和主存之间的速度匹配问题
B:I/O设备相互之间可实现并行工作
C:解放CPU,提高资源利用率
D:可实现低速IO设备与主存直接交换信息
A

简单地说是:控制是硬盘内部的控制读写,这样有利于减轻CPU负担,加快读取速度。

复杂点,专业点:
Direct Memory Access(存储器直接访问)。这是指一种高速的数据传输操作,允许在外部设备和存储器之间直接读写数据,既不通过CPU,也不需要CPU干预。整个数据传输操作在一个称为"DMA控制器"的控制下进行的。CPU除了在数据传输开始和结束时做一点处理外,在传输过程中CPU可以进行其他的工作。这样,在大部分时间里,CPU和输入输出都处于并行操作。因此,使整个计算机系统的效率大大提高。

47.指令周期是指()。

A: CPU从主存取出一条指令的时间
B: CPU执行一条指令的时间
C:CPU从主存取一条指令加CPU执行这条指令的时间
D: 时钟周期时间
C

指令周期是取出一条指令并执行这条指令的时间。一般由若干个机器周期组成,是从取指令、分析指令到执行完所需的全部时间。
CPU周期 :又称机器周期,CPU访问一次内存所花的时间较长,因此用从内存读取一条指令字的最短时间来定义。
时钟周期: 通常称为节拍脉冲或T周期。一个CPU周期包含若干个时钟周期。

48.主存贮器和CPU之间增加cache的目的是()。

A:解决CPU和主存之间的速度匹配问题
B:扩大CPU中通用寄存器的数量
C:扩大主存贮器容量
D:既扩大主存贮器容量,又扩大CPU中通用寄存器的数量
A

高速缓冲存储器(Cache)是位于CPU与主存间的一种容量较小但速度很快的存储器。由于CPU的速度远高于主存,CPU直接从主存中存取数据要等待一定的时间周期,Cache中保存着CPU刚用过或循环使用的一部分数据,当CPU再次使用该部分数据时可从Cache中直接调用,这样就减少了CPU的等待时间,提高了CPU对主存的访问效率.

49.没有外存贮器的计算机监控程序可以存放在()。

A:RAM
B:ROM
C:RAM和ROM
D:CPU
B 

50.用2条8位的数据总线传输64位二进制代码,需要传输几次()。

A:8次
B:4次
C:1次
D:2
http://www.dtcms.com/a/326611.html

相关文章:

  • 从零开始的ReAct Agent尝试
  • 应用监控工具Skywalking
  • bitbake –s:列出所有可编译的模块
  • 【STL】queue队列容器
  • priority_queue(优先级队列)和仿函数
  • ArkUI中的自定义组件(一)
  • 用于计算的程序是部署在哪里,为什么可以这样?
  • 从 WebView2 迁移至 DotNetBrowser:第一部分
  • android 换肤框架详解2-LayoutInflater源码解析
  • 《零基础入门AI:深度学习基础核心概念解析(从激活函数到反向传播)》
  • 大模型提示词工程实践:提示词工程实践-引导大模型完成任务
  • 直播美颜SDK架构设计指南:美白滤镜的高效实现与跨平台适配
  • MySQL 基本语法
  • 【网络基础】深入理解 TCP/IP 协议体系
  • 秒懂边缘云|1分钟了解边缘安全加速 ESA
  • GCC C++实现Matlab矩阵计算和数学函数功能
  • 乡土诗性的多重奏鸣——儿歌《生我养我的小村庄》文学赏析
  • C5.3:发射极偏置和LED驱动电路
  • 26考研|西安电子科技大学优势学科、25考研复试线及就业质量分析报告
  • 力扣热题100-----322.零钱兑换
  • 事务的特性
  • 下一代防火墙组网方案
  • IoT/透过oc_lwm2m/boudica150 源码中的AT指令序列,分析NB-IoT接入华为云物联网平台IoTDA的工作机制
  • visual studio 2015 使用番茄助手(Visual Assist)给函数自动添加注释模板
  • WSL / Linux安装MySQL(以及注意事项)
  • 嵌入式学习的第四十八天-中断+OCP原则
  • Photoshop图层混合模式:实现图像元素透明度渐变过渡的终极指南
  • Effective C++ 条款36: 绝不重新定义继承而来的非虚函数
  • 数据结构:树与二叉树
  • ARM基础概念 day51