嵌入式C语言试题

时间:2022-07-12 18:53:02

一:C语言

1.      必定sizeof(short)<= sizeof(int) <= sizeof(long) ?

a)                     

b)        否

2.      有没有可能sizeof(float)== sizeof(double) == sizeof(long double) ?

a)        

b)        否

 

3.      隐式转换的原则是:

a)        把“比较窄”的数据转换成“比较宽”的数据

b)        把“比较宽”的数据转换成“比较窄”的数据

 

4.      假定int型点16位,long型占32位:

4.-1L < 1U 吗?

-1L < 1UL 吗?

         a)      是,否

         b)      否,是

 

5.      static int i = 0;

5.void func()

5.{

5.    int k = 0;

5.    int * p = malloc(..);

5.}

5.

5.以上i, k, p分别在内存哪个区

i:静态存储区

k:栈

p: p在栈上,p指向的内容分配在堆

 

6.      char* pBuf = "1234";

6.char pBuf[]= "1234";

6.以上变量各自存放在哪个区?

6.两个pBuf都在栈上

 

7.      char str[] = "hello";

7.sizeof(str)= ?

7.strlen(str)= ?

7.6 5

 

 

8.      void swap(int x, int y)

8.{

8.int temp;

8. temp = x;

8. x = y;

8. y = temp;

8.}

8.

int a = 4, b = 5;

swap(a, b);

请输出a, b的值

4 5

 

9.      #define KEYWORD 01

9.#defineEXTRENAL 02

9.#defineSTATIC 04

9.

flags |= EXTERNAL | STATIC;

请说明该语句的作用?

该语句将EXTERNAL,STATIC位置为1

flags &= ~(EXTERNAL | STATIC);

请说明该语句的作用?

将它们置为0

if ((flags & (EXTERNAL | STATIC)) == 0)

请说明该语句的作用?

当这两位都为0时,表达式返回真

10.  以读写模式打开文件时,在读后需要写或写后需要读之前需要执行什么操作?

Fseek

 

 

11.  静态库生成的.lib文件与动态库生成的.lib文件有何不同?

11.动态库生成的lib文件只有地址符号表以确保程序找到对应函数的一些基本地址信息,没有实际执行代码,实际执行代码在dll中,而静态库生成的lib文件既有地址符号表也有实际执行代码。

12.  const char* p1;

char* const p2;

const char* const p3;

char* p4;

请说明以上指针声明的区别。

p1可变,p1指向的内容不可变。

P2一旦赋值,不能再改变,p2指向的内容可变

P3一旦赋值,不能再改变,p3指向的内容也不能改变

P4可变,P4指向的内容也可变。

 

二:数据结构

13.  顺序表与链表的区别是什么?它们各适用于什么场合?

14.  已知初始序列如下:

1   2  4   5   3  9   7

从小到大排序,请给出采用插入排序时,每一步骤的序列。

1   2  4   5   3  9   7

1   2  4   5   3  9   7

1   2  4   5   3  9   7

1   2  3   4   5  9   7

1   2  3   4   5  9   7

1   2  3   4   5  7   9

 

 

15.  已知初始序列如下:

21   25   49  25*   16   08

从小到大排序,请给出采用简单选择排序时,每一步骤的序列。

08  25   49   25*  16   21

08  16   49   25*  25   21

08  16   21   25*  25   49

08  16   21   25*  25   49

08  16   21   25*  25   49

08  16   21   25*  25   49

 

16.  根据以上排序结果,插入排序与简单选择排序都是稳定的吗?为什么?

简单选择排序是不稳定的。

 

三:MISRA C

17.  uint8_t port = 0x5a ;

uint8_t result_8 ;

result_8 = (~port ) >>4 ;

以上程序能否通过MISRA C检查?为什么?

不通过,因为整形的“平衡”原则(隐式转换),在16位和32位编译器中, ~port的值分别为:0xffa5, 0xffffffa5,所以结果是0xfa而不是预期的0x0a

18.  执行以下程序 , d 的值是多少 ?

uint16_t  a = 10;

uint16_t  b = 65531;

uint32_t  c = 0;

uint32_t  d;

d = a + b + c;

32位编译器下:d = 65541

16位编译器下:d = 5

 

 

 

19.  以下数组赋值操作,能通过MISRAC的检查吗?为什么?

code[1] = 109; 

code[2] = 100;

code[3] = 052;

code[4] = 071;

不能,不能用八进制表示数。

 

 

20.  考虑以下程序能否通过MISRAC检查?为什么?

uint8_t *p1;

uint32_t * p2;

p2 = (uint32_t*)p1;

不能,不能在不同类型的指针间转换。

 

 

21.  试分析以下的代码 : j的值是多少?

int32_t   i ;

int16_t   j ;

j = sizeof (i = 1234) ;

j = 4;

 

 

22.  MISRA C规范规定能否采用递归函数?为什么?

不能,函数嵌套过深会导致栈溢出。

 

四: 单元测试

23.  函数char*leftTrim(char* str), 将字符串左边的空格删除,请设计该函数的测试用例。

1.左边有空格:删除;(正常输入)

2.左边无空格:不作处理;(正常输入)

3.全部是空格:全部删除;(正常输入)

4.空串:不作处理;(边界输入)

5.空指针:直接返回。(非法输入)

25.单元测试用例输入数据的设计分为哪几类?

         正常输入,边界输入,非法输入s