还剩30页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
C语言上机考试练习题1阐明我们已经学习完成了基本数据类型、基本控制语句,以及数组、函数这些知识了,请同学们看看附件中的这些题目是否能够迅速编写出来?也许有个别题目与过去的练习有些重复,请尽也许不要去参考过去的答案假如目前编写起来困难还诸多,那你就要加倍努力了、编写一个程序,判定一个字符串是否是另一个字符串的子串,若是,返回1子串在主串中的位置要求1在主函数中输入两个字符串,调用子函数cmpsubstrO判断,并在主函数输出成果2子函数的返回值为表示未找到,否则返回子串的位置起始下标#includestdio.h#includestring.hvoid main{int cmpsubstrchar*sl,char*s2;char strl
[20],str2
[50];char*sl=strl,*s2=str2;gets strl;gets str2;printf z/%d/z,cmpsubstr si,s2;t=0;lenl一;sum++;〃最后一个单词转移到ch2上〃*ch2+lenl=,;lenl=lenl-t;forj=0;jt;j++*ch2+j+lenl=*str+j;*ch2+len=\0;returnsum;}
6、编写一个主函数以及一个函数maxlongstr要求是1函数maxlongstr找出字符串str中包括的第一个最长单词用字符数组进行存储,并返回主调函数2在主函数中输入一个字符串,假定输入字符串中只含字母和空格,空格用来分割不一样单词;以该字符串作为参数调用maxlong函数,并输出返回的成果#includestdio.h#includestring.h#includemath.h#includemalloc.h voidmain{char*maxlongchar*str;char str
[100],*str0;gets str;strO=maxlong str;puts strO;}char*maxlongchar*str{char*word,*str0;int t=0,i,max=0;for i=0;*str+i!=,\0J;i++if*str+i!=t++;〃t为单词字母个数〃elseif tmax〃比较t与之前最大的单词个数的大小〃word=str+i-t;max=t;t=0;//t初始化〃if tmax〃最后一个单词在循环中没有比较〃word=str+i-t;max=t;strO=char*mallocmax+1;for i=0;imax;i++{*strO+i=*word+i;//将最大的单词赋给strO//}*strO+i=\0’;return strO;
7、编写一个函数ad a,m,n找出一个m行n列的二维数组a中的“鞍点”;在主函数中输入二维数组的值假设数组中任意两个数都不相等,并将它作为实参调用ad函数所谓“鞍点”是指该位置上的元素在该行上最大,在该列上最小;一个二维数组中也许没有鞍点#includestdio.h#includemalloc.h#includestring.h#includetime.hvoid mainint**inputint m,int n;void print int m,int n;int adint**p,int m,int n;int**p,m,n;while!adp,m,n{printf”请输入行数m,列数n.\n;m=n=7;p=input m,n;print p,m,n;}int adint**p,int m,int nint i,j,k,s,max,1,time=O;fori=0;im;i++{for j=0;jn;j++//max为一行最大值〃if j==0{max=**p+i+j;l=j;else{ifmax**p+i+jniax=**p+i+j;l=j;s=0;for k=0;km;k++ifmax**p+k+1{s=l;break;if s==0printf,zN
0.%d rowNO.%d line:%d\n”,i+1,1+1,**p+i+l;time++;return time;}int**inputint m,int n〃建造一个m行,n列二维数组〃{int**p;int i,j;p=int**mallocm*sizeof int*;*p+i=int*mallocn*sizeofint;srandtimeNULL;////fori=0;im;i++{forj=0;jn;j++**p+i+j=rand%100;//给数组赋值//return p;}void print int**p,int m,int n{int i,j;for i=0;im;i++printf〃第%1行为:\n〃,i+1;forj=0;jn;j++printf**p+i+j;printf〃\n〃;}
8、编写主函数和两个递归函数sum a,n、max a,n要求是1函数sum a,on求数组a中前n个元素之和,并返回求得的和值2函数max a,n求数组a中前n个元素中的最大值,并返回求得的最大值3主函数输入任意10个正整数给数组,调用sum函数求数组中的10个元素之和,并输出求得的和值;调用max函数求数组中10个元素的最大值,并输出求得的最大值#includestdio.h#includemalloc.h#includetime.h voidmain{int sumint*a,int n;int*input int n;int maxint*a,int n;int*s,n=10;s=input n;printf〃%5d,%5d\n〃,sum s,n,max s,n;int*inputint n{int i;a=int*maHocsizeof int*n;srandtimeNULL;for i=0;in;i++{*a+i=rand%100;printf〃%4d〃,*a+i;}printf〃\n〃;return a;}int maxint int n{int m;ifn==lreturn*a;else m=max a,n-l;ifm*a+n-lreturn m;else return*a+n-l;}int sumint int nif n=l return*a;else return*a+n-1+suma,n-1;}、编写一个递归程序,利用折半查找法在一个升序数组中查找一个数,假如9查找成功,则输出它是第几个数,否则输出“No Find.o#includestdio.h#includemalloc.h#includetime.hvoid main{int*inputint n;void printint*s,int n;int cmpsubstrchar*sl,char*s2inti,d,a=0,situation三;d=strlensl;for i=0;*s2+i!=,\0,;i++{if*sl+a==*s2+i[a++;ifa==dsituation=l;break;}}elsevoid sortint*s,int n;int searchint*s,int n,int key;int*s,n=10,key,d;s=inputn;print s,n;sort s,n;print s,n;scanf%d”,key;d=searchs,n,key;ifd!=0printf^The keyis atNO.%d.\n”,d;else printfzzN0FIND\n;int searchint*s,int n,int keyint m,d;ifn==lif*s==keyreturn1;else return0;elsem=n/2;if d=searchs,m,keyreturndelse ifd=searchs+m,n-m,keyreturnd+m;else return0;int*inputint nint*a,i;a=int*mallocsizeof int*n;srandtimeNULL;for i=0;in;i++*a+i=rand%100;returna;void printint*s,int ninti;for i=0;in;i++printf/z%4d^,*s+i;printf\n;void sortint*s,int n{inti,j,temp;for i=0;in-l;i++forj=0;jn-l-i;j++if*s+j*s+j+Dtemp=*s+j;*s+j=*s+j+l;*s+j+l=temp;
10、用递归法实现对于一个正整数n n是一个不超出8位的任意正整数,由键盘输入,1次序输出它的各位数;2判断它是一个几位数如输入:56439;则输出5,6,4,3,95要求不允许使用数组;在递归函数中次序输出该数的各位数,该数的位数则必须在主函数中输出#includestdio.h#includemalloc.h#includestring.hvoid main{int fint n;int n,d;scanf〃%d〃,n;d=fn;printf(\n个数为%d\n〃,d);int fint nint d;if(n10)d=l;else d=f((int)n/10)+1;printf(z,%d”,n%10);return(d);}
11、输入一个日期(年、月、日),并输入该年的元旦(即1月1日)是星期几(星期
一、星期
二、…、星期
六、星期日分别用数字
1、
2、…、
6、7表示),计算该日期在本年中是第几天、星期几(注意润年问题)?要求写两个函数days和week,分别实现计算该日期在本年中是第几天和星期几由主函数将日期传递给days函数,并将计算得到的成果返回给主函数输出;由主函数将日期及元旦的星期几传递给week函数,并将计算得到的成果返回给主函数输出
12、编写一个主函数以及一个函数merge要求是
(1)函数merge对两个已是升序的数组a、b进行归并,归并后的成果仍然是升序的,并将归并成果返回给主调函数
(2)主函数定义长度为5的数组a,并升序初始化;定义长度为8的数组b,并升序初始化;调用merge函数对数组a、b进行归并,并输出归并后返回的成果、编写一个子函数求两个正整数的最大条约数和一个子函数求两个数的最小13公倍数再写一个主函数,在主函数中输入两个正整数,在调用子函数求最大条约数和最小公倍数#includestdio.hvoid mainint m,n;int maxintm,int n;int min intm,intn;scanfH%d,%dn,m,n;printfn%d,%d\nn,maxm,n,minm,n;int minintm,int ninttemp;ifmntemp=n;n=m;m=temp;whilem!=Otemp=n%m;n=m;m=temp;}returnn;}int maxintm,int nintminintm,intn;returnm*n/minm,n;
14、编写一个排序子函数sort,和折半查找子函数find主函数的功效是:输入组数后,调用sort排序,输出数组;再输入一个数给key,在调用find查找,并输出查找成果、编写一个索引排序函数主函数的功效呢个是输入未排序的原始数组15index调用进行索引,函数将按照从小到大排好序的索引数组A,index index返回给主函数,在主函数中分别输出数组与B AB索引数组保存原始数组的下标,通过索引,不变化数组只变化数组B AA,B,就能够完成对的排序如图所示:Aif situation==0return-1;else returni-d+2;}
2、输入一个字符串,内有数字和非数字字符,如al23x45617960302tab5876,将其中连续的数字作为一个整数,依次存储到数组a中例如,123放在a
[0]中,456放在a[l]中等等,统计共有多少个整数,并输出这些整数要求1在主函数中输入字符串,并输出成果调用子程序处理字符串2子函数的返回值为整数的个数#includestdio.h#includestring.hvoid mainiint searchchar*str,int*suni;char str
[100];intd,sum
[20],i;gets str;d=search str,sum;for i=0;id;i++printf〃%d\n〃,*sum+i;searchchar*str,int*suminti,t=0,a=0;for i=O;*str+i!=\0;i++if*str+i=,O*str+i=,9if a=0{*sum+t=int*str+iO;a++;else{*sum+t=*sum+t*10+int*str+i O;else if*str+i-1=,O*str+i-1=,9t++;a=0;if*str+iT=O*str+i-1〈二9return t+1;else returnt;}
3、编写一个主函数和子函数tranx,r,要求是函数tranx,r将十进制整数x转换成r进制数y r在2—16之间,x和r的值由主调函数即主函数传入,y的值需要返回主调函数进行输出要求y的值利用字符数组进行存储,数组的每一个元素存储y的一位数字字符#includestdio.h#includestring.h#includemalloc.h#includemath.hvoid main{char*tranint x,int r;int x,r;char*y;printf Pleaseinput xr=\n〃;scanf%d,%d〃,x,r;y=tran x,r;putsy;}char*tranint x,int rint lenl,len2,i,t;char*yl,*y2;lenl=2+intlogdoublex/log doubler;yl=char*malloclenl*sizeof char;for i=0;x!=0;i++{t=x%r;ift10*yl+i=char t+48;else*yl+i=char t+87;x=intx/r;Ien2=strlen yl;y2=char*malloclen2*sizeof char;for i=0;ilen2;i++{*y2+i=*yl+len2-i-l;*y2+i=\0;return y2;}4编写一个主函数和函数tranx,要求是1函数tranx产生支付指定金额x如
234.78元的各种面额人民币的数量注意尽也许支付大面额的人民币,要求按100元、50元、10元、1元、5角、1角、5分、1分八种面额进行统计,产生的成果存储在数组中返回主函数2在主函数中输入一金额,并以该金额调用tran函数,并输出该函数返回的统计成果
5、编写程序实现将键盘输入的一行字符按单词倒排输出如键盘输入“I loveyou”,屏幕显示“you loveI要求1编写一个函数intinvertion char chi[],char ch2口实现按单词倒排字符串,第一个形参Chi接收实参传过来的原字符串,倒排后的新字符串通过第二个形参返回主函数,函数中还需要统计该字符串中共有多少个单词,函数最后返回字符串中包括的单词个数2主函数中输入字符串,调用子函数invertion,输出倒排后的字符串及字符串中包括的单词个数#includestdio.h#includestring.h#includemath.h#includenialloc.hvoid main{int invertionchar chi[],charch2[];intlen;char*chl,*ch2;chl=char*malloc100;ch2=char*malloc100;gets chi;len=invertion chi,ch2;puts ch2;printf//%d\n//,len;int invertioncharchi[],charch2[]inti,i,t=0,lenl,len,sum=O;char*str;str=char*malloc10;for i=0,len=0;*chl+i\0J;i++,len++;lenl=len;fori=0;*chl+i!=,\05;i++if*chl+i!={*str+t=*chl+i;〃将chi的单词转移到str上〃t++;else{sum++;〃单词个数加一〃*ch2+lenl=’;lenl=lenl-t;forj=0;jt;j++*ch2+j+lenl=*str+j;〃将str转移到ch2上〃。
个人认证
优秀文档
获得点赞 0