C语言 华为 网络面试题汇总.docx
- 文档编号:30155161
- 上传时间:2023-08-05
- 格式:DOCX
- 页数:56
- 大小:37.62KB
C语言 华为 网络面试题汇总.docx
《C语言 华为 网络面试题汇总.docx》由会员分享,可在线阅读,更多相关《C语言 华为 网络面试题汇总.docx(56页珍藏版)》请在冰豆网上搜索。
C语言华为网络面试题汇总
学号:
2009121001
姓名:
达选芳
本题出自:
<华为公司>
题目:
<实现一个函数,把一个字符串的小写转化成大写>
答案:
#include"stdio.h"
#include"conio.h"
voiduppers(char*s,char*us)
{
for(;*s!
='\0';s++,us++)
{
if(*s>='a'&&*s<='z')
*us=*s-32;
else
*us=*s;
}
*us='\0';
}
intmain()
{
char*s,*us;
charss[20];
printf("Pleaseinputastring:
\n");
scanf("%s",ss);
s=ss;
uppers(s,us);
printf("Theresultis:
\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,charch)
{
char*cpTemp=NULL,*cpDest=NULL;
intiTemp,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;
}
returncpDest;
}
学号:
2009121005
姓名:
张虹
本题出自:
(无相关信息)
题目:
找错题/
/*
*文件名称:
C/C++程序设计面试深入剖析
*文件标识:
C/C++笔试面试
*摘要:
本课程的目的并不在于提供C/C++程序员求职面试指导,而旨在从技术上分析面试题的内涵。
*/
/*
*作者:
张虹,修改日期:
2010年4月10日
*修改的地方描述:
主要是格式、说明内容的补充,代码上没有做任何修改。
*/
/*
*原作者:
马良,完成日期:
2009年5月26日
*/
/*
*试题1
*/
#include“stdio.h”
#include“string.h”
voidtest1()
{
charstring[10];
char*str1="0123456789";
strcpy(string,str1);
}
答案:
试题1字符串str1需要11个字节才能存放下(包括末尾的’\0’),而string只有10个字节的空间,strcpy会导致数组越界。
/*
*试题2
*/
#include“stdio.h”
#include“string.h”
voidtest2()
{
charstring[10],str1[10];
inti;
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”
voidtest3(char*str1)
{
charstring[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分
voidstrcpy(char*strDest,char*strSrc)
{
while((*strDest++=*strSrc++)!
=‘\0’);
}
//4分
voidstrcpy(char*strDest,constchar*strSrc)
//将源字符串加const,表明其为输入参数,加2分
{
while((*strDest++=*strSrc++)!
=‘\0’);
}
//7分
voidstrcpy(char*strDest,constchar*strSrc)
{
//对源地址和目的地址加非0断言,加3分
assert((strDest!
=NULL)&&(strSrc!
=NULL));
while((*strDest++=*strSrc++)!
=‘\0’);
}
//10分
//为了实现链式操作,将目的地址返回,加3分!
char*strcpy(char*strDest,constchar*strSrc)
{
assert((strDest!
=NULL)&&(strSrc!
=NULL));
char*address=strDest;
while((*strDest++=*strSrc++)!
=‘\0’);
returnaddress;
}
//Theend
学号:
2009121006
姓名:
李宛芩
本题出自:
华为
题目:
请问以下代码有什么问题:
intmain()
{
chara;
char*str=&a;
strcpy(str,"hello");
printf(str);
return0;
}
答:
没有为str分配内存空间,将会发生异常
问题出在将一个字符串复制进一个字符变量指针所指地址。
虽然可以正确输出结果,但因为越界进行内在读写而导致程序崩溃。
char*s="AAA";
printf("%s",s);
s[0]='B';
printf("%s",s);
有什么错?
"AAA"是字符串常量。
s是指针,指向这个字符串常量,所以声明s的时候就有问题。
cosntchar*s="AAA";
然后又因为是常量,所以对是s[0]的赋值操作是不合法的。
学号:
2009121007
姓名:
白宁
本题出自:
<思科>
题目:
<用宏定义写出swap(x,y)>
1用宏定义写出swap(x,y)
#defineswap(x,y)
x=x+y;
y=x-y;
x=x-y;
2数组a[N],存放了1至N-1个数,其中某个数重复一次。
写一个函数,找出被重复的数字,时间复杂度必须为o(N)函数原型
Intdo_duo(inta[],intN)
3一语句实现x是否为2的若干次幂的判断
Inti=512;
Cout< false: true)< 4unsignedintintvert(unsignedintx,intp,intn)实现对x的进行转换,p为起始转换为,n为需要转换的长度,假设起始点在右边,如x=0b00010001,p=4,n=3转换后x=0b01100001 unsignedintvert(unsignedintx,intp,intn) { Unsignedint_t=0; Unsignedint_a=1; For(inti=0;I { _t|=_a; _a=_a<<; } _t=_t< X^=_t; Returnx; } 学号: 2009121008 姓名: 余晓虹 本题出自: 华为技术有限公司 题目: 求1000! 的未尾有几个0(用素数相乘的方法来做,如72=2*2*2*3*3); 答案: /******* *华为技术有限公司 *************/ /*当前版本: 1.0.0 *作者: 余晓虹 *完成日期: 2010-4-12 / #include #defineNUM1000 intfind5(intnum){ intret=0; while(num%5==0){ num/=5; ret++; } returnret; } intmain(){ intresult=0; inti; for(i=5;i<=NUM;i+=5) { result+=find5(i); } printf("thetotalzeronumberis%d\n",result); return0; } 学号: 2009121009 姓名: 曾旭东 本题出自: <华为> 题目: > 答案: <答: extern 可以用引用头文件的方式,也可以用extern关键字,如果用引用头文件方式来引用某个在头文件中声明的全局变理,假定你将那个变写错了,那么在编译期间会报错,如果你用extern方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报错。 > 学号: 2009121010 姓名: 郭濠瑜 本题出自: IBM 题目: Outputofthefollowingprogramis main() { inti=0; for(i=0;i<20;i++) { switch(i) { case0: i+=5; case1: i+=2; case5: i+=5; defaulti+=4; break; } printf("%d,",i); } } a)0,5,9,13,17 b)5,9,13,17 c)12,17,22 d)16,21 答案: d 学号: 2009121011 姓名: 吴英延 本题出自: <华为> 题目: <按照编码规范写题目> 试题: 编写类String的构造函数、析构函数和赋值函数,已知类String的原型为: classString { public: String(constchar*str=NULL);//普通构造函数 String(constString&other);//拷贝构造函数 ~String(void);//析构函数 String&operate=(constString&other);//赋值函数 private: char*m_data;//用于保存字符串 }; 答案: <有编码的答案按照编码规范写> 解答: //普通构造函数 String: : String(constchar*str) { if(str==NULL) { m_data=newchar[1];//得分点: 对空字符串自动申请存放结束标志'\0'的空 //加分点: 对m_data加NULL判断 *m_data='\0'; } else { intlength=strlen(str); m_data=newchar[length+1];//若能加NULL判断则更好 strcpy(m_data,str); } } //String的析构函数 String: : ~String(void) { delete[]m_data;//或deletem_data; } //拷贝构造函数 String: : String(constString&other) //得分点: 输入参数为const型 { intlength=strlen(other.m_data); m_data=newchar[length+1]; //加分点: 对m_data加NULL判断 strcpy(m_data,other.m_data); } //赋值函数 String&String: : operate=(constString&other)//得分点: 输入参数为const型 { if(this==&other) //得分点: 检查自赋值 return*this; delete[]m_data; //得分点: 释放原有的内存资源 intlength=strlen(other.m_data); m_data=newchar[length+1]; //加分点: 对m_data加NULL判断 strcpy(m_data,other.m_data); return*this; //得分点: 返回本对象的引用 } 学号: 2009121012 姓名: 吴昊天 出处: 未知 题目: 用变量a给出下面的定义 a)一个整型数(Aninteger) b)一个指向整型数的指针(Apointertoaninteger) c)一个指向指针的的指针,它指向的指针是指向一个整型数Apointertoapointertoaninteger d)一个有10个整型数的数组(Anarrayof10integers) e)一个有10个指针的数组,该指针是指向一个整型数的。 (Anarrayof10pointerstointegers) f)一个指向有10个整型数数组的指针(Apointertoanarrayof10integers) g)一个指向函数的指针,该函数有一个整型参数并返回一个整型数(Apointertoafunctionthattakesanintegerasanargumentandreturnsaninteger) h)一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数(Anarrayoftenpointerstofunctionsthattakeanintegerargumentandreturnaninteger) 答案: a)inta; b)int*a; c)int**a; d)inta[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)22 (b)21 (c)25 (d)以上均不是答案c 版权: 华为 学号: 2009121017 姓名: 张冬 本题出自: 华为 题目: 编写一个函数,要求输入年月日时分秒,输出该年月日时分秒的下一秒。 如输入2004年12月31日23时59分59秒,则输出2005年1月1日0时0分0秒。 答案: //*本文来自: IT知道网()详细出处参考: voidResetTheTime(int*year,int*month,int*date,int*hour,int*minute,int*second) { intdayOfMonth[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@) //算法说明: //设有一个(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] =
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C语言 华为 网络面试题汇总 语言 网络 试题 汇总