您好,欢迎访问三七文档
以前上机考试编程工具为C/C++:VC6.0;Java:eclipse,这次改成C/C++:VS2005(或VC6.0)Java:JDK1.7。由于本人以前学C语言花了一些功夫,相对Java用得上手些,备考时用的是C++;临考前一周接到通知,说是要用VS2005,于是下个软件再加上熟悉一下花了半天时间,手忙脚乱了一阵(建议最好用VS,毕竟有的程序在VC上能调通,在VS上可能运行不通过);2、以往的形式是给你个函数模块,函数名已写好,你只要往里面填代码就行了(华为提供的工程是将Main函数隐藏了的,所以自己不用再添加Main函数)例如:1.从两个数组的最后一个元素比较两个数组中不同元素的个数,如有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[]的长度,函数返回值为两个数组不同元素的个数。这次是随你发挥,可以写子函数,也可以只写个main函数(当然main函数是必不可少的)。先在编译环境(即VS2005或JDK1.7)上运行,调通后再复制到考试系统中,检查无误后,点击提交(不过每道题最多只能传五次);.3、以往满分是100分,第一题20分,第二题30分,第三题50分,且前两题为必做题,最后一题作为附加题;现在是满分320(有点像英语四六级改革一样,100分改成710分),第一题60分,第二题100分,第三题160分,且不分什么必做题、附加题,建议拿到题目后最好把题目都浏览一遍,不一定按顺序做,尽会做的先做;有几点需要特别注意:1、一定要按标准输入、输出来编程,且按照考试系统中规定的格式,否则即使从头到尾写的都对,系统将显示格式错误,无法得分;2、最好多试几组测试条例,否则得不全分(本人已经犯过此类失误,希望后人不要重蹈覆辙);3、不要写任何程序提示语句(包括自己人为添加的换行命令),否则该题自动判0分;此外,考试时有不清楚的就问在场的工作人员,不要一个人憋在那里不吭声,浪费的是自己宝贵的时间;个人觉得华为的员工还是挺热心的,我问了不少问题,他们都跟我详细解答的,在此感谢他们的热忱相助。1、删除子串删除子串只要是原串中有相同的子串就删掉,不管有多少个,返回子串个数。自己编的:#includestdio.h#includestring.h#includestdlib.hintdel_sub_str(char*str,char*sub_str,char*result);intmain(void){intcount;charresult[100];charstr[100];charsub_str[100];printf(Pleaseinsertyourstrings!\n);gets(str);printf(Pleaseinsertyoursub_strings!\n);gets(sub_str);count=del_sub_str(str,sub_str,result);printf(Thedeletedstringsare:\n);puts(result);printf(Thenumis:%d\n,count);return0;}intdel_sub_str(char*str,char*sub_str,char*result){intn;intcount=0;char*p=str,*q=sub_str,*r=result;n=strlen(q);while(*p!='\0'){if(strncmp(p,q,n)==0){count++;p+=n;}else{*r=*p;r++;p++;}}*r='\0';returncount;}约瑟夫环约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。#includestdio.h#includestdlib.htypedefstructNode//声明新的类型名(struct)来代替原有的类型名(Node){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,intk,intm){inti;LinkList*p,*s,*q;p=L;printf(出列顺序为:);for(i=1;ik;i++)//p是对当前节点操作,q用来记录p的前一状态;{q=p;p=p-next;}while(p-next!=p){for(i=1;im;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,k;n=9;m=5;k=2;L=creat(n);fun(L,k,m);return0;}4、数组&回文数组#includestdio.h#includestring.hvoidhuiwen(charstr[]){inti,len,k=1;len=strlen(str);for(i=0;ilen/2;i++){if(str[i]!=str[len-i-1])//str一般结尾处有\0,所以需要-1{k=0;break;}}if(k==0)printf(%s不是一个回文数\n,str);elseprintf(%s是一个回文数\n,str);}voidmain(){charstr[100]={0};printf(Inputastring:\n);/*提示输入Inputastring:*/scanf(%s,str);/*scan()函数输入一个字符串:*/huiwen(str);}5.数组比较•问题描述:比较两个数组,要求从数组最后一个元素开始逐个元素向前比较,如果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#includestdlib.h#includestdio.h#includestring.hintarray_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);}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#includestdio.h#includestdlib.h#includeassert.h#includestring.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++;elsereturn2;//return会跳出被调用函数}}elsereturn3;}elsereturn1;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、合并字符串(指针)说明:编写一个程序实现功能:将两个字符串合并为一个字符串并且输出,用指针实现。charstr1[20
本文标题:华为上机题库整理
链接地址:https://www.777doc.com/doc-4811997 .html