嵌入式笔试刷题专栏(第三天)

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 内核、以及实用电路知识等内容。

全部评论
点赞 回复 分享
发布于 04-25 21:39 山西
第 5 题的答案应为:0xC14C0000
点赞 回复 分享
发布于 04-25 16:36 山东
😄😄😄😄
点赞 回复 分享
发布于 04-25 16:23 上海

相关推荐

头像
03-20 22:00
重庆大学 Java
适彼乐土:“他们不行再找你” 最后的底牌吗?有点意思
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务