华为校园招聘机考试题总结(软件)_第1页
华为校园招聘机考试题总结(软件)_第2页
华为校园招聘机考试题总结(软件)_第3页
华为校园招聘机考试题总结(软件)_第4页
华为校园招聘机考试题总结(软件)_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PAGEPAGE1华为校园招聘机考试题总结(软件)1、删除子串,只要是原串中有相同的子串就删掉,不管有多少个,返回子串个数。#include<stdio.h>#include<stdlib.h>#include<assert.h>#include<string.h>intdelete_sub_str(constchar*str,constchar*sub_str,char*result){ assert(str!=NULL&&sub_str!=NULL); constchar*p,*q; char*t,*temp; p=str; q=sub_str; t=result; intn,count=0; n=strlen(q); tmep=(char*)malloc(n+1); memset(temp,0x00,n+1); while(*p) { memcpy(temp,p,n); if(strcmp(temp,q)==0) { count++; memset(temp;0x00,n+1); p=p+n; } else { *t=*p; p++; t++; memset(temp,0x00,n+1); } } free(temp); returncount;}intmain(){ chars[100]={‘\0’}; intnum=delete_sub_str(“123abc12de234fg1hi34j123k”,”123”,s); printf(“Thenumberofsub_stris%d\r\n”,num); printf(“Theresultstringis%s\r\n”,s);}2、约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。#include<stdio.h>#include<stdlib.h>typedefstructNode{ intnum; structNode*next;}LinkList;LinkList*creat(intn){ LinkList*p,*q,*head; inti=1; p=(LinkList*)malloc(sizeof(LinkList));p->num=i; head=p;for(i=2;i<=n;i++){q=(LinkList*)malloc(sizeof(LinkList));q->num=i;p->next=q;p=q; }p->next=head;/*使链表尾指向链表头形成循环链表*/returnhead;}voidfun(LinkList*L,intm){ inti; LinkList*p,*s,*q; p=L; printf("出列顺序为:"); while(p->next!=p) { for(i=1;i<m;i++) { q=p; p=p->next; } printf("%5d",p->num); s=p; q->next=p->next; p=p->next; free(s); } printf("%5d\n",p->num);}intmain(){ LinkList*L; intn,m; n=9; m=5; L=creat(n); fun(L,m); return0;}3、比较一个数组的元素

是否为回文数组#include<stdio.h>#include<string.h>inthuiwen(charstr[]){ inti,len,k=1; len=strlen(str); for(i=0;i<len/2;i++) { if(str[i]!=str[len-i-1]) { k=1; break; } } if(k==0) printf("%s不是一个回文数\n",str); else printf("%s是一个回文数\n",str);}voidmain(){ charstr[100]={0}; inti; intlen; printf("Inputastring:");/*提示输入Inputastring:*/ scanf("%s",str);/*scan()函数输入一个字符串:*/ huiwen(str);}4、

数组比较(20分)

•问题描述:

比较两个数组,要求从数组最后一个元素开始逐个元素向前比较,如果2个数组长度不等,则只比较较短长度数组个数元素。请编程实现上述比较,并返回比较中发现的不相等元素的个数

比如:

数组{1,3,5}和数组{77,21,1,3,5}按题述要求比较,不相等元素个数为0

数组{1,3,5}和数组{77,21,1,3,5,7}按题述要求比较,不相等元素个数为3

•要求实现函数:

int

array_compare(int

len1,

int

array1[],

int

len2,

int

array2[])

【输入】int

len1:输入被比较数组1的元素个数;

int

array1[]:输入被比较数组1;

int

len2:输入被比较数组2的元素个数;

int

array2[]:输入被比较数组2;

【输出】无

【返回】不相等元素的个数,类型为int

•示例

1)输入:int

array1[]

=

{1,3,5},int

len1

=

3,int

array2[]

=

{77,21,1,3,5},int

len2

=

5

函数返回:0

2)输入:int

array1[]

=

{1,3,5},int

len1

=

3,int

array2[]

=

{77,21,1,3,5,7},int

len2

=

6

