首页 > 其他分享 >嵌入式开发笔试题99题

嵌入式开发笔试题99题

时间:2024-03-06 14:36:14浏览次数:13  
标签:char const int void 笔试 嵌入式 99 str printf

1.

int main(int argc,char *argv[])

{

  int c=9,d=0;

  c=c++%5;

  d=c;

  printf("d=%d\n",d);

  return 0;

}

a) 写出程序输出

b) 在一个可移植的系统中这种表达式是否存在风险?为什么?

 

2.

int a=0;

int b;

static char c;

int main(int argc,ch ar *argv[])

{

  char d=4;

  static short e;

  

  a++;

  b=100;

  c=(char)++a;

  e=(++d)++;

  printf("a=%d, b=%d, c=%d, d= %d, e=%d",a,b,c,d,e);

  return 0;

}

a) 写出程序输出

b) 编译器如果安排各个变量(a,b,c,d)在内存中的布局(eg. stack,heap,data section,bss section),最好用图形方式描述。

 

3.

中断是嵌入式系统中重要的组成部分,这导致了许多编译开发商提供一种扩展:让标准 C 支持中断,产生了一个新的关键字 __interrupt。下面的代码就使用了 __interrupt 关键字去定义了一个中断服务子程序(ISR),请评论以下这段代码。

__interrupt double compute_area(double radius)

{

  double area = PI * radius *radius;

  printf("nArea = %f", area);

  return area;

}

 

4.

a)关键字 volatile 在编译时有什么含义?并给出三个不同使用场景的例子(可以伪代码或者文字描述)。

b)C 语言中 static 关键字的具体作用有哪些?

c)请问下面三种变量声明有何区别?请给出具体含义

int const *p;

int* const p;

int const* const p;

 

5.

a)对于整形变量 A=0x12345678,请画出在 little endian 及 big endian 的方式下在内存中是如何存储的。

b)在 ARM 系统中,函数调用的时候,参数是通过哪种方式传递的?

c)中断(interrupt,如键盘中断)与异常(exception,如除零异常)有何区别?

 

6.

设周期性任务 P1、P2、P3 的周期为 T1、T2、T3 分别为 100、150、400,执行时间分别为20、40、100。请设计一种调度算法进行任务调度,满足任务执行周期及任务周期。

 

7.

优先级反转问题在嵌入式系统中是一中严重的问题,必须给与足够重视。

a)首先请解释优先级反转问题

b)很多 RTOS 提供优先级继承策略(Priority inheritance)和优先级天花板策略(Priority ceilings)用来解决优先级反转问题,请讨论这两种策略。

 

8. 表达式 8&3 的结果是__________。

 

9.

设 int x;,则经过(  )后,语句 *px=0; 可将 x 值置为 0。

A int * px;                B int const * px=&x;

C int * const px=&x;       D const int * px=&x;

 

10. 下面代码执行之后输出什么?

# include <iostream.h>

void fun(int,int,int * );

void main()

{

  int x,y,z;

  fun (2,3,&x);

  fun (4,x,&y);

  fun (x,y,&z);

  cout<<x<<','<<y<<','<<z<<endl;

}

 

void fun(int a,int b,int * c )

{

  b*=a;

  *c=b-a;

}

 

11.

char *f()

{

  char a[5];

  char b[5];

  a[0]='a';

  a[1]='b';

  a[2]='c';

  a[3]='d';

  a[4]='e';

  strcpy(b,a);

  return b;

}

a)该函数中用 a 作为一个字符串是否存在问题?

b)该函数返回的 b 是否可用,为什么?

 

12.

void f()

{

  char *a;

  a=(char*)malloc(5);

  strcpy(a,"abc");

  a="cde";

  free(a);

}

该函数存在哪些问题?

 

13.

从 internet上 得到一个 Linux Kernel 的软件包 linux-2.4-20.tz 请写出将其编译安装的过程。

 

14.

a)

void GetMemory(char *p)

{

  p = (char *)malloc(100);

}

void Test(void)

{

  char *str = NULL;

  GetMemory(str);

  strcpy(str, "hello world");

  printf(str);

}

请问运行 Test 函数会有什么样的结果?

b)

char *GetMemory(void)

{

  char p[] = "hello world";

  return p;

}

void Test(void)

{

  char *str = NULL;

  str = GetMemory();

  printf(str);

}

请问运行 Test 函数会有什么样的结果?

c)

void GetMemory2(char **p, int num)

{

  *p = (char *)malloc(num);

}

void Test(void)

{

  char *str = NULL;

  GetMemory(&str, 100);

  strcpy(str, "hello");

  printf(str);

}

