1、华为最新笔试题编程题及答案问题:输入一个字符串,用指针求出字符串的长度。答案:#include int main() char str20, *p; int length=0; printf(“Please input a string: ”); gets(str); p=str; while(*p+) length+;printf(“The length of string is %dn”, length);return 0;问题:使用C语言实现字符串中子字符串的替换描述:编写一个字符串替换函数,如函数名为 StrReplace(char* strSrc, char* strFind, ch
2、ar* strReplace),strSrc为原字符串,strFind是待替换的字符串,strReplace为替换字符串。举个直观的例子吧,如:“ABCDEFGHIJKLMNOPQRSTUVWXYZ”这个字符串,把其中的“RST”替换为“ggg”这个字符串,结果就变成了:ABCDEFGHIJKLMNOPQgggUVWXYZ答案一:#include #include void StrReplace(char* strSrc, char* strFind, char* strReplace);#define M 100;void main()char s=ABCDEFGHIJKLMNOPQRSTU
3、VWXYZ;char s1=RST;char s2=ggg;StrReplace(s,s1,s2);printf(%sn,s);return 0;void StrReplace(char* strSrc, char* strFind, char* strReplace) int i=0; int j; int n=strlen(strSrc); int k=strlen(strFind); for(i=0;in;i+) if(*(strSrc+i)=*strFind) for(j=0;jk;j+) if(*(strSrc+i+j)=*(strFind+j) *(strSrc+i+j)=*(st
4、rReplace+j); else continue; 问题:编写一个程序实现功能:将字符串”Computer Secience”赋给一个字符数组,然后从第一个字母开始间隔的输出该串,用指针完成。答案:#include #include int main() char str=”Computer Science”; int flag=1; char *p=str; while(*p) if ( flag ) printf(“%c”,*p); flag = (flag + 1) % 2; p+; printf(“n”); return 0;问题:编写一个程序实现功能:将两个字符串合并为一个字符串
5、并且输出,用指针实现。 char str120=“Hello ”, str220=“World ”;答案:#include int main() char str120=“Hello ”, str220=“World ”; char *p=str1, *q=str2; while( *p ) p+; while( *q ) *p = *q; p+; q+; *p = 0; printf(“%sn”, str1); return 0;问题:以下函数的功能是用递归的方法计算x的n阶勒让德多项式的值。已有调用语句p(n,x);编写函数实现功能。递归公式如下:答案:#include float p(i
6、nt x,int n) float t,t1,t2; if(n= =0) return 1; else if(n= =1) return x; else t1=(2*n-1)*x*p(x,(n-1); t2=(n-1)*p(x,(n-2); t=(t1-t2)/n; return t;int main() int x,n; printf(“input two int (x and n):”); scanf(“%d%d”,&x,&n); printf(“%.2fn”,p(x,n); return 0;问题:给主函数传递参数实现echo功能:答案:#incldue int main(int arg
7、c,char *argv) int i=1; while( i argc ) printf(“%s ”,argvi); i+;printf(“n”);return 0;1.数组比较(20分)问题描述:比较两个数组,要求从数组最后一个元素开始逐个元素向前比较,如果2个数组长度不等,则只比较较短长度数组个数元素。请编程实现上述比较,并返回比较中发现的不相等元素的个数,比如:数组1,3,5和数组77,21,1,3,5按题述要求比较,不相等元素个数为0数组1,3,5和数组77,21,1,3,5,7按题述要求比较,不相等元素个数为3 要求实现函数:intarray_compare(intlen1,int
8、array1,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函数返回:32) 输入:intarray1=1,3,5,intlen1=3,intarray2=77,21,1,3,5,7,intlen2=6函数返回:0答案:#include#include
9、#includeint array_compare(int len1, int array1, int len2, int array2) int count=0; for( ;len1=0&len2=0 ;len1-,len2-) if(array1len1-1=array2len2-1) count+; return count;int main() int result=0; int array1=1,3,5; int len1=3; int array2=77,12,1,3,5; int len2=5; result=array_compare( len1, array1, len2,
10、 array2); printf(the result is %d, result);约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3.n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。答案:#include#includetypedef struct Node int num; struct Node *next;LinkList;LinkList *creat(int n) LinkList *p,*q,*head; int i=1; p=(LinkList *
11、)malloc(sizeof(LinkList); p-num=i; head=p; for(i=2;inum=i; p-next=q; p=q; p-next=head; /*使链表尾指向链表头 形成循环链表*/ return head;void fun(LinkList *L,int m) int i; 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; /*使p指向新的起点*/ free(s);/*f
12、ree()与malloc()函数配对使用,释放malloc函数申请的动态内存*/ printf(%5dn,p-num);int main() LinkList *L; int n, m; n=9; m=5; L=creat(n); fun(L,m); return 0;手机号码合法性判断(20分)问题描述:我国大陆运营商的手机号码标准格式为:国家码+手机号码,例如:8613912345678。特点如下:1、 长度13位;2、 以86的国家码打头;3、 手机号码的每一位都是数字。请实现手机号码合法性判断的函数要求:1) 如果手机号码合法,返回0;2) 如果手机号码长度不合法,返回13) 如果手机
13、号码中包含非数字的字符,返回2;4) 如果手机号码不是以86打头的,返回3;【注】除成功的情况外,以上其他合法性判断的优先级依次降低。也就是说,如果判断出长度不合法,直接返回1即可,不需要再做其他合法性判断。要求实现函数:int s int verifyMsisdn(char* inMsisdn)【输入】 char* inMsisdn,表示输入的手机号码字符串。【输出】 无【返回】 判断的结果,类型为int。示例输入: inMsisdn = “869123456789“输出: 无返回: 1输入: inMsisdn = “88139123456789“输出: 无返回: 3输入: inMsisdn
14、 = “86139123456789“输出: 无返回: 0答案:#include#include#include#include#define LENGTH 13int verifyMsisdn(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 return 2 ; else
15、return 3; else return 1; return 0;int main() char *pchar=NULL; unsigned char ichar=3; int result; switch(ichar) case 0: pchar=8612345363789;break; case 1: pchar=861111111111111;break; case 2: pchar=86s1234536366; break; case 3: pchar=1392222222222;break; default: break; result =verifyMsisdn(pchar);
16、printf(result is %dn,result); return 0;约瑟夫问题问题描述:输入一个由随机数组成的数列(数列中每个数均是大于0的整数,长度已知),和初始计数值m。从数列首位置开始计数,计数到m后,将数列该位置数值替换计数值m,并将数列该位置数值出列,然后从下一位置从新开始计数,直到数列所有数值出列为止。如果计数到达数列尾段,则返回数列首位置继续计数。请编程实现上述计数过程,同时输出数值出列的顺序比如: 输入的随机数列为:3,1,2,4,初始计数值m=7,从数列首位置开始计数(数值3所在位置)第一轮计数出列数字为2,计数值更新m=2,出列后数列为3,1,4,从数值4所在位置
17、从新开始计数第二轮计数出列数字为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_
18、array=3,1,2,4,intlen=4,m=7输出:output_array=2,3,1,4答案:#include#include#includetypedef struct Node int num; struct Node *next;LinkList;LinkList *creat(int len , int input_array) LinkList *h,*s,*p; int i; h=(LinkList*)malloc(sizeof(LinkList); h-num=input_array0; p=h; for(i=1;inum=input_arrayi; p-next=s;
19、 p=s; p-next=h; return (h);void array_iterate(int len, int input_array, int m) LinkList *q,*p,*s; int i=0,j=0,k; int output_array4; p=creat(len,input_array); while(p-next!=p) for(i=1;inext; m=p-num; printf(%5d,m); output_arrayj+=m; s=p; q-next=p-next; p=p-next; free(s); s=NULL; m=p-num; printf(%5dn,
20、m); output_arrayj=p-num; k=j; for(j=0 ; j=k; j+) printf(%5d,output_arrayj); printf(n);int main() int input_array=3,1,2,4; int len=4; int m=7; array_iterate(len, input_array, m); return 0;问题:比较一个数组的元素是否为回文数组答案:#include #include void huiwen(char str) int i,len,k=1; len=strlen(str); for(i=0;ilen/2;i+)
21、if(stri!=strlen-i-1) k=1; break; if(k=0) printf(%s 不是一个回文数n,str); else printf(%s 是一个回文数n,str);main() char str100 = 0; int i; int len; printf(Input a string:); /*提示输入Input a string:*/ scanf(%s, str); /*scan()函数输入一个字符串:*/ huiwen(str); return 0;选秀节目打分,分为专家评委和大众评委,score 数组里面存储每个评委打的分数,judge_type 里存储与 sc
22、ore 数组对应的评委类别,judge_typei = 1,表示专家评委,judge_typei = 2,表示大众评委,n 表示评委总数。打分规则如下:专家评委和大众评委的分数先分别取一个平均分(平均分取整),然后,总分 = 专家评委平均分 * 0.6 + 大众评委 * 0.4,总分取整。如果没有大众评委,则 总分 = 专家评委平均分,总分取整。函数最终返回选手得分。 函数接口 int cal_score(int score, int judge_type, int n)答案:#include iostream using namespace std;int cal_score(int sco
23、re, int judge_type, int n) if(NULL=score|NULL=judge_type|0=n) return 0; int sum=0; int sum1=0,count1=0; int sum2=0,count2=0; for(int i=0;in;i+) if (judge_typei=1) sum1=sum1+scorei; count1+; else sum2=sum2+scorei; count2+; if(0=count2) sum=sum1/count1; else sum=(sum1/count1)*0.6+(sum2/count2)*0.4; re
24、turn sum; void main() int score3=12,13,15; int judge_type3=1,1,2; printf(%dn,cal_score(score, judge_type, 3) ); 问题:给定一个数组 input ,如果数组长度 n 为奇数,则将数组中最大的元素放到 output 数组最中间的位置,如果数组长度 n 为偶数,则将数组中最大的元素放到 output 数组中间两个位置偏右的那个位置上,然后再按从大到小的顺序,依次在第一个位置的两边,按照一左一右的顺序,依次存放剩下的数。例如:input = 3, 6, 1, 9, 7 output = 3,
25、 7, 9, 6, input = 3, 6, 1, 9, 7, 8 output = 1, 6, 8, 9, 7, 3 函数接口 void sort(int input, int n, int output)答案:#include iostream using namespace std; void bubblesort(int data,int n) int temp=0; for(int i=0;in;i+ ) for(int j=i+1;jn;j+) if (dataidataj) temp=datai; datai=dataj; dataj=temp; void sort(int input, int n, int output) int *sort_input=new intn; for(int i=0;in;i+) sort_inputi=inputi; bubblesort(sort_input,n); if(1=n%2) int mid=n/2; int k=0; outputmid=sort_inputk+; for(int j=1;j=n/2;j+) outputmid-j=sort_inputk+; outputmid+j=sort_inputk+;
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2