函数返回:3#include<stdlib.h>#include<stdio.h>#include<string.h>intarray_compare(intlen1,intarray1[],intlen2,intarray2[]){ intcount=0; for(;len1>=0&&len2>=0;len1--,len2--) { if(array1[len1-1]==array2[len2-1]) { count++; } } returncount;}intmain(){ intresult=0; intarray1[]={1,3,5}; intlen1=3; intarray2[]={77,12,1,3,5}; intlen2=5; result=array_compare(len1,array1,len2,array2);///result=array_compare(len1,array1[],len2,array2[]);不能这样//函数形参中永远只是传得首地址,不能传数组切记切记!!!!!! printf("theresultis%d",result);}

5、约瑟夫问题

•问题描述:

输入一个由随机数组成的数列(数列中每个数均是大于0的整数,长度已知),和初始计数值m。从数列首位置开始计数,计数到m后,将数列该位置数值替换计数值m,并将数列该位置数值出列,然后从下一位置从新开始计数,直到数列所有数值出列为止。如果计数到达数列尾段,则返回数列首位置继续计数。请编程实现上述计数过程,同时输出数值出列的顺序

比如:输入的随机数列为:3,1,2,4,初始计数值m=7,从数列首位置开始计数(数值3所在位置)

第一轮计数出列数字为2,计数值更新m=2,出列后数列为3,1,4,从数值4所在位置从新开始计数

第二轮计数出列数字为3,计数值更新m=3,出列后数列为1,4,从数值1所在位置开始计数

第三轮计数出列数字为1,计数值更新m=1,出列后数列为4,从数值4所在位置开始计数

最后一轮计数出列数字为4,计数过程完成。

输出数值出列顺序为:2,3,1,4。

•要求实现函数:

void

array_iterate(int

len,

int

input_array[],

int

m,

int

output_array[])

【输入】int

len:输入数列的长度;

int

intput_array[]:输入的初始数列

int

m:初始计数值

【输出】int

output_array[]:输出的数值出列顺序

【返回】无

•示例

输入:int

input_array[]

=

{3,1,2,4},int

len

=

4,

m=7

输出:output_array[]

=

{2,3,1,4}////////////循环链表实现//////////////////////#include<stdio.h>#include<stdlib.h>#include<string.h>typedefstructNode{ intnum; structnode*next;}node;node*creat(intlen,intinput_array[]){ node*h,*s,*p; inti; h=(node*)malloc(sizeof(node)); h->num=input_array[0]; p=h; for(i=1;i<len;i++) { s=(node*)malloc(sizeof(node)); s->num=input_array[i]; p->next=s; p=s; } p->next=h; return(h);}voidarray_iterate(intlen,intinput_array[],intm){ node*q,*p,*s; inti=0,j=0,k; intoutput_array[4]; p=creat(len,input_array); while(p->next!=p) { for(i=1;i<m;i++) { q=p; p=p->next; } m=p->num; printf("%5d",m); output_array[j++]=m; s=p; q->next=p->next; p=p->next; free(s); s=NULL; } m=p->num; printf("%5d\n",m); output_array[j]=p->num; k=j; for(j=0;j<=k;j++) { printf("%5d",output_array[j]); }}intmain(){ intinput_array[]={3,1,2,4}; intlen=4; intm=7; intoutput_array[4]; array_iterate(len,input_array,m,output_array);}6、手机号码合法性判断(20分)问题描述:我国大陆运营商的手机号码标准格式为:国家码+手机号码,例如:8613912345678。特点如下:1、长度13位;2、以86的国家码打头;3、手机号码的每一位都是数字。请实现手机号码合法性判断的函数要求:1)如果手机号码合法,返回0;2)如果手机号码长度不合法,返回13)如果手机号码中包含非数字的字符,返回2;4)如果手机号码不是以86打头的,返回3;【注】除成功的情况外,以上其他合法性判断的优先级依次降低。也就是说,如果判断出长度不合法,直接返回1即可,不需要再做其他合法性判断。要求实现函数:intverifyMsisdn(char*inMsisdn)【输入】char*inMsisdn,表示输入的手机号码字符串。【输出】无【返回】判断的结果,类型为int。示例输入:inMsisdn=“869123456789“输出:无返回:1输入:inMsisdn=“88139123456789“输出:无返回:3输入:inMsisdn=“86139123456789“输出:无返回:0#include<stdio.h>#include<stdlib.h>#include<assert.h>#include<string.h>#defineLENGTH13intverifyMsisdn(char*inMsisdn){ char*pchar=NULL; assert(inMsisdn!=NULL); if(LENGTH==strlen(inMsisdn)) { if(('8'==*inMsisdn)&&(*(inMsisdn+1)=='6')) { while(*inMsisdn!='\0') { if((*inMsisdn>='0')&&(*inMsisdn<='9')) inMsisdn++; else return2; } } else return3; } else return1; return0;}intmain(){ char*pchar=NULL; unsignedcharichar=0; intresult; switch(ichar) { case0: pchar="8612345363789";break; case1: pchar="861111111111111";break; case2: pchar="86s1234536366";break; default: break; }result=verifyMsisdn(pchar);printf("resultis%d\n",result);}7、

