2012 年华为校园招聘笔试题合集
1、局部变量能否和全局变量重名?
答:能,局部会屏蔽全局。要用全局变量,需要使用"::"
局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会
用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如
在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内。
2、如何引用一个已经定义过的全局变量?
答:extern
可以用引用头文件的方式,也可以用 extern 关键字,如果用引用头文件方式来引
用某个在头文件中声明的全局变理,假定你将那个变写错了,那么在编译期间会报错,如果
你用 extern 方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期
间报错。
3、全局变量可不可以定义在可被多个.C 文件包含的头文件中?为什么?
答:可以,在不同的 C 文件中以 static 形式来声明同名全局变量。
可以在不同的 C 文件中声明同名的全局变量,前提是其中只能有一个 C 文件中对此
变量赋初值,此时连接不会出错。
4、语句 for( ;1 ;)有什么问题?它是什么意思?
答:无限循环,和 while(1)相同。
5、do……while 和 while……do 有什么区别?
答:前一个循环一遍再判断,后一个判断以后再循环。
6、请写出下列代码的输出内容
#i nclude
main()
{
int a,b,c,d;
a=10;
b=a++;
c=++a;
d=10*a++;
printf("b,c,d:%d,%d,%d",b,c,d);
return 0;
}
答:10,12,120
一、判断题(对的写 T,错的写 F 并说明原因,每小题 4 分,共 20 分)
1、有数组定义 int a[2][2]={{1},{2,3}};则 a[0][1]的值为 0。(
)
2、int (*ptr) (),则 ptr 是一维数组的名字。(
)
3、指针在任何情况下都可进行>, <, >=, <=, = =运算。(
)
4、switch(c) 语句中 c 可以是 int, long, char, float, unsigned int 类型。(
)
5、#define print(x)
printf("the no, "#x",is ")
二、填空题(共 30 分)
1、在 windows 下,写出运行结果,每空 2 分,共 10 分。
char str[ ]= "Hello";
char *p=str;
int n=10;
sizeof(str)=(
sizeof(p)=(
sizeof(n)=(
)
)
)
void func(char str[100])
{
}
sizeof(str)=(
)
2、void setmemory(char **p, int num)
{ *p=(char *) malloc(num);}
void test(void)
{
char *str=NULL;
getmemory(&str,100);
strcpy(str,"hello");
printf(str);
}
运行 test 函数有什么结果?
(
)10 分
3、设 int arr[]={6,7,8,9,10};
int *ptr=arr;
*(ptr++)+=123;
printf("%d,%d",*ptr,*(++ptr));
(
) 10 分
二、编程题(第一小题 20,第二小题 30 分)
1、 不使用库函数,编写函数 int strcmp(char
*source, char *dest)
相等返回 0,不等返回-1;
2、 写一函数 int fun(char *p)判断一字符串是否为回文,是返回 1,不是返回 0,出错
返回-1
nt arr[]={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 是多少位的系统?在数据总线上是怎么实现的?
找错
Void test1()
{
char string[10];
char* str1="0123456789";
strcpy(string, str1);
[11]
}
Void test2()
{
char string[10], str1[10];
for(I=0; I<10;I++)
{
str1[i] ='a';
}
I 未定义
I
strcpy(string, str1);
运行有问题?
}
Void test3(char* str1)
{
char string[10];
if(strlen(str1)<=10)
{
strcpy(string, str1);
}
}
2.
#define MAX_SRM 256
找错
DSN get_SRM_no()
{
static int SRM_no;
int I;
for(I=0;I{
SRM_no %= MAX_SRM;
if(MY_SRM.state==IDLE)
{
break;
}
}
if(I>=MAX_SRM)
return (NULL_SRM);
else
return SRM_no;
}
3.
写出程序运行结果
auto int c=0;
static int b=3;
int sum(int a)
{
c+=1;
b+=2;
return(a+b+C);
}
void main()
{
int I;
int a=2;
for(I=0;I<5;I++)
{
printf("%d,", sum(a));
}
}
4.
int func(int a)
{
int b;
switch(a)
{
case 1: 30;
case 2: 20;
case 3: 16;
default: 0
}
return b;
}
则 func(1)=?
5:
int a[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"
struct stu{
char name[20];
char sex;
int no;
int age;
struct stu * next;
}*linklist;
struct stu *creatlist(int n)
{
int i;
//h 为头结点,p 为前一结点,s 为当前结点
struct stu *h,*p,*s;
h = (struct stu *)malloc(sizeof(struct stu));
h->next = NULL;
p=h;
for(i=0;inext = s;
printf("Please input the information of the student: name sex no
age \n");
scanf("%s %c %d %d",s->name,&s->sex,&s->no,&s->age);
s->next = NULL;
p = s;
}
printf("Create successful!");
return(h);
}
void deletelist(struct stu *s,int a)
{
struct stu *p;
while(s->age!=a)
{
p = s;
s = s->next;
}
if(s==NULL)
printf("The record is not exist.");
else
{
p->next = s->next;
printf("Delete successful!");
}
}
void display(struct stu *s)
{
s = s->next;
while(s!=NULL)
{
printf("%s %c %d %d\n",s->name,s->sex,s->no,s->age);
s = s->next;
}
}
int main()
{
struct stu *s;
int n,age;
printf("Please input the length of seqlist:\n");
scanf("%d",&n);
s = creatlist(n);
display(s);
printf("Please input the age:\n");
scanf("%d",&age);
deletelist(s,age);
display(s);
return 0;
}
2、实现一个函数,把一个字符串中的字符从小写转为大写。
#include "stdio.h"
#include "conio.h"
void uppers(char *s,char *us)
{
for(;*s!=''''\0'''';s++,us++)
{
if(*s>=''''a''''&&*s<=''''z'''')
else
*us = *s-32;
*us = *s;
}
*us = ''''\0'''';
}
int main()
{
char *s,*us;
char ss[20];
printf("Please input a string:\n");