• 【嵌入式入门篇】嵌入式0基础沉浸式刷题篇1


    前言

    • 硬件工程师近年来也开始慢慢吃香,校招进大厂年薪总包不下30-40w的人数一大把!而且大厂的硬件人数并没有饱和!
      ** 本期是【嵌入式入门篇】硬件工程师从0到入门1|嵌入式基础入门篇,有不懂的地方可以评论进行讨论!**
    • 推荐给大家一款刷题、面试的神器,我也是用这一款神器进行学习Verilog硬件代码进行嵌入式入门的!
    • ~链接如下:刷题面试神器跳转链接
    • 也欢迎大家去牛客查看硬件工程师招聘职位的各类资料,并进行提前批投递面试!
    • 小白新手可以通过该神器进行日常的刷题、看大厂面经、学习计算机基础知识、与大牛面对面沟通~ 刷题的图片已经放在下面了~

    在这里插入图片描述

    Q1:嵌入式牛牛宏大小

    问题描述:牛牛和牛妹比较谁的投掷的骰子数比较小,牛牛让牛妹先投,先投掷有一个优先权。只要牛妹的投掷的点数比牛牛小或者等于牛牛的点数,就认为牛妹胜利。能使用宏定义的方式比较牛妹和牛牛输入的两个点数的大小,返回较小的一个吗?(若两数相等,则返回牛妹的数字)

    示例输入:1,2
    示例输出:1

    示例代码:

    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * @param a int整型 牛妹的点数
     * @param b int整型 牛牛的点数
     * @return int整型
     *
     * C语言声明定义全局变量请加上static,防止重复定义
     */
    #define min(a,b) (a<=b ? a:b)
    int min_number(int a, int b ) {
        return min(a,b);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    Q2:嵌入式宏空间坐标数量

    问题描述:我们经常使用的点类Point结构体,其中包含两个int变量x与y,这是属于二维平面上点类。现假设我们的点类Point是属于多维空间中的点,其中包含多个相同类型(类型未知)的变量(第一个一定是x)表示坐标,你能否使用宏定义的方式,从使用空间的角度算出这个点类有多少个变量?

    示例输入:(1,3)
    示例输出:2

    示例代码:

    #define length(point) (sizeof(point) / sizeof(int))
    int define_count(struct Point point ) {
        return length(point);
    }
    
    //根据题目描述:
    //我们的点类Point是属于多维空间中的点,其中包含多个相同类型(类型未知)的变量(第一个一定是x)表示坐标
    //我们可以知道,结构体中的数据类型并不一定是int 因此做出以下修改,确保代码的普适性
    //下面的代码中int已经被修改为了typeof(point.x)
    
    #define length(point) (sizeof(point) / sizeof(typeof(point.x)))
    int define_count(struct Point point ) {
        return length(point);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    Q3:嵌入式牛牛疑惑的变量

    问题描述:在一个递归函数recursion中,有一个static修饰的变量m,它被初始化为0。现在该函数输入了一个数字n,牛牛在每次递归调用该函数的时候,都将m+n的值赋值给变量m,直到n为0时结束递归。于是牛牛就想知道这个m最后到底等于多少,你能帮牛牛实现这个递归函数,返回m的值吗?

    示例输入:10
    示例输出:55

    示例代码:

    int recursion(int n) {
        static int m = 0;
        m += n--;
        if (n)
            recursion(n);
        return m;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    Q4:嵌入式关键字const

    问题描述:牛牛正在学习C语言的const语言,它发现被const修饰变量不允许被修改,但是被const修饰的指针却不一定,想让你帮忙测试一下。现牛牛输入n,请你创建一个可以被修改的const指针变量p,将其初始化为n,请返回p++的结果。

    示例输入:2
    示例输出:6

    示例代码:

     /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * @param n int整型 
     * @return int整型
     * C语言声明定义全局变量请加上static,防止重复定义
     */
    int const_test(int n ) {
        // write code here
        const int * p = n;
        return (p++, p);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    总结:C语言中const修饰的变量的值并非100%不能被修改。在C语言中,const机制是通过编译器检查实现的,它标记const变量不能被直接修改,但并未限制const变量的地址的引用,而只要变量的地址存在被引用的可能,就说明该变量是可以通过指针被间接修改的。所以,只要我们能保证程序在编译过程不出错,那么在程序的运行过程中我们便可以通过指针间接修改该const修饰的变量的值。

    Q5:嵌入式机器的大小端

    问题描述:数据的低位保存在内存的高地址中,而数据的高位保存在内存的低地址中称之为大端模式(BE),而小端模式(LE)则反之。牛牛想知道牛客网的后台使用的是哪种模式,你能根据函数输入的数据判断吗?

    示例输入:1 (大端模式返回数字1,小端模式返回数字0.)
    示例输出:1

    示例代码:

    int judge(int n ) {
        // write code here
        char *p = &n;
        n = 1;    
        return *p;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    Q6:嵌入式不用排序找数字

    问题描述:牛牛现在有1000个整数,每个数字都在1~200之间,数字随机排布。假设牛牛不允许你使用任何排序方法将这些整数有序化,你能快速找到从0开始的第450小的数字吗?(从小到大第450位)

    示例代码:

    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param numbers int整型一维数组 
     * @param numbersLen int numbers数组长度
     * @return int整型
     *
     * C语言声明定义全局变量请加上static,防止重复定义
     */
    int find(int* numbers, int numbersLen ) {
        int i,count[201] = {0},sum;
        for(i = 0;i<numbersLen;i++)
        {
            count[numbers[i]]++;
        }
        sum = 0;
        for(i = 0;i<201;i++)
        {
            sum+=count[i];
            if(sum>450) return i;
        }
        return 0;// write code here
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    Q7:嵌入式结构体对齐

    问题描述:牛牛需要建立一个结构体Nowcoder,该结构体包括三个成员,其类型分别是int、double和char。假设牛牛想让这个结构体所占据的内存最小,请问你该怎么建立该结构体?(输入三个相应类型的变量用于初始化结构体)

    示例输入:1,1.000,a
    示例输出:13

    示例代码:

    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * @param n int整型 
     * @param d double浮点型 
     * @param c char字符型 
     * @return int整型
     *
     * C语言声明定义全局变量请加上static,防止重复定义
     */
    #pragma pack(1)
    struct Nowcoder{
        char c;
        int n;
        double d;
    };
    int smaller_space(int n, double d, char c ) {
        struct Nowcoder temp;
        temp.c = c;
        temp.n = n;
        temp.d = d;
        return sizeof(temp);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    Q8:嵌入式会改变的指针

    问题描述:牛牛在嵌入式中学习到了volatile的方法,想要考考你。请创建一个square函数,输入volatile类型的整型指针p,返回p指向值的平方。p的初始指向值为预置函数fun的输入值n。

    示例输入:1
    示例输出:1

    示例代码:

    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * @param n int整型 
     * @return int整型
     * C语言声明定义全局变量请加上static,防止重复定义
     */
    int square(volatile int *p)
    {
        return (*p)*(*p);
    }
    
    int fun(int n ) {
        // write code here
        return square(&n);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    Q9:嵌入式连续申明的指针

    问题描述:牛牛在学习C语言的预定义,他所知道的有方式有#define和typedef两种。请你选择一种方式声明int类型指针的同义字int_p,要求使用语句“ int_p p1, p2; ” 能够直接声明两个指针,将两个指针分别指向输入的数组首部m和n,并返回两个指针各自自增后的结果之和。

    示例输入:[1,2,3],[4,5,6]
    示例输出:7

    示例代码:

    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * @param m int整型一维数组 
     * @param mLen int m数组长度
     * @param n int整型一维数组 
     * @param nLen int n数组长度
     * @return int整型
     *
     * C语言声明定义全局变量请加上static,防止重复定义
     */
    typedef int*  int_p;
    int fun(int* m, int mLen, int* n, int nLen ) {
        // write code here
        int_p p1,p2;
        p1=m;
        p2=n;
        return *(p1+1) + *(p2+1);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    Q10:嵌入式字符串所占空间

    问题描述:牛牛在学习字符串的时候,发现统计字符串所占据空间有多种方式,比如关键字sizeof与strlen()函数,牛牛想让你验证一下这两种方式的结果是不是一致的,请你根据输入字符串返回两种方式的结果是否相等的bool值。

    示例输入:“Nowcoder”
    示例输出:true

    示例代码:

    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * @param str string字符串 
     * @return bool布尔型
     *
     * C语言声明定义全局变量请加上static,防止重复定义
     */
    bool fun(char* str ) {
        // write code here
        return ((strlen(str)==sizeof(str))?true:false);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    总结

    点击链接进行跳转注册,开始你的保姆级刷题之路吧!刷题打怪码神之路

    另外这里不仅仅可以刷题,你想要的这里都会有,十分适合小白和初学者入门学习~
    1、算法篇(398题):面试必刷100题、算法入门、面试高频榜单
    2、数据结构篇(300题):都是非常经典的链表、树、堆、栈、队列、动态规划等
    3、语言篇(500题):C/C++、java、python入门算法练习
    4、SQL篇(82题):快速入门、SQL必知必会、SQL进阶挑战、面试真题
    5、大厂笔试真题:字节跳动、美团、百度、腾讯…掌握经验不在惧怕面试!

    在这里插入图片描述

  • 相关阅读:
    文档向量化工具(一):Apache Tika介绍
    神经网络极简入门
    部署LVS-DR集群
    五子棋小游戏——Java
    [一篇读懂]C语言三讲:选择、循环
    9.表示学习—Word2Vec
    计算机视觉与深度学习实战,Python为工具,小波变换的数字水印技术
    Node.js 零基础入门 Node.js 零基础入门第四天 4.4 在项目中操作MySQL
    Python的比较运算符查询表
    如何拿取 macOS 系统中的图标文件
  • 原文地址:https://blog.csdn.net/weixin_51484460/article/details/126239182