数组比较(20分)

•问题描述:

比较两个数组,要求从数组最后一个元素开始逐个元素向前比较,如果2个数组长度不等,则只比较较短长度数组个数元素。请编程实现上述比较,并返回比较中发现的不相等元素的个数

比如:

数组{1,3,5}和数组{77,21,1,3,5}按题述要求比较,不相等元素个数为0

数组{1,3,5}和数组{77,21,1,3,5,7}按题述要求比较,不相等元素个数为3

•要求实现函数:

int

array_compare(int

len1,

int

array1[],

int

len2,

int

array2[])

【输入】int

len1:输入被比较数组1的元素个数;

int

array1[]:输入被比较数组1;

int

len2:输入被比较数组2的元素个数;

int

array2[]:输入被比较数组2;

【输出】无

【返回】不相等元素的个数,类型为int

•示例

1)输入:int

array1[]

=

{1,3,5},int

len1

=

3,int

array2[]

=

{77,21,1,3,5},int

len2

=

5

函数返回:0

2)输入:int

array1[]

=

{1,3,5},int

len1

=

3,int

array2[]

=

{77,21,1,3,5,7},int

len2

=

6

函数返回:3

#include<stdlib.h>#include<stdio.h>#include<string.h>intarray_compare(intlen1,intarray1[],intlen2,intarray2[]){ intcount=0; for(;len1>=0&&len2>=0;len1--,len2--) { if(array1[len1-1]==array2[len2-1]) { count++; } } returncount;}intmain(){ intresult=0; intarray1[]={1,3,5}; intlen1=3; intarray2[]={77,12,1,3,5}; intlen2=5; result=array_compare(len1,array1,len2,array2);///result=array_compare(len1,array1[],len2,array2[]);不能这样//函数形参中永远只是传得首地址,不能传数组切记切记!!!!!! printf("theresultis%d",result);}

8、简单四则运算•问题描述:

输入一个只包含个位数字的简单四则运算表达式字符串,计算该表达式的值

注:1、表达式只含

+,

-,

*,

/

四则运算符,不含括号

2、表达式数值只包含个位整数(0-9),且不会出现0作为除数的情况

3、要考虑加减乘除按通常四则运算规定的计算优先级

4、除法用整数除法,即仅保留除法运算结果的整数部分。比如8/3=2。输入表达式保证无0作为除数情况发生

5、输入字符串一定是符合题意合法的表达式,其中只包括数字字符和四则运算符字符,除此之外不含其它任何字符,不会出现计算溢出情况

•要求实现函数:

int

calculate(int

len,char

*expStr)

【输入】int

len:

字符串长度;

char

*expStr:

表达式字符串;

【输出】无

【返回】计算结果

•示例

1)输入:char

*expStr

=

“1+4*5-8/3”

函数返回:19

2)输入:char

*expStr

=

“8/3*3”

