C语言嵌入式笔试题目及参考答案-烽火通信

合集下载

嵌入式C高级编程笔试B(有答案)3.25

嵌入式C高级编程笔试B(有答案)3.25

<<嵌入式C高级编程笔试>>试卷B一、选择题(35*2’)1. 语句printf(″s\\t″)的输出结果为( B )A s\\tB s\tC s\D s*2. 程序中定义以下宏 #define S(a,b) a*b若定义 int area; 且令area=S(3+1,3+4),则变量area的值为( A )A. 10 B. 12 C. 21 D. 28正确标识符 DA ?aB a=2C a.3D a-33. 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. 执行下列语句中,sum变量的值是( B )int sum=0for(int i=0;i<10;i++,sum+=i);A 45B 55C 0D 编译错误假如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(){static int c;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高级编程笔试A(有答案)3.11

嵌入式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语言笔试题及答案

嵌入式C语言笔试题及答案

嵌入式C语言笔试题及答案预处理器(Preprocessor)1. 用预处理指令define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)define _PER_YEAR (60 某 60 某 24 某 365)UL我在这想看到几件事情:1). define 语法的基本知识(例如:不能以分号结束,括号的使用,等等)2). 懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中有多少秒而不是计算出实际的值,是更清晰而没有代价的。

3). 意识到这个表达式将使一个16位机的整型数溢出-因此要用到长整型符号L,告诉编译器这个常数是的长整型数。

4). 如果你在你的表达式中用到UL(表示无符号长整型),那么你有了一个好的起点。

记住,第一印象很重要。

2. 写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个。

