华为成都上机笔试题

合集下载

华为校园招聘软件研发上机测试题及部分解答+

华为校园招聘软件研发上机测试题及部分解答+

以下是收集到的两套题(没有添加答案),上机测试只有应聘软件研发的才会碰到。

有的写了点自己的解法,如果大家有好的想法欢迎讨论!大家一起学习嘛!以下是上机考试的一些注意事项:(1)考试时长为2个小时,总共有3个题(去年是2个题,难度要比今年大些),编译环境为VC 6.0(C语言)/ Eclipse(Java);(2)3个题目中大致第一个题是最简单的,第三个题是最难的;(3)从服务器上下载题目下来后最好能把工程保存到在电脑重启后不会自动还原的磁盘分区下面,这样不致由于各种意外因素电脑重启过后编的程序不会消失;(4)不要改动所给函数的原型,可以自己添加函数。

另外,华为提供的工程是将Main函数隐藏了的,所以自己不用再添加Main函数。

试题1:2011.9.6 转载自:/liuqiqi677/article/details/67554981、选秀节目打分,分为专家评委和大众评委,score[] 数组里面存储每个评委打的分数,judge_type[] 里存储与score[] 数组对应的评委类别,judge_type[i] == 1,表示专家评委,judge_type[i] == 2,表示大众评委,n表示评委总数。

打分规则如下:专家评委和大众评委的分数先分别取一个平均分(平均分取整),然后,总分= 专家评委平均分* 0.6 + 大众评委* 0.4,总分取整。

如果没有大众评委,则总分= 专家评委平均分,总分取整。

函数最终返回选手得分。

函数接口int cal_score(int score[], int judge_type[], int n)(这个问题很简单,应该只是涉及了下double/int转换)2、给定一个数组input[] ,如果数组长度n为奇数,则将数组中最大的元素放到output[] 数组最中间的位置,如果数组长度n为偶数,则将数组中最大的元素放到output[] 数组中间两个位置偏右的那个位置上,然后再按从大到小的顺序,依次在第一个位置的两边,按照一左一右的顺序,依次存放剩下的数。

华为校招历年机试题目

华为校招历年机试题目

华为历年笔试题目总结因最近要参加华为的招聘,便从网上搜集了一些华为笔试历年题目,现总结献给大家,因本人非软件出生,水平有限,仅供参考,若有误处,请海涵。

1、字符串问题∙问题描述:把一个字符串中的除大写字母、小写字母和数字字符之外的其他字符都去掉,输出新字符串。

