嵌入式C-经典笔试题


搬自:https://blog.csdn.net/ffmxnjm/article/details/51519976


目录(链接无效)

第一部分:基本概念及其它问答题 3

1、关键字static的作用是什么? 3

2、“引用”与指针的区别是什么? 3

3、.h头文件中的ifndef/define/endif 的作用? 4

4、#include 与 #include "file.h"的区别? 4

5、描述实时系统的基本特性 4

6、全局变量和局部变量在内存中是否有区别?如果有,是什么区别? 4

7、什么是平衡二叉树? 4

8、堆栈溢出一般是由什么原因导致的? 4

9、冒泡排序算法的时间复杂度是什么? 4

10、什么函数不能声明为虚函数? 4

11、队列和栈有什么区别? 4

12、不能做switch()的参数类型 4

13、局部变量能否和全局变量重名? 4

14、如何引用一个已经定义过的全局变量? 4

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

16、语句for( ;1 ;)有什么问题?它是什么意思? 4

18、statac 全局变量、局部变量、函数与普通全局变量、局部变量、函数 5

19、程序的内存分配 5

20、解释堆和栈的区别 6

21.什么是预编译,何时需要预编译 7

22、关键字const是什么含意? 7

23、关键字volatile有什么含意 并给出三个不同的例子。 8

24、三种基本的数据模型 8

25、结构与联合有和区别? 8

26、描述内存分配方式以及它们的区别? 9

27、请说出const与#define 相比,有何优点? 9

28、简述数组与指针的区别? 9

29、分别写出BOOL,int,float,指针类型的变量a 与“零”的比较语句。 9

30、如何判断一段程序是由C 编译程序还是由C++编译程序编译的? 9

31、论述含参数的宏与函数的优缺点 9

32、用两个栈实现一个队列的功能?要求给出算法和思路! 10

33、嵌入式系统中经常要用到无限循环,你怎么样用C编写死循环呢? 10

34、位操作(Bit manipulation) 10

35、访问固定的内存位置(Accessing fixed memory locations) 11

36、中断(Interrupts) 11

37、动态内存分配(Dynamic memory allocation) 11

38、Typedef 12

39、用变量a给出下面的定义 12

40、解释局部变量、全局变量和静态变量的含义。 13

41、写一个“标准”宏 13

42、A.c 和B.c两个c文件中使用了两个相同名字的static变量,编译的时候会不会有问题? 13

43、一个单向链表,不知道头节点,一个指针指向其中的一个节点,问如何删除这个指针指向的节点? 13

44. C语言中各进制表示法 13

第二部分:程序代码评价或者找错 14

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

3、 C语言同意一些令人震惊的结构,下面的结构是合法的吗,如果是它做些什么? 15

4、设有以下说明和定义: 15

5、请写出下列代码的输出内容 15

6、写出下列代码的输出内容 15

7、请找出下面代码中的所以错误 16

8、请问下面程序有什么错误? 17

9、请问下面程序会出现什么情况? 17

10、以下3个有什么区别 17

11、写出下面的结果 18

12、以下代码中的两个sizeof用法有问题吗? 18

13、写出输出结果(红色标记) 18

14、请问以下代码有什么问题: 19

15、有以下表达式:(红色标记) 19

16、交换两个变量的值,不使用第三个变量。 19

17、下面的程序会出现什么结果 20

18、下面的语句会出现什么结果? 20

19、(void *)ptr 和 (*(void**))ptr的结果是否相同?(红色标记)   ???? 20

20、问函数既然不会被其它函数调用,为什么要返回1? 20

21、对绝对地址0x100000赋值且想让程序跳转到绝对地址是0x100000去执行 20

22、输出多少?并分析过程 21

23、分析下面的程序: 21

24、char a[10],strlen(a)为什么等于15?运行的结果   我测了2   10 22

25、long a=0x801010;a+5=? 22

26、给定结构struct A 22

27、下面的函数实现在一个数上加一个数,有什么错误?请改正。 22

28、给出下面程序的答案(红色标记)//好像有问题 22

29、求函数返回值,输入x=9999; ********   还是不知道??????? 23

