MTK深圳公司嵌入式软件工程师笔试题+.doc

【嵌入式软件工程师笔试题解析】 1. 题目要求计算圆的面积,但提供的代码中使用了减法运算符 `-` 而非乘法运算符 `*`。正确的代码应为: ```c #define pi 3.14 #define Area(R) pi * R * R main() { int r1 = 5, r2 = 2; double s = 0; s = Area(r1 + r2); // 应改为:s = Area(r1) + Area(r2); printf("The area is %f", s); } ``` 此题考察的是基本的数学运算和宏定义的使用。 2. 函数指针定义:`int compare(int a, int b)` 的函数指针类型表示为: ```c typedef int (*CompareFunc)(int, int); ``` `CompareFunc` 是一个指向比较函数的指针,它接受两个整数参数并返回一个整数值。 3. 字符串排序问题: ```c #include<stdio.h> void sub(char* s, int num) { int i, j = num; char t; while (j --> 1) { for (i = 0; i < j; i++) { if (s[i] > s[i + 1]) { // 更改条件为大于号,以实现升序排列 t = s[i]; s[i] = s[i + 1]; s[i + 1] = t; } } } } main() { char* s = "CEAeded"; sub(s, 6); printf("%s\n", s); } ``` 此题考察的是字符串处理和冒泡排序算法。 4. 不使用额外变量交换两个变量的值: ```c unsigned char a = 3, b = 5; a = a ^ b; // 异或操作 b = a ^ b; // 现在a存储的是原a和b异或的结果,将结果再与b异或,b就得到了原来的a值 a = a ^ b; // a现在得到了原b的值 ``` 异或操作在位运算中常用于无额外变量交换。 5. 动态内存分配与字符串复制: ```c #define N 100 void GetMemory1(char* p) { p = (char*)malloc(sizeof(char) * N); strcpy(p, "Have a good day!"); } char* GetMemory2(void) { static char p[] = "Have a good day!"; return p; } void main(void) { char* str1 = NULL, * str2 = NULL; GetMemory1(str1); // 动态分配内存,需要手动释放 str2 = GetMemory2(); // 静态内存,不需要释放 printf("\nstr1: %s", str1); printf("\nstr2: %s", str2); } ``` 此题考察动态内存分配与静态内存的区别,以及字符串复制。 6. 反向创建链表: ```c #define N 10 typedef struct Node { int data; struct Node* next; } NODE; NODE* Create_u() { int i; NODE* p, * Head = NULL; for (i = 0; i < N; i++) { p = (NODE*)malloc(sizeof(NODE)); // 动态创建节点 p->data = Get_Data(i); // 获取数据 p->next = Head; // 设置新节点的next指针为当前链表头部 Head = p; // 更新链表头部 } return Head; } ``` 此题考察链表的创建,需要反向插入节点。 7. 判断链表是否中心对称: ```c typedef struct Node { int data; struct Node* next; } NODE; bool Is_symmetric(NODE* head, int n) { char D[n]; int i, d = 0; NODE* temp = head; while (temp) { D[d++] = temp->data; temp = temp->next; } temp = head; if (d % 2 == 1) { temp = temp->next; } while (temp) { if (D[i++] != temp->data) { return false; } temp = temp->next; } return true; } ``` 此题考察链表操作和对称性的判断。 8. 字符串转换函数 `change_move` 的实现未给出,通常此类函数会将字符串中的小写字母转换为大写,反之亦然: ```c void change_move(char* s) { for (; *s != '\0'; ++s) { if (islower(*s)) { *s = toupper(*s); } else if (isupper(*s)) { *s = tolower(*s); } } } ``` 此题考察字符处理和字符串操作。 以上题目涵盖了嵌入式软件工程师笔试中的常见知识点,包括基本的数学运算、宏定义、函数指针、字符串处理、链表操作、位运算、动态内存分配以及字符操作等。在实际面试或笔试中,考生需要熟练掌握这些基础概念并能够灵活应用。
















- 风云7592019-06-26还不错,很有帮助,题型那些都差不多

- 粉丝: 0
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 数据库系统课程设计-仓库管理系统-java-精品.doc
- 基于PLC的挖掘机电气控制系统方案设计书.doc
- 广东省未成年人互联网运用现状.docx
- 大数据时代背景下我国会计行业面临的挑战.docx
- 机电工程项目管理分析.docx
- 有关高速动车组空气弹簧悬挂系统安全风险的几点思考.docx
- 电气工程及其自动化存在的问题及解决措施简析.docx
- c语言学生成绩管理查询.doc
- 铜陵有色能源管理数据采集系统设计方案-科技创新论文.doc
- 论大数据时代电力运营监控数据处理措施.docx
- 小区物业管理系统数据库研究设计.doc
- 多维度对Kubernetes集群优化指南.docx
- java课程设计方案小型图书管理系统.doc
- 基于互联网+的教育改革对金融专业教学团队建设的影响研究.docx
- 中石油项目管理电气施工组织设计.doc
- 西藏高校教育信息化现状调查与对策研究.docx