函数返回:6#include<stdio.h>/**authorbywanww*time:2011-09-07*/usingnamespacestd;intarray_compare(intlen1,intarray1[],intlen2,intarray2[]){if(len1==len2){ intcount=0; for(inti=0;i<len1;i++) { if(array1[i]!=array2[i])count++; } returncount; }elseif(len1<len2){ returnarray_compare(len1,array1,len1,array2+len2-len1); }else{ returnarray_compare(len2,array1+len1-len2,len2,array2); }}voidarray_iterate(intlen,intinput_array[],intm,intoutput_array[]){ int*flag=newint[len]; memset(flag,0,len*4); inthasout=0;//已经出列的数字个数 intstart=0;//开始的下标号 intj=0; //当前以报到的数字 while(true) { if(flag[start]==0) //当前元素还没出列 { j++; if(j==m) //已经计数到m,当前start下标的元素出列 { output_array[hasout]=input_array[start]; flag[start]=1; //标记当前元素已经出列 hasout++; if(hasout==len)break;//所有的元素都已经出列,结束程序 //初始化下一轮的数字 j=0; m=input_array[start]; } } start++; if(start==len)start=0; } delete[]flag; }intcalculate(intlen,char*expStr){ struct{ charopdata[200]; inttop; }opstack; //定义操作符栈 opstack.top=-1; inti=0;//遍历字符串的下标 intt=0;//当前后缀表达式的长度 charch=expStr[i]; while(ch!='\0') { switch(ch) { case'+': case'-': while(opstack.top!=-1) { expStr[t]=opstack.opdata[opstack.top]; opstack.top--; t++; } opstack.top++; opstack.opdata[opstack.top]=ch; break; case'*': case'/': while(opstack.top!=-1&&(opstack.opdata[opstack.top]=='*'||opstack.opdata[opstack.top]=='/')) { expStr[t]=opstack.opdata[opstack.top]; opstack.top--; t++; } opstack.top++; opstack.opdata[opstack.top]=ch; break; default: expStr[t]=ch; t++; break; } i++; ch=expStr[i]; } while(opstack.top!=-1)//将栈中所有的剩余的运算符出栈 { expStr[t]=opstack.opdata[opstack.top]; opstack.top--; t++; } expStr[t]='\0'; struct { intnumeric[200]; inttop; }data; data.top=-1; i=0; ch=expStr[i];while(ch!='\0'){ if(ch>='0'&&ch<='9') { data.top++; data.numeric[data.top]=ch-'0'; } elseif('+'==ch) { inttmp=data.numeric[data.top-1]+data.numeric[data.top]; data.top--; data.numeric[data.top]=tmp; } elseif('-'==ch) { inttmp=data.numeric[data.top-1]-data.numeric[data.top]; data.top--; data.numeric[data.top]=tmp; } elseif('*'==ch) { inttmp=data.numeric[data.top-1]*data.numeric[data.top]; data.top--; data.numeric[data.top]=tmp; } elseif('/'==ch) { if(data.numeric[data.top]==0) { printf("cannotbezeroofthedivide\n"); exit(1); } inttmp=data.numeric[data.top-1]/data.numeric[data.top]; data.top--; data.numeric[data.top]=tmp; } i++; ch=expStr[i];} returndata.numeric[data.top];}voidmain(){ intarray1[]={1,3,5}; intlen1=3; intarray2[]={77,21,1,3,5,7}; intlen2=6; intcount= array_compare(sizeof(array1)/sizeof(int),array1,sizeof(array2)/sizeof(int),array2); printf("%d\n",count);printf("*****************************************************\n"); intinput_array[]={3,1,2,4}; intlen=4; intm=7; int*output_array=newint[sizeof(input_array)/sizeof(int)]; array_iterate(4,input_array,7,output_array); for(inti=0;i<sizeof(input_array)/sizeof(int);i++) { printf("%d",output_array[i]); } delete[]output_array; printf("\n*****************************************************\n"); charexpStr[]="8/3*3";intresult=calculate(strlen(expStr),expStr); printf("%s\n",expStr); printf("%d\n",result);}9、选秀节目打分,分为专家评委和大众评委,score[]数组里面存储每个评委打的分数,judge_type[]里存储与score[]数组对应的评委类别,judge_type[i]==1,表示专家评委,judge_type[i]==2,表示大众评委,n表示评委总数。打分规则如下:专家评委和大众评委的分数先分别取一个平均分(平均分取整),然后,总分=专家评委平均分

