公文素材库 首页

PPTV_201*校园招聘研发类笔试题

时间:2019-05-29 05:40:04 网站:公文素材库

PPTV_201*校园招聘研发类笔试题

扩展阅读:201*华为校园招聘软件研发笔试题

1、删除子串,只要是原串中有相同的子串就删掉,不管有多少个,返回子串个数。#include#include#include#include

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);

temp=(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;}

voidmain(){

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#includetypedefstructNode{

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;inum=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;inext;}

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#includeinthuiwen(charstr[]){

inti,len,k=1;len=strlen(str);

for(i=0;i#include#include

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。

要求实现函数:

voidarray_iterate(intlen,intinput_array[],intm,intoutput_array[])【输入】intlen:输入数列的长度;intintput_array[]:输入的初始数列intm:初始计数值

【输出】intoutput_array[]:输出的数值出列顺序【返回】无示例

输入:intinput_array[]={3,1,2,4},intlen=4,m=7输出:output_array[]={2,3,1,4}

////////////循环链表实现//////////////////////#include#include#includetypedefstructNode{

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;inum=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;inext;}

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

#include#include#include#include#defineLENGTH13

intverifyMsisdn(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}

7、数组比较(20分)(和第4、12题一样)问题描述:

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

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

要求实现函数:

intarray_compare(intlen1,intarray1[],intlen2,intarray2[])

【输入】intlen1:输入被比较数组1的元素个数;intarray1[]:输入被比较数组1;

intlen2:输入被比较数组2的元素个数;intarray2[]:输入被比较数组2;【输出】无

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

示例

1)输入:intarray1[]={1,3,5},intlen1=3,intarray2[]={77,21,1,3,5},intlen2=5函数返回:02)输入:intarray1[]={1,3,5},intlen1=3,intarray2[]={77,21,1,3,5,7},intlen2=6函数返回:3

#include#include#include

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,7};intlen2=6;

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、输入字符串一定是符合题意合法的表达式,其中只包括数字字符和四则运算符字符,除此之外不含其它任何字符,不会出现计算溢出情况要求实现函数:

intcalculate(intlen,char*expStr)【输入】intlen:字符串长度;char*expStr:表达式字符串;【输出】无

【返回】计算结果

示例

1)输入:char*expStr=“1+4*5-8/3”函数返回:19

2)输入:char*expStr=“8/3*3”函数返回:6#include#includeusingnamespacestd;

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];}

expStr[t]="\\0";struct

{

opstack.top--;t++;

intnumeric[200];inttop;

}data;

data.top=-1;i=0;

ch=expStr[i];

while(ch!="\\0"){if(ch>="0"&&ch

}{}

inttmp=data.numeric[data.top-1]/data.numeric[data.top];data.top--;

data.numeric[data.top]=tmp;

printf("cannotbezeroofthedivide\\n");exit(1);

i++;

ch=expStr[i];

}}

voidmain(){

charexpStr[]="9/3*5";returndata.numeric[data.top];

printf("%s\\n",expStr);}

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#include#include#include#defineN5

intresult=calculate(strlen(expStr),expStr);printf("%d\\n",result);

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

intexpert=0;intdazhong=0;intzongfen=0;inti;

intnumber=0;

