嵌入式面试中常见的编程题目

以下内容源于网络资料的学习整理,如有侵权,请告知删除。

目录

1、将字符串反转

2、数字翻转和回文判断

3、大小端问题

(1)判断大小端

(2)大小端转换

4、实现函数memcpy(), strcpy(), strcmp(), strcat()

5、实现最简单的hello world字符设备驱动

6、设计函数 int atoi(char *s),void itoa(int n, char s[])

7、链表操作(单链表的插入、删除节点、遍历、反转)


 

1、将字符串反转

void reserverString(char str[])
{char tmp;int i, j;for (i = 0, j = strlen(str) - 1; i < j; i++, j--){tmp = str[i];str[i] = str[j];str[j] = tmp;}
}char* reserverString1(char* str)
{char* start = str;char* end = str + strlen(str) - 1;char tmp;if (NULL != str){do{tmp = *start;*start++ = *end;*end-- = tmp;} while (start<end);}return str;
}

 

2、数字翻转和回文判断

 

 

3、大小端问题

(1)判断大小端

方法一:

int main(void)
{int a = 0x1234;char b = *((char*)&a);if (b == 0x12)printf("BIGEND\n");if (b == 0x34)printf("littleEND\n");system("PAUSE");return 0;
}

方法二:用联合体

(2)大小端转换

//对于字数据16bit
#define BIG2LITTLE(A)   ((((A)&0xff00)>>8) | (((A)&0x00ff)<<8))  //对于双字数据32bit
#define BIG2LITTLE(A)  (((A)&0xff000000)>>24) | (((A)&0x000000ff)<<24) | (((A)&0x0000ff00)<<8) | (((A)&0x00ff00)>>8))

 

4、实现函数memcpy(), strcpy(), strcmp(), strcat()

(1)函数原型 :void *memcpy(void *dest, const void *src, size_t n);

功能:从源src所指的内存地址的起始位置开始,拷贝n个字节到目标dest所指的内存地址的起始位置中,函数返回dest的值。

void *memcpy(void *dest, const void *src, size_t n)
{if (NULL == dest || NULL == src)return NULL;char* tmp = (char*)dest;const char* s = (const char*)src;//这里注意下while (n--){*tmp++ = *s++;}return dest;
}

(2)函数原型 :void strcpy (char *dest,const char*src);

功能:将src拷贝到dest中

void strcpy(char *dest, const char*src)
{while(*dest++=*src++){}
}

(3)函数原型 :int strcmp(const char *s,const char * t);
功能:比较字符串s和t,并且根据s按照字典顺序小于,等于或大于t的结果分别返回负整数,0,正整数。

int strcmp(const char *s, const char * t)
{for (; *s == *t; s++, t++)//注意for循环,能循环下去的条件的两者元素对应相等,一旦不相等立即退出if (*s == '\0')return 0;//表示相等return *s - *t;
}

(4)函数原型 :char *strcat(char *dest,char *src);
功能:把src所指字符串添加到dest结尾处(覆盖dest结尾处的'\0')并添加'\0',返回指向dest的指针

char* strcat(char *dest,const char *src)
{char* tmp = dest;assert((NULL != dest) && (NULL != src));while (*tmp){tmp++;}//循环结束时,指针指向字符'\0',后面会覆盖while (*tmp++ = *src++) {}return dest;
}

5、实现最简单的hello world字符设备驱动

//1、头文件的包含
#include <linux/init.h>
#include <linux/module.h>//许可的声明
MODULE_LICENSE("Dual BSD/GPL");//3、函数注意static、返回值、printk、KERN
static int hello_init(void)
{printk(KERN_ALERT "Hello World!\n");return 0;
}
static void hello_exit(void)
{printk(KERN_ALERT "Goodbye, cruel world\n");
}
//4、注意这两个宏函数的使用
module_init(hello_init);
module_exit(hello_exit);

6、设计函数 int atoi(char *s),void itoa(int n, char s[])

(1)int atoi(char *s)