*

0.6+大众评委*0.4,总分取整。如果没有大众评委,则总分=专家评委平均分,总分取整。函数最终返回选手得分。

函数接口

intcal_score(intscore[],intjudge_type[],intn)

#include<stdio.h>#include<string.h>#include<iostream.h>#include<conio.h>#defineN5intcal_score(intscore[],intjudge_type[],intn){ intexpert=0;intdazhong=0; intzongfen=0; inti; intnumber=0; for(i=0;i<N;i++) { if(judge_type[i]==1) { expert=expert+score[i]; number++; } elsedazhong=dazhong+score[i]; } if(number==N) { zongfen=(int)(expert/N); } else{ expert=(int)(expert/number); dazhong=(int)(dazhong/(N-number)); zongfen=int(0.6*expert+0.4*dazhong); } returnzongfen;}intmain(){ intscore[N]; intjudge_type[N]; intnumberlast=0; inti; printf("pleaseinputthe%dscore:\n",N); for(i=0;i<N;i++) scanf("%d",&score[i]); printf("pleaseinputthelevel(1:expert,2:dazhong)\n"); for(i=0;i<N;i++) scanf("%d",&judge_type[i]); numberlast=cal_score(score,judge_type,N); printf("thelastscoreis%d\n",numberlast); return0;}10、给定一个数组input[],如果数组长度n为奇数,则将数组中最大的元素放到output[]数组最中间的位置,如果数组长度n为偶数,则将数组中最大的元素放到output[]数组中间两个位置偏右的那个位置上,然后再按从大到小的顺序,依次在第一个位置的两边,按照一左一右的顺序,依次存放剩下的数。

例如:input[]={3,6,1,9,7}

output[]={3,7,9,6,1};

input[]={3,6,1,9,7,8}

output[]=

{1,6,8,9,7,3}#include<stdio.h>#include<string.h>#include<conio.h>voidsort(intinput[],intn,intoutput[]){ inti,j; intk=1; inttemp; intmed; for(i=0;i<n;i++) for(j=0;j<n-i;j++) if(input[j]>input[j+1]) {temp=input[j];input[j]=input[j+1];input[j+1]=temp;} if(n%2!=0) { for(i=0;i<n;i++) printf("%2d",input[i]); printf("\n"); med=(n-1)/2; output[med]=input[n-1]; for(i=1;i<=med;i++) { output[med-i]=input[n-1-k]; output[med+i]=input[n-2-k]; k=k+2; } } else { for(i=0;i<n;i++) printf("%2d",input[i]); printf("\n"); med=n/2; output[med]=input[n-1]; for(i=1;i<=med-1;i++) { output[med-i]=input[n-1-k]; output[med+i]=input[n-2-k]; k=k+2; } output[0]=input[0]; } for(i=0;i<n;i++) printf("%2d",output[i]); printf("\n");}intmain(){ inta[6]={3,6,1,9,7,8}; intb[6]={0}; for(inti=0;i<6;i++) printf("%2d",a[i]); printf("\n"); sort(a,6,b); return0;}11、操作系统任务调度问题。操作系统任务分为系统任务和用户任务两种。其中,系统任务的优先级<50,用户任务的优先级>=50且<=255。优先级大于255的为非法任务,应予以剔除。现有一任务队列task[],长度为n,task中的元素值表示任务的优先级,数值越小,优先级越高。函数scheduler实现如下功能,将task[]中的任务按照系统任务、用户任务依次存放到system_task[]数组和user_task[]数组中(数组中元素的值是任务在task[]数组中的下标),并且优先级高的任务排在前面,数组元素为-1表示结束。

例如:task[]={0,30,155,1,80,300,170,40,99}

system_task[]={0,3,1,7,-1}