for(i=0;i例如: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#include#include

voidsort(intinput[],intn,intoutput[]){

inti,j;intk=1;inttemp;intmed;

for(i=0;iintmain(){

inta[6]={3,6,1,9,7,8};intb[6]={0};

for(inti=0;i=50且{

system_task[j]=task[i];pp[j]=i;j++;}

count=j;}

elseif(task[i]

for(i=0;i//把两数组倒置

for(i=0;i{

length++;

}

printf(“Thelengthofstringis%d\\n”,length);return0;

}

14、使用C语言实现字符串中子字符串的替换

描述:编写一个字符串替换函数,如函数名为StrReplace(char*strSrc,char*strFind,char*strReplace),strSrc为原字符串,strFind是待替换的字符串,strReplace为替换字符串。举个直观的例子吧,如:“ABCDEFGHIJKLMNOPQRSTUVWXYZ”这个字符串,把其中的“RST”替换为“ggg”这个字符串,结果就变成了:ABCDEFGHIJKLMNOPQgggUVWXYZ答案一:

#include#include

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;ifor(;*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#include#include#defineM100

voidStrReplace(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#includeintmain(){

charstr[]=”ComputerScience”;intflag=1;char*p=str;while(*p)

{

if(flag){

printf(“%c”,*p);}

flag=(flag+1)%2;p++;}

printf(“\\n”);return0;}16、(和第14题一样)使用C语言实现字符串中子字符串的替换

描述:编写一个字符串替换函数,如函数名为StrReplace(char*strSrc,char*strFind,char*strReplace),strSrc为原字符串,strFind是待替换的字符串,strReplace为替换字符串。举个直观的例子吧,如:“ABCDEFGHIJKLMNOPQRSTUVWXYZ”这个字符串,把其中的“RST”替换为“ggg”这个字符串,结果就变成了:ABCDEFGHIJKLMNOPQgggUVWXYZ答案一:

#include#include

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;ireturn0;}

答案三:

#include#include#include#defineM100

voidStrReplace(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

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、算分数的问题,去掉一个最高分一个最低分,求平均分

1.#include

2.floatavescore(floatscore[],intn)3.{

4.floatmin=0;5.floatmax=0;6.intminindex=0;7.intmaxindex=0;8.floatsum=0;9.min=score[0];

10.for(inti=0;i30.voidmain()31.{

32.floatscore[6]={70,80,90,98,87,86};33.floatlastscore;

34.lastscore=avescore(score,6);

35.printf("thelastscoreis:%5.2f\\n",lastscore);36.37.}运行结果:

thelastscoreis:85.75

19、对一个数组,将数组中偶数从大到小排序,奇数从小到大排序,奇数和偶数交叉着放且输出数组第一位放奇数若奇数和偶数不等长,则把剩下的直接放到数组中。

思路:先进行奇偶判断,得到奇数和偶数数组。然后对两数组排序,进行长度判断,最后组织数据。

#include

1.#include2.

3.voidjiou(inta[],intn)4.{

5.int*p1;6.int*p2;7.inti,j;8.intk=0;9.intkk=0;

10.intcount1=0;11.intcount2=0;12.inttemp;13.inttemp2;14.intm=0;

15.p1=(int*)malloc(sizeof(int)*n);16.p2=(int*)malloc(sizeof(int)*n);17.for(i=0;i37.38.39.40.41.42.43.44.45.46.47.48.

for(i=0;i87.for(i=0;iif(*(inID+i)"9")return2;}

if(*(inID+17)"9")if(*(inID+17)!="x")return3;

chartemp1[10]={0};chartemp2[10]={0};chartemp3[10]={0};

memcpy(temp1,inID+6,4);intyear=atoi(temp1);

if(year2100)return4;

memcpy(temp2,inID+10,2);intmon=atoi(temp2);if(mon12)return5;

memcpy(temp3,inID+12,2);intday=atoi(temp3);

if(1==mon){

if(day31)return6;}

if(2==mon)//能被4整除且不能被100整除或能被400整除的年份,闰年的2月份为29天,非闰年的2月份为28天。{

if(((year%4==0)&&(year%100!=0))||(year%400==0)){

if(day29)return6;}else{

if(day28)return6;}}

if(3==mon){

if(day31)return6;}

if(4==mon){if(day30)return6;}

if(5==mon){

if(day31)return6;}

if(6==mon){

if(day30)return6;}

if(7==mon){

if(day31)return6;}

if(8==mon){

if(day31)return6;}

if(9==mon){

if(day30)return6;}

if(10==mon){

if(day31)return6;}

if(11==mon){

if(day30)return6;}

if(12==mon){

if(day31)return6;}

return0;}

voidmain(){

charbuf[20]="500106198701295410";intre=verifyID(buf);printf("re=%d\\n",re);printf("\\n");}

21.手机号码合法性问题的另一个版本/*1.手机号码合法性判断(20分)问题描述:

我国大陆运营商的手机号码标准格式为:国家码+手机号码,例如:8613912345678。特点如下:1、长度13位;

2、以86的国家码打头;

3、手机号码的每一位都是数字。

请实现手机号码合法性判断的函数(注:考生无需关注手机号码的真实性,也就是说诸如86123123456789这样的手机号码,我们也认为是合法的),要求:1)如果手机号码合法,返回0;

2)如果手机号码长度不合法,返回1

3)如果手机号码中包含非数字的字符,返回2;4)如果手机号码不是以86打头的,返回3;

【注】除成功的情况外,以上其他合法性判断的优先级依次降低。也就是说,如果判断出长度不合法,直接返回1即可,不需要再做其他合法性判断。要求实现函数:

intverifyMsisdn(char*inMsisdn)

【输入】char*inMsisdn,表示输入的手机号码字符串【输出】无【返回】判断的结果,类型为int。示例

输入:inMsisdn=“869123456789“输出:无返回:1

输入:inMsisdn=“88139123456789“输出:无返回:3

输入:inMsisdn=“86139123456789“输出:无返回:0*/

#include#include

intverifyMsisdn(char*inMsisdn){

intlen=strlen(inMsisdn);inti=0;if(len!=13)return1;

for(i=0;ireturn0;else

return3;}

voidmain(){

intre=verifyMsisdn("861A640503228");printf("re=%d\\n",re);}

友情提示:本文中关于《PPTV_201*校园招聘研发类笔试题》给出的范例仅供您参考拓展思维使用,PPTV_201*校园招聘研发类笔试题:该篇文章建议您自主创作。

  来源:网络整理 免责声明:本文仅限学习分享,如产生版权问题,请联系我们及时删除。


PPTV_201*校园招聘研发类笔试题
由互联网用户整理提供,转载分享请保留原作者信息,谢谢!
http://m.bsmz.net/gongwen/664768.html
相关阅读
最近更新
推荐专题