上机考试常有算法(不含计算问题)

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

全国二级C语言上机典型题型运用/和%分离整数的各位1:请编写函数fun,其功能是:将两个两位数的正整数a、b合并形成一个整数放在c中。合并的方式是:将a数的十位和个位数依次放在c数个位和十位上,b数的十位和个位数依次放在c数的百位和千位上。例如,当a=16,b=35,调用该函数后,c=5361。#includestdio.hvoidfun(inta,intb,long*c){*c=(b%10)*1000+(b/10)*100+(a%10)*10+a/10;}2:数组xx[N]保存着一组3位数的无符号正整数,其元素的个数通过变量num传入函数fun()。请补充函数fun(),该函数的功能是:从数组xx中找出个位和百位的数字相等的所有无符号整数,结果保存在数组yy中,其个数由函数fun()返回。例如:当xx[8]={135,78,72,32,222,424,333,141,541}时,bb[6]={787,232,222,424,333,141}。#includeconio.h#defineN1000intfun(intxx[],intbb[],intnum){inti,n=0;intg,b;for(i=0;inum;i++){g=xx[i]%10;b=xx[i]/100;if(g==b)bb[n++]=xx[i];}returnn;}3:以下程序可把输入的十进制数以十六进制数的形式输出。69-2main(){charb[17]={0123456789ABCDEF};intc[64],d,i=0,base=16;longn;printf(Enteranumber:\n);scanf(%ld,&n);do{c[i]=n%base;i++;n=n/base;}while(n!=0);printf(Transmitenewbase:\n);for(--i;i=0;--i){d=c[i];printf(%c,b[d]);}printf(\n);}4:请补充函数fun(),该函数的功能是:把一个整数转换成字符串,并倒序保存在字符数组str中。例如:当n=13572468时,str=86427531。#includestdio.h#includeconio.h#defineN80charstr[N];voidfun(longintn){inti=0;while(n0){str[i]=n%10+'0';n/=10;i++;}str[i]='\0';}数组特殊位置元素的确定1:下列程序定义了N×N的二维数组,并在主函数中赋值。请编写函数fun(),函数的功能是:求出数组周边元素的平方和并作为函数值返回给主函数中的s。#defineN5intfun(intw[][N]){inti,j,k=0;ints=0;for(i=0;iN;i++)for(j=0;jN;j++)if(i==0||i==N-1||j==0||j==N-1)/*只要下标中有一个为0或N-1,则它一定是周边元素*/{s=s+w[i][j]*w[i][j];/*将周边元素求平方和*/}returns;/*返回周边元素的平方和*/}2:下列程序定义了N×N的二维数组,并在主函数中自动赋值。请编写函数fun(inta[][N],intn),该函数的功能是:使数字右(左)上半三角元素中的值乘以m。#defineN5intfun(inta[][N],intm){inti,j;for(i=0;iN;i++)for(j=i;jN;j++)a[i][j]=a[i][j]*m;}最大公约数与最小公倍数1:请补充main函数,该函数的功能是:输入两个正整数m和n,求这两个数的最大公约和最小公倍数。(题盘34-283-2)#includestdio.hmain(){inta,b,n,m,t;printf(\nInputtwonumbers:\n);scanf(%d,%d,&n,&m);if(nm){a=m;b=n;}else{a=n;b=m;}while(b!=0){t=a%b;a=b;b=t;}printf(greatestcommondivisor:%d\n,a);printf(leastcommonmultiple:%d\n,n*m/a);}判断素数1:请编写一个函数voidfun(intm,intk,intxx[]),该函数的功能是:将大于整数m且紧靠m的k个非素数存入所指的数组中。例如,若输入15,5,则应输出16,18,20,21,22。voidfun(intm,intk,intxx[]){inti,j,n;for(i=m+1,n=0;nk;i++)/*找大于m的非素数,循环k次,即找出紧靠m的k个非素数*/for(j=2;ji;j++)/*判断一个数是否为素数*/if(i%j==0){xx[n++]=i;/*如果不是素数,放入数组xx中*/break;/*并跳出本层循环,判断下一个数*/}}字符串逆序存放1:请补充函数fun(),该函数的功能是:把从主函数中输入的字符串str2倒置后接在字符串str1后面。例如:str1=Howdo,str2=?oduoy,结果输出:Howdoyoudo?。#defineN40voidfun(char*str1,char*str2){inti=0,j=0,k=0,n;charch;char*p1=str1;char*p2=str2;while(*(p1+i))i++;while(*(p2+j))j++;n=j--;for(;k=j/2;k++,j--){ch=*(p2+k);*(p2+k)=*(p2+j);*(p2+j)=ch;}*(p2+n)='\0';for(;*p2;i++)*(p1+i)=*p2++;*(p1+i)='\0';}2:补充函数fun(char*s),该函数的功能是把字符串中的内容逆置。例如:字符串中原有的字符串为abcde,则调用该函数后,串中的内容变为edcba。#includestring.h#includeconio.h#includestdio.h#defineN81voidfun(char*s){inti=0,n=strlen(s);chart;for(;in/2;i++){t=*(s+i);*(s+i)=*(s+n-1-i);*(s+n-1-i)=t;}}字符串中特定字符或字符串的统计1:请补充函数fun(),该函数的功能是:按‘0’到‘9’统计一个字符串中的奇数数字字符各自出现的次数,结果保存在数组num中。注意:不能使用字符串库函数。例如:输入x=112385713.456+0.909*bc,结果为:1=3,3=2,5=2,7=1,9=2。#includestdio.h#defineN1000voidfun(char*tt,intnum[]){inti,j;intbb[10];char*p=tt;for(i=0;i10;i++){num[i]=0;bb[i]=0;}while(*p){if(*p='0'&&*p='9')bb[*p-'0']++;p++;}for(i=1,j=0;i10;i=i+2,j++)num[j]=bb[i];}2:str是全部由小写字母字符和空格字符组成的字符串,由num传入字符串的长度。请补充函数fun(),该函数的功能是:统计字符串str中的单词个数,结果由变量num传回。每个单词之间都由空格隔开,并且字符串str开始不存在空格。例如:str=howdoyoudo,结果为:num=4。#defineN80voidfun(char*s,int*num){inti,n=0;for(i=0;i*num;i++){if(s[i]='a'&&s[i]='z'&&(s[i+1]==''||s[i+1]=='\0'))n++;}*num=n;}3:请补充函数fun(),该函数可以统计一个长度为n的字符串在另一个字符串中出现的次数。例如,假定输入的字符串为:asdascasdfgasdasasdmlosd,子字符串为asd,则应输出4。intfun(char*str,char*substr){intn;char*p,*r;n=0;while(*str){p=str;r=substr;while(*r)if(*r==*p){r++;p++;}elsebreak;if(*r=='\0')n++;str++;}returnn;}字符串移动1:下列给定程序中,函数fun()的功能是:在字符串str中找出ASCⅡ码值最小的字符,将其放在第一个位置上,并将该字符前的原字符向后顺序移动。例如,调用fun()函数之前给字符串输入fagAgBDh,调用后字符串中的内容为AfaggBDh。voidfun(char*p){charmin,*q;inti=0;min=p[i];while(p[i]!=0){if(minp[i]){q=p+i;min=p[i];}i++;}while(qp){*q=*(q-1);q--;}p[0]=min;}循环左移算法1:请编写函数fun(),该函数的功能是:移动一维数组中的内容,若数组中有n个整数,要求把下标从0到p(p≤n-1)的数组元素平移到数组的最后。例如,一维数组中的原始内容为1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,p的值为3。移动后,一维数组中的内容应为5,6,7,8,9,10,11,12,13,14,15,1,2,3,4。#includestdio.h#defineN80voidfun(int*w,intp,intn){inti,j,t;for(i=0;i=p;i++)/*循环左移p+1次*/{t=w[0];for(j=1;jn;j++)/*实现循环左移*/w[j-1]=w[j];w[j-1]=t;}}2:请编写函数fun(),该函数的功能是:移动字符串中的内容,移动的规则是把第1到第m个字符,平移到字符串的最后,把第m+1到最后的字符移到字符串的前部。例如,字符串中原有的内容为ABCDEFGHIJK,m的值为3,移动后,字符串中的内容应该是DEFGHIJKABC。#defineN80voidfun(char*w,intm){inti,j;chart;for(i=1;i=m;i++)/*进行m次的循环左移*/{t=w[0];for(j=1;w[j]!='\0';j++)/*从第2个字符开始以后的每个字符都依次前移一个字符*/w[j-1]=w[j];w[j-1]=t;/*将第1个字符放到最后一个字符中*/}}数据的折半查找算法1:N个有序整数数列已放在一维数组中,给定下列程序中,函数fun()的功能是:利用折半查找算法查找整数m在数组中的位置。若找到,则返回其下标值;反之,则返回-1。折半查找的基本算法是:每次查找前先确定数组中待查的范围:low和high(lowhigh),然后把m与中间位置(mid)中元素的值进行比较。如果m的值大于中间位置元素中的值,则下一次的查找范围放在中间位置之后的元素中;反之,下次查找范围落在中间位置之前的元素中。直到lowhigh,查找结束。(题盘33-2)#defineN10intfun(inta[],intm){intlow=0,high=N-1,mid;while(low=high){mid=(low+high)/2;if(ma[mid])high=mid-1;elseif(ma[mid])low=mid+1;elsereturn(mid);}return(-1);}数据的插入1:请补充main函数,该函数的功能是:把一个整数插入到一个已经按从小到大排序的数组中。插入后,数组仍然有序。#defineN10main(){inti,j;intn;intbb[N+1]={12,23,31,44,51,63,71,79,85,95};scanf(%d,&n);printf(\nn=%d,n);for(i=0;iN

1 / 35
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功