∙要求实现函数:void my_string(char* input, char* output)【输入】char* input,输入的字符串【输出】char* output,输出的字符串【返回】无∙示例输入:inp ut = “A*(BC&De+_fg/*”输出:output = “ABCDefg”输入:input = “aB+_9”输出:output = “aB9”程序如下:void my_string(char* input, char* output){int i,j;i=j=0;while(*(input+i)!='\0'){if((*(input+i)>='A'&&*(input+i)<='Z')||(*(input+i)>='a'&&*(input+i)<='z')||(*(input+i)>='0'&&*(input+i)<='9')){*(output+j)=*(input+i);j++;}i++;}*(output+j+1)='\0';}题目描述:输入一个字符串,将其中大写字母转换为对应小写字母之后的第五个字母,若原始大写字母为V~Z, 则转换为对应小写字母的值减21。

其他字符不变,输出转换后的字符串。

例如,对于字母A,则转换为小写字母f;若形参是字母W,则转换为小写字母b要求实现函数:void TransferString(const char * pInputStr, long lInputLen, char * pOutputStr);【输入】pInputStr:输入字符串lInputLen:输入字符串长度【输出】pOutputStr:输出字符串,空间已经开辟好,与输入字符串等长;【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出示例输入:“Axs3mWss”输出:“fxs3mbss”void TransferString(const char * pInputStr, long lInputLen, char * pOutputStr){int i=0;for(i=0;i<lInputLen;i++){if(pInputStr[i]>='A'&&pInputStr[i]<'V')pOutputStr[i]=pInputStr[i]+'a'-'A'+5;else if(pInputStr[i]>='V'&&pInputStr[i]<='Z')pOutputStr[i]=pInputStr[i]+'a'-'A'-21;elsepOutputStr[i]=pInputStr[i];}}3. 单词统计题目描述:输入一段英文文本,用程序统计出现频率最高和最低的两个单词;英文文本中仅出现这四类字符:空格( )、英文逗号(,)、英文句号(.)、英文大小写字母(a-z、A-Z)单词之间的分隔符仅考虑这三种:空格( )、英文逗号(,)、英文句号(.);仅大小写不同的单词算同一个单词;如果两个单词出现次数相同,则在文本中首次出现的单词优先返回。

华为校园招聘上机笔试题

华为校园招聘上机笔试题

华为校园招聘上机笔试题华为校园招聘上机笔试题上机时间两小时,3道题1 字串转换问题描述:将输入的字符串(字符串仅包含小写字母‘a’到‘z’),按照如下规则,循环转换后输出:a->b,b->c,…,y->z,z->a;若输入的字符串连续出现两个字母相同时,后一个字母需要连续转换2次。

例如:aa 转换为 bc,zz 转换为 ab;当连续相同字母超过两个时,第三个出现的字母按第一次出现算。

要求实现函数:void convert(char *input,char* output)【输入】 char *input , 输入的字符串【输出】 char *output ,输出的`字符串【返回】无示例输入:char*input="abcd"输出:char*output="bcde"输入:char*input="abbbcd"输出:char*output="bcdcde"void convert(char *input,char *output){char c='\0';int tag=0;int len=strlen(input);for(int i=0;i{if(input[i]!=c)//当前字符与前一个字符不相等,则该字符+1{output[i]=(input[i]-'a'+1)%26+'a';c=input[i];tag=1;}else{if(tag==1)//当前字符与前一个字符相等,且前面只有一个字符相同{output[i]=(input[i]-'a'+2)%26+'a';c='\0';tag=0;}else//当前字符与前一个字符相等,且前面已有2n个字符相同。

则按第一次出现算{output[i]=(input[i]-'a'+1)%26+'a';c=output[i];tag=1;}}}}void convert(char *input,char *output){char c='\0';int tag=0;int len=strlen(input);for(int i=0;i{if(input[i]!=c)//当前字符与前一个字符不相等,则该字符+1{output[i]=(input[i]-'a'+1)%26+'a';c=input[i];tag=1;}else{if(tag==1)//当前字符与前一个字符相等,且前面只有一个字符相同{output[i]=(input[i]-'a'+2)%26+'a';c='\0';tag=0;}else//当前字符与前一个字符相等,且前面已有2n个字符相同。

华为笔试题(答案)

华为笔试题(答案)

华为笔试题(答案)笔试题选择题1、以下程序的输出结果是:#include <>int main(){int n=4;while(n--){printf("%d ",--n);}printf("\r\n");return0;}答案:2 02、设有以下宏定义:#define N 4#define Y(n) ((N+1)*n)则执行语句:Y(5+1)为:答案:263、enum ENUM_A{x1,y1,z1=5,a1,b1};enum ENUM_AenumA=y1;enum ENUM_AenumB=b1;请问enumA和enumB的值是多少答案:1,74、若有函数max(a,b),并且函数指针变量p已经指向函数,当调用该函数时正确的调用方法是:答案:(*p)(a,b)或者p(a,b)5、对栈S进行下列操作:push(1), push(5), pop(), push(2), pop(), pop(), 则此时栈顶元素是:答案:没有元素,栈空。

6、在一个32位的操作系统中,设void *p = malloc(100),请问sizeof(p)的结果是:答案:32位操作系统的寻址大小是32位,即4字节。

7、若已定义: int a[9], *p = a;并在以后的语句中未改变p的值,不能表示a[1]地址的表达式是:A)p+1 B)a+1 C) a++ D) ++p答案:C8、设有如下定义:unsignedlong pulArray[]={6,7,8,9,10};unsignedlong*pulPtr;则下列程序段的输出结果是什么pulPtr=pulArray;*(pulPtr+2)+=2;printf("%d, %d\r\n",*pulPtr,*(pulPtr+2));A) 8, 10 B) 6, 8 C) 7, 9 D) 6, 10答案:D9、以下程序运行后,输出结果是什么void main(){char*szStr="abcde";szStr+=2;printf("%1u\r\n",szStr);return;}A) cde B) 字符c的ASCII码值C) 字符c的地址D) 出错答案:C10、给出以下定义:char X[]="hello";char Y[]={'h','e','l','l','o'};则正确的叙述为:A)数组X和数组Y等价B) 数组X和数组Y的长度相同C) 数组X的长度大于数组Y的长度D) 数组X的长度小于数组Y的长度答案:C11、在32位X86下,有下列程序#include <>void main(){union{int k;char i[2];}*s,a;s=&as->i[0]=0x39;s->i[1]=0x38;printf("%x\r\n",;}输出结果是:A) 3839 B) 3938 C) 380039 D) 不可预知答案:A12、有如下函数定义:unsignedlong MyFunc(unsignedlong ulKey){return(((ulKey&0x000000ff UL)<<24) |((ulKey&0x0000ff00UL)<<8) |((ulKey&0x00ff0000UL)>>8) |((ulKey&0xff000000UL)>>24));}则MyFunc(0x)的返回值是:A) 0x B) 0x C) 0x D) 0x答案:C13、((a>b)a:b)代表什么含义:A) 代表a,b之中较小的那个值B) 代表a,b之中较大的那个值C) 代表a是否比b大D) 语法错误答案:B14、某系统总线的一个总线周期包含3个时钟周期,每个总线周期可以传送32位数据。

最全华为上机试题及部分答案

最全华为上机试题及部分答案

2011年华为软件校园招聘编程测验1、请上机编写程序,按题目要求提交文件。

[详见考试说明,点击进入考试说明]3、评卷通过在给定用例输入下,严格按照试题要求比较考生实现函数的输出与预设输出。

两者相同则得分,不同则不得分。

4、评卷人保证测试用例输入参数的合法性,考生不用考虑输入参数非法或异常的情况5、评卷人保证测试用例输入在被测函数正常合法情况下使用不会导致程序错误6、如果考生函数异常导致程序崩溃或死循环,则自动评卷可能会被人为终止,剩余用例不被执行,无法得分7、基于上述阅卷规则,请考生严格按照题目要求功能实现程序,尽量保证实现函数的稳健性,同时建议完成一道题并调试保证正确性后,再考虑并实现下一题目(17)1,判断电话号码是否合法://要注意情况包含,有可能会同时出现几种不好的情况,要按照顺序输出错误。

不能同时输出好几种错误,应该是这样包含:先判断长度是否符合,再判断是否以86打头,再判断有无其他字符int fun(char num[]){ char *p=num;int n=strlen(num);if(n==13){if(*p=='8'&&*(p+1)=='6')while(*p!='\0'){if(*p>='0'&&*p<='9')p++;elsereturn 2;if(*p=='\0')return 0;}else return 3;}elsereturn 1;}int main(){char num[]="87139a3887671";int k=fun(num);cout<<k<<endl;return 0;}(18) 数组比较(20分)•问题描述:比较两个数组,要求从数组最后一个元素开始逐个元素向前比较,如果2个数组长度不等,则只比较较短长度数组个数元素。

华为笔试题史上最齐全

华为笔试题史上最齐全

华为笔试题史上最齐全华为笔试题⼤全史上最齐全 华为笔试题(⼀) 1.static有什么⽤途?(请⾄少说明两种) 1)在函数体,⼀个被声明为静态的变量在这⼀函数被调⽤过程中维持其值不变。

2) 在模块内(但在函数体外),⼀个被声明为静态的变量可以被模块内所⽤函数访问,但不能被模块外其它函数访问。

它是⼀个本地的全局变量。

3) 在模块内,⼀个被声明为静态的函数只可被这⼀模块内的其它函数调⽤。

那就是,这个函数被限制在声明它的模块的本地范围内使⽤ 2.引⽤与指针有什么区别? 1) 引⽤必须被初始化,指针不必。

2) 引⽤初始化以后不能被改变,指针可以改变所指的对象。

3) 不存在指向空值的引⽤,但是存在指向空值的指针。

3.描述实时系统的基本特性在特定时间内完成特定的任务,实时性与可靠性。

4.全局变量和局部变量在内存中是否有区别?如果有,是什么区别? 全局变量储存在静态数据库,局部变量在堆栈。

5.什么是平衡⼆叉树? 左右⼦树都是平衡⼆叉树且左右⼦树的深度差值的绝对值不⼤于1。

6.堆栈溢出⼀般是由什么原因导致的? 没有回收垃圾资源。

7.什么函数不能声明为虚函数? constructor函数不能声明为虚函数。

8.冒泡排序算法的时间复杂度是什么? 时间复杂度是O(n^2)。

9.写出float x 与“零值”⽐较的if语句。

if(x>0.000001&&x<-0.000001) 10.Internet采⽤哪种⽹络协议?该协议的主要层次结构? Tcp/Ip协议 主要层次结构为:应⽤层/传输层/⽹络层/数据链路层/物理层。

11.Internet物理地址和IP地址转换采⽤什么协议? ARP (Address Resolution Protocol)(地址解析協議) 12.IP地址的编码分为哪俩部分? IP地址由两部分组成,⽹络号和主机号。

不过是要和“⼦⽹掩码”按位与上之后才能区分哪些是⽹络位哪些是主机位。

华为公司笔试试题(硬件)-冒死从考场抄出来的,绝对完整详细真实

华为公司笔试试题(硬件)-冒死从考场抄出来的,绝对完整详细真实

华为公司笔试试题(硬件)-冒死从考场抄出来的,绝对完整详细真实华为公司硬件研发类笔试试题一.填空题(共10题,共计20分)1、从通信系统的一般模型上看,通信系统中的编码有信源编码和_______两种方式。

2、为使三极管处于饱和工作状态,必须保证基极电流大于________3、可以将逻辑函数Y=AB+~AC优化成Y=________,从而消除由A 造成的竞争冒险。

4、用卡诺图将逻辑函数Y=ABC+ABD+A~CD+~C~D+A~BC 为________5、采用单片机进行点对多点的主从通信时,通过______来区分数据信息和地址信息。

6、MCS-8051单片机有_______个外部中断管脚。

7、将1k*8位的RAM扩展为2k*16位的RAM,需用________片1k*8位的RAM。

8、如果器件中的管脚为OC/OD门结构,在电路设计中应该对输出进行_______处理9、已知同步五进制计数器输入时钟频率为200kHz,则第一能触发器的输出等于____10、MCS-51访问外部数据存储器用______指令。

二.单选择题(共12题,共计24分)1、反向门X驱动反向门Y,当X输出为低电平时,反相门X()A、输出源电流B、吸收源电流C、输出灌电流D、吸收灌电流2、设某函数的表达式F=AB,若用4选1多路选择器(数据选择器)来设计,则数据端口D0D1D2D3的状态是()。

(设A为权值高位)A、0001B、1110C、0101D、10103、PCM30/32路系统中,1帧中含有的比特数为()A、256B、512C、160D、2404、电容器的等效电路图()A、电感+电阻串联模型B、电感+电阻并联模型C、电容+电感+电阻并联模型D、电容+电感+电阻串联模型5、下列功率放大器类型哪一类的晶体管工作半个周期?()A、甲类功率放大器B、乙类功率放大器C、甲乙类功率放大器D、丙类功率放大器6、下列各进制数中,数值最大的是()A、[1000011]2B、[53]16C、[64]10D、[01100011]8421BCD 7、8421码10010111表示的十进制数是()A、97B、151C、227D、988、当TTL非门的输入端对地接一个10k欧电阻时,门电路工作在()A、饱和区B、线性区C、转折区D、截止区9、锁相环回路中的滤波电路为()A、高通B、低通C、带通D、全通10、若两个输入变量A,B取值相同时,输出F=1,则其输出与输入的关系是()A、同或运算B、异或运算C、或运算D、与运算11.当MCS-51的时钟频率f=6M时,一个机器周期T=( ) 微秒。

华为入职考试题库及答案

华为入职考试题库及答案

华为入职考试题库及答案
1. 华为公司是全球领先的信息与通信技术(ICT)解决方案提供商,以下哪项不是华为的主要业务领域?
A. 电信网络
B. 云计算服务
C. 汽车制造
D. 企业网络
答案:C
2. 华为的核心价值观包括以下哪项?
A. 客户至上
B. 员工为本
C. 创新驱动
D. 利润优先
答案:A
3. 华为的企业文化强调的是?
A. 个人英雄主义
B. 团队合作
C. 竞争至上
D. 利润最大化
答案:B
4. 华为在全球范围内拥有多少个研发中心?
A. 10个
C. 30个
D. 40个
答案:D
5. 华为的智能手机品牌是?
A. 荣耀
B. 华为
C. 苹果
D. 三星
答案:B
6. 华为在5G技术方面的发展处于什么水平?
A. 行业领先
B. 行业跟随
C. 行业滞后
D. 尚未涉足
答案:A
7. 华为的全球员工总数超过多少人?
A. 10万
B. 20万
C. 30万
D. 40万
答案:C
8. 华为的创始人是谁?
B. 马云
C. 马化腾
D. 李彦宏
答案:A
9. 华为的总部位于哪个城市?
A. 北京
B. 上海
C. 深圳
D. 广州
答案:C
10. 华为在国际市场上的主要竞争对手包括以下哪些公司?
A. 爱立信
B. 诺基亚
C. 苹果
D. 所有以上选项
答案:D。

华为上机笔试题

华为上机笔试题

1.给定一个字符串,把字符串内的字母转换成该字母的下一个字母,a换成b,z换成a,Z换成A,如aBf转换成bCg,字符串内的其他字符不改变,给定函数,编写函数void Stringchang(const char*inpu,char*output)其中input是输入字符串,output是输出字符串#include<stdio.h>#include<assert.h>void Stringchang(const char*input,char*output){const char *p=input;/*if(input==NULL){printf("ERROR"); //用这种表示方式可否?return; //用return 好不好?} */assert(input!=NULL);while(*p!='\0'){if((*p>='a')&&(*p<='y')||(*p>='A')&&(*p<='Y') )*output=*p+1;else if(*p=='z'||*p=='Z')*output=*p+1-26;else*output=*p;output++;p++;}*output=0;}void main(){char a[11]={"abc"}; //如何模拟空指针的情况char b[11];Stringchang(a,b);printf("%s",b);}2.求一个整型数字中有没有相同的部分,例如12389756123这个整型数字中相同的部分是123,相同的部分至少应该是2位数,如果有相同部分返回1,如果没有则返回0。

函数为int same(int num)其中num是输入的整型数字#include<iostream>using namespace std;int same(int num) //整数值的范围:long int为-2(共10位)到正2开头共10位;unsigned //long int 为从0到4的共10位数{char a[11];int i=0,m=0,j=0;while(num){a[i]=num%10+'0';num=num/10;i++;j++;}i=0;int k=j;while(i<j){char temp=a[i];a[i]=a[j-1];a[j-1]=temp;i++;j--;}for(i=0;i<k-2;i++) //更标准{for(j=i+1;j<k-1;j++) //更妥当当为888时也判断的算是{if(a[i]==a[j]&&a[i+1]==a[j+1])return 1;}}return 0;}int main() //是不是用int 会好一点?{int a,b;cin>>a;b=same(a);cout<<b<<endl;return 0;}3.求两个字符串的乘积,结果存到字符串中,例如字符串一中存的“657891”,字符串二中存的“521”,分别将字符串中的字符转换成整型数字,进行计算后,再转换成字符类型存储起来.函数为void mul(char *input1,int n,char *input2, int m,char *output)其中input1和input2是输入,n是input1的长度,m是input2的长度。

华为上机笔试题

华为上机笔试题

华为上机笔试题(1)求两个整数的最⼩公倍数#include <iostream>using namespace std;int gcd(int a,int b);//⽤辗转相除法求最⼤公约数int main(){int a,b;cin>>a>>b;int res=a*b/gcd(a,b);cout<<res;}int gcd(int a,int b){return a%b==0?b:gcd(b,a%b);}基本思路就是先⽤辗转相除法求得两个数的最⼤公约数,然后两个数相乘除以最⼤公约数就得到了最⼩公倍数。

(2)不使⽤库函数求⼀个数的⽴⽅根主要有两种思路,⼀种是⽤⼆分法,可令左初值为1,右初值为num,不断⼆分找根;另⼀种是⽤⽜顿迭代法,直接⽤迭代公式求解。

⼆分法代码:#include <algorithm>#include <cmath>#include <stdio.h>using namespace std;int main(){double num; //待处理的数scanf("%f",&num);const double err=0.001; //允许的误差bool done=false;double start=1.0,end=num;double res;while(!done){double mid=(start+end)/2;if(abs(pow(mid,3)-num)<=err){res=mid;done=true;}else if(pow(mid,3)-num>err)end=mid;elsestart=mid;}printf("%.1f",res);return 0;}⽜顿迭代法代码:#include <algorithm>#include <cmath>#include <stdio.h>using namespace std;int main(){double num;scanf("%lf",&num);const double err=0.000001;bool done=false;double xn=1;while(!done){if(abs(pow(xn,3)-num)<=err)done=true;else{xn=2.0/3.0*xn+num/(3*xn*xn);}}printf("%.1f",xn);return 0;}⽜顿迭代公式x_{n+1}=x_n-\frac{f(x_n)}{f^*(x_n)},在本道题中相当于要求f(x)=x^3-num=0的解,所以只需要按照上述迭代公式进⾏求解就可以。

2023华为笔试真题及答案

2023华为笔试真题及答案

2023华为笔试真题及答案2023华为笔试真题及答案一1、华为公司的全称为()A、深圳市华为技术有限公司B、华为技术有限公司C、华为公司D、我司(答案:B,答A、C者酌情给分,答D者马上辞退,我司三令五申禁止使用该华为内部土语,屡禁不止,老员工不行教也,只好从新员工抓起,格杀勿论)2、华为公司的企业性质是()A、民营B、私营C、国营D、上市公司(答案:A,本题主要让考生了解公司的性质)3、华为公司的商标象征()A、红太阳B、菊花C、扇贝(答案:B,答A者酌情给分,答C者马上辞退,每天就想着吃)4、从下列选项中选择出公司的常务副总裁()A、任正非B、孙亚芳C、李一男D、郑宝用E、张燕燕(答案:BD,答C者马上辞退,让他到李一男的公司去报到吧)5、华为公司的年终奖一般是在每年的什么时候发()A、元旦后B、春节前C、7月下旬或8月上旬D、劳动节前E、国庆节前(答案:C,切记,由于是年中奖,而不是年终奖)6、华为公司的配给你的'股票是()A、**发的B、用自己的奖金去买(答案:B)7、老板常说的土八路,是指()A、老板自己的革命年月的光辉历史B、本地化的用服兄弟C、季度考核为D的兄弟(答案:B)2023华为笔试真题及答案二1. 找错void test1(){char string[10];char* str1=0123456789;strcpy(string, str1);}答:表面上并且编译都不会错误。

但假如string数组原意表示的是字符串的话,那这个赋值就没有达到意图。

最好定义为char string[11],这样最终一个元素可以存储字符串结尾符\0;void test2(){char string[10], str1[10];for(int I=0; I10;I++){str1[I] =a;}strcpy(string, str1);}答:strcpy使用错误,strcpy只有遇到字符串末尾的\0才会结束,而str1并没有结尾标志,导致strcpy函数越界访问,不妨让str1[9]=\0,这样就正常了。

华为笔试题(有答案)

华为笔试题(有答案)

华为笔试题(有答案)华为笔试题1.写出判断ABCD四个表达式的是否正确, 若正确, 写出经过表达式中 a的值(3分)int a = 4;(A)a += (a++); (B) a += (++a) ;(C) (a++) += a;(D) (++a) += (a++);a = ?答:C错误,左侧不是一个有效变量,不能赋值,可改为(++a) += a;改后答案依次为9,10,10,112.某32位系统下, C++程序,请计算sizeof 的值(5分).char str[] = “/”char *p = str ;int n = 10;请计算sizeof (str ) = ?(1)sizeof ( p ) = ?(2)sizeof ( n ) = ?(3)void Foo ( char str[100]){请计算sizeof( str ) = ?(4)}void *p = malloc( 100 );请计算sizeof ( p ) = ?(5)答:(1)17 (2)4 (3) 4 (4)4 (5)43. 回答下面的问题. (4分)(1).头文件中的 ifndef/define/endif 干什么用?预处理答:防止头文件被重复引用(2). #include <filename.h> 和 #include "filename.h" 有什么区别?答:前者用来包含开发环境提供的库头文件,后者用来包含自己编写的头文件。

(3).在C++ 程序中调用被C 编译器编译后的函数,为什么要加extern “C”声明?答:函数和变量被C++编译后在符号库中的名字与C语言的不同,被extern "C"修饰的变量和函数是按照C语言方式编译和连接的。

由于编译后的名字不同,C++程序不能直接调用C 函数。

C++提供了一个C 连接交换指定符号extern“C”来解决这个问题。

(4). switch()中不允许的数据类型是?答:实型4. 回答下面的问题(6分)(1).Void GetMemory(char **p, int num){*p = (char *)malloc(num);}void Test(void){char *str = NULL;GetMemory(&str, 100);strcpy(str, "hello");printf(str);}请问运行Test 函数会有什么样的结果?答:输出“hello”(2). void Test(void){char *str = (char *) malloc(100);strcpy(str, “hello”);free(str);if(str != NULL){strcpy(str, “world”);printf(str);}}请问运行Test 函数会有什么样的结果?答:输出“world”(3). char *GetMemory(void){char p[] = "hello world";return p;}void Test(void){char *str = NULL;str = GetMemory();printf(str);}请问运行Test 函数会有什么样的结果?答:无效的指针,输出不确定5. 编写strcat函数(6分)已知strcat函数的原型是char *strcat (char *strDest, const char *strSrc);其中strDest 是目的字符串,strSrc 是源字符串。

华为笔试题及答案

华为笔试题及答案

华为笔试题及答案一、选择题1. 下列哪种编程范式主要关注程序的计算过程和程序状态的变化?A. 面向对象编程B. 函数式编程C. 命令式编程D. 声明式编程答案:C解析:命令式编程是一种编程范式,主要关注程序的计算过程和程序状态的变化。

与之相对的是声明式编程,它更关注程序的结果而非过程。

2. 下列哪种排序算法的时间复杂度是O(nlog n)?A. 冒泡排序B. 快速排序C. 选择排序D. 插入排序答案:B解析:快速排序的平均时间复杂度为O(nlog n),而冒泡排序、选择排序和插入排序的时间复杂度都是O(n^2)。

二、填空题3. 在计算机科学中,二叉树中的节点个数n与边数e的关系为______。

答案:e = n - 1解析:在二叉树中,每个节点都有两个子节点(可能为空),因此节点数n与边数e之间的关系为e = n - 1。

4. 一个具有1024个节点的完全二叉树,其深度为______。

答案:10解析:完全二叉树的深度可以通过以下公式计算:深度 = log2(节点数) + 1。

对于1024个节点的完全二叉树,深度为log2(1024) + 1 = 10 + 1 = 11。

三、算法题5. 编写一个C++程序,实现一个函数,该函数接收一个整数数组和一个目标值,返回数组中和为目标值的两个数的索引。

答案:```cpp#include <iostream>#include <vector>#include <unordered_map>std::vector<int> twoSum(const std::vector<int>& nums, int target) {std::unordered_map<int, int> hash_map;for (int i = 0; i < nums.size(); ++i) {int complement = target - nums[i];if (hash_map.find(complement) !=hash_map.end()) {return {hash_map[complement], i};}hash_map[nums[i]] = i;}return {};}int main() {std::vector<int> nums = {2, 7, 11, 15};int target = 9;std::vector<int> result = twoSum(nums, target);std::cout << "Indices are: " << result[0] << " and " << result[1] << std::endl;return 0;}```解析:本题考查哈希表的应用。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2010年华为软件校园招聘编程测类别:软件C语言编程题(共2题,第一题40分,第二题60分,共100分。

请上机编写程序,按题目要求提交文件。

[详见考试说明]本试题采用自动测试用例进行评分,测试用例不对考生公开,凡不满足提交要求导致不能运行或用例不通过,不予评分)。

1. 删除字符串中所有给定的子串(40分)问题描述:在给定字符串中查找所有特定子串并删除,如果没有找到相应子串,则不作任何操作。

要求实现函数:int delete_sub_str(const char *str, const char *sub_str, char *result_str)【输入】str:输入的被操作字符串sub_str:需要查找并删除的特定子字符串【输出】result_str:在str字符串中删除所有sub_str子字符串后的结果【返回】删除的子字符串的个数注:I、子串匹配只考虑最左匹配情况,即只需要从左到右进行字串匹配的情况。

比如:在字符串"abababab"中,采用最左匹配子串"aba",可以匹配2个"aba"字串。

如果匹配出从左到右位置2开始的"aba",则不是最左匹配,且只能匹配出1个"aba"字串。

II、输入字符串不会超过100 Bytes,请不用考虑超长字符串的情况。

示例输入:str = "abcde123abcd123"sub_str = "123"输出:result_str = "abcdeabcd"返回:2输入:str = "abcde123abcd123"sub_str = "1234"输出:result_str = "abcde123abcd123"返回:02. 高精度整数加法(60分)问题描述:在计算机中,由于处理器位宽限制,只能处理有限精度的十进制整数加减法,比如在32位宽处理器计算机中,参与运算的操作数和结果必须在-231~231-1之间。

如果需要进行更大范围的十进制整数加法,需要使用特殊的方式实现,比如使用字符串保存操作数和结果,采取逐位运算的方式。

如下:9876543210 + 1234567890 = ?让字符串num1="9876543210",字符串num2="1234567890",结果保存在字符串result = "11111111100"。

-9876543210 + (-1234567890) = ?让字符串num1="-9876543210",字符串num2="-1234567890",结果保存在字符串result = "-11111111100"。

要求编程实现上述高精度的十进制加法。

要求实现函数:void add (const char *num1, const char *num2, char *result)【输入】num1:字符串形式操作数1,如果操作数为负,则num1[0]为符号位'-'num2:字符串形式操作数2,如果操作数为负,则num2[0]为符号位'-'【输出】result:保存加法计算结果字符串,如果结果为负,则result[0]为符号位。

注:I、当输入为正数时,'+'不会出现在输入字符串中;当输入为负数时,'-'会出现在输入字符串中,且一定在输入字符串最左边位置;II、输入字符串所有位均代表有效数字,即不存在由'0'开始的输入字符串,比如"0012", "-0012"不会出现;III、要求输出字符串所有位均为有效数字,结果为正或0时'+'不出现在输出字符串,结果为负时输出字符串最左边位置为'-'。

示例输入:num1 = "580"num2 = "-50"输出:result = "530"输入:num1 = "580"num2 = "-600"输出:result = "-20"华为实习上机题input.txt文件中包含若干英语单词(由小写字母组成),读取全部单词,并将其按字典序输出到output.txt文件中.重复的单词只允许输出一次.单词最大长度不超过63个字符.1,程序编译后生成的可执行文件名称test.exe,命令行执行方式是test.exe input-file-name output-file-name,命令行的解析由程序框架处理,大家不要修改。

2,文件的读写由框架程序提供封装好的函数read_nextword()和write_word(),大家不需要去考虑读写文件的具体细节。

注意仔细阅读在numlib.h里面两个函数的注释,3,内存的申请、释放请使用封装好的函数pmalloc()和pfree(),大家不要直接使用系统的malloc()、free()和calloc()等,否则可能被判0分。

注意仔细阅读在numlib.h里面两个函数的注释。

4,当你发现处理中出现任何异常或者错误时,请调用log_record()记录日志,参数是你自己定的一个字符串。

但是大家千万不要调用exit()之类的函数直接结束程序运行,否则可能判0分。

5,main()函数已经编写完整,大家不用再修改。

大家要做的就是实现data_process()函数。

当然,你可以根据需要定制自己的数据结构、宏、其他处理函数等等。

l框架程序include "numlib.h"/* 此函数由考试者填写,参数是输入、输出文件的指针* 1、考试者不必处理文件指针的关闭,由主程序处理。

* 2、考试者不要直接调用exit()等退出程序* 3、读文件请使用read_nextword(),写文件请使用write_word(),注意返回值* 4、申请内存请调用pmalloc(),释放内存请调用pfree(),不要自己直接调用malloc/free* 5、当遇到任何异常时,请先调用log_record()记录异常,再作其他处理,不许调用EXIT()*//* 考试者可以自行定义数据结构、变量和函数等,并实现以下data_process函数即可*/typedef struct Node{char a[64];struct Node *next;}Node;void data_process(FILE *fpInput, FILE *fpOutput){char word[64];Node *head=NULL;Node *q=head;Node *t=NULL;Node *p;int i=0;while(SUCCESS_E==read_nextword(fpInput,word)) {if(head==NULL){p=(Node*)pmalloc(sizeof(Node));strcpy(p->a,word);p->next=NULL;head=p;}else{//printf("ddddd%d",strcmp(q->a,p->a));t=head;while(t&& (strcmp(t->a,word) <0 )){q=t;t=t->next;// printf("qa=%s,pa=%s",q->a,p->a);}if(t&&strcmp(t->a,word)==0)continue;p=(Node*)pmalloc(sizeof(Node));strcpy(p->a,word);p->next=NULL;if(t==head){p->next=t;head=p;}else{q->next=p;p->next=t;}}}q=head;while(q!=NULL){printf("node %s\n",q->a);write_word(fpOutput,q->a);p=q;q=q->next;pfree(p);}return;}/********************************************************************************************//* 读写文件的处理由主程序框架进行,考试人员只需要填写和实现data_process() 函数即可,不要修改以下程序文件,修改了可能得0分*/void main(int argc, char *argv[]){FILE *fpInput = NULL; /* 输入文件指针*/FILE *fpOutput = NULL; /* 输出文件指针*//* 命令行格式:test input.txt output.txt */if (argc < 3){printf("Error: too few parameters\r\n");printf("Usage: %s input-filename output-filename\r\n", argv[0]);return;}/* 打开输入文件读*/fpInput = fopen(argv[1], "r");if (NULL == fpInput){printf("Error: input file %s do not exist\r\n", argv[1]);return;}/* 打开输出文件写,没有则创建*/fpOutput = fopen(argv[2], "w+");if (NULL == fpOutput){fclose(fpInput);printf("Error: failed to open/create output file %s\r\n", argv[2]);return;}/* 调用前初始化处理*/if (-1 == Initialize()){fclose(fpInput);fclose(fpOutput);printf("Error: failed to initialize program\r\n");return;}/* 调用考试者写的函数,考试者不需要关闭文件指针,由主程序处理*/data_process(fpInput, fpOutput);/* 调用后的结束处理*/finished();fclose(fpInput);fclose(fpOutput);return;}参考答案:第一题(C):删除子串,只要是原串中有相同的子串就删掉,不管有多少个,返回子串个数。

相关文档
最新文档