user_task[]={4,8,2,6,-1}函数接口

voidscheduler(inttask[],intn,intsystem_task[],intuser_task[])#include<stdio.h>#include<string.h>#include<malloc.h>#include<iostream.h>voidscheduler1(inttask[],intn,intsystem_task[],intuser_task[]){ inti; intj=0; int*p,*pp,*p_user,*pp_user; intindex=0; intcount,count2; intmin=0; intk=0; p=(int*)malloc(sizeof(int)*n); for(i=0;i<n;i++) p[i]=0; pp=(int*)malloc(sizeof(int)*n); for(i=0;i<n;i++) pp[i]=0; p_user=(int*)malloc(sizeof(int)*n); for(i=0;i<n;i++) p_user[i]=0; pp_user=(int*)malloc(sizeof(int)*n); for(i=0;i<n;i++) pp_user[i]=0; for(i=0;i<n;i++) { if(task[i]<50) { { system_task[j]=task[i]; pp[j]=i; j++; } count=j; } elseif(task[i]<=255) { { user_task[k]=task[i]; pp_user[k]=i; k++; } count2=k; } elsetask[i]=task[i]; } for(i=0;i<count;i++) printf("%3d",system_task[i]); printf("\n"); for(i=0;i<count;i++) { min=system_task[0]; for(j=1;j<count;j++) { if(system_task[j]<min) { min=system_task[j]; p[i]=j; } } system_task[p[i]]=51; } pp[count]=-1; for(i=0;i<count;i++) printf("%3d",pp[p[i]]); printf("%3d\n",pp[count]); /***********************************************************/ for(i=0;i<count2;i++) printf("%4d",user_task[i]); printf("\n"); for(i=0;i<count2;i++) { min=user_task[0]; for(j=1;j<count2;j++) { if(user_task[j]<min) { min=user_task[j]; p_user[i]=j; } } user_task[p_user[i]]=256; } pp_user[count2]=-1; for(i=0;i<count2;i++) printf("%4d",pp_user[p_user[i]]); printf("%3d\n",pp_user[count2]); }intmain(){ inttask[9]={0,30,155,1,80,300,170,40,99}; intsystem_task[9]={0}; intuser_task[9]={0}; scheduler1(task,9,system_task,user_task); return0;}12、从两个数组的最后一个元素比较两个数组中不同元素的个数,如有array1[5]={77,21,1,3,5},array2[3]={1,3,5},从array1[4]与array2[2]比较开始,到array1[2]与array[0]比较结束。这样得出它们不同的元素个数为0,若array1[6]={77,21,1,3,5,7},那么他们不同的元素为3。函数原型为intcompare_array(intlen1,intarray1[],intlen2,intarray2[]);其中,len1与len2分别为数组array1[]和array2[]的长度,函数返回值为两个数组不同元素的个数。

