文档库 最新最全的文档下载
当前位置:文档库 › 嵌入式系统开发人员C语言测试题--选择题(编程风格)

嵌入式系统开发人员C语言测试题--选择题(编程风格)

嵌入式系统开发人员C语言测试题--选择题(编程风格)
嵌入式系统开发人员C语言测试题--选择题(编程风格)

嵌入式系统开发人员C语言测试题--选择题(编程风格)收藏

3.1 选择题

(221)请选出可用作C语言用户标识符的一组标识符____

a. Void define WORD

b. a3_b3 _123 IF

c. For -abc Case

d. 2a Do sizeof

(222)请选出正确的标识符编号____

a. Hot_dog

b. $z^**

c. cat1

d. a11

e. SUM#

f. Dollar

g. 2dog

h. S_exp

i. ^pointer

(223)下面符合规范的函数原型声明有哪些____。

a. T_S16 CheckData();

b. T_S16 CheckData(void)

c. T_S16 SetPoint(T_S16, T_S16)

d. T_S16 SetPoint(T_S16 nX, T_S16 nY)

(224)声明头文件引用时,避免使用绝对路径,要使用相对路径。以下符合规范的头文件引用有哪些______。

a. #include "c:\switch\inc\def.inc";

b. #include "inc\def.inc"

c. #include "def.inc"

d. #include "..\def.inc"

(225)按照编码规范,头文件由_____组成:

a. 头文件开头处的版权和版本声明;

b. API函数的调用示例

c. 预处理块

d. 函数和类结构定义

(226)代码文件由_____组成:

a. 定义文件开头处的版权和版本声明;

b. API函数的调用示例

c. 全局变量的声明

d. 程序的实现体(包括数据和代码)

(227)按照编码规范,符合规范的程序块是____。

a. if(!ValidNi(ni))

{

}

nRepssnInd=SsnData[index].nRepssnIndex;

nRepssnNi=SsnData[index].ni;

b. T_S8 *pContext;

T_S16 nIndex;

T_S32 lCounter;

pContext = (T_S8)malloc(sizeof(T_S8)*100);

if (pContext == NULL)

{

return FALSE;

}

c. if (!ValidNi(ni))

{

}

nRepssnInd = SsnData[index].nRepssnIndex;

nRepssnNi = SsnData[index].ni;

d. T_S8 *pContext;

T_S16 nIndex;

T_S32 lCounter;

pContext = (T_S8)malloc(sizeof(T_S8)*100);

if (NULL == pContext)

{

return FALSE;

}

(228)以下说法正确的是______。

a. 与注释一样,所有的空白符都会被编译程序忽略掉。在C程序中用空白符隔开可执行语句、函数和注释等,将有助于提高程序的可读性和清晰度;

b. 在枚举类型、结构体类型、联合类型、类定义之后,每个函数定义结束之后都要加空行;

c. 在一个函数体内,逻揖上密切相关的语句之间不加空行,其它地方应加空行分隔;

d. 函数体内,变量定义与第一句可执行语句之间不需要加空行分隔.

(229)以下程序的代码行风格符合规范的是_____。

a. rect.length = 0; rect.width = 0;

b. rect.length = width = 0;

c. rect.length = 0;

rect.width = 0;

d. typedef struct

{

T_U16 nLeft, nTop, nRight, nBottom;

}RECT;

e. typedef struct

{

T_U16 nLeft;

T_U16 nTop;

T_U16 nRight;

T_U16 nBottom;

}RECT;

(230)以下关于代码行内空格说法正确的是_____。

a. 为了保证缩进和排比留空除外,不要连续留两个以上空格;

b. 由于留空格所产生的清晰性是相对的,所以,在已经非常清晰的语句中没有必要再留空格;

c. 赋值操作符、比较操作符、算术操作符、逻辑操作符、位域操作符,如"="、"+=" "> ="、"<="、"+"、"*"、"%"、"/"、"&&"、"||"、"<<","^"等二元操作符的前后应当加空格;

d. 一元操作符如"!"、"~"、"++"、"--"、"&"(地址运算符)等前后不加空格,另外,象"[]"、"."、"->"这类操作符前后不加空格。

(231)下面代码行的空格符合规范的是_____

a. void Func1 (T_S16 x, T_S16 y, T_S16 z)