define MIN(A,B) ((A) 6") : puts("6”。

原因是当表达式中存在有符号类型和无符号类型时所有的操作数都自动转换为无符号类型。

因此-20变成了一个非常大的正整数,所以该表达式计算出的结果大于6。

这一点对于应当频繁用到无符号数据类型的嵌入式系统来说是丰常重要的。

如果你答错了这个问题,你也就到了得不到这份工作的边缘。

13. 评价下面的代码片断:unsigned int zero = 0;unsigned int compzero = 0某FFFF;/某1's complement of zero 某/对于一个int型不是16位的处理器为说,上面的代码是不正确的。

应编写如下: unsigned int compzero =~0; 这一问题真正能揭露出应试者是否懂得处理器字长的重要性。

在我的经验里,好的嵌入式程序员非常准确地明白硬件的细节和它的局限,然而PC机程序往往把硬件作为一个无法避免的烦恼。

到了这个阶段,应试者或者完全垂头丧气了或者信心满满志在必得。

C语言嵌入式笔试题目及参考答案-烽火通信

C语言嵌入式笔试题目及参考答案-烽火通信

什么是预编译何时需要预编译:1、总是使用不经常改动的大型代码体。

2、程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。

在这种情况下,可以将所有包含文件预编译为一个预编译头。

char * const p;char const * pconst char *p上述三个有什么区别?char * const p; //常量指针,p的值不可以修改char const * p;//指向常量的指针,指向的常量值不可以改const char *p;//和char const *pchar str1[] = "abc";char str2[] = "abc";const char str3[] = "abc";const char str4[] = "abc";const char *str5 = "abc";const char *str6 = "abc";char *str7 = "abc";char *str8 = "abc";cout << ( str1 == str2 ) << endl;cout << ( str3 == str4 ) << endl;cout << ( str5 == str6 ) << endl;cout << ( str7 == str8 ) << endl;结果是:0 0 1 1解答:str1,str2,str3,str4是数组变量,它们有各自的内存空间;而str5,str6,str7,str8是指针,它们指向相同的常量区域。

3. 以下代码中的两个sizeof用法有问题吗?void UpperCase( char str[] ) // 将str 中的小写字母转换成大写字母{for( size_t i=0; iif( 'a'<=str[i] && str[i]<='z' )str[i] -= ('a'-'A' );}char str[] = "aBcDe";cout << "str字符长度为: " << sizeof(str)/sizeof(str[0]) << endl;UpperCase( str );cout << str << endl;答:函数内的sizeof有问题。

[DOC]-嵌入式软件开发面试C语言笔试题 答案

[DOC]-嵌入式软件开发面试C语言笔试题 答案

[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存放在最低端的地址上。

嵌入式培训考试题及答案

嵌入式培训考试题及答案

嵌入式培训考试题及答案2016年嵌入式培训考试题及答案随着消费家电的智能化,嵌入式更显重要。

嵌入式系统无疑是当前最热门最有发展前途的IT应用领域之一。

那么yjbys店铺为大家推荐以下的嵌入式编程试题,希望能帮助到大家!1、编写一个汇编程序,在ARM程序代码中调用Thumb子程序,并返回ARM程序完成其功能。

CODE32--------BLX TSUB1-------CODE16TSUB1-------BX R142、将存储器中0x30000000开始的200字节的数据,传送到地址从0x10000000开始的某接口电路的存储区域。

STARTLDR R0,=0X30000000LDR R1,=0X10000000MOV R4,#0LKMLDRB R2,[R0],#1STRB R2,[R1],#1ADD R4,R4,#1CMP R4,#200BLNE LKMEND3、编写一简单ARM汇编程序段,实现1+2+…+1000的累加运算。

MOV R0,#0MOV R1,#0LKMADD R0,R0,#1ADD R1,R1,R0CMP R0,#1000BLNE LKMEND4、将内存中从0x30000FFF开始的100个字数据相加,其结果存于R3、R2中。

LDR R0,=0X30000000MOV R4,#0MOV R2,#0MOV R3,#0LKMLDR R5 , [R0],#4ADDS R3, R3,R5ADDC R2, R2,#0ADD R4,R4,#1CMP R4,#100BLNE LKMEND5、编写一程序,查找存储器从0x30000000开始的`100个字中为0的数目,将其结果存到0x30000012中。

STARTLDR R0,=0X30000000LDR R1,=0X30000012MOV R3,#0MOV R4,#0LKMLDR R2,[R0],#4ADD R3,R3,#1CMP R2,#0ADDEQ R4,R4,#1CMP R3,#100BLNE LKMSTR R4,[R1]END6、R0和R1中有两个32位无符号数,若R0>R1,则R0=R0-R1;若R0CMP R0,R1SUBHS R0,R0,R1SUBCC R1,R1,R07、试编写程序,实现计算2+4+6+8+…+2N的值。

烽火通信笔试

烽火通信笔试

烽火通信笔试技术开发部与业务与应用产品部SDH,C/C++,三对连接的特点设计模块MAC地址指针的重点Const的区别define的作用Endifstrcpy编写字符串复制函数Include “filename.h”与Include 的区别#include系统检索头文件时会先从系统文件里开始找,再找其他地方。

用于系统文件较快。

#include"filename.h"系统检索头文件时先从程序所处目录开始查找。

用于自定义文件较快读程序:1用位运算计算二进制的位数2链表删除节点和插入节点操作写程序:关于链表和指针的1单链表逆序int NIXU(LNode *head){LNode *rear = head->next->next->next; /*指向第三个节点*/ LNode *pre = head->next; /*指向头节点*/LNode *cur = head ->next->next; /*指向第二个节点*//*原来的头节点变成尾节点*/pre->next = NULL;cur->next = pre;/*移动三个指针*/pre = cur;cur = rear;rear = rear->next;while(rear) /*反序,需要三个节点支持*/{cur->next = pre;/*移动三个指针*/pre = cur;cur = rear;rear = rear->next;}cur->next = pre; /*尾节点处理*/head->next = cur; /*更新头节点*/}2 两个带头结点的单链表合并合成的链接排序英译汉:WDM的翻译Wavelength Division Multiplexing 字符型指针和常量指针的区别单片机处理中断的机制面向对象的特点1.信息隐藏和封装特性:2.继承:3.组合特性4.动态特性(1)抽象:(2)多态性:OSI七层模型TCP/UDP的区别是否连接面向连接面向非连接传输可靠性可靠不可靠应用场合传输大量数据少量数据速度慢快程序改错题51与X86寻址的区别单片机计数的功能单片机中断宽带产品部填空和简单1二进制/16进制2 组播地址范围3 点对点通信方式哪三种4 Hub在哪一层交换机在哪一层5 Linux挂取指令光驱弹出指令6 PON中文网络拓扑结构7 VOIP编码方式ITU-T的各种建议的分类由一个首字母来代表,每个系列的建议除了分类字母以外还有一个编号,比如说"V.90"。

最新嵌入式笔试题及答案

最新嵌入式笔试题及答案

最新嵌入式笔试题及答案2016最新嵌入式笔试题及答案嵌入式系统是软件和硬件的综合体,还可以涵盖机械等附属装置。

那么嵌入式考试笔试的试题你做了吗?下面跟yjbys店铺一起来看看吧!1. 以下三条输出语句分别输出什么?char str1[] = "abc";char str2[] = "abc";const char str3[] = "abc";const char str4[] = "abc";const char* str5 = "abc";const char* str6 = "abc";cout << boolalpha << ( str1==str2 ) << endl; // 输出什么?cout << boolalpha << ( str3==str4 ) << endl; // 输出什么?cout << boolalpha << ( str5==str6 ) << endl; // 输出什么?答:分别输出false,false,true。

str1和str2都是字符数组,每个都有其自己的存储区,它们的值则是各存储区首地址,不等;str3和str4同上,只是按const语义,它们所指向的数据区不能修改。

str5和str6并非数组而是字符指针,并不分配存储区,其后的“abc”以常量形式存于静态数据区,而它们自己仅是指向该区首地址的指针,相等。

3. 非C++内建型别 A 和 B,在哪几种情况下B能隐式转化为A?答:a. class B : public A { ……} // B公有继承自A,可以是间接继承的b. class B { operator A( ); } // B实现了隐式转化为A的转化c. class A { A( const B& ); } // A实现了non-explicit的参数为B(可以有其他带默认值的参数)构造函数d. A& operator= ( const A& ); // 赋值操作,虽不是正宗的隐式类型转换,但也可以勉强算一个4. 以下代码有什么问题?struct Test{Test( int ) {}Test() {}void fun() {}};void main( void ){Test a(1);a.fun();Test b();b.fun();}答:变量b定义出错。

嵌入式考试题目及答案

嵌入式考试题目及答案

嵌入式考试题目及答案一、单选题(每题2分,共20分)1. 嵌入式系统是指()。

A. 嵌入到其他系统中的专用计算机系统B. 嵌入到其他系统中的通用计算机系统C. 嵌入到其他系统中的操作系统D. 嵌入到其他系统中的硬件系统答案:A2. 以下哪个不是嵌入式系统的典型应用领域?()A. 消费电子B. 工业控制C. 航空航天D. 个人电脑答案:D3. 在嵌入式系统中,以下哪个不是常用的处理器类型?()A. 微控制器(MCU)B. 数字信号处理器(DSP)C. 微处理器(MPU)D. 网络处理器(NP)答案:D4. 以下哪个不是嵌入式系统的开发工具?()A. 编译器B. 调试器C. 仿真器D. 打印机答案:D5. 在嵌入式系统中,以下哪个不是操作系统的功能?()A. 任务调度B. 内存管理C. 文件系统D. 网络通信答案:D6. 以下哪个不是嵌入式系统的硬件组成?()A. 处理器B. 存储器C. 输入/输出设备D. 显示器答案:D7. 在嵌入式系统中,以下哪个不是软件组成?()A. 操作系统B. 应用程序C. 驱动程序D. 打印机驱动答案:D8. 以下哪个不是嵌入式系统的开发流程?()A. 需求分析B. 系统设计C. 编码D. 测试答案:D9. 在嵌入式系统中,以下哪个不是调试技术?()A. 断点B. 单步执行C. 代码覆盖率分析D. 性能优化答案:D10. 以下哪个不是嵌入式系统的可靠性要求?()A. 容错性B. 可预测性C. 可维护性D. 可扩展性答案:D二、多选题(每题3分,共15分)11. 嵌入式系统的特点是()。

A. 实时性B. 专用性C. 可扩展性D. 低功耗答案:ABD12. 嵌入式系统的开发工具包括()。

A. 编译器B. 调试器C. 仿真器D. 打印机答案:ABC13. 嵌入式系统的硬件组成包括()。

A. 处理器B. 存储器C. 输入/输出设备D. 显示器答案:ABC14. 嵌入式系统的软件组成包括()。

嵌入式工程师笔试题带答案

嵌入式工程师笔试题带答案

嵌入式工程师笔试题带答案1、将一个字符串逆序2、将一个链表逆序3、计算一个字节里(byte)里面有多少bit被置14、搜索给定的字节(byte)5、在一个字符串中找到可能的最长的子字符串6、字符串转换为整数7、整数转换为字符串/*题目:将一个字符串逆序*/#includeusing namespace std;//#define NULL ((void *)0)char * mystrrev(char * const dest,const char * const src) { if (dest==NULL && src==NULL)return NULL;char *addr = dest;int val_len = strlen(src);dest[val_len] = '\0';int i;for (i=0; i<="" p="">{*(dest+i) = *(src+val_len-i-1);}return addr;}main(){char *str="asdfa";char *str1=NULL;str1 = (char *)malloc(20);if (str1 == NULL)cout<<"malloc failed";cout<<mystrrev(str1,str);< bdsfid="96" p=""></mystrrev(str1,str);<>free(str1);str1=NULL;//杜绝野指针}p=head;q=p->next;while(q!=NULL){temp=q->next;q->next=p;p=q;q=temp;}这样增加个辅助的指针就行乐。

嵌入式软件笔试题(含答案)

嵌入式软件笔试题(含答案)
例子:当N =5,打印出下面的图形:
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++笔试题(含答案)

软件工程师面试题嵌入式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笔试题

考查一个初级嵌入式系统开发人员的C基本功,附有答案题目由资深嵌入式系统专家拟定,目的是考查入门级的嵌入式软件开发人员Gavin Shaw提供详细解答编者按:非常基本关于C语言的问题,一个信息类(计算机,资讯工程,电子工程, 通信工程)专业的本科毕业生应该达到的水平。

题目不难,全部都能快速地答完,当然也需要一定的知识储备。

对于大多数人,我们预期你可能答错3) 4) 15)题,所以答错3道以内的,我们认为你很棒答错5道题以内,我们认为你还不错(你还可能答错第9题)如果你有6道以上的题目不能答对,基本上我们都不好说什么了....约定:1) 下面的测试题中,认为所有必须的头文件都已经正确的包含了2)数据类型char 一个字节1 byteint 两个字节2 byte (16位系统,认为整型是2个字节)long int 四个字节4 bytefloat 四个字节4 byetdouble 八个字节8 bytelong double 十个字节10 bytepointer 两个字节2 byte(注意,16位系统,地址总线只有16位)第1题: 考查对volatile关键字的认识#include<setjmp.h>static jmp_buf buf;main() { volatile int b; b =3; if(setjmp(buf)!=0) { printf("%d ", b); exit(0); } b=5; longjmp(buf , 1);} 请问,这段程序的输出是(a) 3(b) 5(c) 0(d) 以上均不是第1题: (b)volatile字面意思是易于挥发的。

