='a'&&*ss=ss;uppers(s,us);printf("The" />

文档库

最新最全的文档下载
当前位置:文档库 > C语言 2010 华为 网络面试题汇总

C语言 2010 华为 网络面试题汇总

学号:2009121001 姓名:达选芳 本题出自:<华为公司> 题目:<实现一个函数,把一个字符串的小写转化成大写> 答案: #include "stdio.h" #include "conio.h" void uppers(char *s,char *us) { for(;*s!='\0';s++,us++) { if(*s>='a'&&*s<='z') *us = *s-32; else *us = *s; } *us = '\0'; } int main() { char *s,*us; char ss[20]; printf("Please input a string:\n"); scanf("%s",ss);

s = ss; uppers(s,us); printf("The result is:\n%s\n",us); getch(); } 学号:2009121003 姓名:孙英杰 本题出自:华为公司 题目:改错题(此代码是把一个字符串倒序,如“abcd”倒序后变为“dcba” ) 源代码为: #include"string.h" main() { char*src="hello,world"; char* dest=NULL; int len=strlen(src); dest=(char*)malloc(len); char* d=dest; char* s=src[len]; while(len--!=0) d++=s--; printf("%s",dest); return 0; } 答案: #include int main() { char* src = "hello,world"; int len = strlen(src); char* dest = (char*)malloc(len+1); char* d = dest; char* s = &src[len-1]; while( len-- != 0 ) *d++=*s--; *d = 0; 学号:2009121004

姓名:胡蝶 本题出自:<华为> 题目:<按照编码规范写题目> 试题: 编写一个 C 函数,该函数在一个字符串中找到可能的最长的子字符串,且该字符串 是由同一字符组成的. 答案:<有编码的答案按照编码规范写> 解答: char * search(char *cpSource, char ch) { char *cpTemp=NULL, *cpDest=NULL; int iTemp, iCount=0; while(*cpSource) { if(*cpSource == ch) { iTemp = 0; cpTemp = cpSource; while(*cpSource == ch) ++iTemp, ++cpSource; if(iTemp > iCount) iCount = iTemp, cpDest = cpTemp; if(!*cpSource) break; } ++cpSource; } return cpDest; } 学号:2009121005 姓名:张虹 本题出自: (无相关信息) 题目:找错题/ /* *文件名称:C/C++程序设计面试深入剖析 *文件标识:C/C++笔试 面试 *摘要:本课程的目的并不在于提供 C/C++程序员求职面试指导,而旨在从技术上分析面试 题的内涵。 */ /* *作者:张虹,修改日期:2010 年 4 月 10 日 *修改的地方描述:主要是格式、说明内容的补充,代码上没有做任何修改。

*/ /* *原作者:马良,完成日期:2009 年 5 月 26 日 */ /* *试题 1 */ #include“stdio.h” #include“string.h” void test1() { char string[10]; char *str1="0123456789"; strcpy( string, str1 ); } 答案:试题 1 字符串 str1 需要 11 个字节才能存放下(包括末尾的’\0’,而 string 只有 ) 10 个字节的空间,strcpy 会导致数组越界。 /* *试题 2 */ #include“stdio.h” #include“string.h” void test2() { char string[10],str1[10]; int i; for( i=0; i<10; i++ ) { str1='a'; } strcpy( string, str1 ); } 答案:对试题 2,如果面试者指出字符数组 str1 不能在数组内结束可以给 3 分;如果面试 者指出 strcpy(string, str1)调用使得从 str1 内存起复制到 string 内存起所复制的字节 数具有不确定性可以给 7 分,在此基础上指出库函数 strcpy 工作方式的给 10 分。 /* *试题 3 */

#include“stdio.h” #include“string.h” void test3(char *str1) { char string[10]; If( strlen(str1) <= 10 ) { strcpy( string, str1 ); } }
答案:对试题 3,if( strlen(str1) <= 10 )应改为 if( strlen(str1) < 10 ),因为 strlen 的结果未统计’\0’所占用的 1 个字节。
剖析: 考查对基本功的掌握: (1)字符串以’\0’结尾; (2)对数组越界把握的敏感度; (3)库函数 strcpy 的工作方式,如果编写一个标准 strcpy 函数的总分值为 10,下面给出几个不同得分的答案: //2 分 void strcpy( char *strDest, char *strSrc ) { while( (*strDest++ = *strSrc++) !=‘\0’); } //4 分 void strcpy( char *strDest, const char *strSrc ) //将源字符串加 const,表明其为输入参数,加 2 分 { while( (*strDest++ = *strSrc++) !=‘\0’); } //7 分 void strcpy( char *strDest, const char *strSrc ) { //对源地址和目的地址加非 0 断言,加 3 分 assert( (strDest != NULL) && (strSrc != NULL) );

