嵌入式笔试刷题(第5天)
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.first = 97;
number.half.second = 98;
printf("%x\n", number.i);
✅ 答案:
假设是 小端字节序(常见于 x86 平台):
number.i = 0x4241,低位字节为0x41,高位为0x42- 所以
first = 0x41,second = 0x42,输出为: - 修改
first = 97(0x61)、second = 98(0x62) 合并为低位0x61、高位0x62⇒ 输出为:
5. 写出单精度浮点数 -12.75 在内存中的十六进制表示
✅ 答案:
IEEE 754 单精度格式:
-12.75 = -1100.11₂ = -1.10011 × 2³- 符号位:1
- 阶码:3 + 127 = 130 =
10000010 - 尾数(去掉最高的1):
10011000000000000000000
二进制组合:
1 10000010 10011000000000000000000
换算为十六进制:
C1500000
更多内容全在下方专栏
全网最受欢迎的嵌入式笔试专栏
笔试专栏包含全部最新的笔试必考考点,非常适合在找工作面经薄弱的同学
3000+订阅还会涨价,提前订阅提前享受,持续更新中。
专栏链接:https://www.nowcoder.com/creation/manager/columnDetail/mPZ4kk
#嵌入式笔面经分享##嵌入式测试,嵌入式开发##你的秋招第一场笔试是哪家#