请问运行 Test 函数会有什么样的结果?

d)void Test(void)

{

  char *str = (char *) malloc(100);

  strcpy(str, “hello”);

  free(str);  

  if(str != NULL)

  {

  strcpy(str, “world”);

  printf(str);

  }

}

请问运行 Test 函数会有什么样的结果?

 

15. C 语言中静态链接库、动态链接库、共享链接库有何区别?

 

16. 每个嵌入式系统都有只读存储器 eprom 之类的,请问 rom 中有些什么,如何布局

 

17. 请描叙 bootloader 的主要功能和执行流程

 

18. 简要分析嵌入式系统的体系结构

 

19. 列出 linux 文件系统的目录结构

 

20. 一个嵌入式系统从软件的角度看通常可以分为哪几个层次?试解释之。

 

21. 请画出你熟悉的嵌入式系统物理内存映像(Memory Map)并作解释。

 

22. Linux Kernel 的 C 代码入口函数是什么?试简述其功能。

 

23.

写出判断 ABCD 四个表达式的是否正确, 若正确, 写出经过表达式中 a 的值

int a = 4;

(A) a += (a++);  (B) a += (++a) ;  (C) (a++) += a;  (D) (++a) += (a++);

a = ?

 

24.

某 32 位系统下,C++ 程序,请计算 sizeof 的值。

char str[] = “http://www.ibegroup.com/”

char *p = str ;

int n = 10;

请计算

sizeof (str ) = ?(1)

sizeof ( p ) = ?(2)

sizeof ( n ) = ?(3)

void Foo ( char str[100]){

请计算

sizeof( str ) = ?(4)

}

void *p = malloc( 100 );

请计算

sizeof ( p ) = ?(5)

 

25. 杨辉三角

 

26.

质数又称素数。指在一个大于 1 的自然数中,除了 1 和此整数自身外,没法被其他自然数整除的数。换句话说,只有两个正因数( 1 和自己)的自然数即为素数。比 1 大但不是素数的数称为合数。1 和 0 既非素数也非合数。素数在数论中有着很重要的地位。

 

27.

约瑟夫问题是个有名的问题:N 个人围成一圈,从第一个开始报数,第 M 个将被杀掉,最后剩下一个,其余人都将被杀掉。例如 N=6,M=5,被杀掉的人的序号为 5,4,6,2,3。最后剩下 1 号。

 

28.

斐波那契数列指的是这样一个数列:1、1、2、3、5、8、13、21、…… 这个数列从第三项开始,每一项都等于前两项之和。

 

29. 头文件中 ifndef / define / endif  是做什么用的?

 

30. #include <filename.h> 和 #include “filename.h” 有什么区别?

 

31. 用预处理指令 #define 声明一个常数,用以表明 1 年中有多少秒(忽略闰年问题)。

 

32. 写一个"标准"宏 MIN ,这个宏输入两个参数并返回较小的一个

 

33. 请编写一个程序,在一个升序的整形数组中是否有一个需要找的数,用折半查找法?

 

34.

请编写一个程序,输出一个 short 类型数的镜像。(既:假如一个 unsigned short 类型的数的二进制码是 1111 1111 0000 0000 那输出应为 0000 0000 1111 1111)。

 

35. 请编写程序,将一个有数字组成的字符串转化为整数。(不允许使用库函数 atoi() )

 

36.

已知 strcpy 函数的原型是 char *strcpy(char *strDest, const char *strSrc); 其中 strDest 是目的字符串,strSrc 是源字符串。不调用 C++/C 的字符串库函数,请编写函数 strcpy。

 

37.

请编写一个程序,输出显示如下图形。

1  1  1  1  1

1  2  2  2  1

1  2  3  2  1

1  2  2  2  1

1  1  1  1  1

 

38.

设编号为 1,2,… n 的 17 个人围坐一圈,从 1 开始报数,数到 3 的那个人出列,它的下一位又从 1 开始报数,数到 3 的那个人又出列,依次类推,请编写一个程序,来得到最后留下来的那个人的编号。

 

39. 请编写一个程序,实现一个二叉树中序的遍历。

 

40.

请编写一个程序,实现以下功能。

1)创建一棵链表,该链表的每个节点有来存放一个整形的数。(提示:在创建链表时可以用输入 0 来结束创建)

2)查找一个数是否是该链表的一个节点。

3)如果这个数是在这个链表中,那么就删除该节点。

请自己定义相关数据结构。

 

41. 局部变量能否和全局变量重名?

 

42. 如何引用一个已经定义过的全局变量?

 

43. 全局变量可不可以定义在可被多个 .C 文件包含的头文件中?为什么?

 