b./if !28(afgt!3B=bi&!3B&{!2

c. for (i = 0; i < 10; i ++)

d. T_S16 *x = &y

(232)下面代码行的对齐风格符合规范的是_____

a. #define MAX_TASK_NUMBER 100

#define LEFT_X 10

#define BOTTOM_Y 400

b. void Function(T_S16 x)

{

… // program code

if (conditionn)

{

… // program code

}

}

c. If (condition){

… // program code

}

else {

… // program code

}

d. while (condition)

{

… // program code

}

(233)以下风格说法符合规范的是_____

a. 程序的分界符'{'和'}'应独占一行并且位于同一列,同时与引用它们的语句左对齐。{ }之内的代码块在'{'右边数格处左对齐。建议使用TAB键;

b. 对于if、for、while、do等程序块,即使只有一个句子或为空,仍要用'{'和'}'进行明显区分,这样可以防止书写失误。而if、for、while、do等语句应自占一行,执行语句不得紧跟其后;

c. 对结构成员赋值,等号对齐;

d. #define的各个字段对齐;

(234)以下说法符合规范的是_____

a. 注释应当准确、易懂,防止注释有二义性(错误的注释不但无益反而有害)。注释是对代码的"解释"。注释应解释为什么这样做,而不应解释正在做什么,除非这段代码非常晦涩(要注明技巧);

b. 注释的位置应与被描述的代码相邻,应放在代码的上方或右方(对单条语句的注释)相邻位置,不可放在下方;

c. 为了整齐起见,单行或函数体内注释用//,后面留有一个空格,相邻行的"//"注释要列对齐;

d. 对于两行以上的连续注释用/* …… */。"/*"和"*/"最好单独一行,如果和注释内容同行,则"/*"之后和"*/"之前都应留有空格;

(235)以下说法符合规范的是_____

a. 宏、常量和类型的命名应该使用字母全部大写的方式,各单词之间用下划线隔开;

b. 结构名、枚举名各单词的字母均为大写,单词间用下划线连接;

c. 除非必要,不要用数字或较奇怪的字符来定义标识符;

d. 结构成员和枚举成员名各单词的字母全部大写,各单词之间用下划线隔开。

(236)以下说法符合规范的是_____

a. 除了用于循环控制的变量,不要使用单一的字符命名变量;

b. 布尔型变量的命名应有明确的是与非的含义;

c. 函数作用域变量和文件作用域变量,以及全局变量必须避免同名;

d. 用户标识符可以以下划线作开头。

(237)以下关于说法符合规范的是_____

a. 不同类型的操作符混合使用时,使用括号给出优先级;

b. 如果代码行中的操作符比较多,为了防止产生歧义并提高可读性,应当用括号确定表达式的操作顺序;

c. 为了使代码更紧凑,尽量使用复杂的操作符组合;

d. 为了清晰起见,不要把"++"、"--"操作符与其他如"+="、"-="等组合在一起形成复杂奇怪的表达式。

(238)以下表达式符合规范的是_____。

a. while (p && *p) // p为指针变量

b. if (1 == flag) // flag为布尔变量

c. if (0.0 == x) // x为浮点变量

d. if (strlen(strName) != 0) // strName为字符串变量

(239)以下对逻辑表达式的使用说明正确的是_____。

a. 一个变量和一个常数进行比较,如果是比较是否相等,则要求把常量放到左边;

b. 对于if.. else if 语句,最好保留else语句处理缺省情况;

c. 尽量不要在for 循环体内修改循环变量,防止for 循环失去控制;

d. 不可将浮点变量用"=="或"!="与任何数字比较。

(240)关于循环语句下面说法正确的是_____。

a. 在多重循环中,如果有可能,应当将最长的循环放在最内层,最短的循环放在最外层,以减少CPU跨切循环层的次数;

b. 如果循环体内存在逻辑判断,并且循环次数很大,宜将逻辑判断移到循环体的外面;

c. 应仔细考虑循环体内的语句是否可以放在循环体之外,使循环体内工作量最小,从而提高程序的时间效率;

d. 尽量减少循环嵌套层次。

(241)下面的函数声明符合规范的是_____。

a. void SetValue(T_U16 nWidth, T_U16 nHeight);

b. void SetValue(T_U16, T_U16);

c. float GetValue(void);

d. float GetValue()。

(242)下面关于函数参数的说法符合规范的是_____。

a. 尽量不设计多参数函数,参数个数尽量控制在5个以内。将不使用的参数从接口中去掉,减少函数间接口的复杂度;

b. 如果参数是指针,且仅作输入用,则应在类型前加const,以防止该指针在函数体内被意外修改;

c. 尽量把参数作为局部变量使用;

d. 尽量不要使用类型和数目不确定的参数。

(243)下面说法符合规范的是_____。

a. 函数名字与返回值类型在语义上不可冲突;

b. 不要将正常值和错误标志混在一起返回;

c. 在函数体的"出口处",要对return语句的正确性和效率进行检查;

d. 一个函数可以有多个出口点。

(244)下面说法符合规范的是_____。

a. 只需检查输入参数的有效性就可以了,不必检查通过其它途径进入函数体内的变量的有效性,例如全局变量、文件句柄等;

b. 函数参数的定义和声明应有相同的顺序,参数名应一致;

c. 一个函数不应该有四层以上的嵌套,否则要分割成多个函数;

d. 函数不要直接或间接调用自己。

(245)下面说法符合规范的是_____。

a. 断言assert是仅在Debug版本起作用的宏,用来检查程序正常运行时不应发生但在调测时有可能发生的非法情况;

b. 尽量使用断言函数参数的有效性;

c. 使用断言可以对程序开发环境的假设进行检查;

b. 不能使用断言规范数据类型的转换。

(246)下面关于模块的说法符合规范的是_____。

a. 模块是一个或几个.c文件和一个.h文件的结合,头文件(.h)中是对于该模块接口的声明;

b. 模块提供给其它模块调用的外部函数及数据需在.h中文件中以extern关键字声明;

c. 模块内的函数和全局变量需在.c文件开头冠以static关键字声明;

d. 定义变量和声明变量的区别在于定义会产生内存分配的操作,是汇编阶段的概念;而声明则只是告诉包含该声明的模块在连接阶段从其它模块寻找外部函数和变量。

(247)根据编码规范,下面应该全部大写的是_____。

a. 宏

b. enum常量

c. 结构类型名

d. 结构成员的命名

(248)下面说法符合规范的是_____。

a. 充分利用水平和垂直空格。缩进和空格间距应反映出代码的块结构。

b. 注释应该准确,避免不必要的注释。

c. 为清晰起见,避免使用仅在大小写上有区别的名称,如foo 和Foo。

d."指针"标识符"*"应紧邻类型名,而不是变量名。

(249)根据编码规范,下面说法正确的是_____。

a. 避免使用与库头文件名相同的专用头文件名,安全起见,也应避免自己设计库函数。

b. 应对引用的头文件使用相对路径。

c. 函数名应能反映出函数执行什么操作以及返回什么内容,对于全局函数还应以模块名为前缀。

d. 函数的声明和定义保持一致。

(250) C 语言程序中可以对程序进行注释,注释部分必须用符号_____括起来。

a. '{' 和'}'

b. '['和']'

c. "/*"和"*/"

d. "*/"和"/*"

(251)下列运算符中,优先级最低的是_____。

a. *

b. !=

c. +

d. =

(252)若变量已正确定义,表达式(j=3, j++) 的值是_____ 。

a. 3

b. 4

c. 5

d. 0

(253)表达式strcmp("box", "boss") 的值是一个_______。

a. 正数

b. 负数

c. 0

d. 不确定的数

(254)判断i和j至少有一个值为非0的表达式是_____。

a. i!=0 && j!=0

b. i*j!=0

c. !(i==0 && j==0)

d. i&&j

(255)根据编码规范,以下说法不正确的是_____。

a. 每行中只能写-条赋值语句;

b. 若a是实型变量,c程序中允许赋值a=10,可以把整型数赋值给实型变量;

c. 无论是整数还是实数,都能被准确无误地表示;

d. %是只能用于整数运算的操作符.

(256)根据编码规范,下面说法正确的是______。

a. 编写程序时,应使用括号以改善表达式的清晰度;

b. 在保证程序准确无误的前提下,应当尽可能对程序代码进行优化;

c. 在程序设计中,不要进行浮点数相等的比较;

d. 调试过程中应尽可能多的输出中间结果。

(257)下面说法符合规范的是______。

a. 不要根据数据类型判断数据值的范围。

b. 避免设计带有"记忆"功能的函数。

c. 使用有意义的标识符。

d. 禁止使用GOTO语句。

(258)根据编码规范,下面说法正确的是______。

a. 目录名全部要使用小写;

b. 排版不要混合使用空格和TAB键

c. 所有的源文件应是可打印的ASCII字符串。

d. 避免编写技巧性很高代码。

(259)根据编码规范,头文件布局的先后顺序是______。

a. 全局函数原型定义;

b. 全局变量声明;

c. 预处理块定义;

d. #include区;

(260)根据编码规范,代码文件布局的先后顺序是______。

a. 全局函数定义;

b. 模块级数据类型定义;

c. 局部函数定义。

d. 模块级变量定义;

(261)根据编码规范,下面说法正确的是______。

a. 禁止使用汉语拼音来命名;

b. 用户标识符的命名必须名副其实;

c. 为了书写方便,可以使用单个字符命名的变量;

d. 因为作用域不同,函数作用域变量、文件作用域变量、全局变量可以使用同名。

(262)根据编码规范,下面说法正确的是______。

a. 禁止在符号变量上进行移位操作;

b. 不要使用缺省的变量定义方式,应当保留变量的作用域修饰;

c. 尽量使用专门的初始化函数对所有的全局变量进行初始化;

d. 当向公共变量传递数据时,要防止赋与不合理的值或越界等现象发生。

(263)根据编码规范,下面说法正确的是______。

a. 结构的功能要单一,是针对一种事务的抽象;

b. 若结构中元素个数过多可考虑依据某种原则把元素组成不同的子结构;

c. 结构中的位域应尽可能相邻;

d. 结构的设计要为某些未来可能的应用保留余地。

(264)根据编码规范,下面说法正确的是______。

a. 空白符和注释会被编译程序忽略掉;

b. 枚举类型、结构体类型、联合类型、类定义、函数定义结束之后都要加空行;

c. 功能相对独立的程序块之间应加空行分隔;

d. 结构体内元素最好放在同行定义。

(265)下面代码行的空格符合规范的是______。

a. *pApple = 'a';

b. flag =! bIsEmpty;

c. p = &cMem;

d. i ++;

(266)根据编码规范,下面说法正确的是______。

a. 应当将修饰符* 和&紧靠类型名;

b. 不同类型的操作符混合使用时,直接使用缺省的优先级就可以了;

c. 不要使用复杂的操作符组合等;

d. 尽量不要设计对不同数据类型混合计算的算术表达式。

参考答案:

221.(a.b)

222.(a.c.d.f.h)

223.(b.d)

224.(b.c.d)

225.(a.b.c)

226.(a.b.d)

227.(c.d)

228.(a.b.c)

229.(c.e)

230.(a.b.c.d)

231.(d)

232.(b.d)

233.(a.b.c.d)

234.(a.b.c.d)

235.(a.b.c)

236.(a.b.c)

237.(a.b.d)

238.(d)

239.(a.b.c.d)

240.(a.b.c.d)

241.(a.c)

242.(a.b.d)

243.(a.b.c)

244.(b.c.d)

245.(a.b.c)

246.(a.b.c.d)

247.(a.b.c)

248.(a.b.c)

249.(a.b.c.d)

250.(c)

251.(d)

252.(b)

253.(a)

254.(b)

255.(c) 256.(a.b.c.d) 257.(a.b.c.d) 258.(a.b.c.d) 259.(c.d.b.a) 260.(b.d.a.c) 261.(a.b.c.d) 262.(a.b.c.d) 263.(a.b.c.d) 264.(a.b.c) 265.(a.c) 266.(c.d)

嵌入式工程师经典面试题

上个星期, 去深圳一家搞 ARM 开发的公司面试, HR 叫我做了一份卷子, 里面都是 C 编程, 心中暗喜, 因为这些题基本上都在程序员面试宝典里见过。后来回到学校, 在网上搜索,原来这些题都是嵌入式工程师的经典面试题目, 很多网站上都可以找得到。现把他贴出来, 附上网上的答案,跟大家分享,因为这些题实在太经典了。 预处理器(Preprocessor 1 . 用预处理指令 #define 声明一个常数, 用以表明 1年中有多少秒 (忽略闰年问题 #define SECONDS_PER_YEAR (60 * 60 * 24 * 365UL 我在这想看到几件事情: 1 #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等 2 懂得预处理器将为你计算常数表达式的值,因此直接写出你如何计算一年中有多少秒而不是计算出实际的值,是更清晰而没有代价的。 3 意识到这个表达式将使一个 16位机的整型数溢出 -因此要用到长整型符号 L, 告诉编译器这个常数是的长整型数。 4 如果你在你的表达式中用到 UL (表示无符号长整型,那么你有了一个好的起点。记住,第一印象很重要。 2 . 写一个 " 标准 " 宏 MIN ,这个宏输入两个参数并返回较小的一个。 #define MIN(A,B ((A <= (B ? (A : (B 这个测试是为下面的目的而设的: 1 标识 #define在宏中应用的基本知识。这是很重要的。因为在嵌入 (inline操作符变为标准 C 的一部分之前,宏是方便产生嵌入代码的唯一方法,对于嵌入式系统来说,为了能达到要求的性能,嵌入代码经常是必须的方法。

嵌入式C语言面试题汇总(超经典)

第一部分:基本概念及其它问答题 1、关键字static的作用是什么? 这个简单的问题很少有人能回答完全。在C语言中,关键字static有三个明显的作用: 1). 在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。 2). 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。 3). 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。 大多数应试者能正确回答第一部分,一部分能正确回答第二部分,同是很少的人能懂得第三部分。这是一个应试者的严重的缺点,因为他显然不懂得本地化数据和代码范围的好处和重要性。 2、“引用”与指针的区别是什么? 答、1) 引用必须被初始化,指针不必。 2) 引用初始化以后不能被改变,指针可以改变所指的对象。 3) 不存在指向空值的引用,但是存在指向空值的指针。 指针通过某个指针变量指向一个对象后,对它所指向的变量间接操作。程序中使用指针,程序的可读性差;而引用本身就是目标变量的别名,对引用的操作就是对目标变量的操作。 流操作符<<和>>、赋值操作符=的返回值、拷贝构造函数的参数、赋值操作符=的参数、其它情况都推荐使用引用。 3、.h头文件中的ifndef/define/endif 的作用? 答:防止该头文件被重复引用。 4、#include 与#include “file.h”的区别? 答:前者是从Standard Library的路径寻找和引用file.h,而后者是从当前工作路径搜寻并引用file.h。 5、描述实时系统的基本特性 答:在特定时间内完成特定的任务,实时性与可靠性。 6、全局变量和局部变量在内存中是否有区别?如果有,是什么区别? 答:全局变量储存在静态数据区,局部变量在堆栈中。 7、什么是平衡二叉树? 答:左右子树都是平衡二叉树且左右子树的深度差值的绝对值不大于1。 8、堆栈溢出一般是由什么原因导致的? 答:1.没有回收垃圾资源 2.层次太深的递归调用