while( (*strDest++ = *strSrc++) != ‘\0’); } //10 分 //为了实现链式操作,将目的地址返回,加 3 分! char * strcpy(char *strDest, const char *strSrc) { assert( (strDest != NULL) && (strSrc != NULL) ); char *address=strDest; while( (*strDest++ = *strSrc++) != ‘\0’); return address; } //The end 学号:2009121006 姓名:李宛芩 本题出自:华为 题目:请问以下代码有什么问题: int main() { char a; char *str=&a; strcpy(str,"hello"); printf(str); return 0; } 答:没有为 str 分配内存空间,将会发生异常 问题出在将一个字符串复制进一个字符变量指针所指地址。 虽然可以正确输出结果, 但因为 越界进行内在读写而导致程序崩溃。 char* s="AAA"; printf("%s",s); s[0]='B'; printf("%s",s); 有什么错? "AAA"是字符串常量。s 是指针,指向这个字符串常量,所以声明 s 的时候就有问题。 cosnt char* s="AAA"; 然后又因为是常量,所以对是 s[0]的赋值操作是不合法的。 学号:2009121007 姓名:白宁 本题出自:<思科> 题目:<用宏定义写出 swap(x,y)>

1 用宏定义写出 swap(x,y) #define swap(x,y) x=x+y; y=x-y; x=x-y; 2 数组 a[N],存放了 1 至 N-1 个数,其中某个数重复一次。写一个函数,找出被重复的数字, 时间复杂度必须为 o(N)函数原型 Int do_duo(int a[],int N) 3 一语句实现 x 是否为 2 的若干次幂的判断 Int i=512; Cout< #define NUM 1000 int find5(int num){ int ret=0;

while(num%5==0){ num/=5; ret++; } return ret; } int main(){ int result=0; int i; for(i=5;i<=NUM;i+=5) { result+=find5(i); } printf(" the total zero number is %d\n",result); return 0; }
学号:2009121009 姓名:曾旭东 本题出自:<华为 > 题目: 答案:<答:extern 可以用引用头文件的方式,也可以用 extern 关键字,如果用引用头文件方式来引用某 个在头文件中声明的全局变理,假定你将那个变写错了,那么在编译期间会报错,如果你用 extern 方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报 错。 >
学号:2009121010 姓名:郭濠瑜 本题出自:IBM 题目: Output of the following program is main() { int i=0; for(i=0;i<20;i++) { switch(i)

{ case 0:i+=5; case 1:i+=2; case 5:i+=5; default i+=4; break; } printf("%d,",i); } } a) b) c) d) 0,5,9,13,17 5,9,13,17 12,17,22 16,21
答案:d 学号:2009121011 姓名:吴英延 本题出自:<华为> 题目:<按照编码规范写题目> 试题:编写类 String 的构造函数、析构函数和赋值函数,已知类 String 的原型为: class String { public: String(const char *str = NULL); // 普通构造函数 String(const String &other); // 拷贝构造函数 ~ String(void); // 析构函数 String & operate =(const String &other); // 赋值函数 private: char *m_data; // 用于保存字符串 }; 答案:<有编码的答案按照编码规范写> 解答:

//普通构造函数 String::String(const char *str) { if(str==NULL) { m_data = new char[1]; // 得分点: 对空字符串自动申请存放结束标志'\0' 的空 //加分点:对 m_data 加 NULL 判断 *m_data = '\0'; } else { int length = strlen(str); m_data = new char[length+1]; // 若能加 NULL 判断则更好 strcpy(m_data, str); } } // String 的析构函数 String::~String(void) { delete [] m_data; // 或 delete m_data; } //拷贝构造函数 String::String(const String &other) // 得分点:输入参数为 const 型 { int length = strlen(other.m_data); m_data = new char[length+1]; strcpy(m_data, other.m_data); } //加分点:对 m_data 加 NULL 判断
//赋值函数 String & String::operate =(const String &other) // 得分点:输入参数为 const 型 { if(this == &other) //得分点:检查自赋值 return *this;

delete [] m_data; int length = strlen( other.m_data ); m_data = new char[length+1]; strcpy( m_data, other.m_data ); return *this; }
//得分点:释放原有的内存资源
//加分点:对 m_data 加 NULL 判断
//得分点:返回本对象的引用
学号:2009121012 姓名:吴昊天 出处:未知 题目: 用变量 a 给出下面的定义 a) 一个整型数(An integer) b) 一个指向整型数的指针( A pointer to an integer) c) 一个指向指针的的指针,它指向的指针是指向一个整型数 A pointer to a pointer to an integer d) 一个有 10 个整型数的数组( An array of 10 integers) e) 一个有 10 个指针的数组,该指针是指向一个整型数的。(An array of 10 pointers to integers) f) 一个指向有 10 个整型数数组的指针( A pointer to an array of 10 integers) g) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数(A pointer to a function that takes an integer as an argument and returns an integer) h) 一个有 10 个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整 型数(An array of ten pointers to functions that take an integer argument and return an integer ) 答案: a) int a; b) int *a; c) int **a; d) int a[10]; e) int *a[10]; f) int (*a)[10]; g) int (*a)(int);