44. 动态连接库的两种方式?

 

45. int i=10, j=10, k=3;  k*=i+j;  k 最后的值是?

 

46. 什么是“引用”?声明和使用“引用”要注意哪些问题?

 

47.

static 全局变量与普通的全局变量有什么区别? static 局部变量和普通局部变量有什么区别? static 函数与普通函数有什么区别?

 

48. 面向对象的三个基本特征,并简单叙述之?

 

49. 请说出 static 和 const 关键字尽可能多的作用。

 

50. new delete 与 malloc free 的联系与区别?

 

51. #define DOUBLE(x) x+x ,i = 5*DOUBLE(5); i 是多少?

 

52. 有哪几种情况只能用 intialization list 而不能用 assignment ?

 

53. C++ 是不是类型安全的?

 

54. main 函数执行以前,还会执行什么代码?

 

55. 描述内存分配方式以及它们的区别?

 

56. Heap与Stack的差别?

 

57. 在8086 汇编下,逻辑地址和物理地址是怎样转换的?

 

58. C 和 C++ 有什么不同?

 

59.

假设你有 8 个球,其中一个略微重一些,但是找出这个球的惟一方法是将两个球放在天平上对比。最少要称多少次才能找出这个较重的球?

 

60. 进程和线程的差别?

 

61.

main()

{

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

  int *ptr=(int *)(&a+1);

  printf("%d,%d",*(a+1),*(ptr-1));

}

语句 printf("%d,%d",*(a+1),*(ptr-1)); 的执行结果是?

 

62.

设有以下说明和定义:

typedef union {long i; int k[5]; char c;} DATE;

struct data { int cat; DATE cow; double dog;} too;

DATE max;

则语句 printf("%d",sizeof(struct data)+sizeof(max)); 的执行结果是?

 

63.

请填写 BOOL,float,指针变量与“零值”比较的 if 语句。

1) 请写出 BOOL  flag 与“零值”比较的 if 语句。

2) 请写出 float  x 与“零值”比较的 if 语句。

3) 请写出 char  *p 与“零值”比较的 if 语句。

 

64.

请简述以下两个for循环的优缺点。

1)

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

{

  if (condition)

    DoSomething();

  else

    DoOtherthing();

}

2)

if (condition)

{

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

  DoSomething();

}

else

{

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

           DoOtherthing();

}

 

65. 已知链表的头结点 head,写一个函数把这个链表逆序

 

66.

已知两个链表 head1 和 head2 各自有序,请把它们合并成一个链表依然有序(保留所有结点,即便大小相同)。

 

67.

已知两个链表 head1 和 head2 各自有序,请把它们合并成一个链表依然有序,这次要求用递归方法进行。

 

68. 写一个函数找出一个整数数组中,第二大的数。

 

69.

写出判断 ABCD 四个表达式的是否正确, 若正确, 写出经过表达式中 a 的值

int a = 4;

(A)a += (a++);  (B) a += (++a) ; (C) (a++) += a; (D) (++a) += (a++);

 

70.   

请问以下代码有什么问题:

int main()

{

  char a;

  char *str=&a;

  strcpy(str,"hello");

  printf(str);

  return 0;

}

 

71.

给定字符串 A和 B,输出 A 和 B 中的最大公共子串。 比如 A="aocdfe" ,B="pmcdfa" 则输出 "cdf"。

 

72.

用变量 a 给出下面的定义

(1) 一个整型数(An integer)

(2) 一个指向整型数的指针(A pointer to an integer)

(3) 一个指向指针的的指针,它指向的指针是指向一个整型数(A pointer to a pointer to an intege)

(4) 一个有 10 个整型数的数组(An array of 10 integers)

(5) 一个有 10个指针的数组,该指针是指向一个整型数的。(An array of 10 pointers to integers)

(6) 一个指向有 10 个整型数数组的指针(A pointer to an array of 10 integers)

(7) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数(A pointer to a function that takes an integer as an argument and returns an integer)

(8) 一个有 10 个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数(An array of ten pointers to functions that take an integer argument and return an integer )

 

73.

(1) 关键字 const 有什么含意?

(2) 下面的声明都是什么意思?

const int a;

int const a;

const int *a;

int * const a;

int const * a const;

 

74.

嵌入式系统总是要用户对变量或寄存器进行位操作。给定一个整型变量 a ,写两段代码,第一个设置 a 的 bit 3,第二个清除 a 的 bit 3。在以上两个操作中,要保持其它位不变。

 

75.

