最全的华为校园招聘笔试题合集.docx
《最全的华为校园招聘笔试题合集.docx》由会员分享,可在线阅读,更多相关《最全的华为校园招聘笔试题合集.docx(17页珍藏版)》请在冰豆网上搜索。
最全的华为校园招聘笔试题合集
华为笔试
1、局部变量能否和全局变量重名?
答:
能,局部会屏蔽全局。
要用全局变量,需要使用":
:
"
局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。
对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内。
2、如何引用一个已经定义过的全局变量?
答:
extern
可以用引用头文件的方式,也可以用extern关键字,如果用引用头文件方式来引用某个在头文件中声明的全局变理,假定你将那个变写错了,那么在编译期间会报错,如果你用extern方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报错。
3、全局变量可不可以定义在可被多个.C文件包含的头文件中?
为什么?
答:
可以,在不同的C文件中以static形式来声明同名全局变量。
可以在不同的C文件中声明同名的全局变量,前提是其中只能有一个C文件中对此变量赋初值,此时连接不会出错。
4、语句for(;1;)有什么问题?
它是什么意思?
答:
无限循环,和while
(1)相同。
5、do……while和while……do有什么区别?
答:
前一个循环一遍再判断,后一个判断以后再循环。
6、请写出下列代码的输出内容
#include
main()
{
inta,b,c,d;
a=10;
b=a++;
c=++a;
d=10*a++;
printf("b,c,d:
%d,%d,%d",b,c,d);
return0;
}
答:
10,12,120
一、判断题(对的写T,错的写F并说明原因,每小题4分,共20分)
1、有数组定义inta[2][2]={{1},{2,3}};则a[0][1]的值为0。
( )
2、int(*ptr)(),则ptr是一维数组的名字。
( )
3、指针在任何情况下都可进行>,<,>=,<=,==运算。
( )
4、switch(c)语句中c可以是int,long,char,float,unsignedint类型。
( )
5、#defineprint(x) printf("theno,"#x",is")
二、填空题(共30分)
1、在windows下,写出运行结果,每空2分,共10分。
charstr[]="Hello";
char*p=str;
intn=10;
sizeof(str)=( )
sizeof(p)=( )
sizeof(n)=( )
voidfunc(charstr[100])
{ }
sizeof(str)=( )
2、voidsetmemory(char**p,intnum)
{*p=(char*)malloc(num);}
voidtest(void)
{ char*str=NULL;
getmemory(&str,100);
strcpy(str,"hello");
printf(str);
}
运行test函数有什么结果?
( )10分
3、设intarr[]={6,7,8,9,10};
int*ptr=arr;
*(ptr++)+=123;
printf("%d,%d",*ptr,*(++ptr));
( )10分
二、编程题(第一小题20,第二小题30分)
1、 不使用库函数,编写函数intstrcmp(char *source,char*dest)
相等返回0,不等返回-1;
2、 写一函数intfun(char*p)判断一字符串是否为回文,是返回1,不是返回0,出错返回-1
ntarr[]={6,7,8,9,10};
int*ptr=arr;
*(ptr++)+=123;
printf("%d,%d",*ptr,*(++ptr));
请问输出是什么?
解答:
这道题的答案取自于编译器,因为不同的编译器有不同的压栈顺序,一般情况下是从右往左压,即答案为8,8。
但我们也不否认出现7,8或8,9的情况。
1.请你分别画出OSI的七层网络结构图和TCP/IP的五层结构图。
2.请你详细地解释一下IP协议的定义,在哪个层上面?
主要有什么作用?
TCP与UDP呢?
3.请问交换机和路由器各自的实现原理是什么?
分别在哪个层次上面实现的?
4.请问C++的类和C里面的struct有什么区别?
5.请讲一讲析构函数和虚函数的用法和作用。
6.全局变量和局部变量有什么区别?
是怎么实现的?
操作系统和编译器是怎么知道的?
7.8086是多少位的系统?
在数据总线上是怎么实现的?
找错
Voidtest1()
{
charstring[10]; [11]
char*str1="0123456789";
strcpy(string,str1);
}
Voidtest2()
{
charstring[10],str1[10];
for(I=0;I<10;I++) I未定义
{
str1[i]='a'; I
}
strcpy(string,str1); 运行有问题?
}
Voidtest3(char*str1)
{
charstring[10];
if(strlen(str1)<=10)
{
strcpy(string,str1);
}
}
2. 找错
#defineMAX_SRM256
DSNget_SRM_no()
{
staticintSRM_no;
intI;
for(I=0;I{
SRM_no%=MAX_SRM;
if(MY_SRM.state==IDLE)
{
break;
}
}
if(I>=MAX_SRM)
return(NULL_SRM);
else
returnSRM_no;
}
3. 写出程序运行结果
intsum(inta)
{
autointc=0;
staticintb=3;
c+=1;
b+=2;
return(a+b+C);
}
voidmain()
{
intI;
inta=2;
for(I=0;I<5;I++)
{
printf("%d,",sum(a));
}
}
4.
intfunc(inta)
{
intb;
switch(a)
{
case1:
30;
case2:
20;
case3:
16;
default:
0
}
returnb;
}
则func
(1)=?
5:
inta[3];
a[0]=0;a[1]=1;a[2]=2;
int*p,*q;
p=a;
q=&a[2];
则a[q-p]=?
2
6.
定义int**a[3][4],则变量占有的内存空间为:
_____4
7.
编写一个函数,要求输入年月日时分秒,输出该年月日时分秒的下一秒。
如输入2004年12月31日23时59分59秒,则输出2005年1月1日0时0分0秒。
1、一个学生的信息是:
姓名,学号,性别,年龄等信息,用一个链表,把这些学生信息连在一起,给出一个age,在些链表中删除学生年龄等于age的学生信息。
#include"stdio.h"
#include"conio.h"
structstu{
charname[20];
charsex;
intno;
intage;
structstu*next;
}*linklist;
structstu*creatlist(intn)
{
inti;
//h为头结点,p为前一结点,s为当前结点
structstu*h,*p,*s;
h=(structstu*)malloc(sizeof(structstu));
h->next=NULL;
p=h;
for(i=0;i {
s=(structstu*)malloc(sizeof(structstu));
p->next=s;
printf("Pleaseinputtheinformationofthestudent:
namesexnoage\n");
scanf("%s%c%d%d",s->name,&s->sex,&s->no,&s->age);
s->next=NULL;
p=s;
}
printf("Createsuccessful!
");
return(h);
}
voiddeletelist(structstu*s,inta)
{
structstu*p;
while(s->age!
=a)
{
p=s;
s=s->next;
}
if(s==NULL)
printf("Therecordisnotexist.");
else
{
p->next=s->next;
printf("Deletesuccessful!
");
}
}
voiddisplay(structstu*s)
{
s=s->next;
while(s!
=NULL)
{
printf("%s%c%d%d\n",s->name,s->sex,s->no,s->age);
s=s->next;
}
}
intmain()
{
structstu*s;
intn,age;
printf("Pleaseinputthelengthofseqlist:
\n");
scanf("%d",&n);
s=creatlist(n);
display(s);
printf("Pleaseinputtheage:
\n");
scanf("%d",&age);
d