嵌入式C语言经典笔试题目

嵌入式c语言经典笔试题目 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的目的是什么? 如果你不知道答案,请看参考文献1。这问题对区分一个正常的伙计和一个书呆子是很有用的。只有书呆子才会读C语言课本的附录去找出象这种问题的答案。当然如果你不是在找一个书呆子,那么应试者最好希望自己不要知道答案。 死循环(Infinite loops) 4.嵌入式系统中经常要用到无限循环,你怎么样用C编写死循环呢? 这个问题用几个解决方案。我首选的方案是: while(1) { } 一些程序员更喜欢如下方案: for(;;) { } 这个实现方式让我为难,因为这个语法没有确切表达到底怎么回事。如果一个应试者给出这个作为方案,

c语言经典面试题

C语言面试题大汇总之华为面试题 1、局部变量能否和全局变量重名? 答:能,局部会屏蔽全局。要用全局变量,需要使用"::" ;局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内。 2、如何引用一个已经定义过的全局变量? 答:extern 可以用引用头文件的方式,也可以用extern关键字,如果用引用头文件方式来引用某个在头文件中声明的全局变理,假定你将那个编写错了,那么在编译期间会报错,如果你用extern方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报错。 3、全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?答:可以,在不同的C文件中以static形式来声明同名全局变量。 可以在不同的C文件中声明同名的全局变量,前提是其中只能有一个C文件中对此变量赋初值,此时连接不会出错. 4、请写出下列代码的输出内容 #include int main(void) { int a,b,c,d; a=10;

