c语言字符串机考题,华为C语言机试题面试题汇总

《华为C语言机试题面试题汇总》由会员分享,可在线阅读,更多相关《华为C语言机试题面试题汇总(37页珍藏版)》请在人人文库网上搜索。

1、1 第一题的题目大概是输入整型数组求数组的最小数和最大数之和,例如输入1,2,3,4则输出为5,当输入只有一个 数的时候,则最小数和最大数都是该数,例如只输入1,则输出为2 ;另外数组的长度不超过50 #include main()int num50=0;int i,n;printfC*请输入整型数组的长度(150): “);scanf(M%dH,&n);printff-请输入整型数组的元素:”);for (i=0;ivn;i+)scanf(H%dH,&numi);)int min_num=num0;int max_num=num0;for(in t j=0;jvn;j+)if(max _nu。

2、mvnu mj) max_num=numj;else if(min_numnumj) min_nu m=n)int sum=min_num+max_num;printff数组中最大与最小值之和:%dn;sum);return 0;2 求两个长长整型的数据的和并输出,例如输入12333333333333333111111111111111111111111.则输出。o O#in clude #in clude#in cludemain()(char *num1 ,*num2;/两个长长整型数据char *sum;/ int temp;int Ien_num1 ,len_num2; /两个长长整型。

3、数据的长度int len_max,len_min; num1=(char*)malloc(sizeof(char); num2=(char*)malloc(sizeof(char); printff 输入两个长长整型数据:);scanf(H%sH,num1);printfC输入两个长长整型数据:M); scanfCl%s,num2);Ien_num1 =strle n(num1);len_num2=strlen(num2); len_max=(len_num1 =len_num2)? Ien_num1 :len_num2; len_min=(len_num 1 v=len_num2)?Ien_。

