2010 年锐捷网络校园招聘嵌入式软件开发笔试真题及答案
1、16 位 short int 类型所能表示的数值下限与上限,如果使用 printf 的格式串”%d,%d”
打印,其结果是__-32768 ,32767
____;
2、有定义(tip:潜在的级数升级,此处按 int 输出)
signed char ch = 127;
printf(“%d”,ch+127);
的输出结果是__254_______;
3、多组数组 a[10][10][10]的第一个元素是 a[0][0][0],则其第 245 个元素是
_a[2][4][4]_____;(tip:2*10*10+4*10+4+1)
4、若定义 int a[010],(注:八进制) 则 sizeof(a)的值是___32___;
5、有定义 char *str = “hello\n\0\n”,则 strlen(str)的值是__6____;(tip:’\0’为
字符结束符标志)
6、定义一个函数指针类型 func_ptr,所对应的函数的参数是 void,返回值为 int 指针:
typedef_int*(*func_ptr)(void)___;
7、完成宏定义,将 int 型变量 a 的第 0 位到第 n 位取反(右数最低位为第 0 位),其他位
保持不变:
8、如下函数
#define bit_reverse(a,n)
( (a)^ 1<<(n) )
int func(void)
{
}
static int cnt;
第一次运行时,cnt 的值是___0___;
9、若 i = 0,表达式 a[i++] += 4;
运算后,i 的值是___1___;
10、语句 fprintf(stderr,"%x, %d, %c", '1', '1', '1');的输出是_31,49,1_;
11、枚举类型定义
enum boolean {yes, no};
yes 的数值是___0___;
12、有如下程序(tip:宏原样带入展开即可)
#define ADD(x) (x) + (x)
int main(void)
{
int a = 5, b = 6, c = 7, d = ADD(a + b) * c;
printf(“%d\n”, d);
return 0;
}
的输出结果是__88____;
13、程序
int main(void)
{
int i = 16, j, x = 6;
j = i++ + 1;
(tip:结合顺序,可参考《C 陷阱与缺陷》)
x *= i = j;
printf(“%d, %d\n”, j, x);
return 0;
}
输出的是___17, 102___;
14、有以下语句
struct a {int v1, v2;};
struct b {
struct a v1;
};
{
int main(void)
int v2, v3;
struct b t = {1, 2, 3, 4};
struct a *ap = (struct a*)&t;
printf(“%d”, *((int *)(ap + 1)));
}
输出结果是__3____;(tip:指针类型及偏移)
15、语句
i = 0, j = 0;
for(i++, j++; ++j < 1 && i++ <2; i++, j++)
{(tip:逻辑运算符的特点)
;/*void*/
}
当循环退出时,i 的值是___1___;
16、运行 C 语言编写的程序
copy /B a.txt a.bak 时,int main(int argc, char *argv[])中 argv[argc]
指向的内容是__NULL____;(tip:可参考《C 和指针》P265)
17、有定义(tip:算数右移-与编译器相关,左移)
int i=-1;
printf("%d,%d",i>>1,i<<1); 的结果是___-1,-2_______。
注:负数在计算机中是以补码的形式参与计算的 ,因为-1 的原码是(以八位为例)1000 0001,
所以补码是 1111 1111,右移一位的得到的还是 1111 1111 ,因为是负数,所以在左端补
1,而不是 0。再把 1111 1111,转化为原码即减 1 取反得 1000 0001,化为十进制就是-1。
左移同理可得。
总结:只要记住负数是以补码的形式参与计算的。这类题目就不会模糊。
18、程序
char buf[256];
int main(void)
{
“efg%%d”);
sprintf(buf+ sprintf(buf, “%s”, “abc%d”), “%s”,
printf(buf,100);
}
的输出是__abc100efg%d____。
注: 两个% 就只输出一个%,还有 sprintf 的返回值为输出元素的个数,100 在碰到的第
一个%d 处输出。
19、已知一棵二叉树 s 前序遍历和中序遍历分别为 ABDEGCFH 和 DBGEACHF,则该二叉树的后
序遍历为__DGEBHFCA_____。
20、向一个长度为 n 的向量的第 i 个元素(1=i=n+1)之前插入一个元素时,需向后移动
_n-i+1___个元素。(tip:可以考虑 i 为 0 和 n 的情况,较容易)
21~25、
算法:函数 psort()将含 n 个整数的数组 a[]的不同元素按从小到大的顺序存于数组 a[]中,
返回值是不同元素的个数。它的实现方法是顺序考察 a[]中的元素,寻找当前考察元素 a[i]
在已确定的不同元素中的插入位置。如果 a[i]是一个新的不同元素,插入之,否则,忽略
该元素。(此题貌似还有点问题)
int psort(int a[],int n)
{
int i,j,k,low,high,mid,t;
for(k=1,i=1;i=a[i])
high=mid-1;
low=mid+1;
else
}
{
{
for(j=__i - 1___(23); j>_high___(24); j--)
if(low <= k ||
high >= 0(22))
t=a[i];
a[j+1]=a[j];
}
a[__j + 1_(25)]=t;
k++;
}
return k;
}