c=++a; d=10*a++; printf("b,c,d:%d,%d,%d",b,c,d); return 0; } 答:10,12,120 5、static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别? 答: 1) 全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。这两者的区别在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域,即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。 2) 从以上分析可以看出, 把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。3) static函数与普通函数作用域不同,仅在本文件。只在当前源文件中使用的函数应该说明为内部函数(static),内部函数应该在当前源文件中说明和定义。对

C语言面试题(经典全)

1.static有什么用途?(请至少说明两种) 1)限制变量的作用域 2)设置变量的存储域(堆,主动分配内存也是堆) 1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。 2) 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。 3) 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。 4.全局变量和局部变量在内存中是否有区别?如果有,是什么区别? 全局变量储存在静态数据库,局部变量在栈 6.堆栈溢出一般是由什么原因导致的? 堆栈溢出一般是循环的递归调用导致的,如果使用的大数据结构的局部变量,也可能导致堆栈溢出。没有回收垃圾资源导致的是内存泄露最后内存耗尽。 20.不能做switch()的参数类型是: switch的参数不能为实型。(只能是int char) 9.写出float x 与“零值”比较的if语句。 if(x<0.000001&&x>-0.000001)

3.在c语言库函数中将一个字符转换成整型的函数是atol()吗,这个函数的原型是什么? 函数名: atol 功能: 把字符串转换成长整型数 函数的原型: long atol(const char *nptr); 程序例: #include #include int main(void) { long l; char *str = "98765432"; l = atol(lstr); printf("string = %s integer = %ld\n", str, l); return(0); } 1.对于一个频繁使用的短小函数,在C语言中应用什么实现,在C++中应用什么实现? c用宏定义,c++用inline

嵌入式软件工程师笔试题

