嵌入式笔试刷题(第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 = 0x41second = 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

#嵌入式笔面经分享##嵌入式测试,嵌入式开发##你的秋招第一场笔试是哪家#
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务