logo资料库

2012年华为校园招聘笔试题合集.doc

第1页 / 共17页
第2页 / 共17页
第3页 / 共17页
第4页 / 共17页
第5页 / 共17页
第6页 / 共17页
第7页 / 共17页
第8页 / 共17页
资料共17页,剩余部分请下载后查看
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");
分享到:
收藏