这个关键字来描述一个变量时,意味着给该变量赋值(写入)之后,马上再读取,写入的值与读取的值可能不一样,所以说它"容易挥发"的。

这是因为这个变量可能一个寄存器,直接与外部设备相连,你写入之后,该寄存器也有可能被外部设备的写操作所改变;或者,该变量被一个中断程序,或另一个进程改变了.volatile 不会被编译器优化影响,在longjump 后,它的值是后面假定的变量值,b最后的值是5,所以5被打印出来.setjmp : 设置非局部跳转/* setjmp.h*/Stores context information such as register values so that the lomgjmp function can return control to the statement following the one calling setjmp.Returns 0 when it is initially called.Lonjjmp: 执行一个非局部跳转/* setjmp.h*/第2题:考查类型转换main(){ struct node { int a; int b; int c; }; struct node s= { 3, 5,6 }; struct node *pt = &s; printf("%d" , *(int*)pt);} 这段程序的输出是:(a) 3(b) 5(c) 6(d) 7第2题: (a)结构题的成员在内存中的地址是按照他们定义的位置顺序依次增长的。

嵌入式软件工程师C语言笔试题

嵌入式软件工程师C语言笔试题

软件笔试题(A)姓名:学校:专业:电话:(如无特殊说明,以下所有测试内容都是基于32位嵌入式系统)1)程序的局部变量存在于中,全局变量存在于中,动态申请数据存在于中。

