一: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