描述:把字符串转换成整型数的一个函数。int atoi(const char *nptr) 函数会扫描参数 nptr字符串,跳过前面的空白字符(例如空格,tab缩进)等,可以通过isspace( )函数来检测),直到遇上数字或正负符号才开始做转换,而在遇到非数字或字符串结束符('\0')才结束转换,并将结果返回。如果 nptr不能转换成 int 或者 nptr为空字符串,那么将返回0。特别注意,该函数要求被转换的字符串是按十进制数理解的。

int atoi(char s[])
{int i, n, sign;for (i = 0; isspace(s[i]); i++); /*跳过空白符:空格时会一直循环,直到遇到不是空格*/sign = (s[i] == '-') ? -1 : 1;//遇到的如果不是-号,比如是数字,则说明不是负数if (s[i] == '+' || s[i] == '-') /* 跳过符号 */i++;for (n = 0; isdigit(s[i]); i++)n = 10 * n + (s[i] - '0');return sign * n;
}//注意判断空格、是否是数字的函数,你懂写吗?

(2)void itoa(int n, char s[])

功能:将整型数字转换为字符串

void itoa(int n, char s[])
{int i, sign;if ((sign = n) < 0) //记录符号n = -n; //使n成为正数i = 0;do { //以反序生成数字          //假设n=987654s[i++] = n % 10 + '0'; //n % 10 + '0'表示数字对应的字符,比如第一次的数字是4,变成字符4,是4+'0'} while ((n /= 10) > 0);   //此时n变成了98765if (sign < 0)s[i++] = '-';s[i] = '\0';reverse(s);
}

7、链表操作(单链表的插入、删除节点、遍历、反转)

https://blog.csdn.net/oqqHuTu12345678/article/details/78899439

#include <stdio.h>
#include <string.h>
#include <stdlib.h>typedef struct node 
{int data;struct node* next;
}Node;/*********************************************************************
1、函数功能:将链表反转
2、实现方法:遍历+头插入,即每遍历一个元素,立即将该元素头插入
3、函数返回:反转后链表头结点的指针
4、之前遇到的、有头结点的链表,头或尾插入一个数都很简单;
5、现在多个数连续插入稍微难处理,而且这主要运用在反转链表中。
2018.925 xjh
*********************************************************************/Node* reserverLinklist(Node* PH)
{Node* p = PH->next;//p表示当前节点指针Node* pnext = NULL;//pnext表示当前节点的下一个节点指针Node* head = NULL;//用来实现头插入的临时变量//特殊情况处理:当链表没有有效节点或者只有一个有效节点时,逆序不用做任何操作if ((NULL == p) || (NULL == p->next))return PH;while (NULL!=p)//如果当前节点不为空{pnext = p->next;//后面因为新链表头插入,破坏了p->next,因此先要备份p->next,否则丢失原链表的信息//新链表头插入p->next = head;head = p;//恢复p,以便进入到下一个元素(p没有改变,但p->next改变了,因此不能直接p=p->next)p = pnext;}//这个结束时,p为NULL,head指向原链表的最后一个元素,该元素在新链表中是第一个元素,下面在该元素前添加头结点PH->next = head;return PH;
}struct node * create_node(int data)
{struct node *p = (struct node *)malloc(sizeof(struct node));if (NULL == p){printf("malloc error.\n");return NULL;}p->data = data;p->next = NULL;return p;
}void insert_head(Node *pH, Node *newNode)
{newNode->next = pH->next;pH->next = newNode;
}void traverse(Node* pH)
{struct node *p = pH;printf("-----------开始遍历-----------\n");while (NULL != p->next)	{p = p->next;printf("node data: %d.\n", p->data);}printf("-----------遍历结束-----------\n");
}int main(void)
{Node *pHeader0 = create_node(0);//创建头结点Node *pHeader1 = NULL;insert_head(pHeader0, create_node(11));//11,12,13是所创建的节点数据,这里采用头插法。insert_head(pHeader0, create_node(12));insert_head(pHeader0, create_node(13));//此步过后,数据应该为0,13,12,11traverse(pHeader0);//打印13,12,11pHeader1 = reserverLinklist(pHeader0);traverse(pHeader1);//打印11,12,13system("PAUSE");return 0;
}

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/460962.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用复制mysql/data 文件夹 下面的数据库的形式来复制数据库出现的问题

