TCL集团2013年校园招聘笔试题[C/C++方向]
提示:本测试题总分100分,请60分钟内完成测试。
一、判断题(正确的打√,错误的打×,每题1分,合计1x10=10分)
1. C语言中,016218表示为一个八进制整数。()
2. switch(c)语句中,c可以是int, long, unsigned char, char, unsigned int类型。()
3. 有数组定义int a1[2][2]={{1,2},{2}};则a1[1][1]的值为不确定的。()
4. 有#define MYPRINT(x) printf("#x") 则MYPRINT(test)的输出结果为test.()
5. a=(b=4)+(c=6)是一个合法的赋值表达式。()
6. 自增运算符(++)和自减运算符(--)只能用于变量,不能用于常量和表达式。()
7. 若有说明static int a[3][4];则数组a中各元素可在程序的编译阶段得到初值0。()
8. char const * const p;与const char * const p;是一样,但是char * const p;与char const *p;是不一样的。()
9. C++中const成员函数对于任何本类的数据成员都不能进行写操作。()
10. C++中所有的函数都是纯虚函数的才是纯虚类。()
二、填空题(20分)
注:以下填空题目都是以32位机为主
1. 给定结构
#pragma pack(4)
struct A{
int a1:30;
char a2:2;
int a3:16;
int a4:16;
char a5;
int a6:3;
};
union B{
int b1:16;
char b2:2;
};
则
sizeof(A)= _____________
sizeof(B)= _____________
(5分)
2、 下面代码实现统计一个整数二进制格式中包含多少个'1'请补充完整(5分)
int GetBitNumber(int number)
{
int cnt=0;
while(number!=0)
{
__________________________;
__________________________;
}
return cnt;
}
3、 有如下定义
char *a1[]={"hello!","tclmob"};
char a2[]="\thello\0";
char a3[][8]={"hello!","tclmob"};
char *p1="hello";
char **p2=a1;
char a4[]={'h','e','l','l','o','\0'};
int a5[]={'h','e','l','l','o','\0'};
请问
sizeof(a1)= _____________
sizeof(a2)= _____________
strlen(a2)= _____________
sizeof(a3)= _____________
sizeof(p1)= _____________
sizeof(p2)= _____________
sizeof(a4)= _____________
sizeof(a5)= _____________
(4分)
4、 在一棵二叉树上第8层的结点数最多是____个。(2分)
5、 进程之间通信的途径有____._____._____._____.(4分)
三、单/多项选择题(每题2分,合计2*15=30分)
1、 对于浮点变量f,能实现对f中的值在小数点后第三位进行四舍五入的表达式有_____
A)f=(f*100+0.5)/100.0 B)f=(f*100+0.5)/100
C)f=(int)(f*100+0.5)/100.0 D)f=((int)(f*100+0.5))/100.0
2、 若x、b、m、n均为int型变量,执行下面语句后b的值为_____
m=20;n=6;
x=(--m==n++)?--m:++n
b=m++;
A)11 B)6 C)19 D)18
3、 下列选项中可以将变量n清零的表达式有____
A)n=~n&~n B)n=n&~n C)n=n^n D)n=n|n
4、 若有以下说明int a[5][9]; 则下列选项中对数组元素a[i][j]的正确引用有________(0<=i<4,0<=j<0)
A)*(&a[0][0]+9*i+j) B)*(a+i)(j)
C)*(*(a+i)+j) D)*(a[i]+j)
5、 下列选项中没有构成死循环的程序段有______
A)int i=100; B)for( ; ; )
while(1)
{ i=i%100+1;
if(i>=100) break;}
C)int k=0; D)int s=36; while(s);--s;
do{++k;}while(k>=0);
6、 有如下程序:
void fun(int i)
{
printf("%d,",i);
}
void main()
{
int i=5;
fun(i);
fun;
}
则运行结果是_____
A)5,0, B)5, C)5,5, D)5,随机值 E)可能出现运行异常
7、 若变量已正确定义,要求程序段完成求5!的计算,下列选项中能完成此操作的程序段
A)for (i=1,p=1;i<=5;i++) p*=i;
B)for (i=1;i<=5;i++) {p=1;p*=i;}
C)i=1;p=1;while(i<=5) p*=i;i++;
D)i=1;p=1;do{p*=i;i++;}while(i<=5);
8、 有如下代码:
int a,b,c;a=b=c=0;
0>1?a++:1>0?b++:c++;
printf("%d%d%d\n",a,b,c);
则输出结果是_________
A)010 B)110 C)111 D)语法错误
9、 OSI模型中,会话层的主要任务有______
A)向用户提供可靠的端到端服务,透明地传送报文
B)组织两个会话进程之间的通信,并管理数据的交换
C)处理两个通信系统中交换信息的表示方式
D)确定进程之间通信的性质,以满足用户的需要
10、有以下程序
main()
{
int x=102,y=012;
printf("%2d,%2d\n",x^y,x|y);
}
执行后输出结果是是()
A)4,110 B)002,112 D)108,110 D)106,110
11、设有如下的程序段:
char str[]="Hello";
char *ptr;
ptr=str;
执行上面的程序段后,*(ptr+5)的值为______
A)'o' B)'\0' C)不确定的值 D)'o'的地址
12、一个栈的输入序列为1 2 3,则可能是栈的输出序列的是_____
A)231 B)321 C)312 D)123
13、下面关于完全二叉树的叙述中,正确的有______
A)除了最后一层外,每一层上的结点数均达到最大值。
B)可缺少若干个左右叶子结点
C)完全二叉树一般不是满二叉树
D)具有结点的完全二叉树的深度为[log2n]+1
14、下面概念中,属于面向对象方法的有___________
A)对象、消息 B)继承、多态 C)类、封装 D)过程调用
15、在下列几种排序方法中,要求内存量最大的是__________.
A)插入排序 B)选择排序 C)快速排序 D)归并排序
四、简答题(每题5分,合计5x4=20分)
1、 写出程序执行结果,并解释原因(5分)
void getstr(char *p)
{
p=(char *)malloc(100);
strcpy(p,"TCL");
}
void main()
{
char *str;
getstr(str);
if(str)
{
str[3]='0';
printf("%s,%d\n",strlen(str));
free(str);
}
}
2、 写一个“标准”宏,这个宏返回一个数组最高维的下标(如数组a[2][4][6],执行宏之后结果是2)。(5分)
3、 比较说明什么是Big-Endian,Little-Endian,网络字节序。(5分)
4、 下面程序
main()
{
char *p1="abc", *p2="ABC", str[8]="xyz";
strcpy(str+2,strcat(p1,p2));
printf("%s \n",str);
}
运行结果是什么?为什么?(5分)
五、编程题(20分)
有两个单向链表,函数find_node作用是判断两个链表是否有交点(两个链表有相同的节点),如果有返回第一个交点。请编程实现。
type struct tag_node
{
int key;
struct tag_node *next;
}node;
函数原型:
node* find_node(node *head1,node *head2)
入参说明:
head1,head2:待检查的两个链表
返回:
相交的节点