4、nu m1:le n_nu m2;int len_max1=len_max; sum=(char*)malloc(sizeof(char)*len_max); memset(sum,OxOOJen_max+1); 切忌初始彳匕for(;len_num1 0&len_num20;len_num1-,len_num2) if(len_num10)0)=O;j-) / 实现进位操作/temp=sumj-O; if(sumj=10)(sumj-1+=sumj/10;sumj%=10;char *outsum=(char*)malloc(sizeof(char)*len_max1); j=0;while。

5、(sumO=0)/跳出头部0元素j+;for(int m=0;m#in clude#in cludevoid stringFilter(const char *p_str, Iong len, char *p_outstr)(int array256=0;const char *tmp = p_str;for(in t j=O;j#in clude#in cludevoid stringZip(const char *p_str, Iong len, char *p_outstr) 1)*p_outstr+ = count +0: *p_outstr+ =p_stri;J else:*p_ou。

6、tstr+ =p_stri;J count = 1;/注意其位置*p_outstr = W;)void main()char *str = ”cccddecc; printf(M 压缩之前的字符串为:%sn”,str);int len = strlen(str);char * outstr = (char*)malloc(len*sizeof(char); stringZip(str,len,outstr);printfC 压缩之后的字符串为:%snH,outstr); free(outstr);outstr = NULL;5通过键盘输入100以内正整数的加、减运算式,请编写一个程序输出运算结。

7、果字符串。输入字符串的格式为:“操作数1运算符操作数2”,“操作数”与“运算 符”之间以一个空格隔开。补充说明:1 操作数为正整数,不需要考虑计算结果溢出的情况。2. 若输入算式格式错误,输出结果为“ 0”。要求实现函数:void arithmetic(const char *plnputStr, long IlnputLen, char *pOutputStr);【输入】plnputStr :输入字符串HnputLen :输入字符串长度【输出】pOutputStr :输出字符串,空间已经开辟好,与输入字符串等长;include #include#in cludevoid arithmetic。

8、onst char *input, long len, char *output)char s110;char s210;char s310;int ent = 0;int len_input=strlen(input);for(int i=0;i9)(*output+ = 0: *output =return;int len_s3=strlen(s3); for(i=0;i9)*output+ = 0: *output = W; return;int x = atoi(s1);int y = atoi(s3);if(s20=l+l)int result = x+y; itoa(result,。

9、output,10);else if(s20=,-f)(int result = x-y; itoa(result,output,10);else*output+ = O; *output =、0: return;void main()char str = H10-23H;char outstr10;int len = strlen(str);arithmetic(strje n,outstr);printf(H%snM,str); printf(M%snH,outstr);6.组人(n个),围成一圈,从某人开始数到第三个的人出列,再接着从下一个人开始数,最终输出最终出列的人 (约瑟夫环是一个。

10、数学的应用问题:已知n个人(以编号1,2,3.n分别表示)围坐在一张圆桌周围。从编号为k的 人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去, 直到圆桌周围的人全部出列。)include #include #include #include typedef struct Nodeint data;struct Node Fext;JLinkList;LinkList *create(int n)LinkList *p,*q,*head;int i=1;p=(LinkList*)malloc(sizeof(LinkList);p-data=i;h。

11、ead=p;for(i=1;idata=i+1;pn ext=q;p=q;p-next=head; /使链表尾连接链表头,形成循环链表return head;free(p);p=NULL;free(q);q=NULL; void deletefun(LinkList *L,int m)LinkList *p,*q,*temp;int i;P=L; while(p- next!=p)q=p;p=p-n ext;printf(%5dp-data);temp=p;qn ext=p-n ext;p=p-next; free(temp);printf(n%5dn,p-data); int main()i。

12、nt n=7,m=3;LinkList *head1;head1=create( n);deletef un (head1,m);return 0;7.输入一串字符,只包含“ 0-10 M和“,”找出其中最小的数字和最大的数字(可能不止一个),输出最后剩余数字 个数。女口输入“ 3,3,4,567,7 ”#in clude# include#in cludevoid main()char str100;printfC*输入一组字符串:n);scanf(”s”,&str);int len=strlen(str);int array100;int count=0;for(int i=0;i=0,&。

13、striarrayj)min=array j;for(int k=0;k# include#define N 5 int main()int Heig叫N;int dmin;intH1,H2;int i,j,temp;printff请输入一组身高在 170 到 190 之间的数据(共 5 个):n); for(int k=0;kvN;k+) scanf(”d”,&Heig叫k);printf(HnH);for(i=0;iHeightj;j+) temp=Heightj-1; Heightj-1=Heightj; Heightj=temp;H1=Height0;H2=Height1;dmin=H。

14、2-H1;for(int m=2;m9. 删除子串,只要是原串中有相同的子串就删掉,不管有多少个,返回子串个数。include #inelude #inelude int delete_sub_str(const char *str,const char *sub_str,char *result)(assert(str != NULL & sub_str != NULL);const char *p,*q;char *t,*temp;P = str;q = sub_str;t = result;int recount = 0;n = strlen(q);temp = (char *)mall。

15、oc(n+1); memset(temp,0x0 0,n+1); while(*p)memcpy(temp,p,n);if(strcmp(temp,q) = 0)coun t+;memset(temp,0x00,n+1); p = p + n;)else*t = *p;P+;t+;memset(temp,0x00,n+1);free(temp); return count;)void main()chars100 = 、0 *;int num = delete_sub_str( 123abc12de234fg1 hi34j123k M,” 123 M ,s);printf( 44 The nu。

16、mber of sub_str is %drn ,num);printf( “ The result string is %srn ,s);10. 要求编程实现上述高精度的十进制加法。要求实现函数:void add (const char 和num1, const char 撷num2, char *result)【输入】num1 :字符串形式操作数1,如果操作数为负,则num10为符号位num2 :字符串形式操作数2,如果操作数为负,则num20为符号位【输出】result :保存加法计算结果字符串,如果结果为负,则result0为符号位。#in clude# include#include。

17、void move(char *str, int length)/ 移除字母前的符号if(strO != -)return;int i;for(i = 0; i 0; i-)从最后开始移除0,直到遇到非0数字/只对最初位置上0不予判断if(resulti = O)resulti = *0:coun t+;elsereturn length-count;)return length - count;void reverse(char *result, int length)将字符串倒转char temp;for(int i = 0; i = 0 & j = 0; i-, j-)n1 = str1。

18、 in2 = str2jO;curSum = n1 + n2 + another; resultcur_rs+ = curSum % 10 + O; another = curSum /10;if(j = 0)/遍历str1剩余各位n1 = str1 i-curSum = n1 + ano ther;resultcur_rs+ = curSum % 10 + O; another = curSum /10;if(another != 0)/ 如果还有进位未加上 resultcur_rs+ = another + O;else while(j = 0)n2 = str20- O;curSum =。

19、 n2 + ano ther;resultcur_rs+ = curSum % 10 + 0*; another = curSum /10;if(another != 0)resultcur_rs+ = ano ther + 0:resultcur_rs = 0:cur_rs = remove_zero(result, cur_rs); if(!flag) resultcur_rs+ = ,J; resultcur_rs = *0;J reverse(result, strlen(result); return cur_rs;/使用str1减去str2int real_minus(char *。

20、str1, char *str2, char *result)(char big100, small100;int bigjen, smljen;int Ien1 = strlen(strl);int Ien2 = strlen(str2);bool flag = false; / 用于标记 str2 是否比 str1 大if(len1 =0 & j=0; i,j-)n1 = str1 i -O1;n2 = str2j - O;if(n1 = n2+another)resultcur_rs+ = (n1-n2-another) +O; another = 0;elseresultcur_rs+。

21、 = (n1+10-n2-another) + 0:ano ther = 1;while(i = 0)n1 =str1H-,0l;if(another != 0)rd =another;ano ther = 0;resultcur_rs+ = n1 + O;)resultcur_rs =cur_rs = remove_zero(result, cur_rs);if(flag)resultcur_rs+ =,J; resultcur_rs = W;)reverse(result, cur_rs);return cur_rs;void addi(const charconst char num2,。

22、 char *result)int Ien1 = strlen(numl);int Ien2 = strlen(num2);int rsjen;if(!len1 | !len2)return;char str1100, str2100;strncpy(str1, numl, len1);str1len1 = 0;strncpy(str2, num2, len2);str2len2 = *0;if(str1 0 =& str20 =move(str1, Ien1);move(str2, Ien2);rsjen = real_add(str1, str2, result, false);else 。

23、it(str1 0 = -)move(str1, Ien1);rsjen = real_minus(str2, str1, result);)else if(str20=move(str2, Ien2);rsjen = real_minus(str1, str2, result);elsersjen = real_add(str1, str2, result, true);/int main(int argc, char *argv)int main()char num1 100,num2100;printff请输入两个整型数据:n“);scanf(,%s%s,num1 ,num2);char。

24、 result100; memset(result, 0, 100); addi(num1,num2, result); printf(H%snH, result); return 0;11. 描述:10个学生考完期末考试评卷完成后,A老师需要划出及格线,要求如下:(1) 及格线是10的倍数;(2) 保证至少有60%的学生及格;(3) 如果所有的学生都高于60分,则及格线为60分输入:输入10个整数,取值0-100输出:输出及格线,10的倍数#includevoid bubblesort(int arr)int i,j,temp;for(i=0;iarrO+1;j+)(temp=arrj; a。

25、rrj=arrj+1;arrj+1=temp;int GetPassLine(int a)bubblesort(a); if(a0=60)return 60;elsereturn (int)a4/10)*10);main()(int a10=0;int result;printff*请随机输入10个成绩(0-100) : n);scanf(H%d%d%d%d%d%d%d%d%d%d&a0,&a1,&a2,&a3,&a4,&a5,&a6,&a7,&a8,&a9);printf(Hnn);result=GetPassLi ne(a);printf(H 及格线为:%dnresult); return。

