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定义出错。

  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: 不提供稳定的服务,包头小,开销小文章来源:笔试网—专业的笔试、面试资料搜索网站。

相关文档
最新文档