嵌入式系统经常具有要求程序员去访问某特定的内存位置的特点。在某工程中,要求设置一绝对地址为 0x67a9 的整型变量的值为 0xaa66 。编译器是一个纯粹的 ANSI 编译器。写代码去完成这一任务。

 

76.

下面的代码输出是什么,为什么?

void foo(void)

{

    unsigned int a = 6;

    int b = -20;

    (a+b > 6) ? puts("> 6") : puts("<= 6");

}

 

77.

评价下面的代码片断:

unsigned int zero = 0;

unsigned int compzero = 0xFFFF;

/*1&aposs complement of zero */

 

78.

下面的代码片段的输出是什么,为什么?

char *ptr;

if ((ptr = (char *)malloc(0)) == NULL)

    puts("Got a null pointer");

else

puts("Got a valid pointer");

 

79.

main(){

  struct node

  {

    int a;

    int b;

    int c;

  };

  struct node  s= { 3, 5,6 };

  struct node *pt = &s;

  printf("%d" , *(int*)pt);

}

这段程序的输出是:

(a) 3

(b) 5

(c) 6

(d) 7

 

80.

void foo(int [][3] );

main(){

  int a [3][3]= { { 1,2,3} , { 4,5,6},{7,8,9}};

  foo(a);

  printf("%d" , a[2][1]);

}

void foo( int b[][3])

{

  ++ b;

  b[1][1] =9;

}

这段程序的输出是:

(a) 8

(b) 9

(c) 7

(d) 以上均不对

 

81.

main(){

  int a[][3] = { 1,2,3 ,4,5,6};

  int (*ptr)[3] =a;

  printf("%d %d "  ,(*ptr)[1], (*ptr)[2] );

  ++ptr;

  printf("%d %d"  ,(*ptr)[1], (*ptr)[2] );

}

这段程序的输出是:

(a) 2 3 5 6

(b) 2 3 4 5

(c) 4 5 0 0

(d) 以上均不对

 

82.   

main()

{

  int i=3;

  int j;

  j = sizeof(++i+ ++i);

  printf("i=%d j=%d", i ,j);

}

这段程序的输出是:

(a) i=4 j=2

(b) i=3 j=2

(c) i=3 j=4

(d) i=3 j=6

 

83.

main()

{

  char p;

  char buf[10] ={ 1,2,3,4,5,6,9,8};

  p = (buf+1)[5];

  printf("%d" , p);

}

这段程序的输出是:

(a) 5

(b) 6

(c) 9

(d) 以上都不对

 

84.

void f(char**);

main()

{

  char * argv[] = { "ab" ,"cd" , "ef" ,"gh", "ij" ,"kl" };

  f(argv);

}

void f( char **p )

{

  char* t;

  t= (p+= sizeof(int))[-1];

  printf( "%s" , t);

}

这段程序的输出是:

(a) ab

(b) cd

(c) ef

(d) gh

 

85. 请编写程序,将一个整数转换为字符串。

 

86. 嵌入式系统中,动态分配内存可能发生的问题是什么?

 

87. 编写字符串反转函数,要求时间和空间效率都尽量高。函数原型为:char* strrev(char* dest, char* src)。

 

88.   

编写一组单链表操作函数.链表的结构如下:

struct NODE

{

  int value;

  struct NODE *next;

};

typedef struct NODE Node;

链表节点以 id 的从小到大排列,当 id 相等时,节点顺序没有约定,谁在前都可以。

要求编写的函数有:

遍历函数:返回 cur 下一个节点,如果没有更多的节点,返回 0;

Node* ListNext(Node *cur);

插入函数:将 newNode 插入到 head 链表中,然后返回 newNode 的前一节点,

如果 newNode 已经在链表中,返回 0。

Node* ListInsert(Node *head, Node *newNode);

删除函数:从 head 中删除 theNode 节点,返回 theNode 的前一节点。

如果 theNode 不在链表中,返回 0;

Node* ListRemove(Node *head, Node *theNode);

 

89.

const char*, char const*,char*const 的区别?

 

90.

下面这个程序执行后会有什么错误或者效果:

#define MAX 255

int main()

{

  unsigned char A[MAX],i;

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

    A[i]=i;

}

 

91. ASSERT() 是干什么用的。

 

92. 编程实现删除有序数组中的重复元素。

 

93. 引用与指针有什么区别?

 

94. 描述实时系统的基本特性。

 

95. 什么是平衡二叉树?

 

96. 堆栈溢出一般是由什么原因导致的?

 

97. 冒泡排序算法的时间复杂度是什么?

 

98. 写出 float x  与“零值”比较的 if 语句。

 

99. 不能做 switch() 的参数类型是。

