嵌入式笔试刷题专栏(第三天)
1. 试写一个函数检查表达式中的括号是否匹配。
检查的括号包括:
()
、[]
、{}
、<>
。例如:表达式中前面有
(
但后面没有)
,则认为不匹配。
✅ 答案:
#include <stdbool.h> #define MAX_STACK 100 bool is_match(char* s) { char stack[MAX_STACK]; int top = -1; while (*s) { if (*s == '(' || *s == '[' || *s == '{' || *s == '<') { stack[++top] = *s; } else if (*s == ')' || *s == ']' || *s == '}' || *s == '>') { if (top < 0) return false; char left = stack[top--]; if ((*s == ')' && left != '(') || (*s == ']' && left != '[') || (*s == '}' && left != '{') || (*s == '>' && left != '<')) { return false; } } s++; } return top == -1; }
2. 编写函数,根据公式计算表达式:
s = 1 + 1/(1+2) + 1/(1+2+3) + ... + 1/(1+2+3+...+n)
n
作为参数传入。例如:
n = 11
时,s = 1.833333
✅ 答案:
double calc_s(int n) { double s = 0.0; int sum = 0; for (int i = 1; i <= n; i++) { sum += i; s += 1.0 / sum; } return s; }
3. 写一个宏定义:输入两个参数,返回较小的一个。
✅ 答案:
#define MIN(a, b) ((a) < (b) ? (a) : (b))
4. 分析下面这段代码的输出,并说明原因:
union { int i; struct { char first; char second; } half; } number; number.i = 0x4241; printf("%x%x\n", number.half.first, number.half.second); number.half.firs
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
嵌入式笔试专栏 文章被收录于专栏
本专栏系统整理了嵌入式方向笔试中常见的知识点和高频考题,涵盖基础理论、常用算法、C语言陷阱、操作系统原理、驱动开发、常见外设通信协议(如 I2C/SPI/UART)、RTOS、Linux 内核、以及实用电路知识等内容。