您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 招聘面试 > 华为C语言机试题面试题汇总
1.第一题的题目大概是输入整型数组求数组的最小数和最大数之和,例如输入1,2,3,4则输出为5,当输入只有一个数的时候,则最小数和最大数都是该数,例如只输入1,则输出为2;另外数组的长度不超过50#includestdio.hmain(){intnum[50]={0};inti,n;printf(请输入整型数组的长度(1~50):);scanf(%d,&n);printf(请输入整型数组的元素:);for(i=0;in;i++){scanf(%d,&num[i]);}intmin_num=num[0];intmax_num=num[0];for(intj=0;jn;j++){if(max_numnum[j])max_num=num[j];elseif(min_numnum[j])min_num=num[j];}intsum=min_num+max_num;printf(数组中最大与最小值之和:%d\n,sum);return0;}2.求两个长长整型的数据的和并输出,例如输入1233333333333333。。。3111111111111111111111111.。。。,则输出。。。。#includestdio.h#includestring.h#includemalloc.hmain(){char*num1,*num2;//两个长长整型数据char*sum;//inttemp;intlen_num1,len_num2;//两个长长整型数据的长度intlen_max,len_min;num1=(char*)malloc(sizeof(char));num2=(char*)malloc(sizeof(char));printf(输入两个长长整型数据:);scanf(%s,num1);printf(输入两个长长整型数据:);scanf(%s,num2);len_num1=strlen(num1);len_num2=strlen(num2);len_max=(len_num1=len_num2)?len_num1:len_num2;len_min=(len_num1=len_num2)?len_num1:len_num2;intlen_max1=len_max;sum=(char*)malloc(sizeof(char)*len_max);memset(sum,0x00,len_max+1);//切忌初始化for(;len_num10&&len_num20;len_num1--,len_num2--){sum[len_max--]=((num1[len_num1-1]-'0')+(num2[len_num2-1]-'0'));}if(len_num10){sum[len_max--]=num1[len_num1-1]-'0';len_num1--;}if(len_num20){sum[len_max--]=num1[len_num2-1]-'0';len_num2--;}for(intj=len_max1;j=0;j--)//实现进位操作{//temp=sum[j]-'0';if(sum[j]=10){sum[j-1]+=sum[j]/10;sum[j]%=10;}}char*outsum=(char*)malloc(sizeof(char)*len_max1);j=0;while(sum[j]==0)//跳出头部0元素j++;for(intm=0;mlen_max1;j++,m++)outsum[m]=sum[j]+'0';outsum[m]='\0';printf(输出两长长整型数据之和:%s\n,outsum);return0;}3.通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉。比如字符串“abacacde”过滤结果为“abcde”。要求实现函数:voidstringFilter(constchar*pInputStr,longlInputLen,char*pOutputStr);【输入】pInputStr:输入字符串lInputLen:输入字符串长度【输出】pOutputStr:输出字符串,空间已经开辟好,与输入字符串等长;#includestdio.h#includestring.h#includemalloc.hvoidstringFilter(constchar*p_str,longlen,char*p_outstr){intarray[256]={0};constchar*tmp=p_str;for(intj=0;jlen;j++){if(array[tmp[j]]==0)*p_outstr++=tmp[j];array[tmp[j]]++;}*p_outstr='\0';}voidmain(){char*str=cccddecc;intlen=strlen(str);char*outstr=(char*)malloc(len*sizeof(char));stringFilter(str,len,outstr);printf(%s\n,outstr);free(outstr);outstr=NULL;}4.通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。压缩规则:1.仅压缩连续重复出现的字符。比如字符串abcbc由于无连续重复字符,压缩后的字符串还是abcbc.2.压缩字段的格式为字符重复的次数+字符。例如:字符串xxxyyyyyyz压缩后就成为3x6yz要求实现函数:voidstringZip(constchar*pInputStr,longlInputLen,char*pOutputStr);【输入】pInputStr:输入字符串lInputLen:输入字符串长度【输出】pOutputStr:输出字符串,空间已经开辟好,与输入字符串等长;#includestdio.h#includestring.h#includemalloc.hvoidstringZip(constchar*p_str,longlen,char*p_outstr){intcount=1;for(inti=0;ilen;i++){if(p_str[i]==p_str[i+1]){count++;}else{if(count1){*p_outstr++=count+'0';*p_outstr++=p_str[i];}else{*p_outstr++=p_str[i];}count=1;//注意其位置}}*p_outstr='\0';}voidmain(){char*str=cccddecc;printf(压缩之前的字符串为:%s\n,str);intlen=strlen(str);char*outstr=(char*)malloc(len*sizeof(char));stringZip(str,len,outstr);printf(压缩之后的字符串为:%s\n,outstr);free(outstr);outstr=NULL;}5.通过键盘输入100以内正整数的加、减运算式,请编写一个程序输出运算结果字符串。输入字符串的格式为:“操作数1运算符操作数2”,“操作数”与“运算符”之间以一个空格隔开。补充说明:1.操作数为正整数,不需要考虑计算结果溢出的情况。2.若输入算式格式错误,输出结果为“0”。要求实现函数:voidarithmetic(constchar*pInputStr,longlInputLen,char*pOutputStr);【输入】pInputStr:输入字符串lInputLen:输入字符串长度【输出】pOutputStr:输出字符串,空间已经开辟好,与输入字符串等长;#includestdio.h#includestring.h#includestdlib.hvoidarithmetic(constchar*input,longlen,char*output){chars1[10];chars2[10];chars3[10];intcnt=0;intlen_input=strlen(input);for(inti=0;ilen_input;++i){if(input[i]=='')cnt++;}if(cnt!=2){*output++='0';*output='\0';return;}sscanf(input,%s%s%s,s1,s2,s3);if(strlen(s2)!=1||(s2[0]!='+'&&s2[0]!='-')){*output++='0';*output='\0';return;}intlen_s1=strlen(s1);for(i=0;ilen_s1;i++){if(s1[i]'0'||s1[i]'9'){*output++='0';*output='\0';return;}}intlen_s3=strlen(s3);for(i=0;ilen_s3;i++){if(s3[i]'0'||s3[i]'9'){*output++='0';*output='\0';return;}}intx=atoi(s1);inty=atoi(s3);if(s2[0]=='+'){intresult=x+y;itoa(result,output,10);}elseif(s2[0]=='-'){intresult=x-y;itoa(result,output,10);}else{*output++='0';*output='\0';return;}}voidmain(){charstr[]={10-23};charoutstr[10];intlen=strlen(str);arithmetic(str,len,outstr);printf(%s\n,str);printf(%s\n,outstr);}6.一组人(n个),围成一圈,从某人开始数到第三个的人出列,再接着从下一个人开始数,最终输出最终出列的人(约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。)#includestdio.h#includestring.h#includestdlib.h#includemalloc.htypedefstructNode{intdata;structNode*next;}LinkList;LinkList*create(intn){LinkList*p,*q,*head;inti=1;p=(LinkList*)malloc(sizeof(LinkList));p-data=i;head=p;for(i=1;i=n;i++){q=(LinkList*)malloc(sizeof(LinkList));q-data=i+1;p-next=q;p=q;}p-next=head;//使链表尾连接链表头,形成循环链表returnhead;free(p);p=NULL;free(q);q=NULL;}voiddeletefun(LinkList*L,intm){LinkList*p,*q,*temp;inti;p=L;while(p-next!=p){for(i=1;im;i++){q=p;p=p-next;}printf(%5d,p-data);temp=p;q-next=p-next;p=p-next;free(temp);}printf(%5d\n,p-data);}intmain(){intn=7,m=3;LinkList*head1;head1
本文标题:华为C语言机试题面试题汇总
链接地址:https://www.777doc.com/doc-4530853 .html