用复制mysql/data 文件夹 下面的数据库的形式来复制数据库出现的问题 用复制mysql/data 文件夹 下面的数据库的形式来复制数据库出现的问题 提示找不到表&#xff0c;我去看了一下&#xff0c;丢失了很多个表&#xff1b; 问题&#xff1a; 直接拷贝data下的数据库数据进行备份…

回旋矩形C语言,C语言回旋函数解释下,该如何处理

当前位置:我的异常网 C语言 C语言回旋函数解释下,该如何处理C语言回旋函数解释下,该如何处理www.myexceptions.net 网友分享于&#xff1a;2013-06-08 浏览&#xff1a;30次C语言回旋函数解释下给定两个整数M&#xff0c;N&#xff0c;生成一个M*N的矩阵&#xff0c;矩阵中元…

JUnit4概述

JUnit4是JUnit框架有史以来的最大改进&#xff0c;其主要目标便是利用Java5的Annotation特性简化测试用例的编写。先简单解释一下什么是Annotation&#xff0c;这个单词一般是翻译成元数据。元数据是什么&#xff1f;元数据就是描述数据的数据。也就是说&#xff0c;这个东西在…

嵌入式面试中常见的问答题(线程进程、TCP等)

以下内容源于网络资料的学习整理&#xff0c;如有侵权&#xff0c;请告知删除。 一、线程、进程的区别联系 见https://blog.csdn.net/oqqHuTu12345678/article/details/72637318的表格 个人理解&#xff1a;进程相当于一个运行中的程序&#xff0c;线程相当于程序中的某些函数…