2)如何用if来做零值比较int a : if(a==0)bool a :float a :void * a :3)void func( char str[100]){printf(“%d”,sizeof( str ) );}输出结果是:有下列定义:char str[] = “Hello World”;char *p = str;int n = 10;void *ptr = malloc( 100 );请写出如下表达式的值:sizeof (str ) = ;sizeof ( p ) = ;sizeof ( n ) = ;sizeof ( ptr )= ;4)unsigned char *p1;unsigned long *p2;p1=(unsigned char *)0x87000000;p2=(unsigned long *)0x80010000;请问p1+5 = ;p2+5 = ;5)char str[10];strcpy(str,"0123456789");产生什么结果?为什么?6)用C语句,让程序跳转到绝对地址0xFFFF0去执行7)已知一个数组array,用一个宏定义,求出数组的元素个数#define ARRAY_COUNT8)简要说明,为什么标准头文件都有类似以下的结构。

#ifndef __INC_Honeywell_Debug#define __INC_Honeywell_Debug#ifdef __cplusplusextern "C" {#endif/*...*/#ifdef __cplusplus}#endif#endif /*__INC_Honeywell_Debug */9)给定结构struct token_t{char digit:4;char index:4;unsigned short data:8;unsigned long tick;};问sizeof(token_t) =10)在空白处填写完整强制类型转换short (*day_p)[16];day_p = ( ) malloc ( );11)简述:TCP/UDP有何区别?TCP/IP通信建立的过程怎样?端口有什么作用?12)找出下列嵌入式系统中断处理函数中的错误:__interrupt double compute_area (double radius){double area = PI * radius * radius;printf(" Area = %f", area);return area;}13)请写一个宏,若处理器是Big_endian的,则返回0;若是Little_endian的,则返回13 / 714)数组a[N],存放了1至N-1个自然数,其中某个自然数重复一次。