笔试题 1: 设 float a=2, b=4, c=3; ,以下 C 语言表达式与代数式 (a+b)+c 计算结果不一致的是 A.(a+b)*c/2 B.(1/2)*(a+b)*c C.(a+b)*c*1/2 D.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+″ 参考答案: D 3: 下述程序执行后的输出结果是 #include main() { int x= 'f'; printf( “%c n”, 'a'+(x - ‘a'+1)); } A.g B.h C.i D.j 参考答案: A 4:C 语言中,下列运算符优先级高的是 A.! B.% C.>> D.= = 参考答案: A 5:数组定义为“ int a [ 4 ] ; ”,表达式 ( ) 是错误的。 A.*a B. a [ 0 ] C. a D.a++ 参考答案: D

6: 执行语句“ k=7>>1; ”后,变量 k 的当前值是 A.15 B.31 C. 3 D. 1 参考答案: C 7: 定义函数时,缺省函数的类型声明,则函数类型取缺省类型 A.void B.char C.float D.int 参考答案: D 8: 若 main() 函数带参数,参数个数多是 A.0 B. 1 C. 2 D. 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. 5 B.7 C.9 D.11 参考答案: B 10: 下列各个错误中,哪一个不属于编译错误 A.改变 x 原值 3 为 5 ,写作“ x==5 ; ” B.花括号不配对 C.复合语句中的后一条语句后未加分号 D.变量有引用、无定义参考答案: A 11: 下列程序段运行后, x 的值是 ( ) a=1;b=2;x=0; if(!( — a))x — ; if(!b)x=7;else ++x; A.0 B. 3 C. 6 D.7 参考答案: A

C语言面试题大汇总,个人觉得还是比较全

4. static有什么用途?(请至少说明两种) 1.限制变量的作用域 2.设置变量的存储域 7. 引用与指针有什么区别? 1) 引用必须被初始化,指针不必。 2) 引用初始化以后不能被改变,指针可以改变所指的对象。 2) 不存在指向空值的引用,但是存在指向空值的指针。 8. 描述实时系统的基本特性 在特定时间内完成特定的任务,实时性与可靠性 9. 全局变量和局部变量在内存中是否有区别?如果有,是什么区别? 全局变量储存在静态数据库,局部变量在堆栈 10. 什么是平衡二叉树? 左右子树都是平衡二叉树且左右子树的深度差值的绝对值不大于1 11. 堆栈溢出一般是由什么原因导致的? 没有回收垃圾资源 12. 什么函数不能声明为虚函数? constructor 13. 冒泡排序算法的时间复杂度是什么? O(n^2) 14. 写出float x 与“零值”比较的if语句。 if(x>0.000001&&x<-0.000001) 16. Internet采用哪种网络协议?该协议的主要层次结构? tcp/ip 应用层/传输层/网络层/数据链路层/物理层 17. Internet物理地址和IP地址转换采用什么协议? ARP (Address Resolution Protocol)(地址解析協議) 18.IP地址的编码分为哪俩部分? IP地址由两部分组成,网络号和主机号。不过是要和“子网掩码”按位与上之后才能区分哪些是网络位哪些是主机位。 2.用户输入M,N值,从1至N开始顺序循环数数,每数到M输出该数值,直至全部输出。写出 C程序。 循环链表,用取余操作做 3.不能做switch()的参数类型是: switch的参数不能为实型。 華為 1、局部变量能否和全局变量重名? 答:能,局部会屏蔽全局。要用全局变量,需要使用"::" 局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内

嵌入式开发c语言经典笔试题-含答案

void e(int ); main(){ int a; a=3; e(a);}void e(int n){ if(n>0) { e(--n); printf("%d" , n); e(--n); }}这段程序的输出是: A.0 1 2 0 B.0 1 2 1 C.1 2 0 1 D.0 2 1 1 typedef int (*test) ( float * , float*)test tmp; tmp 的类型是【】 A.函数的指针,该函数以两个指向浮点数(float)的指针(pointer)作为参数(arguments) Pointer to function of having two arguments that is pointer to float B.整型 C.函数的指针,该函数以两个指向浮点数(float)的指针(pointer)作为参数(arguments),并且函数的返回值类型是整型Pointer to function having two argument that is pointer to float and return int D.以上都不是 第3 题 main(){ char p; char buf[10] ={ 1,2,3,4,5,6,9,8}; p = (buf+1)[5]; printf("%d" , p);}这段程序的输出是:【】 A.5 B.6 C.9 D.以上都不对 第4 题 Void f(char**);main(){ char * argv[] = { "ab" ,"cd" , "ef" ,"gh", "ij" ,"kl" }; f( argv );}void f( char **p ){ char* t; t= (p+= sizeof(int))[-1]; printf( "%s" , t);}这段程序的输出是:【】 A.ab B.cd C.ef D.gh 第5 题 #includeint ripple ( int , ...);main(){ int num; num = ripple ( 3, 5,7); printf( " %d" , num);}int ripple (int n, ...){ int i , j; int k; va_list p; k= 0; j = 1; va_start( p , n); for (; j

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

C语言面试题