h) int (*a[10])(int);
学号:2009121014 姓名:吴磊俊 本题出自:<華為 > 题目:<局部变量能否和全局变量重名? > 答案:<能,局部会屏蔽全局。要用全局变量,需要使用"::" 局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会 用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如 在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内>
学号:2009121015 姓名:杨厚田 本题出自:<华为 > main() { int a[5] = {1,2,3,4,5}; int *ptr = (int*)(&a+1); printf("%d %d" , *(a+1), *(ptr-1) ); }
这段程序的输出是: (a) 2 2 (b) 2 1 (c) 2 5 (d) 以上均不是 版权:华为 答案 c

学号:2009121017 姓名:张冬 本题出自:华为 题目:编写一个函数,要求输入年月日时分秒,输出该年月日时分秒的下一秒。如输入 2004 年 12 月 31 日 23 时 59 分 59 秒,则输出 2005 年 1 月 1 日 0 时 0 分 0 秒。 答案: //* 本 文 来 自 : IT 知 道 网 (http://www.wendangku.net/doc/44de4d67f5335a8102d220f7.html) 详 细 出 处 参 考 : http://www.wendangku.net/doc/44de4d67f5335a8102d220f7.html/html/c/cmianshi/20070905/89.html*// void ResetTheTime(int *year,int *month,int *date,int *hour,int *minute,int*second) { int dayOfMonth[12]={31,28,31,30,31,30,31,31,30,31,30,31}; if( *year < 0 || *month < 1 || *month > 12 || *date < 1 || *date > 31 || *hour < 0 || *hour > 23 || *minute < 0 ||*minute > 59|| *second <0 || *second >60 ) return; if( *year%400 == 0 || *year%100 != 0 && *year%4 == 0 ) dayOfMonth[1] = 29; if(*second >= 60) { *second = 0; *minute += 1; if(*minute >= 60) { *minute = 0; *hour += 1; if(*hour >= 24) { *hour = 0; *date += 1; if(*date > dayOfMonth[*month-1]) { *date = 1; *month += 1; if(*month > 12) { *month=1; *year += 1; } } } } }

return; }
学号:2009121018 姓名:戴兴 阿里巴巴名面试题: 用用最小空间度将一个 M*N 的矩阵旋转 90 度(顺逆时针均可) // 个人用五个额处空间(两个循环控制三个暂存)实现。 //作者:陈昂(http974@http://www.wendangku.net/doc/44de4d67f5335a8102d220f7.html) //算法说明: //设有一个(M×N)3*4 维矩阵 A,旋转后成 4*3 // 1 2 3 4 9 5 1 // 5 6 7 8 => 10 6 2 // 9 10 11 12 11 7 3 // 12 8 4 可以发现旋转后矩阵与原矩阵的关系: // 旋转后 原矩阵 // A[0,0] = A[2,0] = 9 // A[0,1] = A[1,0] = 5 // A[0,2] = A[0,0] = 1 // A[1,0] = A[2,1] = 10 // A[1,1] = A[1,1] = 6 // A[1,2] = A[0,1] = 2 // A[2,0] = A[2,2] = 11 // A[2,1] = A[1,2] = 7 // A[2,2] = A[0,2] = 3 // A[3,0] = A[2,3] = 12 // A[3,1] = A[1,3] = 8 // A[3,2] = A[0,3] = 4 代码: /*copyright 陈昂*/ #include #include #define M 3 #define N 4 main() { int Matrix[M][N]={1,2,3,4,5,6,7,8,9,10,11,12}; int i=0 ; int j=0 ; int tmpi = 0;