26、 1;12.描述:一条长廊里依次装有n(1 S n S 65535)盏电灯,从头到尾编号1、2、3、n-1、n。每盏电灯由一个拉线 开矢控制。开始,电灯全部矢着。有n个学生从长廊穿过。第一个学生把号码凡是1的倍数的电灯的开矢拉一下;接着第二个学生把号码凡是2的倍 数的电灯的开矢拉一下;接着第三个学生把号码凡是3的倍数的电灯的开尖拉一下;如此继续下去,最后第n彳、学 生把号码凡是n的倍数的电灯的开矢拉一下。n个学生按此规定走完后,长廊里电灯有几盏亮着。注:电灯数和学 生数一致。输入:电灯的数量输出:亮着的电灯数量样例输入:3样例输出:1#in clude#define Max_Bubl_Num 。

27、65535int GetLightLampNum(int n)int BublNumMax_Bubl_Num=O; /O 表示灯灭,1 表示灯亮unsigned int ij;unsigned int count=0;for(i=1;i72表示。编写程序,任意输入两个站点名称,输出乘坐地铁最少需要经过的车站数量(含输入的起点和终点,换乘站点只计算一次)。地铁线 A (环线)经过车站:A1 A2 A3 A4 A5 A6 A7 A8 A9 T1 A10 A11 A12 A13T2 A14 A15 A16 A17 A18地铁线 B(直线)经过车站:B1 B2 B3 B4 B5 T1 B6 B7 B8。

28、 B9 B10T2 B11 B12 B13B14B15输入:输入两个不同的站名输出:输出最少经过的站数,含输入的起点和终点,换乘站点只计 算一次输入样例:A1 A3输出样例:3#include#include#in clude#includeusing namespace std;#define MAX 35#define SUBWAY_A 20#define SUBWAY_B 15 typedef struct node int adj vex;struct node *next;edgenode;typedef structchar name10; bool flag;edge node 。

29、Jink;vexnode;const charsubway_name1 SUBWAY_A10=A1 ”,”A2”,”A3,”A4”,”A5,”A6“,A7”,”A8,”A9,”T1 ”,A10,wA11 ,”A127AI 3,“T2”,”A14;A1 5“,”A16”,A17”,”A18”;const charsubway_name2SUBWAY_B10=B1 ”,B2,”B3,B4”,B5”,“B6”,”B7,”B8,B9”,”B10”,”B11 H;B14”, B15;void creat(vexnode gaQ)int i;edgenode *p;for(i=0;iadjvex=i-1;。

30、 p-next=NULL;gaii nk=p; p=(edge no de*)malloc(sizeof(edge no de); p-adjvex=i+1;p-next=NULL;gai.li nkonext=p;if(i=9)p=(edgenode*)malloc(sizeof(edgenode); p-adjvex=SUBWAY_A+4; p-next=NULL;gai.li nknextn ext=p; p=(edgenode*)malloc(sizeof(edge no de); p-adjvex=SUBWAY_A+5; pnext=NULL; gai.liext-next-next。

31、=p;)else if(i=14)p=(edgenode*)malloc(sizeof(edgenode); p-adjvex=SUBWAY_A+9;p-next=NULL;gai.link-next-next=p; p=(edgenode*)malloc(sizeof(edgenode); p-adjvex=SUBWAY_A+10; ponext=NULL; gai.linknext-next-next=p;)p=(edgenode*)malloc(sizeof(edgenode); p-adjvex=SUBWAY_A-1;p-next=NULL;ga0.link=p;p=(edgenode。

32、*)malloc(sizeof(edgenode); p-adjvex=1;p-next=NULL;gaO.link-next=p;p=(edge no de*)malloc(sizeof(edge no de);p-adjvex=SUBWAY_A-2;p-next=NULL;gaSUBWAY_A-1 .link=p; p=(edgenode*)malloc(sizeof(edgenode); p-adjvex=0;p-next=NULL;gaSUBWAY_A-1 .link-next=p;/B 地铁建邻接表 for(i=1 ;iadjvex=SUBWAY_A+i-1; p-next=NULL。

33、;gai+SUBWAY_A.link=p; p=(edgenode*)malloc(sizeof(edgenode); p-adjvex=SUBWAY_A+i+1; p-next=NULL; gai+SUBWAY_A.link-next=p;p=(edge no de*)malloc(sizeof(edge node);p-adjvex=SUBWAY_A+3;p-next=NULL;gaSUBWAY_A+4.link=p; p=(edgenode*)malloc(sizeof(edgenode); p-adjvex=9;p-next=NULL;gaSUBWAY_A+4.link-next=p;。

34、p=(edge no de*)malloc(sizeof(edge node);p-adjvex=9;p-next=NULL;gaSUBWAY_A+5.link=p; p=(edgenode*)malloc(sizeof(edgenode); p-adjvex=SUBWAY_A+6;p-next=NULL;gaSUBWAY_A+5.link-next=p;p=(edge no de*)malloc(sizeof(edge node);p-adjvex=SUBWAY_A+8;p-next=NULL;gaSUBWAY_A+9.link=p;p=(edgenode*)malloc(sizeof(ed。

35、genode); p-adjvex=14;p-next=NULL;gaSUBWAY_A+9.link-next=p;p=(edgenode*)malloc(sizeof(edgenode); p-adjvex=14;p-next=NULL;gaSUBWAY_A+10.link=p; p=(edgenode*)malloc(sizeof(edgenode); p-adjvex=SUBWAY_A+11;p-next=NULL;gaSUBWAY_A+10.link-next=p;p=(edge no de*)malloc(sizeof(edge node);p-adjvex=SUBWAY_A+1; 。

36、p-next=NULL;gaSUBWAY_A.link=p;p=(edgenode*)malloc(sizeof(edgenode); p-adjvex=SUBWAY_A+SUBWAY_B-2; p-next=NULL;gaSUBWAY_A+SUBWAY_B-1 .link=p;/打印各邻接节点for(i=0;i%sM,gas-adjvex.name); s=s-n ext;)int main()vexnode gaMAX; creat(ga);int i;char str210; while(scanf(M%s%sh,str0,str1)!=EOF) int temp=O;for(i=0;i。

37、q; q.push(gatemp); gatemp.flag=false; int count=0;int start=O;int end=1;bool find_flag=false; while(!q.empty()if(find_flag) break;count+;printf(I *n“);printfC* 第 %d 层搜索count);int temp_e nd=e nd; while(startadjvex.flag)q.push(gas-adjvex);gas-adjvex.flag=false;en d+;/printf(H%s H,gas-adjvex.name);s=s-。

38、n ext;q.pop();start+;printf(”n”);printf(%dn,count);return 0;14.字串转换问题描述:将输入的字符串(字符串仅包含小写字母a,到z,),按照如下规则,循环转换后输出:a-b,b-c, -,y-z,z-a ;若输入的字符串连续出现两个字母相同时,后一个字母需要连续转换2次。例如:aa转换为be,zz 转换为ab ;当连续相同字母超过两个时,第三出现的字母按第一次岀现算。要求实现函数:void convert(char Jnput,char* output) 输入】char *input,输入的字符串【输出】char*output 5 输出。

39、的字符串 【返回】无 #include #include #include void convert(char put,char* output)(if(input=NULL)return;char temp=,0,;int len_input=strlen(input);int i;int flag=0;for(i=0;i输出的字符串【返回】无include #include include void my_word(char input,char output)(char *p;char *temp;char *word10;int len_input=strlen(input);int 。

40、i,j;char except = T;char *blank = ”;i=0;for (i=0;iZ&inputiz)(inputi=;;)j=0;r保存取出的单词*/p= strtok(i nput,except);while(NULL!=p)wordj+=p;p= strtok(NULL,except);for(i=0;i5;i+)printf(%s”,wordi);厂对单词按照长度降序排序,冒泡法7 for (i=0;i5;i+)for O=1;j5-i;j+)(if(strlen(wordj-1)vstrlen(wordj) temp=wordj; wordj=wordj-1; wo。

41、rdj-1=temp;)r刪除相同单词*/for (i=0;i5;i+)for(j=i+1;jv5;j+)(if(strcmp(wordi,wordj)=0) wordj=0;)r将单词连接起来输出*/for (j=0;jv5;j+)if (0=j)(strncpy (output,wordj,strlen(wordj)+1);else(strcat(output,bla nk);strcat(output,wordj);)return ;int main()char input =Msome local buses, somel 234123driversn;printfC*筛选之前的字符串:sn”,input);char output30;my_word(i nput,outp。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值