嵌入式软件开发笔试题
2016年10月15日大唐电信天津大学校园招聘(仅供个人学习使用):
一、选择题
1. 执行完C程序中的下列三条语句后,指针c指向()
int a, b,*c = &a;
int *p = c;
p = &b;
A. p
B. a
C. b
D. c
2. 若进栈序列为1,2,3,4,进栈过程中可以出栈,则下列不可能的一个出栈序列是()
A. 1,4,3,2
B. 2,3,4,1
C. 3,1,4,2
D. 3,4,2,1
3. 有符号数byte ATC,要想在实际应用中将ATC视为无符号数进行递增(byte)0,(byte)1,…(byte)0x80,(byte)0x81,…(byte)0xff,下面哪一个表达式是正确的()
A. ATC++;
B. if(ATC >= 0) ATC++;
else ATC--;
C. ATC = (byte)(++(ATC &0xff));
D. ATC = (byte)((ATC &0xff)++);
4. 一个指向整形数组的指针的定义为()
A. int (*ptr)[];
B. int *ptr[];
C. int *(ptr[]);
D. int ptr[];
5. 设:
#define N 3
#define Y(n) ((N+1)*n)
则表达式 2*(N+Y(5+1))的值是()
A. 42
B. 48
C. 54
D. 出错
6. C语言同意一些令人震惊的结构,下面的结构是合法的吗,如果是,它做些什么()
int a = 5, b = 7, c;
c = a+++b;
A. a = 6, b = 7, c = 12
B. 结构不合法
C. a = 5, b = 8, c = 13
D. a = 5, b = 8, c = 12
7. 下列哪一种叙述是正确的()
A. abstract修饰符可修饰字段,方法和类
B. 抽象方法的body部分必须用一对大括号{}包住
C. 声明抽象方法,大括号可有可无
D. 声明抽象方法,不可写出大括号
8. 有如下程序
#include<stdio.h>
int main()
{
int x = 011;
printf(“%d\n”,++x);
}
程序运行后的输出结果是()
A. 12
B. 11
C. 10
D. 9
二、填空题
1. 执行下列语句
String str1 = “hello”;
String str2 = “he” +new String(“llo”);
System.err.println(str1 == str2);
答案:__
2. 以下程序的结果是:
char var[10];
int test(char var[])
{
returnsizeof(var);
}
答案:__
3. 在eclipse中,数据都是有符号数:
byte a = (byte)0x80;
short b = (short)0x80;
请用一句程序改变a的值,令a和b相等。
答案:__
4. 下面程序的输出是__
main()
{
intarr[10], i, k = 0;
for(i = 0; i < 10; i++)
arr[i]= i;
for(i = 1;i < 4; i++)
k+= arr[i] + i;
printf(“%d\n”, k);
}
5. 小猴子最多能运回多少根香蕉。
一个小猴子边上有100根香蕉,它要走过50米才能到家,每次它最多搬50根香蕉,每走1米就要吃掉一根,请问它最多能把__根香蕉搬到家。
三、简答题
1. #include <filename.h>和#include “filename.h”有什么区别?
2. 请简述以下两个for循环的优缺点。
(1)
for(i = 0; i < N; i++)
{
if(condition)
DoSomething();
else
DoOtherthing();
}
(2)
if(condition)
{
for(i = 0; i < N; i++)
DoSomething();
}
else
{
for(i = 0; i< N; i++)
DoOtherthing();
}
3. 在面向对象编程中,有几个访问控制修饰符,请根据访问级别由高到低分别列出,并进行说明。
4. 嵌入式系统总是要用户对变量或寄存器进行位操作。给定一个整型变量a,写两段代码,第一个设置a的bit 3,第二个清除a的bit 3。在以上两个操作中,要保持其它位不变。
5. 在ARM系统中,函数调用的时候,参数是通过哪种方式传递的?
四、编程题
1. 计算一个字节(byte)里面有多少bit被置1.
2. 写一段程序,判断内存存储方式是大端还是小端模式。
3. TLV格式是ASN.1中最早定义的编码规则,是Tag,Length和Value的缩写。一个基本的数据元就包括上面三个域。Tag唯一标识该数据元,Length是value域的长度。Value就是数据本身了。举个例子,下面是一个TLV格式的AID(应用标识符)字节串“8107A0000000031010“,其中81是tag,07是长度,A0000000031010就是AID本身的值了。一个文件(数组byte[]body)中的数据都是以基本数据元的TLV格式并列存放的(假定数据元中的Tag和length都是用一个字节表示),已知文件大小fileSize,编写函数返回指定的Tag的数据元对应的Value首字节在文件中的偏移量,如果没有找到返回-1。注:数据皆为有符号数。