标签:char,const,int,void,笔试,嵌入式,99,str,printf
From: https://www.cnblogs.com/kitsum/p/13964663.html

相关文章

  • P10149 [Ynoi1999] XM66F 题解
    分析考虑莫队。对于$a_i=k(l\lei\ler)$的下标集合$S_k$,当其加入一个新的下标$x$时,这个新下标对答案的贡献分两种情况。第一种,$x$最小。相邻从下标的间隔中产生的贡献是$\sum(|S_k|-i+1)\times(ans_{S_{k,i+1}}-ans_{S_{k,i}})$。画个图可以理解一下:第二中,$x$最......
  • 嵌入式之函数指针和回调函数
    概念函数指针即指向函数的指针通常我们说的指针变量是指向一个整型、字符型或数组等变量,而函数指针是指向函数。函数指针可以像一般函数一样,用于调用函数、传递参数。函数指针的定义方式为:函数返回值类型(*指针变量名)(函数参数列表);int(*p)(inta,intb)作用一是可以......
  • JAVA案例:打99乘法表和打三角形
     packagecom.itheima.anli;publicclassAnli3{publicstaticvoidmain(String[]args){for(inti=1;i<=9;i++){for(intj=1;j<=i;j++){intx=j*i;System.out.print(j+"x"+i+&......
  • 在嵌入式设备中用多项式快速计算三角函数和方根
    惯性传感器的倾角计算要用到三角函数.在MCS-51,CortexM0,M3之类的芯片上编程时,能使用的资源是非常有限,通常只有两位数KB的Flash,个位数KB的RAM.如果要使用三角函数和开方就要引入math.h,会消耗掉10KB以上的Flash空间.在很多情况下受硬件资源限制无法使用math.h,......
  • 《痞子衡嵌入式半月刊》 第 93 期
    痞子衡嵌入式半月刊:第93期这里分享嵌入式领域有用有趣的项目/工具以及一些热点新闻,农历年分二十四节气,希望在每个交节之日准时发布一期。本期刊是开源项目(GitHub:JayHeng/pzh-mcu-bi-weekly),欢迎提交issue,投稿或推荐你知道的嵌入式那些事儿。上期回顾:《痞子衡嵌入式半月......
  • 推出LS1023ASE7MQA、LS1023ASE7PQA、LS1023ASE7QQA、LS1023ASE7KQA、LS1023ASN7KNLB面
    介绍LS1023A处理器是面向嵌入式网络的双核64位Arm®处理器。LS1023A可通过支持无风扇设计的灵活I/O封装,提供超过10Gbps的性能。这款SoC是专为小规格网络、工业和汽车应用而打造的解决方案,针对经济型低端PCB优化了物料成本(BOM),降低了电源成本,采用单时钟设计。产品LS1023ASN7KN......
  • 嵌入式学习
    总体认识:Ubuntu桌面上右键/ctrl+alt+T,打开终端一般文件路径看不出磁盘(没CDE分盘)需要运行disk查看上图就是表示只有一个磁盘,四个分区,橙色部分是第二个分区,挂载在/boot目录下,在/boot建文件1.txt,它就会被放在第二分区sd-磁盘a-第一个磁盘1-第一个分区......
  • 2023互联网笔试记录汇总(61道真题+题解)
    以下编程题均为博主在2023年投递实习和秋招过程中的笔试真题(共61道编程题),为避免不必要的麻烦,不对题目的来源进行说明。3.4第一题题意:给一个数组(n≤2e5),求数组内任意数对的最大差值。即对任意i<j,求最大的x[j]-x[i]。题解:处理一下前缀最小值。第二题题意:给一个数组(n≤2e5......
  • 10199元起 LG gram Pro 2024款笔记本上架:酷睿Ultra 7+120Hz OLED屏
    LGgramPro2024款笔记本目前已经上架,首发10199元起。设计上,新款笔记本的重量只有1199克,厚度仅为12.4毫米,轻薄机身可以轻松放入日常背包。据悉,新款笔记本提供了16英寸(16Z90SP)和17英寸(17Z90SP)版本,采用2.8KOLED屏幕,支持120Hz超高刷新率。性能上,新款笔记本可选英特尔酷睿Ultra......
  • p3990-solution
    P3990Solutionlink一次只能跳一步的情况下:\(dp_{i,j}=dp_{i-1,j-1}+dp_{i-1,j}+dp_{i-1,j+1}\)接下来考虑能跳奇数步:你发现跳\(3\)步相当于先跳一个奇数\(1\)再跳一个\(2\),跳\(5\)步相当于先跳一个奇数\(3\)再跳一个\(2\)也就是说能够一步跳到\((i,j)\)的一定能......