int tmpj = 0; int u = 0; printf("原矩阵为:\n"); for (i= 0 ;i< M ;i++) { for(j=0 ; j< N; j++) printf(" %d ",Matrix[i][j]); printf("\n"); } printf("顺时针转 90 度后:\n"); for (i= 0 ;i< N ; i++) { for(j= 0 ; j< M; j++) { //求该交换元素在原矩阵对应的位置 tmpi = M- j -1; tmpj = i ; //循环查找最后交换的位置 while((tmpi * N + tmpj) < i * M + j ) { u= (tmpi * N + tmpj ); tmpi = u / M ; tmpj = u % M ; tmpi = tmpi + tmpj; tmpj = tmpi - tmpj; tmpi = tmpi - tmpj; tmpi = (M-tmpi -1); } //交换矩元素,后一个作暂存用 if (*(&Matrix[0][0] + i * M + j) != Matrix[tmpi][tmpj]) { *(&Matrix[0][0] + i * M + j) = *(&Matrix[0][0] + i M + j) + Matrix[tmpi][tmpj]; Matrix[tmpi][tmpj] = *(&Matrix[0][0] + i * M + j) - Matrix[tmpi][tmpj]; *(&Matrix[0][0] + i * M + j) = *(&Matrix[0][0] + i M + j) - Matrix[tmpi][tmpj]; } printf(" %d ",*(&Matrix[0][0] + i * M + j)); } printf("\n"); }
*
*

getch(); return 0; } 学号:2009121019 姓名:周凤建 本题出自:<華為 > 题目:<分辨函数 >
#include int inc(int a) int inc(int a) { return(++a); } int multi(int*a,int*b,int*c) int multi(int*a,int*b,int*c) { return(*c=*a**b); } typedef int(FUNC1)(int in); typedef int(FUNC1)(int in); typedef int(FUNC2) (int*,int*,int*); typedef int(FUNC2) (int*,int*,int*); void show(FUNC2 fun,int arg1, int*arg2) void show(FUNC2 fun,int arg1, int*arg2) { INCp=&inc; int temp =p(arg1); int temp =p(arg1); fun(&temp,&arg1, arg2); fun(&temp,&arg1, arg2); printf("%d\n",*arg2); } main() { int a; int a; show(multi,10,&a); return 0; return 0; }
学号:2009121020

姓名:杨川 本题出自:IBM C 语言面试题 题目1:请编写能直接实现 char * strcpy(char * pstrDest,const char * pstrSource)函 数功能的代码。 题目2:编写反转字符串的程序,要求优化速度、优化空间。 1: char * strcpy(char * pstrDest,const char * pstrSource) { assert((pstrDest!=NULL)&&(pstrSource!=NULL)); char * pstr=pstrDest; while((*(pstrDest++)=*(pstrSource++))!='\0'); return pstr; } 2:char * strrev(char * pstr) { assert(pstr!=NULL); char * p=pstr; char * pret=pstr; while(*(p++)!='\0'); p--; char tmp; while(p>pstr) { tmp=*p; *(p--)=*(pstr); *(pstr++)=tmp; } return pret;
/* 本篇文章来自IDC专家网 原文链接: http://www.wendangku.net/doc/44de4d67f5335a8102d220f7.html/discuss/5/040806/10/481269_2.html * Copyright (c) IBM c语言面试题 * * 文件名称: ********** * 文件标识:根据软件工程设置 * 摘要:IBM公司的面试题 */ //下面其它的声明代码 ?

//下面是原作者、版本、完成、日期和当前版本的信息 /* 当前版本:1.0.1 * 作者:zhyindividual 责任编辑:lujiezhen ,修改日期:2005年4月5日 * 修改的地方描述: */ /* * 取代版本:1.0.0 * 原作者:zhyindividual 责任编辑:lujiezhen ,完成日期:2010年4月31日 */ 学号:2009121021 姓名:何科成 问题: struct a { int x; char y; struct a z; struct a *p; } 请问这种定义结构正确否? 如果有问题,问题在哪里? 答:结构中不能对定义结构本身的非指针变量,如果编译器支持则会导致无限嵌套,因此一 般编译器都会认为 struct a 是未定义的类型,即使提前声明也不会有任何用处。 学 号:2009121022 姓 名:王浩 本题出自: 微软 题 目:设计程序让其 CPU 占用呈余弦曲线显示-perl 版
#!/usr/bin/perl use strict; use warnings; use Win32; use use use use use constant constant constant constant constant COUNT => 200; SPLIT => 0.01; PI => 3.14159265; INTERVAL => 300; TRUE => 1;

main(); sub main { my @busySpan; # array of busy times my @idleSpan; # array of idle times my $half = INTERVAL / 2; my $radian = 0.0; my $i; for ($i = 0; $i < COUNT; $i++) { $busySpan[$i] = int(($half + (sin(PI * $radian) * $half))); $idleSpan[$i] = INTERVAL - $busySpan[$i]; $radian += SPLIT; } my $startTime = 0; my $j = 0; while (TRUE) { $j = int($j % COUNT); $startTime = Win32::GetTickCount(); while ((Win32::GetTickCount() - $startTime) <= $busySpan[$j]) {}; Win32::Sleep($idleSpan[$j]); $j++; } return 0; } 学号:2009121023 姓名:赵红波 本题出自: 题目及答案:1、局部变量能否和全局变量重名? 答:能,局部会屏蔽全局。要用全局变量,需要使用"::" 局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而 不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量, 比如在两个循环体内都定义一个同名的局部变量, 而那个局部变量的作用域就在那个循环体 内。 2、如何引用一个已经定义过的全局变量? 答:extern