30、分析:(红色标记) 24

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

32、写出sizeof(struct name1)=,sizeof(struct name2)=的结果 24

33、struct s1(红色标记)******* 25

34、在对齐为4的情况下  注意************ 25

35、找错 26

36、写出输出结果   ?不懂 27

37、写出程序运行结果 27

38、评价代码 28

39、请问一下程序将输出什么结果?  **** 28

40、写出输出结果 29

41、对下面程序进行分析 29

42、分析: 30

43、分析下面的代码: 30

44、写出输出结果   我的编译器 m=7, n=7,b=7  若把++b变成b++,则结果为m=7, n=3,b=7 30

45、找出错误   //切记遇到char一定要考虑\0  和空间+1 30

第三部分:编程题 31

1、读文件file1.txt的内容(例如): 31

2、输出和为一个给定整数的所有组合 32

3、递规反向输出字符串的例子,可谓是反序的经典例程.********************************** 33

4、写一段程序,找出数组中第k大小的数,输出数所在的位置。 34

5、两路归并排序    好 比较简短 36

6、用递归算法判断数组a[N]是否为一个递增数组。 36

7、单连表的建立,把'a'--'z'26个字母插入到连表中,并且倒叙,还要打印! 37

8、请列举一个软件中时间换空间或者空间换时间的例子。 37

9、outputstr所指的值为123456789 38

10、不用库函数,用C语言实现将一整型数字转化为字符串 38

11、求组合数: 求n个数(1....n)中k个数的组合.... 40

12、用指针的方法,将字符串“ABCD1234efgh”前后对调显示 41

13、有一分数序列:1/2,1/4,1/6,1/8……,用函数调用的方法,求此数列前20项的和 41

14、有一个数组a[1000]存放0--1000;要求每隔二个数删掉一个数,到末尾时循环至开头继续进行,求最后一个被删掉的数的原始下标位置。 42

15、实现strcmp 44

16、实现子串定位 45

17、已知一个单向链表的头,请写出删除其某一个结点的算法,要求,先找到此结点,然后删除。 45

18、有1,2,....一直到n的无序数组,求排序算法,并且要求时间复杂度为O(n),空间复杂度O(1),使用交换,而且一次只能交换两个数.(华为) 46

19、写出程序把一个链表中的接点顺序倒排 46

20、写出程序删除链表中的所有接点 47

21、两个字符串,s,t;把t字符串插入到s字符串中,s字符串有足够的空间存放t字符串 47

22、写一个函数,功能:完成内存之间的拷贝 47

23、公司考试这种题目主要考你编写的代码是否考虑到各种情况,是否安全(不会溢出) 48

24、两个字符串,s,t;把t字符串插入到s字符串中,s字符串有足够的空间存放t字符串 48

25、在一个字符串中找到可能的最长的子字符串,且该字符串是由同一字符组成的。 49

26、在给定的内存区域搜索给定的字符,并返回该字符所在位置索引值。 49

27、给定字符串A和B,输出A和B中的最大公共子串。 49

28、写一个函数比较两个字符串str1和str2的大小,若相等返回0,若str1大于 50

29、求1000!的未尾有几个0(用素数相乘的方法来做,如72=2*2*2*3*3); 51

30、有双向循环链表结点定义为: 51

31、编程实现:找出两个字符串中最大公共子字符串,如"abccade","dgcadde"的最大子串为"cad" 53

32、编程实现:把十进制数(long型)分别以二进制和十六进制形式输出,不能使用printf系列库函数 53

33、输入N, 打印 N*N 矩阵 54

34、斐波拉契数列递归实现的方法如下: 55

35、判断一个字符串是不是回文  abcba从左从右都都是一样的叫回文 56

36、Josephu 问题为:设编号为1,2,… n的n个人围坐一圈 56

37、已知strcpy函数的原型是: 58

第四部分:附加部分 59

1、位域 : 59

宏定义; 2.文件包含; 3.条件编译。 预处理命令以符号"#"开头

在程序中凡是以#号开始的都是预处理命令;宏替换不占用运行时间,只占用编译时间;宏定义后面是没有;好的  如#define pi 3.1415;错的  有分号