嵌入式软件工程师笔试题(含答案)

嵌入式软件工程师笔试题(含答案)

嵌入式软件工程师笔试题(含答案)嵌入式软件工程师笔试题(含答案) (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的线程模型。

嵌入式平台实习生笔试题目V2.0_答案

嵌入式平台实习生笔试题目V2.0_答案

嵌入式平台实习生笔试题目V2.0_答案学校:日期:姓名:C1. 以下为WinNT下的32位C++程序,请计算sizeof的值。

(5分)防止重复定义C3. 已知strcpy函数的函数原型是:char *strcpy(char *strDest, const char *strSrc)。

其中,strDest是目的字符串,strSrc是源字符串。

(15分)(1)不调用C++/C的字符串库函数,请编写函数strcpy答:char *strcpy(char *strDest, const char *strSrc){char *s = strDest;if((strDest == NULL) || (strSrc == NULL))return NULL;while((*strDest++ = *strSrc++) != …\\0?);return s;}(2)strcpy能把strSrc的内容复制到strDest,为什么还要char *类型的返回值?答:为了实现链式表达式,如:int length = strlen( strcpy( strDest, “hello world”) );C6. 简述..在C++程序中调用被C编译器编译后的函数,为什么要加extern “C”声明?(5分)答:主要为了解决C++中函数重载这个特性。

详细如下:载,函数名一样,但汇编代号绝对不能一样。

为了区分,编译器会把函数名和参数类型合在一起作为汇编代号,这样就解决了重载问题。

具体如何把函数名和参数类型合在一起,要看编译器的帮助说明了。

这样一来,如果C++调用C,如fun(),则调用名就不是C的翻译结果_fun,而是带有参数信息的一个名字,因此就不能调用到fun(),为了解决这个问题,加上extern "C"表示该函数的调用规则是C的规则,则调用时就不使用C++规则的带有参数信息的名字,而是_fun,从而达到调用C函数的目的。

嵌入式c语言笔试题及答案

嵌入式c语言笔试题及答案

嵌入式c语言笔试题及答案2017年嵌入式c语言笔试题及答案1 读程序段,回答问题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.h"int 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的方式下在内存中是如何存储的。

嵌入式C语言笔试题及答案

嵌入式C语言笔试题及答案

嵌入式C语言笔试题及答案为帮助同学们深入学习嵌入式C语言学习,为大家分享最新的嵌入式C语言笔试题及答案,希望对大家有所帮助!1. 用预处理指令#define 声明一个常数,用以说明1年中有多少秒(忽略闰年问题)#define SECONDSPERYEAR (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就会生成一个编译错误提示消息,并停顿编译。

指令用于报告编译时错误信息的;如果预处理方面有错误,那么就会打印#error指令后面的文本内容。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

什么是预编译何时需要预编译:1、总是使用不经常改动的大型代码体。

2、程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。

在这种情况下,可以将所有包含文件预编译为一个预编译头。

char * const p;char const * pconst char *p上述三个有什么区别?char * const p; //常量指针,p的值不可以修改char const * p;//指向常量的指针,指向的常量值不可以改const char *p;//和char const *pchar str1[] = "abc";char str2[] = "abc";const char str3[] = "abc";const char str4[] = "abc";const char *str5 = "abc";const char *str6 = "abc";char *str7 = "abc";char *str8 = "abc";cout << ( str1 == str2 ) << endl;cout << ( str3 == str4 ) << endl;cout << ( str5 == str6 ) << endl;cout << ( str7 == str8 ) << endl;结果是:0 0 1 1解答:str1,str2,str3,str4是数组变量,它们有各自的内存空间;而str5,str6,str7,str8是指针,它们指向相同的常量区域。

3. 以下代码中的两个sizeof用法有问题吗?void UpperCase( char str[] ) // 将str 中的小写字母转换成大写字母{for( size_t i=0; iif( 'a'<=str[i] && str[i]<='z' )str[i] -= ('a'-'A' );}char str[] = "aBcDe";cout << "str字符长度为: " << sizeof(str)/sizeof(str[0]) << endl;UpperCase( str );cout << str << endl;答:函数内的sizeof有问题。

根据语法,sizeof如用于数组,只能测出静态数组的大小,无法检测动态分配的或外部数组大小。

函数外的str是一个静态定义的数组,因此其大小为6,函数内的str实际只是一个指向字符串的指针,没有任何额外的与数组相关的信息,因此sizeof作用于上只将其当指针看,一个指针为4个字节,因此返回4。

一个32位的机器,该机器的指针是多少位指针是多少位只要看地址总线的位数就行了。

80386以后的机子都是32的数据总线。

所以指针的位数就是4个字节了。

main(){int a[5]={1,2,3,4,5};int *ptr=(int *)(&a+1);printf("%d,%d",*(a+1),*(ptr-1));}输出:2,5*(a+1)就是a[1],*(ptr-1)就是a[4],执行结果是2,5&a+1不是首地址+1,系统会认为加一个a数组的偏移,是偏移了一个数组的大小(本例是5个int)int *ptr=(int *)(&a+1);则ptr实际是&(a[5]),也就是a+5原因如下:&a是数组指针,其类型为int (*)[5];而指针加1要根据指针类型加上一定的值,不同类型的指针+1之后增加的大小不同a是长度为5的int数组指针,所以要加5*sizeof(int)所以ptr实际是a[5]但是prt与(&a+1)类型是不一样的(这点很重要)所以prt-1只会减去sizeof(int*)a,&a的地址是一样的,但意思不一样,a是数组首地址,也就是a[0]的地址,&a是对象(数组)首地址,a+1是数组下一元素的地址,即a[1],&a+1是下一个对象的地址,即a[5]. 1.请问以下代码有什么问题:int main(){char a;char *str=&a;strcpy(str,"hello");printf(str);return 0;}没有为str分配内存空间,将会发生异常问题出在将一个字符串复制进一个字符变量指针所指地址。

虽然可以正确输出结果,但因为越界进行内在读写而导致程序崩溃。

char* s="AAA";printf("%s",s);s[0]='B';printf("%s",s);有什么错?"AAA"是字符串常量。

s是指针,指向这个字符串常量,所以声明s的时候就有问题。

cosnt char* s="AAA";然后又因为是常量,所以对是s[0]的赋值操作是不合法的。

1、写一个“标准”宏,这个宏输入两个参数并返回较小的一个。

.#define Min(X, Y) ((X)>(Y)?(Y):(X))//结尾没有;2、嵌入式系统中经常要用到无限循环,你怎么用C编写死循环。

while(1){}或者for(;;)3、关键字static的作用是什么?定义静态变量4、关键字const有什么含意?表示常量不可以修改的变量。

5、关键字volatile有什么含意?并举出三个不同的例子?提示编译器对象的值可能在编译器未监测到的情况下改变。

int (*s[10])(int) 表示的是什么啊int (*s[10])(int) 函数指针数组,每个指针指向一个int func(int param)的函数。

1.有以下表达式:int a=248; b=4;int const c=21;const int *d=&a;int *const e=&b;int const *f const =&a;请问下列表达式哪些会被编译器禁止?为什么?*c=32;d=&b;*d=43;e=34;e=&a;f=0x321f;*c 这是个什么东东,禁止*d 说了是const,禁止e = &a 说了是const 禁止const *f const =&a; 禁止2.交换两个变量的值,不使用第三个变量。

即a=3,b=5,交换之后a=5,b=3;有两种解法, 一种用算术算法, 一种用^(异或)a = a + b;b = a - b;a = a - b;ora = a^b;// 只能对int,char..b = a^b;a = a^b;ora ^=b ^= a;3.c和c++中的struct有什么不同?c和c++中struct的主要区别是c中的struct不可以含有成员函数,而c++中的struct可以。

c++中struct和class的主要区别在于默认的存取权限不同,struct默认为public,而class默认为private4.#include#includevoid getmemory(char *p){p=(char *) malloc(100);strcpy(p,"hello world");}int main( ){char *str=NULL;getmemory(str);printf("%s/n",str);free(str);return 0;}程序崩溃,getmemory中的malloc 不能返回动态内存,free()对str操作很危险5.char szstr[10];strcpy(szstr,"0123456789");产生什么结果?为什么?长度不一样,会造成非法的OS6.列举几种进程的同步机制,并比较其优缺点。

原子操作信号量机制自旋锁管程,会合,分布式系统7.进程之间通信的途径共享存储系统消息传递系统管道:以文件系统为基础8.类的静态成员和非静态成员有何区别?类的静态成员每个类只有一个,非静态成员每个对象一个9.纯虚函数如何定义?使用时应注意什么?virtual void f()=0;是接口,子类必须要实现10.数组和链表的区别数组:数据顺序存储,固定大小连表:数据可以随机存储,大小可动态改变11.进程死锁的原因资源竞争及进程推进顺序非法12.死锁的4个必要条件互斥、请求保持、不可剥夺、环路13.死锁的处理鸵鸟策略、预防策略、避免策略、检测与解除死锁14. 操作系统中进程调度策略有哪几种?FCFS(先来先服务),优先级,时间片轮转,多级反馈15.ISO的七层模型是什么?tcp/udp是属于哪一层?tcp/udp有何优缺点?应用层表示层会话层运输层网络层物理链路层物理层tcp /udp属于运输层TCP 服务提供了数据流传输、可靠性、有效流控制、全双工操作和多路复用技术等。

与TCP 不同,UDP 并不提供对IP 协议的可靠机制、流控制以及错误恢复功能等。

由于UDP 比较简单,UDP 头包含很少的字节,比TCP 负载消耗少。

tcp: 提供稳定的传输服务,有流量控制,缺点是包头大,冗余性不好udp: 不提供稳定的服务,包头小,开销小文章来源:笔试网—专业的笔试、面试资料搜索网站。

相关文档
最新文档