[DOC]-嵌入式软件开发面试C语言笔试题 答案
嵌入式C语言面试题a
4. 嵌入式系统中经常要用到无限循环,你怎么样用 C 编写死循环呢?
这个问题用几个解决方案。我首选的方案是: while(1) { } 一些程序员更喜欢如下方案: for(;;) { } 这个实现方式让我为难,因为这个语法没有确切表达到底怎么回事。如果一个应试者给出 这个作为方案,我将用这个作为一个机会去探究他们这样做的 基本原理。如果他们的基本答案是:“我被教着这样做,但从没有想到过为什么。”这会 给我留下一个坏印象。 第三个方案是用 goto Loop: ... goto Loop;
int a; void set_bit3(void) { a |= (1<<3); } void clear_bit3(void) { a &= ~(1<<3); } 15. 中断是嵌入式系统中重要的组成部分,这导致了很多编译开发商提供一种扩展―让标准 C 支持中断。具代表事实是,产生了一个新的关键 字__interrupt。下面的代码就使用了__interrupt 关键字去定义了一个中断服务子程序(ISR), 请评论一下这段代码的。
在许多的处理器/编译器中ห้องสมุดไป่ตู้浮点一般都是不可重入的。有些处理器/编译器需要让额处的 寄存器入栈,有些处理器/编译器就是不允许在ISR中做浮点运算。此外,ISR应该是短而有 效率的,在ISR中做浮点运算是不明智的。 printf()经常有重入和性能上的问题。 16 . 下面的代码输出是什么,为什么?
void foo(void) { unsigned int a = 6; int b = -20; (a+b > 6) ? puts("> 6") : puts("<= 6"); } 答案是输出是">6"。原因是当表达式中存在有符号类型和无符号类型时所有的操作数都自动 转换为无符号类型。 因此-20 变成了一个非常大的正整数,所以该表达式计算出的结果大 于 6。这一点对于应当频繁用到无符号数据类型的嵌入式系统来说是丰常重要的。
2022年度嵌入式C语言面试题库(含答案)
2022年度嵌入式C语言面试题库(含答案)1、什么是嵌入式C?/ 你对嵌入式C 语言的理解是什么?嵌入式 C 是 C 标准委员会指定的 C 编程语言的一组语言扩展。
它通常用于解决不同嵌入式系统的 C 扩展之间存在的共性问题。
嵌入式 C 编程通常需要对 C 语言进行非标准扩展,以支持增强的微处理器功能,例如定点算术、多个不同的内存库和基本I/O 操作。
2、你对嵌入式系统的理解是什么?嵌入式系统是一种基于微处理器的计算机硬件系统和软件,旨在执行特定的功能。
嵌入式系统要么是一个独立的系统,要么是一个大型系统的一部分。
3、C语言和嵌入式C之间的主要区别是什么?C语言是一种通用的高级编程语言,用于设计任何基于桌面的应用程序。
另一方面,嵌入式C 是 C 语言的扩展,用于开发基于微控制器的应用程序。
在这里,嵌入式是指主机或微控制器,而不是编程语言。
让我们在下表中来看看C语言和嵌入式C 之间的主要区别。
C语言和嵌入式C 的区别:C语言嵌入式C C编程语言是一种通用编程语言,用于设计任何基于桌面的应用程序。
嵌入式C 只是一种扩展C 编程语言,它用于开发基于微控制器的应用程序。
C编程语言是一种高级编程语言。
嵌入式4、嵌入式C 是一种编程语言吗?嵌入式C 不是核心编程语言。
它是 C 编程语言的扩展,用于开发基于微控制器的应用程序。
嵌入式 C 语言从普通 C 编程语言引入的扩展是I/O 硬件寻址、定点算术运算、访问地址空间等。
5、嵌入式C 的主要优点是什么?嵌入式C 是 C 编程语言的扩展。
让我们看看嵌入式 C 的主要优势:嵌入式 C 的主要优势:嵌入式C的编码速度快,简单易懂。
它不需要任何硬件更改,例如额外的内存或存储空间,因为它始终执行相同的任务。
它专注于其特定任务,一次只执行一项任务。
它主要用于现代自动化应用。
嵌入式应用程序非常适合工业用途。
6、嵌入式C 的主要缺点是什么?嵌入式C 的缺点:嵌入式C 一次只执行一项任务,因此当我们必须同时执行多项任务时,它不是首选。
嵌入式C高级编程笔试A(有答案)3.11
《嵌入式C高级编程笔试》试卷A一、选择题(35*2’)注意程序运行在32位系统下1. 语句printf(″s\\t″)的输出结果为( B )A s\\tB s\tC s\D s2.若有条件表达式(exp)?a++:b--,则以下表达式中能完全等价于表达式(exp)的是(B)A、(exp==0)B、(exp!=0)C、(exp==1)D、(exp!=1)3. float a = 3.2;(int)a;printf("a = %d, \n", a);打印什么,运行后a的类型是(D)A. 3.000000, intB. 3, intC. 3.0 floatD. 既不是3,也不是3.000000, float4.有以下代码:void func(){int a;a++;printf("a = %d\n", a);}那么变量a储存在( A )A. 栈B. 堆C. 正文段D. 未初始化数据段5. 在C语言中, char型数据在内存中的存储形式是( D )A、补码B、反码C、原码D、ASCII码6.假如指针p已经指向某个整型变量x,则(*p)++相当于()BA、p++B、x++C、*(p++)D、&x++7.为了避免嵌套的条件分支语句if-else的二义性,C语言规定:C程序中的else总是与( C )组成配对关系。
A. 缩排位置相同的ifB. 在其之前未配对的ifC. 在其之前未配对的最近的ifD.同一行上的if8.设A为存放(短)整型的一维数组,如果A的首地址为P,那么A中第i 个元素的地址为( B )。
A.P+i*2B. P+(i-1)*2C. P+(i-1)D. P+i9.有函数void func(){//staic int c=0;c++;printf("%d\n", c);}那么连续调用两次,打印的结果是?( B )A. 1, 1B. 1, 2C. 123495,123496(因为c没初始化,内部的值随机,第二次会比第一次加1)D. 123495, 123495(因为c没初始化,内部的值随机,并且,值不会增加)10.如果有以下代码:char string[] = "love me please";char *p = string;char *q = p + 4;*q++ = '\0';printf("\"%s\"", p);printf("\"%s\"", q);分别打印:( B )A. "love me please" ""B. "love" "me please"C. "love me please" "me please"D. 因为常量字符串不能修改,会发生段错误11.free(p);哪个是错误的( D )A. p的值必须是malloc的返回值B. 一个指针不能被连续free两次C. free了p以后p是野指针,应该置为NULLD. free了以后p的值会自动置为NULL,所以*p = 9会段错误12.下列描述中不正确的是( C )。
c语言面试题目100及最佳答案精选全文
精选全文完整版(可编辑修改)c语言面试题目及最佳答案1、描述⼀下gcc的编译过程?gcc编译过程分为4个阶段:预处理、编译、汇编、链接。
预处理:头⼀件包含、宏替换、条件编译、删除注释编译:主要进⼀词法、语法、语义分析等,检查⼀误后将预处理好的⼀件编译成汇编⼀件。
汇编:将汇编⼀件转换成⼀进制⼀标⼀件链接:将项⼀中的各个⼀进制⼀件+所需的库+启动代码链接成可执⼀⼀件2、内存的最⼀存储单位以及内存的最⼀计量单位分别是?内存的最⼀存储单位为⼀进制位,内存的最⼀计量单位字节3、#include<> 与#include ""的区别?include<>到系统指定⼀录寻找头⼀件,#include ""先到项⼀所在⼀录寻找头⼀件,如果没有找再到系统指定的⼀录下寻找4、描述⼀下变量的命名规则变量名有字⼀、数值、下划线组成,但不能以数值开头5、变量的声明与定义有啥区别?声明变量不需要建⼀存储空间,变量的定义需要建⼀存储空间6、谈谈c语⼀中有符号和⼀符号的区别?有符号:数据的最⼀位为符号位,0表示正数,1表示负数⼀符号:数据的最⼀位不是符号位,⼀是数据的⼀部分7、谈谈计算机中补码的意义统⼀了零的编码将符号位与其他位统⼀处理将减法运算转换成加法运算8、谈谈数组的特点同⼀个数组所有的成员都是相同的数据类型,同时所有的成员在内存中的地址是连续的9、数组的分类数组的分类主要是:静态数组、动态数组两类。
静态数组:类似int arr[5];在程序运⼀就确定了数组的⼀⼀,运⼀过程不能更改数组的⼀⼀。
动态数组:主要是在堆区申请的空间,数组的⼀⼀是在程序运⼀过程中确定,可以更改数组的⼀⼀。
10、描述⼀下⼀维数组的不初始化、部分初始化、完全初始化的不同点不初始化:如果是局部数组数组元素的内容随机如果是全局数组,数组的元素内容为0 部分初始化:未被初始化的部分⼀动补0完全初始化:如果⼀个数组全部初始化可以省略元素的个数数组的⼀⼀由初始化的个数确定11、谈谈数组名作为类型、作为地址、对数组名取地址的区别?数组名作为类型:代表的是整个数组的⼀⼀数组名作为地址:代表的是数组⼀元素的地址对数组名取地址:代表的是数组的⼀地址12、谈谈你对⼀维数组在物理上以及逻辑上的数组维度理解⼀维数组在逻辑上是⼀维的,在物理上是⼀维的13、描述⼀下函数的定义与函数的声明的区别函数定义:是指对函数功能的确⼀,包括指定函数名、函数类型、形参及其类型、函数体等,它是⼀个完整的、独⼀的函数单位。
嵌入式C语言面试3(附有自己做的答案)
39 A,B从一堆玻璃球(共100个)里向外拿球,规则如下:(1)A先拿,然后一人一次交替着拿;(2)每次只能拿1个或2个或4个;(3)谁拿最后一个球,谁就是最后的失败者;问A,B谁将是失败者?写出你的判断步骤。
我们倒着分析,当此时轮到你拿球:剩下1个时,你输了剩下2个时,你拿掉1个,我输了剩下3个时,你拿掉2个,我输了剩下4个时,此时你可拿1、2个,不论你拿几个,我都能使剩下的为1个剩下7个时,此时你可拿1、2、4个,不论你拿几个,我都能使剩下的为4或1个剩下10个时,此时你可以拿1、2、4个,不论你拿几个,我都能使剩下的为7或4个……依次类推,总结发现:谁能使拿完后剩下的球是3*n+1个,谁就赢剩下100个,不论你拿几个,我都能使剩下的为3*n+1个,即97或94个所以,根据本题,也就是谁先拿谁输,也就是A输(仅供参考by zjh 2011-11-9)40.已知:无序数组,折半查找,各元素值唯一。
函数原型是:Binary_Seach(int array[], int iValue, int iCount)array是数组,在里面用折半查找的方法找等于iValue的值,找到返回1否则0,iCount 是元素个数41.统计一个字符串中字符出现的次数C方法://自己写的方法见test24.cppint findStr(char *str, char *substr) /*这边的两个形参有没有给指针赋值?*/{int n;char *p, *r;n = 0;while (*str) /*“当*str值为真的时候?如果是,什么情况下为真呢”*/{p = str;r = substr;while (*r)if (*r == *p){r++;p++;}else{break;}if (*r == '\0')n++;str++;}return n;}Java方法:public static int GetCount(String strA, String strB)//此方法计算出现的次数{int i, counter = 0;i = strA.IndexOf(strB);//strB在strA中首次出现的位置while (i >= 0){counter++;i = strA.IndexOf(strB,i+1);}return counter;}42.100位以上的超大整数的加法(主要考虑数据结构和加法的实现)。
嵌入式软件开发岗位招聘笔试题及解答(某大型国企)
招聘嵌入式软件开发岗位笔试题及解答(某大型国企)(答案在后面)一、单项选择题(本大题有10小题,每小题2分,共20分)1、在C语言中,volatile关键字的主要作用是什么?A. 使变量成为全局变量B. 告诉编译器该变量可能会被外部因素改变,从而阻止优化C. 使变量成为常量D. 加快变量访问速度2、关于ARM架构处理器,以下哪个描述是正确的?A. ARM架构处理器仅支持32位指令集B. 所有的ARM处理器都支持Thumb-2技术C. ARM处理器采用的是RISC设计理念D. ARM处理器不能运行Linux操作系统3、嵌入式软件开发岗位笔试题及解答(某大型国企)一、单项选择题(每题2分,共20分)3、以下哪个不是嵌入式系统设计中常用的实时操作系统(RTOS)?A. VxWorksB. LinuxC. FreeRTOSD. Windows CE4、在嵌入式软件开发中,以下哪个概念不是用于描述硬件和软件之间接口的标准?A. 总线协议B. 寄存器映射C. 驱动程序D. API5、在ARM架构中,哪个寄存器通常被用作链接寄存器来保存子程序返回地址?A. R0B. R13 (SP)C. R14 (LR)D. R15 (PC)6、关于嵌入式系统的实时性,下列说法正确的是:A. 实时系统必须保证所有任务都能在指定的时间内完成B. 实时系统仅关注任务的平均响应时间C. 软实时系统对响应时间的要求比硬实时系统更加严格D. 实时系统中,任务的优先级可以根据任务的紧迫程度动态调整7、以下哪个协议不属于嵌入式系统中常用的网络通信协议?A. TCP/IPB. CAN(Controller Area Network)C. BluetoothD. SPI(Serial Peripheral Interface)8、在嵌入式软件开发中,以下哪个概念通常用来描述硬件和软件之间的接口?A. 驱动程序B. 硬件抽象层(HAL)C. 用户界面(UI)D. 操作系统内核9、在嵌入式系统开发过程中,以下哪种编程语言通常被认为最适合用于硬件抽象层(HAL)的开发?A. JavaB. C++C. CD. Python 10、以下关于ARM架构的描述,哪一项是正确的?A. ARM架构是一种RISC(精简指令集计算机)架构。
嵌入式面试题目试题(3篇)
第1篇一、基础知识1. 问题:简述嵌入式系统的定义和特点。
答案:嵌入式系统是指将计算机技术应用于特定领域,将硬件和软件结合在一起,形成具有特定功能的独立系统。
其特点包括:实时性、可靠性、低功耗、小体积、低成本等。
2. 问题:嵌入式系统与通用计算机系统的区别有哪些?答案:嵌入式系统与通用计算机系统的区别主要有以下几点:(1)设计目标不同:嵌入式系统面向特定应用,通用计算机系统面向通用应用;(2)硬件资源不同:嵌入式系统硬件资源有限,通用计算机系统硬件资源丰富;(3)软件系统不同:嵌入式系统软件系统相对简单,通用计算机系统软件系统复杂;(4)实时性要求不同:嵌入式系统对实时性要求较高,通用计算机系统实时性要求较低。
3. 问题:嵌入式系统中的CPU有哪些特点?答案:嵌入式系统中的CPU具有以下特点:(1)低功耗:为了满足嵌入式系统对功耗的要求,CPU需要具备低功耗的特性;(2)高性能:为了提高嵌入式系统的处理速度,CPU需要具备高性能的特性;(3)可扩展性:为了适应不同的应用需求,CPU需要具备可扩展性;(4)集成度:为了减小嵌入式系统的体积,CPU需要具备高集成度。
4. 问题:什么是嵌入式系统中的裸机?答案:嵌入式系统中的裸机是指没有操作系统和应用程序的CPU。
裸机主要用于学习和实验,也可以用于一些对实时性要求较高的应用。
5. 问题:什么是嵌入式系统中的实时操作系统(RTOS)?答案:实时操作系统(RTOS)是一种专门为实时应用设计的操作系统。
它具有以下特点:(1)实时性:RTOS能够满足实时应用对时间的要求;(2)可靠性:RTOS具有较高的可靠性,能够保证系统稳定运行;(3)可预测性:RTOS的性能可预测,便于应用开发。
二、硬件知识1. 问题:简述嵌入式系统中常用的存储器类型及其特点。
答案:嵌入式系统中常用的存储器类型及其特点如下:(1)RAM(随机存储器):用于存储临时数据,断电后数据会丢失;(2)ROM(只读存储器):用于存储程序代码,断电后数据不会丢失;(3)Flash(闪存):具有RAM和ROM的特点,既可读写,又可断电保存数据;(4)EEPROM(电可擦可编程只读存储器):可擦写,断电后数据不会丢失。
嵌入式软件开发岗位招聘笔试题及解答(某大型国企)2025年
2025年招聘嵌入式软件开发岗位笔试题及解答(某大型国企)(答案在后面)一、单项选择题(本大题有10小题,每小题2分,共20分)1、在嵌入式软件开发中,以下哪个不是常见的硬件接口?A. SPI接口B. USB接口C. UART接口D. I2C接口2、嵌入式系统中,下列哪种编程语言最适合用于开发实时操作系统?A. JavaB. PythonC. C++D. JavaScript3、嵌入式系统中,以下关于ARM架构描述错误的是:A. ARM架构低功耗、高性能B. ARM架构主要用于移动计算和嵌入式领域C. ARM架构不支持多媒体和DSP功能D. ARM架构具有灵活的技术授权模式4、在嵌入式软件开发中,关于实时操作系统的描述错误的是:A. 实时操作系统具有高度的响应性和确定性B. 实时操作系统主要应用于实时性要求不高的场景C. 实时操作系统可以确保任务的及时完成和响应需求D. 实时操作系统常用于工业控制、医疗设备等领域5、在嵌入式软件开发中,以下哪种编程语言因其高性能和对低级硬件的控制能力而被广泛使用?A. PythonB. JavaC. CD. JavaScript6、嵌入式系统的核心特点是:A. 计算机视觉B. 无线通信C. 实时响应D. 数据存储7、在嵌入式软件开发中,以下哪个选项是实时操作系统的特点?A. 具有固定的时间表B. 可以根据需要动态调整任务优先级C. 仅适用于单处理器系统D. 不支持多任务处理8、在嵌入式系统中,通常使用哪种类型的存储器?A. 硬盘驱动器C. 光盘D. 闪存9、嵌入式软件开发中,关于内存管理的说法错误的是:A. 动态内存分配是指在程序运行时动态地分配或释放内存。
B. 静态内存分配在程序开始运行时进行,并在程序结束时释放。
C. 内存泄漏是指分配给程序的内存没有得到及时回收,导致内存占用持续增长。
D. 为了避免内存溢出,应该尽可能多地分配内存空间。
10、关于嵌入式系统的说法,错误的是:A. 嵌入式系统通常运行在特定硬件平台上,并对硬件环境有较强依赖性。
嵌入式面试题及答案
嵌入式面试题及答案1、下面函数调用语句func((exp1,exp2),(exp3,exp4,exp5));中func函数有实参的个数为()? [单选题] *A、1B、2(正确答案)C、3D、4答案解析:函数传参的理解2、一个函数无返回值时,应选择下列的说明符是()? [单选题] *A、staticB、externC、void(正确答案)D、无说明符答案解析:关键字的理解3、设有数组:char array[]="China";则数组array所占的空间为()? [单选题] *A、4个字节B、5个字节C、6个字节(正确答案)D、7个字节答案解析:字符数组初始化的理解4、设p1和p2是指向同一个int型一维数组的指针变量,k为int型变量,则不能正确执行的语句是()? [单选题] *A、k=*p1+*p2;B、p2=k;(正确答案)C、p1=p2;D、k=*p1;答案解析:一维数组的使用5、在声明语句int *fun();中,fun表示()? [单选题] *A、一个返回值为指针型的函数名(正确答案)B、一个用于指向函数的指针变量C、一个用于指向一维数组的行指针D、一个用于指向int型数据的指针变量答案解析:函数的声明6、若变量c为char类型,能正确判断出c为小写字母的表达式是()? [单选题] *A、'a'<=c<='z'B、(c>='a')||(c<='z')C、('a'<=c)and('z'>=c)D、(c>='a')&&(c<='z')(正确答案)答案解析:运算符的理解7、以下关于switch语句和break描述中 , ()是正确的。
[单选题] *A、在switch语句中,可以根据需要使用或不使用break语句(正确答案)B、switch语句中必须用break语句C、break语句只能用于switch语句D、break语句是switch语句必须的一部分答案解析:开关语句的理解8、在C语言程序中,当while语句构成的循环中的条件为()时,结束循环。
嵌入式软件笔试题(含答案)
X X X X X
X Y Y Y X
X Y 0 Y X
X Y Y Y X
X X X X X
22:谈谈COM的线程模型。然后讨论进程内/外组件的差别。
23:多态类中的虚函数表是Compile-Time,还是Run-Time时建立的?
参考答案:
虚拟函数表是在编译期就建立了,各个虚拟函数这时被组织成了一个虚拟函数的入口地址的数组.
A.15
B.31
C.3
D.1
参考答案:C
7:定义函数时,缺省函数的类型声明,则函数类型取缺省类型
A.void
B.char
C.float
DHale Waihona Puke int 参考答案:D 8:若main()函数带参数,参数个数最多是
A.0
B.1
C.2
D.3
参考答案:C 只知道有定义形式main(int argc,char* argv[]))
#define N 3
#define Y(n) ((N+1)*n)
则表达式2*(N+Y(5+1))的值是
A.42
B.48
C.54
D.出错
参考答案:B Y(5+1) 传递过去的应该是6,而不是简单的把5+1给替换掉
13:若定义了char ch[]={″abc\0def″},*p=ch;则执行printf(″%c″,*p+4);语句的输出结果是
(3)将栈B的栈顶元素pop出;这样实现的队列入队和出队的平摊复杂度都还是O(1),
26:写一语句实现x是否为2的若干次幂的判断。
软件工程师面试题嵌入式CC++笔试题(含答案)
软件工程师+嵌入式C/C++笔试题一、你对MVC的理解,MVC有什么优缺点?结合Struts,说明在一个Web应用如何去使用?答:MVC设计模式(应用观察者模式的框架模式)M: Model(Business process layer),模型,操作数据的业务处理层,并独立于表现层(Independent of presentation)。
V: View(Presentation layer),视图,通过客户端数据类型显示数据,并回显模型层的执行结果。
C: Controller(Control layer),控制器,也就是视图层和模型层桥梁,控制数据的流向,接受视图层发出的事件,并重绘视图MVC框架的一种实现模型模型二(Servlet-centric):JSP+Servlet+JavaBean,以控制为核心,JSP只负责显示和收集数据,Sevlet,连接视图和模型,将视图层数据,发送给模型层,JavaBean,分为业务类和数据实体,业务类处理业务数据,数据实体,承载数据,基本上大多数的项目都是使用这种MVC 的实现模式。
StrutsMVC框架(Web application frameworks)Struts是使用MVC的实现模式二来实现的,也就是以控制器为核心。
Struts提供了一些组件使用MVC开发应用程序:Model:Struts没有提供model类。
这个商业逻辑必须由Web应用程序的开发者以JavaBean 或EJB的形式提供View:Struts提供了action form创建form bean, 用于在controller和view间传输数据。
此外,Struts提供了自定义JSP标签库,辅助开发者用JSP创建交互式的以表单为基础的应用程序,应用程序资源文件保留了一些文本常量和错误消息,可转变为其它语言,可用于JSP中。
Controller:Struts提供了一个核心的控制器ActionServlet,通过这个核心的控制器来调用其他用户注册了的自定义的控制器Action,自定义Action需要符合Struts的自定义Action规范,还需要在struts-config.xml的特定配置文件中进行配置,接收JSP输入字段形成Action form,然后调用一个Action控制器。
嵌入式c语言笔试题
嵌入式c语言笔试题1. 编写一个C程序,从键盘读入两个整数a和b,计算它们的和并输出。
```c#include <stdio.h>int main() {int a, b, sum;printf("请输入两个整数:\n");scanf("%d%d", &a, &b);sum = a + b;printf("它们的和为:%d\n", sum);return 0;}```2. 编写一个C函数,判断一个整数是否是奇数,并返回判断结果(1表示奇数,0表示偶数)。
```c#include <stdio.h>int isOdd(int num) {if (num % 2 == 1) {return 1;} else {return 0;}}int main() {int num;printf("请输入一个整数:\n");scanf("%d", &num);if (isOdd(num) == 1) {printf("是奇数\n");} else {printf("是偶数\n");}return 0;}```3. 编写一个C函数,求一个整数数组中的最大值并返回。
#include <stdio.h>int findMax(int array[], int size) {int max = array[0];for (int i = 1; i < size; i++) {if (array[i] > max) {max = array[i];}}return max;}int main() {int size;printf("请输入数组的大小:\n"); scanf("%d", &size);int array[size];printf("请输入数组元素:\n"); for (int i = 0; i < size; i++) {scanf("%d", &array[i]);int max = findMax(array, size);printf("最大值为:%d\n", max);return 0;}```4. 编写一个C程序,实现冒泡排序算法对一个整数数组进行升序排序并输出结果。
嵌入式C语言笔试题及答案
嵌入式C语言笔试题及答案嵌入式C语言笔试题及答案为关怀同学们深入学习嵌入式C语言学习,yjbys我为大家共享最新的嵌入式C语言笔试题及答案,希望对大家有所关怀!预处理器(Preprocessor)1. 用预处理指令#define 声明一个常数,用以说明1年中有多少秒(忽视闰年问题)#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 我在这想看到几件事情:1). #define 语法的基本学问(例如:不能以分号结束,括号的使用,等等)2). 懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中有多少秒而不是计算出实际的值,是更清晰而没有代价的。
3). 意识到这个表达式将使一个16位机的整型数溢出-因此要用到长整型符号L,告知编译器这个常数是的长整型数。
4). 假如你在你的表达式中用到UL(表示无符号长整型),那么你有了一个好的起点。
记住,第一印象很重要。
2. 写一个"标准'宏MIN,这个宏输入两个参数并返回较小的一个。
#define MIN(A,B) ((A) = (B) ?(A) :(B))这个测试是为下面的目的而设的:1). 标识#define在宏中应用的基本学问。
这是很重要的,因为直到嵌入(inline)操作符变为标准C的一部分,宏是方便产生嵌入代码的唯一方法,对于嵌入式系统来说,为了能到达要求的性能,嵌入代码经常是必需的方法。
2). 三重条件操作符的学问。
这个操作符存在C语言中的缘由是它使得编译器能产生比if-then-else更优化的代码,了解这个用法是很重要的。
3). 懂得在宏中留神地把参数用括号括起来4). 我也用这个问题开始商议宏的副作用,例如:当你写下面的代码时会发生什么事?least = MIN(*p++, b);3. 预处理器标识#error的目的是什么?#error预处理指令的作用是,编译程序时,只要遇到#error就会生成一个编译错误提示消息,并停止编译。
嵌入式软件工程师笔试题(含答案)
嵌入式软件工程师笔试题(含答案)嵌入式软件工程师笔试题(含答案) (2019-09-09 22:23)分类:面试题选择题1:设float a=2, b=4, c=3;,以下C语言表达式与代数式 (a+b)+c计算结果不一致的是A.(a+b)*c/2B.(1/2)*(a+b)*cC.(a+b)*c*1/2D.c/2*(a+b)参考答案:B,因为a,b,c三个变量都是浮点数,所以在B答案中其结果是0,因为在计算1/2是就是0,如果改成1/2.0就正确了。
2:为了向二进制文件尾部增加数据,打开文件的方式应采用A.″ab″B.″rb+″C.″wb″D.″wb+″参考答案:D3:下述程序执行后的输出结果是#includemain(){int x='f';printf("%c\n",'a'+(x-'a'+1));}A.gB.hC.iD.j参考答案:A4:C语言中,下列运算符优先级最高的是A.!B.%C.>>D.==参考答案:A5:数组定义为“ int a [ 4 ] ; ”,表达式 ( ) 是错误的。
A.*aB.a [ 0 ]C.aD.a++参考答案:D6:执行语句“ k=7>>1; ”后,变量 k 的当前值是A.15B.31C.3D.1参考答案:C7:定义函数时,缺省函数的类型声明,则函数类型取缺省类型 A.voidB.charC.floatD.int参考答案:D8:若main()函数带参数,参数个数最多是A.0B.1C.2D.3参考答案:C 只知道有定义形式main(int argc,char* argv[])) 9:若有宏定义:#define MOD(x,y) x%y则执行以下语句后的输出结果是int a=13,b=94;printf(″%d\n″,MOD(b,a+4));A.5B.7C.9D.11参考答案:B10:下列各个错误中,哪一个不属于编译错误A.改变 x 原值 3 为 5 ,写作“ x==5 ;”B.花括号不配对C.复合语句中的最后一条语句后未加分号D.变量有引用、无定义参考答案:A11:下列程序段运行后, x 的值是( )a=1;b=2;x=0;if(!( -- a))x -- ;if(!b)x=7;else ++x;A.0B.3C.6D.7参考答案:A12:设#define N 3#define Y(n) ((N+1)*n)则表达式2*(N+Y(5+1))的值是A.42B.48C.54D.出错参考答案:B Y(5+1) 传递过去的应该是6,而不是简单的把5+1给替换掉13:若定义了char ch[]={″abc\0def″},*p=ch;则执行printf(″%c″,*p+4);语句的输出结果是A.defB.dC.eD.0参考答案:C14:下列转义字符中错误的是A.′\000′B.′\14′C.′\x111′D.′\2′参考答案:C error C2022: '273' : too big for character15:算术运算符,赋值运算符和关系运算符的运算优先级按从高到低依次为A.算术运算、赋值运算、关系运算B.算术运算、关系运算、赋值运算C.关系运算、赋值运算、算术运算D.关系运算、算术运算、赋值运算参考答案:B16:设#define N 3#define Y(n) ((N+1)*n)则表达式2*(N+Y(5+1))的值是A.42B.48C.54D.出错参考答案:B17:表达式strcmp( “ 3.14 ”,“ 3.278 ” ) 的值是一个A.非零整数B.浮点数C.0D.字符参考答案: A18:设struct{ short a;char b;float c;}cs;则sizeof(cs)的值是A.4B.5C.6D.7参考答案: D 字节对齐的话应该是819:若变量已正确定义,表达式( j=3 , j++ )的值是A.3B.4C.5D.0参考答案:A20:C 语言中运算对象必须是整型的运算符是A.%B./C.!D.**参考答案:A简答题21:打印一个N*N的方阵,N为每边字符的个数( 3〈N〈20 ),要求最外层为“X”,第二层为“Y”,从第三层起每层依次打印数字0,1,2,3,...例子:当N =5,打印出下面的图形:X X X X XX Y Y Y XX Y 0 Y XX Y Y Y XX X X X X22:谈谈COM的线程模型。
嵌入式C语言面试题(附答案)
嵌入式C语言面试题(附答案)int main(int argc,char *argv[]){int c=9,d=0;c=c++%5;d=c;printf(d=%d\n,d);return 0;}a) 写出程序输出b) 在一个可移植的系统中这种表达式是否存在风险?why? #include stdio.hint a=0;int b;static char c;int main(int argc,char *argv[]){char d=4;static short e;a++;b=100;c=(char)++a;e=(++d)++;printf(a=%d, b=%d, c=%d, d= %d, e=%d,a,b,c,d,e);return 0;}a) 写出程序输出b) 编译器假如安排各个变量(a,b,c,d)在内存中的布局(eg. stack,heap,data section,bss section),最好用图形方式描述。
2 中断是嵌入式系统中重要的组成局部,这导致了很多编译开发商供应一种扩展:让标准C支持中断,产生了一个新的关键字__interrupt。
下面的代码就使用了__interrupt关键字去定义了一个中断效劳子程序(ISR),请评论以下这段代码。
__interrupt double compute_area(double radius){double area = PI * radius *radius;printf(nArea = %f, area);return area;}3 C/C++根底学问问题a) 关键字volatile在编译时有什么含义?并给出三个不同使用场景的例子(可以伪代码或者文字描述)。
b) C语言中static关键字的详细作用有哪些 ?c) 请问下面三种变量声明有何区分?请给出详细含义int const *p;int* const p;int const* const p;4 嵌入式系统相关问题a) 对于整形变量A=0x12345678,请画出在little endian及big endian的方式下在内存中是如何存储的。
嵌入式软件开发岗位招聘笔试题及解答(某大型国企)
招聘嵌入式软件开发岗位笔试题及解答(某大型国企)(答案在后面)一、单项选择题(本大题有10小题,每小题2分,共20分)1、嵌入式软件开发中,以下哪个组件负责处理输入/输出操作?A、内核(Kernel)B、驱动程序(Driver)C、应用程序(Application)D、操作系统(Operating System)2、以下哪个编程语言通常用于嵌入式系统的开发?A、JavaB、C/C++C、PythonD、JavaScript3、以下关于嵌入式系统开发的特点,描述错误的是:A. 嵌入式系统通常具有实时性要求高B. 嵌入式系统通常具有功耗限制C. 嵌入式系统通常具有资源受限的特点D. 嵌入式系统不需要进行软件测试4、以下关于Cortex-M微控制器内核,描述错误的是:A. Cortex-M内核是ARM公司推出的微控制器内核系列B. Cortex-M内核具有低功耗和高性能的特点C. Cortex-M内核不支持中断嵌套D. Cortex-M内核广泛应用于嵌入式系统5、题干:嵌入式软件开发中,以下哪种通信协议主要用于短距离、低功耗的设备间通信?A. USBB. TCP/IPC. CAND. NFC6、题干:在嵌入式系统中,以下哪个组件通常负责处理硬件中断?A. 运行时库B. 操作系统内核C. 应用程序D. 硬件抽象层7、嵌入式软件开发中,以下哪个不是常见的嵌入式操作系统?A)VxWorksB)FreeRTOSC)LinuxD)Windows8、在嵌入式软件开发中,以下哪种编程语言最适合用于硬件抽象层(HAL)的开发?A)C++B)PythonC)JavaD)Assembly9、以下哪个选项不是嵌入式系统常见的实时操作系统(RTOS)?A. VxWorksB. LinuxC. FreeRTOSD. Windows XP 10、在嵌入式软件开发中,以下哪种编程语言不是通常用于编写嵌入式应用的?A. CB. C++C. PythonD. Assembly二、多项选择题(本大题有10小题,每小题4分,共40分)1、以下哪些是嵌入式系统开发中常用的编程语言?A. C语言B. C++C. PythonD. JavaE. Assembly语言2、在嵌入式系统设计中,以下哪些是典型的硬件资源?A. 微控制器(MCU)B. 数字信号处理器(DSP)C. 传感器D. 显示屏E. 通信接口3、以下哪些技术或编程语言通常用于嵌入式软件开发?A. C语言B. PythonC. JavaD. ARM汇编语言E. Verilog4、以下哪些是嵌入式系统开发中常见的开发流程步骤?A. 需求分析B. 硬件选型与设计C. 软件设计D. 编码与调试E. 系统集成与测试5、以下哪些技术或工具是嵌入式软件开发中常用的?()A、C/C++B、Linux操作系统C、Keil MDKD、IAR EWARME、QtF、MATLAB/Simulink6、以下哪些是嵌入式系统设计中常见的硬件接口?()A、SPI(串行外设接口)B、I2C(串行总线上传输接口)C、UART(通用异步收发传输器)D、USB(通用串行总线)E、PCI(外围组件互联)F、CAN(控制器局域网)7、以下哪些技术或工具通常用于嵌入式软件开发?()A. C语言B. PythonC. VHDLD. ARM Cortex-M3E. SQLite8、在嵌入式软件开发过程中,以下哪些步骤是常见的?()A. 需求分析B. 硬件选型C. 设计架构D. 编码实现E. 系统集成测试9、以下哪些技术或工具是嵌入式软件开发中常用的?()A. C/C++B. ARM Cortex-M系列处理器架构C. Linux操作系统D. SQLite数据库E. Keil uVision集成开发环境 10、以下哪些是嵌入式系统开发过程中的关键阶段?()A. 需求分析B. 硬件选型与设计C. 软件设计D. 编码实现E. 测试与调试三、判断题(本大题有10小题,每小题2分,共20分)1、嵌入式软件开发岗位中,C语言是唯一可用的编程语言。
嵌入式常见面试题及答案
1.嵌入式系统中经常要用到无限循环,如何用C编写死循环答:while(1){} 或者for(;;)2.程序的局部变量存在于哪里,全局变量存在于哪里,动态申请数据存在于哪里。
答:程序的局部变量存在于栈区;全局变量存在于静态区;动态申请数据存在于堆区。
3.关键字const有什么含义?答:1)只读。
2)使用关键字const也许能产生更紧凑的代码。
3)使编译器很自然地保护那些不希望被改变的参数,防止其被无意的代码修改。
4.请问以下代码有什么问题:答:没有为str分配内存空间,将会发生异常,问题出在将一个字符串复制进一个字符变量指针所指地址。
虽然可以正确输出结果,但因为越界进行内在读写而导致程序崩溃。
5.已知一个数组table,用一个宏定义,求出数据的元素个数答:#define NTBL (sizeof(table)/sizeof(table[0]))6.写一个"标准"宏MIN ,这个宏输入两个参数并返回较小的一个。
答:#define MIN(A,B) ((A) <= (B) ? (A) : (B))考点:1) 标识#define在宏中应用的基本知识。
这是很重要的。
因为在嵌入(inline)操作符变为标准C的一部分之前,宏是方便产生嵌入代码的唯一方法,对于嵌入式系统来说,为了能达到要求的性能,嵌入代码经常是必须的方法。
2) 三重条件操作符的知识。
这个操作符存在C语言中的原因是它使得编译器能产生比if-then-else更优的代码,了解这个用法是很重要的。
3) 懂得在宏中小心地把参数用括号括起来。
7.do……while和while有什么区别?答:前一个循环一遍再判断,后一个判断以后再循环。
8.什么是预编译,何时需要预编译?答:1、总是使用不经常改动的大型代码体。
程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。
在这种情况下,可以将所有包含文件预编译为一个预编译头。
嵌入式软件工程师经典面试题(附答案)(二)
嵌⼊式软件⼯程师经典⾯试题(附答案)(⼆)⼀、基本介绍嵌⼊式系统是以应⽤为中⼼,以计算机技术为基础,并且软硬件可裁剪,适⽤于应⽤系统对功能、可靠性、成本、体积、功耗有严格要求的专⽤计算机系统。
它⼀般由、外围硬件设备、以及⽤户的应⽤程序等四个部分组成,⽤于实现对其他设备的控制、监视或管理等功能。
嵌⼊式软件⼯程师就是编写嵌⼊式系统的⼯程师。
⼆、职业要求应具备哪些能⼒1.最重要的是C语⾔编程,以及C++,这个与你读程,应⽤,开发项⽬,做系统移植息息相关;2.操作系统: LINUX,WINCE等,⾄少学习过⼀种,并且还需要对些基础知识有蛮多的了解;3.对ARM,FPGA,DSP等这些硬件⽐较了解。
这是最常规的条件当然,⼀些基本素质,像英语能⼒,团队协作能管理,也很重要。
三、经典⾯试题1.嵌⼊式系统中经常要⽤到⽆限循环,如何⽤C编写死循环?while(1){}或者for(;;)2.程序的局部变量存在于哪⾥,全局变量存在于哪⾥,动态申请数据存在于哪⾥?程序的局部变量存在于栈区;全局变量存在于静态区;动态申请数据存在于堆区3.关键字const有什么含义?1)只读。
2)使⽤关键字const也许能产⽣更紧凑的代码。
3)使编译器很⾃然地保护那些不希望被改变的参数,防⽌其被⽆意的代码修改4.请问以下代码有什么问题?int main() {char a;char *str=&a;strcpy(str,"hello");printf(str);return 0;}没有为str分配内存空间,将会发⽣异常,问题出在将⼀个字符串复制进⼀个字符变量指针所指地址。
虽然可以正确输出结果,但因为越界进⾏内在读写⽽导致程序崩溃5.已知⼀个数组table,⽤⼀个宏定义,求出数据的元素个数?#define NTBL (sizeof(table)/sizeof(table[0]))6.写⼀个"标准"宏MIN ,这个宏输⼊两个参数并返回较⼩的⼀个?#define MIN(A,B) ((A) <= (B) ? (A) : (B))考点:1) 标识#define在宏中应⽤的基本知识。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
[DOC]-嵌入式软件开发面试C语言笔试题答案嵌入式软件开发面试C语言笔试题答案嵌入式软件笔试**/**********************/***********************Chapter1语法类***********************/1.volatile作用,应用场合举3例volatile修饰的变量表示这个变量可能会被意想不到的改变,对该变量的操作将不作优化,用到该变量时都从这个变量的原始地址读取,而不是用保存在寄存器里的备份。
Volatile常用在:1).硬件寄存器(如:状态寄存器)。
2).中断程序中会访问到的非自动变量(Non-automaticvariables)。
3).多线程应用中几个任务共享的变量2.一个参数既可以是const还可以是volatile吗,解释为什么。
是的。
比如只读的状态寄存器。
它是volatile因为它可能被意想不到地改变。
它是const因为程序不应该试图去修改它。
3.一个指针可以是volatile吗,解释为什么。
是的。
比如一个中断服务子程序修该一个指向一个buffer的指针时。
苏金塔4.用变量a给出下面的定义 a)一个整型数 b)一个指向整型数的指针 c)一个指向指针的指针,它指向的指针是指向一个整型数 d)一个有10个整型数的数组 e)一个有10个指针的数组,该指针是指向一个整型数的 f)一个指向有10个整型数数组的指针 g)一个指向函数的指针,该函数有一个整型参数并返回一个整型数 h)一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数a)intb)inta;//Aninteger*a;//Apointertoanintegerc)int**a;//Apointertoapointertoanintegerd)inte)intf)intg)inta[10];//Anarrayof10integers*(a[10]);//Anarrayof10pointerstointegers(*a)[10];//Apointertoanarrayof10integers(*a)(int);//Apoint ertoafunctionathattakesanintegerargumentandreturnsanintegerh)int(*a[10])(int);//Anarrayof10pointerstofunctionsthattakeanintegerargumentandreturnaninteger5.什么是存储机制里的大、小端模式,试举例说明大端模式(big-edian):MSB存放在最低端的地址上。
举例,双字节数0x1234以big-endian的方式存在起始地址0x00002000中:|data|<--address|0x12|<--0x00002000|0x34|<--0x00002001在Big-Endian中,对于bit序列中的序号编排方式如下(以双字节数0x8B8A为例):bit|01234567|89101112131415MSB----------------------------------LSBval|10001011|10001010|=0x8B8A小端模式(little-endian):LSB存放在最低端的地址上。
举例,双字节数0x1234以little-endian的方式存在起始地址0x00002000中:|data|<--address|0x34|<--0x00002000|0x12|<--0x00002001在Little-Endian中,对于bit序列中的序号编排和Big-Endian刚好相反,其方式如下(以双字节数0x8B8A为例):bit|15141312111098|76543210MSB-----------------------------------LSBval|10001011|10001010|=0x8B8A6.写一段用来判断内存存储方式是大端还是小段的代码。
联合体union的存放顺序是所有成员都从低地址开始存放,利用该特性就可以轻松地获得了对内存采用Little-endian还是Big-endian模式读写。
代码如下: intcheckCPUendian(){union{unsignedinta;unsignedcharb;}c;c.a=1;return(c.b==1);}/*return1:little-endian,return0:big-endian*/7.定义一个返回值是指向函数的指针且有一个指向函数的指针作参数的函数。
通用形式如下:typedefint(*P)();//定义一个函数指针P类型Pfunction(int(*p)());//定义一个函数返回值P类型,且定义一个指向函数的指针p作参数8.用预处理指令#define声明一个常数,用以表明1年中有多少秒(忽略闰年问题)#defineSECONDS_PER_YEAR(60*60*24*365)UL//UL怎么个用法,你暂不要加9.写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个。
两个作用:1)局部变量被声明为static则这一函数调用结束后该变量值保持不变。
2)外部变量被声明为static表明它是一个本地全局变量。
该变量只能在该文件内被访问,不能被其它文件访问。
11(关键字const有什么含意,声明一个变量为只读。
12.下面的声明都是什么意思,1)constinta;2)intconsta;3)constint*a;4)int*consta;5)intconst*consta;1,2一样a为只读整形变量;3指向一个只读整形变量的指针;4指向整形的只读指针;5指向只读整形的只读指针。
1234的整型变量的值为0xaa55。
13.C语言实现设置一绝对地址为0x0x12340xaa55int*p;p=(int*)0x1234;//把整型数0x1234强制转换(typecast)为一指针*p=0xaa55;14.找出下面一段ISR的问题。
__interruptdoublecompute_area(doubleradius){doublearea=PI*radius*radius;printf("\nArea=%f",area);returnarea;}1)ISR不能传递参数。
2)ISR不能有返回值。
3)ISR应该短且有效率,在ISR中做浮点运算不明智。
15.下面的代码输出是什么,为什么,voidfoo(void){unsignedinta=6;intb=-20;(a+b>6)?puts(">6"):puts("<=6");}输出>6,原因是当表达式中存在有符号类型和无符号类型时所有的操作数都自动转换为无符号类型。
-20成了一个非常大的正数。
//此题的输出确实是这样,但单纯输出a+b时结果又是-14很怪异迷惑~~~~~~~16.评价下面的代码片断:unsignedintzero=0;unsignedintcompzero=0xFFFF;如果碰巧int型是16位则上述代码没有问题,否则上面的代码不正确。
应写成:unsignedintcompzero=~0;17.下面代码执行后a,b,c的值各是多少, inta=5,b=7,c;c=a+++b;//c=(a++)+ba=6,b=7,c=12.//吾已试,结果确如此18.Typedef和#define的区别#define在预编译的时候处理作机械的字符替换。
Typedef在编译的时候处理,并不是作简单的字符替换。
而是如同定义变量一样声明一个类型。
然后用它去定义这种类型的变量。
比如下面的例子:#definedPSstructs*dPSp1,p2;tPSp3,p4;第一句扩展为structs*p1,p2;这条代码定义p1为指向结构的指针,p2为一个实际的结构体。
第二句定义p3和p4为指向结构体s的指针。
/************************Chapter2系统类***********************/1.Linux和Uc/os是如何实现任务调度的,2.Bootloader移植过程要注意的事项,要做哪些工作3.Emacs用过没有,/************************Chapter3编程类***********************/1.在字符串中找出所有与给定字符相同字符的位置。
#include<stdio.h>chars[6]="hello";voidsearch(chargiven){inti=0,j=0;while(s[i]!='\0'){if(s[i]==given){printf("location=%d\n",i);j++;}i++;}if(j==0)printf("No%cfound\n",given);}intmain(void){search('o');return0;}2.将一个字符串自身逆序.#include<stdio.h>#defineLEN12intmain(void){intm,i;chartemp;chars[LEN]="hellotiger";m=(LEN-1)/2;printf("%s\n",s);for(i=0;i<m;i++){temp=s[i];s[i]=s[LEN-2-i];s[LEN-2-i]=temp;}printf("%s\n",s);return0;}/*-------E------*/3.链表的基本操作及链表自身逆序。
/*----chainoperatefromDataStructure---*/#include<malloc.h> #include<stdio.h>#include<stdlib.h>typedefintDataType;typedefstructNode{DataTypedata;structNode*next;}SLNode;//----initiatevoidListInitiate(SLNode**head){if((*head=(SLNode*)malloc(sizeof(SLNode)))==NULL)elseprintf("OK\ n");(*head)->next=NULL;}//----lengthcalintListLength(SLNode*head){SLNode*p=head;intsize=0;while(p->next!=NULL){p=p->next;size++;}returnsize;exit(1);intListInsert(SLNode*head,inti,DataTypex){SLNode*p,*q;intj;p=head;j=-1;while((p->next!=NULL)&&(j<(i-1))){p=p->next;j++;}if(j!=(i-1)){printf("Positionerror\n");return0;}if((q=(SLNode*)malloc(sizeof(SLNode)))==NULL)exit(1);q->data=x;q->next=p->next;p->next=q;return1;}//----deleteanodeintListDelete(SLNode*head,inti,DataType*x){SLNode*p,*s;intj;p=head;j=-1;while((p->next!=NULL)&&(p->next->next!=NULL)&&(j<i-1)){p=p->next;j++;}if(j!=i-1){printf("Positionerror\n");return0;}s=p->next;*x=s->data;p->next=p->next->next;free(s);return1;}//-----datagetintListGet(SLNode*head,inti,DataType*x) {SLNode*p;intj;p=head;p=p->next;j++;}if(j!=i){printf("Positionerror\n");return0;}*x=p->data;return1;}//----Destroyachain voidDestroy(SLNode**head) {SLNode*p,*p1;p=*head;while(p!=NULL){p1=p;p=p->next;free(p1);}*head=NULL;}//-----converseachain voidconverse(SLNode*head) {SLNode*p,*q;p=head->next;head->next=NULL;while(p!=NULL){q=p;p=p->next;q->next=head->next;head->next=q;}}//----compositeoperation intmain(void){SLNode*head;inti,x;ListInitiate(&head);for(i=0;i<10;i++){if(ListInsert(head,i,i)==0){ printf("Error\n");return1;}if(ListDelete(head,0,&x)==0) {printf("Error\n");return1;}if(ListInsert(head,0,100)==0){ printf("Error\n");return1;}converse(head);//chain,position,dataaddressfor(i=0;i<ListLength(head);i++){if(ListGet(head,i,&x)==0)//chain,position,dataaddress {printf("Error\n");return1;}elseprintf("%d}printf("\n");Destroy(&head);return0;}/*------E-------*/4.写一个二分查找算法。