C语言面试题: 1、问:在嵌入式开发中,为什么能通过C语言直接操作硬件? 答:因为C有指针,它是C语言的灵魂,它可以直接访问内存。 2、问:链表的作用?(这是上一个问题的延申,学员一般会举一堆例子来说明它的作 用,但这都不是重点,没有抓住主要矛盾)答:链表用于内存管理,链表节点中的指针域可以将不连续的内存彼此关联起来,实现内存的动态管理。 3、问:什么变量不能用指针指向? 答:寄存器变量(register 修饰),因为这个变量会优先选择存放到CPU寄存器中,而指针只能指向内存的任务区域,但不能指向寄存器。 4、问:有符号字符型和无符号字符型变量的最大值和最小值分别是多少(十六进制多 少),为什么? 答:有符号(-128 —127,-0X80—0X7F,无符号(0-255,0X00 —0XFF。 5、问:林锐面试题中四个有关内存操作的问题:第一题、运行会出现段错误(崩 溃): 答:因为参数是值传递,所以主调函数中的str指针已然指向空,不能向 里面拷数据,除非加上取地址,采用二维指针接收才能传递动态内存;第二题:乱码:答:实际上可能是乱码,也可能显示出一部分内容,显示乱码是因为刚才那段栈内存空间全部被覆盖,如果未完全覆盖则显示一部分内容;第三题:能够输出hello 答:但由于没有在同一层释放内存,容易导致内存泄露;第四题:对已经释放的内存进行操作答:会破坏其它有用数据,后果难以预料,通常提示出现段错误。 6问:哪些地方可以用到con st? const变量和函数输入参数用const修饰有哪些作用?答:1、定义常量 (1)const修饰变量,constTYPE ValueName=value value 是不可变的。 (2,将const 改为外部链接,作用于扩大至全局,编译时分配内存,并且可以不进行初始化,仅仅作为声明,编译器认为在在程序其他地方进行了定义; Extend constint ValueName= value; 2、指针使用CONST (1 ,指针本身是常量不可变 (char*,constpContent; Const (char*,pContent;(2,指针指向的内容是常量不可变 Constchar*pContent; Char const*pContent; (3,两者都不可变 Constchar*constpConten 3、函数中使用CONST (1)const 修饰函数的参数 a 传递过来的参数在函数内不可以改变;void function(const int var);b 参数指针所指内容为常量不可变;void function(const char *Var); c 参数本身为常量不可变; void function(char *const Var);

嵌入式C语言面试题(二)

1读程序段,回答问题 1.int main(int argc,char*argv[]) 2.{ 3.int c=9,d=0; 4.c=c++%5; 5.d=c; 6.printf("d=%d\n",d); 7.return0; 8.} 复制代码 a)写出程序输出 b)在一个可移植的系统中这种表达式是否存在风险?why? 1.#include"stdio.h" 2.int a=0; 3.int b; 4.static char c; 5.int main(int argc,char*argv[]) 6.{ 7.char d=4; 8.static short e; 9.a++; 10.b=100; 11.c=(char)++a; 12.e=(++d)++; 13.printf("a=%d,b=%d,c=%d,d=%d,e=%d",a,b,c,d,e); 14.return0; 15.} 复制代码 a)写出程序输出 b)编译器如果安排各个变量(a,b,c,d)在内存中的布局(eg.stack,heap,data section,bss section),最好用图形方式描述。 2中断是嵌入式系统中重要的组成部分,这导致了许多编译开发商提供一种扩展:让标准C 支持中断,产生了一个新的关键字__interrupt。下面的代码就使用了__interrupt关键字去定义了一个中断服务子程序(ISR),请评论以下这段代码。

1.__interrupt double compute_area(double radius) 2.{ 3.double area=PI*radius*radius; 4.printf("nArea=%f",area); 5.return area; 6.} 复制代码 3C/C++基础知识问题 a)关键字volatile在编译时有什么含义?并给出三个不同使用场景的例子(可以伪代码或者 文字描述)。 b)C语言中static关键字的具体作用有哪些? c)请问下面三种变量声明有何区别?请给出具体含义 1.int const*p; 2.int*const p; 3.int const*const p; 复制代码 4嵌入式系统相关问题 a)对于整形变量A=0x12345678,请画出在little endian及big endian的方式下在内存中是如何存储的。 b)在ARM系统中,函数调用的时候,参数是通过哪种方式传递的? c)中断(interrupt,如键盘中断)与异常(exception,如除零异常)有何区别? 5设周期性任务P1,P2,P3的周期为T1,T2,T3分别为100,150,400;执行时间分别为20,40,100。请设计一种调度算法进行任务调度,满足任务执行周期及任务周期。 6优先级反转问题在嵌入式系统中是一中严重的问题,必须给与足够重视。 a)首先请解释优先级反转问题 b)很多RTOS提供优先级继承策略(Priority inheritance)和优先级天花板策略(Priority ceilings)用来解决优先级反转问题,请讨论这两种策略。 参考答案: 15 存在风险,因为c=c++%5;这个表达式对c有两次修改,行为未定义,c的值不确定 int a=0;//data section int b;//data section static char c;//BSS int main(int argc,char*argv[]) {

嵌入式C语言运用(笔试面试前必看)

语言测试是招聘嵌入式系统程序员过程中必须而且有效的方法。这些年,我既参加也组织了许多这种测试,在这过程中我意识到这些测试能为面试者和被面试者提供许多有用信息,此外,撇开面试的压力不谈,这种测试也是相当有趣的。 从被面试者的角度来讲,你能了解许多关于出题者或监考者的情况。这个测试只是出题者为显示其对ANSI标准细节的知识而不是技术技巧而设计吗?这是个愚蠢的问题吗?如要你答出某个字符的ASCII值。这些问题着重考察你的系统调用和内存分配策略方面的能力吗?这标志着出题者也许花时间在微机上而不是在嵌入式系统上。如果上述任何问题的答案是"是"的话,那么我知道我得认真考虑我是否应该去做这份工作。 从面试者的角度来讲,一个测试也许能从多方面揭示应试者的素质:最基本的,你能了解应试者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) 我也用这个问题开始讨论宏的副作用,例如:当你写下面的代码时会发生什么事?

试题题库-—嵌入式开发c语言面试题全套