以下是上题的函数完整实现://diff_num.cpp#include<stdio.h>intcompare_array(intlen1,intarray1[],intlen2,intarray2[]){ inti,t,small,num=0; //把两数组倒置 for(i=0;i<len1/2;i++) { t=array1[i]; array1[i]=array1[len1-i-1]; array1[len1-i-1]=t; } for(i=0;i<len2/2;i++) { t=array2[i]; array2[i]=array2[len2-i-1]; array2[len2-i-1]=t; } //输出倒置后的两数组/* for(i=0;i<len1;i++) printf("%d",array1[i]); printf("\n"); for(i=0;i<len2;i++) printf("%d",array2[i]);*/ printf("\n"); if(len1>len2) small=len2; else small=len1; num=small; for(i=0;i<small;i++) { if(array1[i]==array2[i]) num--; } printf("num=%d\n",num); returnnum;}voidmain(){ intarray1[5]={77,21,1,3,5},array2[3]={1,3,5}; intlen1=5,len2=3; compare_array(len1,array1,len2,array2);}13、输入一个字符串,用指针求出字符串的长度。答案:#include<stdio.h>intmain(){charstr[20],*p;intlength=0;printf(“Pleaseinputastring:”);gets(str);p=str;while(*p++){length++;}printf(“Thelengthofstringis%d\n”,length);return0;}14、使用C语言实现字符串中子字符串的替换描述:编写一个字符串替换函数,如函数名为StrReplace(char*strSrc,char*strFind,char*strReplace),strSrc为原字符串,strFind是待替换的字符串,strReplace为替换字符串。举个直观的例子吧,如:“ABCDEFGHIJKLMNOPQRSTUVWXYZ”这个字符串,把其中的“RST”替换为“ggg”这个字符串,结果就变成了:ABCDEFGHIJKLMNOPQgggUVWXYZ答案一:#include<stdio.h>#include<string.h>voidStrReplace(char*strSrc,char*strFind,char*strReplace);#defineM100;voidmain(){chars[]="ABCDEFGHIJKLMNOPQRSTUVWXYZ";chars1[]="RST";chars2[]="ggg";StrReplace(s,s1,s2);printf("%s\n",s);}voidStrReplace(char*strSrc,char*strFind,char*strReplace){inti=0;intj;intn=strlen(strSrc);intk=strlen(strFind);for(i=0;i<n;i++){if(*(strSrc+i)==*strFind){for(j=0;j<k;j++){if(*(strSrc+i+j)==*(strFind+j)){*(strSrc+i+j)=*(strReplace+j);}elsecontinue;}}}}答案二:#include<stdio.h>#defineMAX100StrReplace(char*s,char*s1,char*s2){char*p;for(;*s;s++){for(p=s1;*p&&*p!=*s;p++);if(*p)*s=*(p-s1+s2);}}intmain(){chars[MAX];//s是原字符串chars1[MAX],s2[MAX];//s1是要替换的//s2是替换字符串puts("Pleaseinputthestringfors:");scanf("%s",s);puts("Pleaseinputthestringfors1:");scanf("%s",s1);puts("Pleaseinputthestringfors2:");scanf("%s",s2);StrReplace(s,s1,s2);puts("Thestringofsafterdisplaceis:");printf("%s\n",s);return0;}答案三:#include<stdio.h>#include<stdlib.h>#include<string.h>#defineM100voidStrReplace(char*strSrc,char*strFind,char*strReplace);intmain(){ chars[]="ABCDEFGHIJKLMNOPQRSTUVWXYZ"; chars1[]="RST"; chars2[]="gggg"; StrReplace(s,s1,s2); printf("%s\n",s); return0;}voidStrReplace(char*strSrc,char*strFind,char*strReplace){ while(*strSrc!='\0') { if(*strSrc==*strFind) { if(strncmp(strSrc,strFind,strlen(strFind))==0) { inti=strlen(strFind); intj=strlen(strReplace); printf("i=%d,j=%d\n",i,j); char*q=strSrc+i; printf("*q=%s\n",q); while((*strSrc++=*strReplace++)!='\0'); printf("strSrc-1=%s\n",strSrc-1); printf("*q=%s\n",q); while((*strSrc++=*q++)!='\0'); } else { strSrc++; } } else { strSrc++; } }}15、编写一个程序实现功能:将字符串”ComputerSecience”赋给一个字符数组,然后从第一个字母开始间隔的输出该串,用指针完成。答案:#include<stdio.h>#include<string.h>intmain(){ charstr[]=”ComputerScience”;intflag=1; char*p=str; while(*p){if(flag){ printf(“%c”,*p);}flag=(flag+1)%2;p++;} printf(“\n”);return0;}16、使用C语言实现字符串中子字符串的替换描述:编写一个字符串替换函数,如函数名为StrReplace(char*strSrc,char*strFind,char*strReplace),strSrc为原字符串,strFind是待替换的字符串,strReplace为替换字符串。举个直观的例子吧,如:“ABCDEFGHIJKLMNOPQRSTUVWXYZ”这个字符串,把其中的“RST”替换为“ggg”这个字符串,结果就变成了:ABCDEFGHIJKLMNOPQgggUVWXYZ答案一:#include<stdio.h>#include<string.h>voidStrReplace(char*strSrc,char*strFind,char*strReplace);#defineM100;voidmain(){chars[]="ABCDEFGHIJKLMNOPQRSTUVWXYZ";chars1[]="RST";chars2[]="ggg";StrReplace(s,s1,s2);printf("%s\n",s);}voidStrReplace(char*strSrc,char*strFind,char*strReplace){inti=0;intj;intn=strlen(strSrc);intk=strlen(strFind);for(i=0;i<n;i++){if(*(strSrc+i)==*strFind){for(j=0;j<k;j++){if(*(strSrc+i+j)==*(strFind+j)){*(strSrc+i+j)=*(strReplace+j);}elsecontinue;}}}}答案二:#include<stdio.h>#defineMAX100StrReplace(char*s,char*s1,char*s2){char*p;for(;*s;s++){for(p=s1;*p&&*p!=*s;p++);if(*p)*s=*(p-s1+s2);}}intmain(){chars[MAX];//s是原字符串chars1[MAX],s2[MAX];//s1是要替换的//s2是替换字符串puts("Pleaseinputthestringfors:");scanf("%s",s);puts("Pleaseinputthestringfors1:");scanf("%s",s1);puts("Pleaseinputthestringfors2:");scanf("%s",s2);StrReplace(s,s1,s2);puts("Thestringofsafterdisplaceis:");printf("%s\n",s);return0;}答案三:#include<stdio.h>#include<stdlib.h>#include<string.h>#defineM100voidStrReplace(char*strSrc,char*strFind,char*strReplace);intmain(){ chars[]="ABCDEFGHIJKLMNOPQRSTUVWXYZ"; chars1[]="RST"; chars2[]="gggg"; StrReplace(s,s1,s2); printf("%s\n",s); return0;}voidStrReplace(char*strSrc,char*strFind,char*strReplace){ while(*strSrc!='\0') { if(*strSrc==*strFind) { if(strncmp(strSrc,strFind,strlen(strFind))==0) { inti=strlen(strFind); intj=strlen(strReplace); printf("i=%d,j=%d\n",i,j); char*q=strSrc+i; printf("*q=%s\n",q); while((*strSrc++=*strReplace++)!='\0'); printf("strSrc-1=%s\n",strSrc-1); printf("*q=%s\n",q); while((*strSrc++=*q++)!='\0'); } else { strSrc++; } } else { strSrc++; } }}17、编写一个程序实现功能:将两个字符串合并为一个字符串并且输出,用指针实现。charstr1[20]={“Hello”},str2[20]={“World”};答案:#include<stdio.h>intmain(){charstr1[20]={“Hello”},str2[20]={“World”};char*p=str1,*q=str2;while(*p)p++;while(*q){*p=*q;p++;q++;}*p=‘\0’printf(“%s\n”,str1);return0;}18、算分数的问题,去掉一个最高分一个最低分,求平均分

#include<stdio.h>

float

avescore(float

score[],int

n)

{

float

min=0;

float

max=0;

int

minindex=0;

int

maxindex=0;

float

sum=0;

min=score[0];

for(int

i=0;i<n;i++)

if(score[i]<min)

{

min=score[i];

minindex=i;

}

score[minindex]=0;

max=score[0];

for(i=0;i<n;i++)

if(score[i]>max)

{

max=score[i];

maxindex=i;

}

score[maxindex]=0;

for(i=0;i<n;i++)

sum+=score[i];

sum=sum/(n-2);

return

sum;

}

void

main()

{

float

score[6]={70,80,90,98,87,86};

float

lastscore;

lastscore=avescore(score,6);

printf("the

last

score

is

:%5.2f\n",lastscore);

}

运行结果:thelastscoreis:85.7519、对一个数组,将数组中偶数从大到小排序,奇数从小到大排序,奇数和偶数交叉着放且输出数组第一位放奇数

若奇数和偶数不等长,则把剩下的直接放到数组中。思路:先进行奇偶判断,得到奇数和偶数数组。然后对两数组排序,进行长度判断,最后组织数据。#include<stdio.h>

#incl

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论