收藏 分销(赏)

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

上传人:丰**** 文档编号:3066172 上传时间:2024-06-14 格式:DOC 页数:43 大小:130KB 下载积分:12 金币
下载 相关 举报
C语言2010华为网络面试题汇总.doc_第1页
第1页 / 共43页
C语言2010华为网络面试题汇总.doc_第2页
第2页 / 共43页


点击查看更多>>
资源描述
学号: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<stdio.h> 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<<boolalpha<<((i&(i-1))?false:true)<<endl; 4 unsigned int intvert(unsigned int x ,int p, int n)实现对x的进行转换,p为起始转换为,n为需要转换的长度,假设起始点在右边,如x=0b0001 0001,p=4,n=3转换后x= 0b0110 0001 unsigned intvert(unsigned int x ,int p, int n ) { Unsigned int_t=0; Unsigned int_a=1; For(int i=0;I <n;++i) { _t|=_a; _a=_a<<; } _t=_t<<p; X ^=_t; Return x; } 学号:2009121008 姓名:余晓虹 本题出自:华为技术有限公司 题目:求1000!的未尾有几个0(用素数相乘的方法来做,如72=2*2*2*3*3); 答案: /******* *华为技术有限公司 *************/ /*当前版本:1.0.0 *作者:余晓虹 *完成日期:2010-4-12 / #include<stdio.h> #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 姓名:曾旭东 本题出自:<华为 > 题目:<s如何引用一个已经定义过的全局变量? > 答案:<答: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) 0,5,9,13,17 b) 5,9,13,17 c) 12,17,22 d) 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];     //加分点:对m_data加NULL 判断        strcpy(m_data, other.m_data);      } //赋值函数 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];  //加分点:对m_data加NULL 判断        strcpy( m_data, other.m_data );           return *this;            //得分点:返回本对象的引用 } 学号: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知道网() 详细出处参考: 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@)      //算法说明:      //设有一个(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<stdio.h> #include<conio.h> #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<stdio.h> 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; /* 本篇文章来自<A href=''>IDC专家网</a> 原文链接: * 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 constant COUNT => 200; use constant SPLIT => 0.01; use constant PI => 3.14159265; use constant INTERVAL => 300; use constant 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 + (s
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 通信科技 > 开发语言

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服