嵌入式开发.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) : )) C\C++试题集C\C++ Development这个测试是为下面的目的而设的: 1). 标识#define在宏中应用的基本知识。这是很重要的,因为直到嵌入(inline)操作符变 为标准C的一部分,宏是方便产生嵌入代码的唯一方法,对于嵌入式系统来说,为了能达到 要求的性能,嵌入代码经常是必须的方法。 2). 三重条件操作符的知识。这个操作符存在C语言中的原因是它使得编译器能产生比 if-then-else更优化的代码,了解这个用法是很重要的。 3). 懂得在宏中小心地把参数用括号括起来 4). 我也用这个问题开始讨论宏的副作用,例如:当你写下面的代码时会发生什么事?Least = MIN(*p++, b); 3. 预处理器标识#error的目的是什么? 如果你不知道答案,请看参考文献1。这问题对区分一个正常的伙计和一个书呆子是很有用 的。只有书呆子才会读C语言课本的附录去找出象这种 问题的答案。当然如果你不是在找一个书呆子,那么应试者最好希望自己不要知道答案。 死循环(Infinite loops) 4. 嵌入式系统中经常要用到无限循环,你怎么样用C编写死循环呢? 这个问题用几个解决方案。我首选的方案是:

c语言常见面试题

C/C++程序员面试重点以及应对方法: 非技术方面: 1. 仪表 2. 礼仪 3. 个人素养 技术部分: 基础: 一.C语言基础语法 1.进程中的内存布局 2.指针相关(野指针、数组越界)、数组与指针、二位指针3.数组与二维数组 4.动态内存分配(内存泄漏) 5.预编译与有参宏 6.Static与const 7.结构体、共用体以及结构体空洞 8.位运算 9.Sizeof与strlen 二.C++基础语法 见C/C++求职就业手册 重点: 1.Inline函数

2.指针与引用 3.Const 、static、sizeof 4.Class与struct的区别 5.构造函数与析构函数 6.继承与多态 三.数据结构(计算机专业需要全部掌握) 1.单链表(非计算机专业必须掌握) 2.循环链表 3.双向链表 4.队列 5.栈 6.二叉树 四.各种排序 非计算专业需掌握冒泡与选择排序 计算机专业需要掌握5种常见的排序方法 五.常见Linux命令 六.Linux系统编程 1.不带缓冲的文件操作(堵塞与非堵塞) 2. 带缓冲的文件操作(行缓冲、全缓冲、不缓冲) 3. 进程的概念(fork、进程的五种状态与状态切换) 4. IPC 5. 线程(线程与进程的区别)

6. 线程间同步(互斥锁与信号量) 7.网络编程(TCP/IP四层、三次握手、TCP与UDP) 8.Shell脚本编程 七.数据库编程 数据库的基本概念与SQL语句 SQLite的用法 八.QT编程与GUI的概念 九.智力测验题(一般公司不会考,比较大的公司及校园招聘会往往会考到) 项目经验: 1. 做过的项目 2. 如何与别人交流沟通与协助 3. 思考问题的方法 附:常见C语言笔试题 1.用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 2.写一个“标准”宏MIN ,这个宏输入两个参数并返回较小的一个。 #define MIN(A,B) ((A)<= (B) ? (A) : (B)) 3.用变量a给出下面的定义 a) 一个整型数(An integer)

经典嵌入式面试题

经典嵌入式面试题 C语言测试是招聘嵌入式系统程序员过程中必须而且有效的方法。这些年,我既参加也组织了许多这种测试,在这过程中我意识到这些测试能为带面试者和被面试者提供许多有用信息,此外,撇开面试的压力不谈,这种测试也是相当有趣的。 从被面试者的角度来讲,你能了解许多关于出题者或监考者的情况。这个测试只是出题者为显示其对ANSI标准细节的知识而不是技术技巧而设计吗?这个愚蠢的问题吗?如要你答出某个字符的ASCII值。这些问题着重考察你的系统调用和内存分配策略方面的能力吗?这标志着出题者也许花时间在微机上而不上在嵌入式系统上。如果上述任何问题的答案是"是"的话,那么我知道我得认真考虑我是否应该去做这份工作。 从面试者的角度来讲,一个测试也许能从多方面揭示应试者的素质:最基本的,你能了解应试者C语言的水平。不管怎么样,看一下这人如何回答他不会的问题也是满有趣。应试者是以好的直觉做出明智的选择,还是只是瞎蒙呢?当应试者在某个问题上卡住时是找借口呢,还是表现出对问题的真正的好奇心,把这看成学习的机会呢?我发现这些信息与他们的测试成绩一样有用。 有了这些想法,我决定出一些真正针对嵌入式系统的考题,希望这些令人头痛的考题能给正在找工作的人一点帮住。这些问题都是我这些

年实际碰到的。其中有些题很难,但它们应该都能给你一点启迪。 这个测试适于不同水平的应试者,大多数初级水平的应试者的成绩会很差,经验丰富的程序员应该有很好的成绩。为了让你能自己决定某些问题的偏好,每个问题没有分配分数,如果选择这些考题为你所用,请自行按你的意思分配分数。 预处理器(Preprocessor) 1 . 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 我在这想看到几件事情: ?; #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等) ?; 懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中有多少秒而不是计算出实际的值,是更清晰而没有代价的。 ?; 意识到这个表达式将使一个16位机的整型数溢出-因此要用到长整型符号L,告诉编译器这个常数是的长整型数。 ?; 如果你在你的表达式中用到UL(表示无符号长整型),那么你有了一个好的起点。记住,第一印象很重要。

C语言笔试面试题附答案

