




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、.c语言上机考试练习题(1)说明:我们已经学习完成了基本数据类型、基本控制语句,以及数组、函数这些知识了,请同学们看看附件中的这些题目是否能够快速编写出来?可能有个别题目与过去的练习有些重复,请尽量不要去参考过去的答案。如果现在编写起来困难还很多,那你就要加倍努力了。1、编写一个程序,判定一个字符串是否是另一个字符串的子串,若是,返回子串在主串中的位置。要求:(1)在主函数中输入两个字符串,调用子函数cmpsubstr()判断,并在主函数输出结果。(2)子函数的返回值为-1表示未找到,否则返回子串的位置(起始下标)。#include#includevoid main()int cmpsubst
2、r(char *s1,char *s2);char str120,str250;char *s1=str1,*s2=str2;gets(str1);gets(str2);printf(%d,cmpsubstr(s1,s2);int cmpsubstr(char *s1,char *s2)int i,d,a=0,situation=0;d=strlen(s1);for(i=0;*(s2+i)!=0;i+)精品.if(*(s1+a)=*(s2+i)a+;if(a=d)situation=1;break;else a=0;if(situation=0)return(-1);else return(i
3、-d+2);2、输入一个字符串,内有数字和非数字字符,如:a123x456 17960?302tab5876,将其中连续的数字作为一个整数,依次存放到数组a中。例如,123放在a0中,456放在a1中等等,统计共有多少个整数,并输出这些整数。要求:(1)在主函数中输入字符串,并输出结果。调用子程序处理字符串。(2)子函数的返回值为整数的个数。#include#includevoid main()int search(char *str,int *sum);char str100;精品.int d,sum20,i;gets(str);d=search(str,sum);for(i=0;i=0&*
4、(str+i)=0&*(str+i-1)=0&*(str+i-1)=9)return(t+1);精品.else return(t);3、编写一个主函数和子函数tran(x, r),要求是:函数tran(x, r)将十进制整数x转换成r进制数y(r在之间),x和r的值由主调函数(即主函数)传入,y的值需要返回主调函数进行输出。要求:y的值利用字符数组进行存储,数组的每一个元素存放y的一位数字字符。#include#include#include#includevoid main()char* tran(int x,int r);int x,r;char *y;printf(please inpu
5、t x & r =n);scanf(%d,%d,&x,&r);y=tran(x,r);puts(y);char* tran(int x,int r)int len1,len2,i,t;char *y1,*y2;len1=2+(int)log(double)x)/log(double)r);y1=(char*)malloc(len1*sizeof(char);for(i=0;x!=0;i+)t=x%r;精品.if(t10)*(y1+i)=(char)(t+48);else *(y1+i)=(char)(t+87);x=(int)x/r;*(y1+i)=0;len2=strlen(y1);y2=(
6、char*)malloc(len2*sizeof(char);for(i=0;ilen2;i+)*(y2+i)=*(y1+len2-i-1);*(y2+i)=0;return(y2);4、编写一个主函数和函数tran(x),要求是:(1)函数tran(x)产生支付指定金额x(如234.78元)的各种面额人民币的数量(注意:尽量支付大面额的人民币),要求按元、5元、元、元、角、角、分、分八种面额进行统计,产生的结果存放在数组中返回主函数。(2)在主函数中输入一金额,并以该金额调用tran函数,并输出该函数返回的统计结果。5、编写程序实现将键盘输入的一行字符按单词倒排输出。如键盘输入“i love
7、 you”,屏幕显示“you love i”。要求:(1) 编写一个函数intinvertion(char ch1, char ch2)实现按单词倒排字符串,第一个形参ch1接受实参传过来的原字符串,倒排后的新字符串通过第二个形参返回主函数,函数中还需要统计该字符串中共有多少个单词,函数最后返回字符串中包含的单词个数。(2) 主函数中输入字符串,调用子函数invertion,输出倒排后的字符串及字符串中包含的单词个数。精品.#include#include#include#includevoid main()int invertion(char ch1, char ch2);int len;c
8、har *ch1,*ch2;ch1=(char*)malloc(100);ch2=(char*)malloc(100);gets(ch1);len=invertion(ch1,ch2);puts(ch2);printf(%dn,len);int invertion(char ch1, char ch2)int i,j,t=0,len1,len,sum=0;char *str;str=(char*)malloc(10);for(i=0,len=0;*(ch1+i)!=0;i+,len+);len1=len;for(i=0;*(ch1+i)!=0;i+)if(*(ch1+i)!= )*(str+t
9、)=*(ch1+i);/将ch1的单词转移到str上/精品.t+;elsesum+;/单词个数加一/*(ch2+len1)= ;len1=len1-t;for(j=0;jt;j+)*(ch2+j+len1)=*(str+j);/将str转移到ch2上/t=0;len1-;sum+;/最后一个单词转移到ch2上/*(ch2+len1)= ;len1=len1-t;for(j=0;jt;j+)*(ch2+j+len1)=*(str+j);*(ch2+len)=0;return(sum);6、编写一个主函数以及一个函数maxlong(str)。要求是:(1)函数maxlong(str)找出字符串st
10、r中包含的第一个最长单词(用字符数组进行存储),并返回主调函数。(2)在主函数中输入一个字符串,假定输入字符串中只含字母和空格,空格用来分割不同单词;以该字符串作为参数调用maxlong函数,并输出返回的结果。#include#include#include精品.#includevoid main()char *maxlong(char *str);char str100,*str0;gets(str);str0=maxlong(str);puts(str0);char *maxlong(char *str)char *word,*str0;int t=0,i,max=0;for(i=0;*(
11、str+i)!=0;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;str0=(char*)malloc(max+1);for(i=0;imax;i+)*(str0+i)=*(word+i);/将最大的单词赋给str0/*(str0+i)=0;return(str0);7、编写一个函数ad(a, m, n)找出一个m行n列的二维数组a中的“鞍点”;在主函数中输入二
12、维数组的值(假设数组中任意两个数都不相等),并将它作为实参调用ad函数。所谓“鞍点”是指该位置上的元素在该行上最大,在该列上最小;一个二维数组中可能没有鞍点。#include#include#include#includevoid main()int *input(int m,int n);void print(int*p,int m,int n);int ad(int *p,int m,int n);int *p,m,n;while(!ad(p,m,n)printf(请输入行数:m,列数:n.n);m=n=7;p=input(m,n);print(p,m,n);精品.int ad(int *
13、p,int m,int n)int i,j,k,s,max,l,time=0;for(i=0;im;i+)for(j=0;jn;j+)/max为一行最大值/if(j=0)max=*(*(p+i)+j);l=j;elseif(max*(*(p+i)+j)max=*(*(p+i)+j);l=j;s=0;for(k=0;k*(*(p+k)+l)s=1;break;if(s=0)精品.printf(no.%d row no.%d line:%dn,i+1,l+1,*(*(p+i)+l);time+;return(time);int *input(int m,int n) /建造一个m行,n列二维数组/
14、int *p;int i,j;p=(int*)malloc(m*sizeof(int*);for(i=0;im;i+)*(p+i)=(int*)malloc(n*sizeof(int);srand(time(null);/for(i=0; im; i+) for(j=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( 第%d行为:n,i+1);for(j=0;jn;j+)printf(%4d,*(*(p+i)+j);prin
15、tf(n);8、编写主函数和两个递归函数sum(a, n)、max(a, n)。要求是:(1)函数sum(a, n)求数组a中前n个元素之和,并返回求得的和值。(2)函数max(a, n)求数组a中前n个元素中的最大值,并返回求得的最大值。(3)主函数:输入任意10个正整数给数组,调用sum函数求数组中的10个元素之和,并输出求得的和值;调用max函数求数组中10个元素的最大值,并输出求得的最大值。#include#include#includevoid main()int sum(int *a,int n);int *input(int n);int max(int *a,int n);in
16、t *s,n=10;s=input(n);printf(%5d,%5dn,sum(s,n),max(s,n);int *input(int n)精品.int *a,i;a=(int *)malloc(sizeof(int)*n);srand(time(null);for(i=0;i*(a+n-1)return(m);else return(*(a+n-1);int sum(int *a,int n)if(n=1)return(*a);else return(*(a+n-1)+sum(a,n-1);9、编写一个递归程序,利用折半查找法在一个升序数组中查找一个数,如果查找成功,则输出它是第几个数,
17、否则输出“no find.”。精品.#include#include#includevoid main()int *input(int n);void print(int *s,int n);void sort(int*s,int n);int search(int *s,int n,int key);int *s,n=10,key,d;s=input(n);print(s,n);sort(s,n);print(s,n);scanf(%d,&key);d=search(s,n,key);if(d!=0)printf(the key is at no.%d.n,d);else printf(no
18、 findn);int search(int *s,int n,int key)int m,d;if(n=1)if(*s=key)return(1);else return(0);精品.else m=n/2;if(d=search(s,m,key)return(d);else if(d=search(s+m,n-m,key)return(d+m);else return(0);int *input(int n)int *a,i;a=(int *)malloc(sizeof(int)*n);srand(time(null);for(i=0;in;i+)*(a+i)=rand() %100;ret
19、urn(a);void print(int *s,int n)int i;for(i=0;in;i+)printf(%4d,*(s+i);printf(n);void sort(int*s,int n)int i,j,temp;for(i=0;in-1;i+)精品.for(j=0;j*(s+j+1)temp=*(s+j);*(s+j)=*(s+j+1);*(s+j+1)=temp;10、用递归法实现:对于一个正整数n(n是一个不超过8位的任意正整数,由键盘输入),(1)顺序输出它的各位数;(2)判断它是一个几位数。如输入:56439;则输出: 5,6,4,3,95要求:不允许使用数组;在递归函
20、数中顺序输出该数的各位数,该数的位数则必须在主函数中输出。#include#include#includevoid main()int f(int n);int n,d;scanf(%d,&n);d=f(n);printf(n个数为%dn,d);精品.int f(int n)int d;if(n10)d=1;else d=f(int)n/10)+1;printf(%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,并
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 营养师考试应试技巧和试题及答案
- 2024演出经纪人资格证考试复习计划及试题答案
- 如何开展中介机构的风险管理的试题及答案
- 房地产经纪资格考试要点与试题关联分析
- 2024年营养师考试过关技巧与答案
- 2024演出经纪人资格考试题
- 社交媒体与演出经纪人资格证试题及答案
- 演出经纪人资格考试要点总结
- 疾速提升:2025年房地产经纪试题及答案技巧
- 演出经纪人资格证核心知识点与试题及答案
- 宫颈癌筛查与预防:2025年健康教育
- 绵阳市高中2022级(2025届)高三第二次诊断性考试(二诊)语文试卷(含答案)
- 四川省成都市2025届高三一诊考试英语试卷含解析
- 数据库租赁协议合同
- 2025年社区老年协会工作计划
- 2024年民法知识考试全套复习提纲
- 中华护理学会老年人误吸的预防团体标准解读
- 公司绿色可持续发展规划报告
- 用章审批流程
- 高速铁路桥隧养护维修 课件 2 桥隧养护维修工作的基本方法和基本内容
- DB37T 3651-2019 汽车加油站安全生产风险管控和隐患排查治理体系建设实施指南
评论
0/150
提交评论