c语言读取文件到结构体数组,有关文件读写到结构体数组问题;

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼typedef struct IMG{char *name;int weight;int height;}IMG;这是我的结构体存的是 图片的名字 宽度 高度void readWeightHeight(void){FILE *fpbmp;//FILE *fpm;char filename[54];char *bmpname NULL;long Handle;int i 0;struc…

正则表达式30分钟入门教程(转)

分享到一键分享QQ空间新浪微博百度云收藏人人网腾讯微博百度相册开心网腾讯朋友百度贴吧豆瓣网搜狐微博百度新首页QQ好友和讯微博更多...百度分享首页 | 正则表达式30分钟入门教程 | 常用正则表达式| 正则表达式速查表 | 正则表达式测试工具 | 正则表达式 | 正则练习器在线版 正…

进程、线程简介

以下内容源于网络资源的学习整理&#xff0c;如有侵权&#xff0c;请告知删除。 参考博客 http://www.ruanyifeng.com/blog/2013/04/processes_and_threads.html&#xff08;通俗理解&#xff09; https://blog.csdn.net/chen_geng/article/details/51613445&#xff08;表格…

使用keil建立标准STM32工程模版(图文详细版!)

1. 模板工程的创建(超级详细版&#xff0c;使用的是keil 4.5版本) 1.1创建工程目录 良好的工程结构能让文件的管理更科学&#xff0c;让开发更容易更方便&#xff0c;希望大家养成良好的习惯&#xff0c;使用具有合理结构的工程目录&#xff0c;当你着手于较大的软件项目时&a…

android竖直和横向,如何在android中为纵向和横向模式定义不同的控件

定义&#xff0c;在这两种资源的文件出现在你的代码 并在onCreate()在所有视图中Activity可以检查方向绑定的意见&#xff0c;你的类的对象。示例。在这里我们有包含在这两个文件的ImageView的&#xff0c;并在画像文件有一个TextView和景观它包含Button代替TextViewmy_layout.…

正则表达式匹配多个字符串中的一个

正则表达式匹配多个字符串中的一个 当我们采集数据时&#xff0c;会用到正则匹配功能 (前缀)(?<content>[\s\S]*?)(后缀) 例如采集产品多图时&#xff0c;前缀与后缀部分一般情况下是不相同的&#xff0c;这就需要用到正则的“|” (href"|src")(?<conten…

与驱动有关的面试问题

以下内容源于网络资料的整理学习。 参考博客 嵌入式驱动那年的笔试面试-有干货_BeyondTheBoundary的博客-CSDN博客_芯动科技嵌入式笔试 嵌入式驱动工程师面试题集锦_shx516857593的博客-CSDN博客 嵌入式面试中可能问到的题目和答案整理&#xff08;内核驱动篇&#xff09;_…

爬虫那些事儿-- 简介

从事爬虫相关的工作已经两年多了。简要做下总结。 爬虫(Crawler)&#xff0c;有些也叫蜘蛛&#xff08;Spider&#xff09;&#xff0c;用来从互联网下载网页。是搜索引擎的重要组成。爬虫是搜索引擎的数据来源&#xff0c;是数据的入口。爬虫的基本思想是认为整个互联网类似于…

android模拟机新闻APP,DavidTGNewsProject

DavidTGNewsProject##【Android】最新主流新闻app功能实现。仿网易,搜狐等新闻客户端(原创作品&#xff0c;转载请说明出处)先给大家看一下效果图&#xff1a;这个项目总体来说虽然不是特别难&#xff0c;但是确实非常常用的功能。是业余时间自己写的一个小项目。以前我们写的时…

轻操作动作休闲单机游戏《狂斩三国2》评测

游戏类别&#xff1a;动作休闲单机游戏时隔一年&#xff0c;曾在国内和台湾手游市 场获得top1佳绩的《狂斩三国》再度归来&#xff01;其策略加动作的独特玩法在当时颠覆了玩家们对三国游戏的阵营认知。比传统策略更简单明快&#xff0c;比传统动作无脑砍更 具思考乐趣&#xf…

物联网简介

以下内容源于朱有鹏老师课程的学习整理&#xff0c;如有侵权&#xff0c;请告知删除。 本文档提供下载&#xff1a;提取码1111——物联网简介 1、什么是物联网 1.1.物联网的概念和发展历程 1.1.1、认识物联网 &#xff08;1&#xff09;百度百科中物联网定义 &#xff08;…

php计算代码运行时间与内存使用的一段代码

计算运行时间及内存使用&#xff0c;代码如下&#xff1a; <?php //开始计时 $HeaderTime microtime(true);//参数true表示返回浮点数值//代码//...printf(" total run: %.2f s<br>". "memory usage: %.2f M<br> ", microtime(true)-$Hea…

Mysql语句与应用

2019独角兽企业重金招聘Python工程师标准>>> 1。正则表达式 搜索多个关键词&#xff0c;“或”, 等同 %上海% | %内蒙古% SELECT * FROM analysis_result WHERE result REGEXP 上海|内蒙古 LIMIT 1; "且" SELECT * FROM analysis_result WHERE id 1 AND …

android gb2312 utf-8,不同编码页面之间用form传值出现乱码问题解决方案 utf-8 到 gb2312...

相信有人也曾遇到过这种问题&#xff0c;今天将这个问题稍作整理发布出来。由于编码的问题传值出现乱码&#xff0c;一看到这样的情况&#xff0c;我们首先想到的是线面的两种解决办法&#xff1a;方案一&#xff1a;在接收参数页面进行转码 (这是较为理想的解决办法)方案二&a…

颜色的数字化描述(RGB与YUV的简介)

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 参考内容 &#xff08;1&#xff09;YUV和RGB的相互转换实验_Geek.Fan的博客-CSDN博客 &#xff08;2&#xff09; 工作中用到的一些基础知识 &#xff08;3&#xff09;YUV422 YUV420 Planar \ Se…

android界面的滑动切换功能

左右滑动切换是几乎所有应用中都会用到的功能。在这里将相关资源进行总结 &#xff08;1&#xff09;viewflipper结合手势检测进行左右滑动。 http://www.cnblogs.com/hanyonglu/archive/2012/02/13/2349827.html 这种方法很简单&#xff0c;但是大概效果不是很理想&#xff08…