C言面试笔试题(附答案) Question 1. (单选) 在顺序表(3,6,8,10,12,15,16,18,21,25,30)中,用二分法查找关键码值11,所需的关键码比 较次数为(3) 1. 2 2. 3 3. 4 4. 5 Question 2. (单选) 设散列表的存储空间大小为19,所用散列函数为h(key)=key mod 19,用开地址线性探查法解决碰撞。散列表的当前 状态如下:0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 190 194 768 559 582 39 3 208.现要将关键码 值75插入到该散列表中,其地址应为 (1) 1. 1 2. 11 3. 5 4. 15 Question 3. (单选) 作业管理的主要任务包括作业输入、作业处理和作业输出。其中作业处理的工作是Ⅰ.作业调度Ⅱ.作业控制Ⅲ. 作业后备 (3) 1. 只有Ⅰ 2. 只有Ⅱ 3. Ⅰ和Ⅱ 4. 都是 Question 4. (单选) 系统为了管理文件,设置了专门的数据结构----文件控制块(FC。FCB是在执行下列哪一个系统调用时建立的? (1) 1. create 2. open 3. read 4. write Question 5. (单选) 下面关于通道的叙述中,正确的是Ⅰ.通道相当于一个功能简单的处理机Ⅱ.通道完成数据输入输出工作Ⅲ.通道与 CPU共用一个内存 (4) 1. Ⅰ和Ⅱ

3. Ⅱ和Ⅲ 4. 都是 Question 6. (单选) 互操作性是指在不同环境下的应用程序可以相互操作,交换信息。要使采用不同数据格式的各种计算机之间能够相 互理解,这一功能是由下面哪一层来实现的? (2) 1. 应用层 2. 表示层 3. 会话层 4. 传输层 Question 7. (单选) 在UNIX的Shell程序中,可以使用位置变量。若要指明Shell引用的最近后台进程的号码,可 以使用位置变量 (2) 1. $$ 2. $! 3. $# 4. $- Question 8. (单选) 设二叉树根结点的层次为0,一棵深度(高度)为k的满二叉树和同样深度的完全二叉树各有f个结点和c个结点,下列 关系式不正确的是: (2) 1. f>=c 2. c>f 3. f=2k+1-1 4. C>2k-1 Question 9. (单选) 单链表的每个结点中包括一个指针link,它指向该结点的后继结点。现要将指针q指向的新 结点插入到指针p指向的 单链表结点之后,下面的操作序列中哪一个是正确的? (3) 1. q:=p^.link; p^.link:=q^.link 2. p^.link:=q^.link; q:=P^.link 3. q^.link:=p^.link; p^.link:=q; 4. p^.link:=q; q^.link:=p^,link Question 10. (单选) 某二叉树结点的对称序序列为A、B、C、D、E、F、G,后序序列为B、D、C、A、F、G、E。该二叉树结点的前序序

嵌入式Linux C语言面试试题

基础试题(C语言) 一、ANSI C/C++方面的知识 一.1、简答题。下面的题目必须全部答对才给分(20分): 1、如何在C中初始化一个字符数组。 2、如何在C中为一个数组分配空间。 3、如何初始化一个指针数组。 4、如何定义一个有10个元素的整数型指针数组。 5、s[10]的另外一种表达方式是什么。 6、GCC3.2.2版本中支持哪几种编程语言。 7、要使用CHAR_BIT需要包含哪个头文件。 8、对(-1.2345)取整是多少? 9、如何让局部变量具有全局生命期。 10、C中的常量字符串应在何时定义? 11、如何在两个.c文件中引用对方的变量。 12、使用malloc之前需要做什么准备工作。 13、realloc函数在使用上要注意什么问题。 14、strtok函数在使用上要注意什么问题。 15、gets函数在使用上要注意什么问题。 16、C语言的词法分析在长度规则方面采用的是什么策略? 17、a+++++b所表示的是什么意思?有什么问题? 18、如何定义Bool变量的TRUE和FALSE的值。 19、C语言的const的含义是什么。在定义常量时,为什么推荐使用const,而不是#defin e。 20、C语言的volatile的含义是什么。使用时会对编译器有什么暗示。 一.2、问答题。 1、----------------------------------------------------------- "匈牙利命名法"有什么优缺点?(2分) 2、----------------------------------------------------------- 下面x, y, *p的值是多少,有什么问题?(2分) int x, y, z = 2; int *p=&z; x=sizeof*p; y=x/*p; /* x=?, *p=?, y=?, 有什么问题?*/ 3、----------------------------------------------------------- 下面的语句是什么意思?如何声明或定义才使它们更易懂?(10分)

高通笔试题--嵌入式C开发人员的最好的0x10道笔试题(详细解析)

嵌入式C开发人员的最好的0x10道笔试题 约定: (1) 下面的测试题中,认为所有必须的头文件都已经正确的包含了 (2)数据类型 Char 一个字节1 byte Int 两个字节2 byte (16位系统,认为整型是2个字节) long int 四个字节4 byte float 四个字节4 byet double 八个字节8 byte long double 十个字节10 byte pointer 两个字节2 byte(注意,16位系统,地址总线只有16位) 第1题: 考查对volatile关键字的认识--- 高通笔试题 #include 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) 以上均不是 第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 第3题:考查递归调用 int foo ( int x , int n) { int val; val =1; if (n>0) { if (n%2 == 1) val = val *x; val = val * foo(x*x , n/2); } return val; } 这段代码对x和n完成什么样的功能(操作)? (a) x^n (x的n次幂) (b) x*n(x与n的乘积) (c) n^x(n的x次幂) (d)以上均不是 第4题:考查指针,这道题只适合于那些特别细心且对指针和数组有深入理解的人--- 高通笔试题 main() { int a[5] = {1,2,3,4,5}; int *ptr = (int*)(&a+1); printf("%d %d" , *(a+1), *(ptr-1) ); } 这段程序的输出是: (a) 2 2 (b) 2 1 (c) 2 5 (d) 以上均不是 第5题:考查多维数组与指针 void foo(int [][3] ); main() { int a [3][3]= { { 1,2,3} , { 4,5,6},{7,8,9}}; foo(a); printf("%d" , a[2][1]); } void foo( int b[][3]) { ++ b; b[1][1] =9; }

相关文档