C语言上机练习题.docx
- 文档编号:2314930
- 上传时间:2022-10-28
- 格式:DOCX
- 页数:17
- 大小:36.38KB
C语言上机练习题.docx
《C语言上机练习题.docx》由会员分享,可在线阅读,更多相关《C语言上机练习题.docx(17页珍藏版)》请在冰豆网上搜索。
C语言上机练习题
C语言上机考试练习题
(1)
说明:
我们已经学习完成了基本数据类型、基本控制语句,以及数组、函数这些知识了,请同学们看看附件中的这些题目是否能够快速编写出来?
可能有个别题目与过去的练习有些重复,请尽量不要去参考过去的答案。
如果现在编写起来困难还很多,那你就要加倍努力了。
1、编写一个程序,判定一个字符串是否是另一个字符串的子串,若是,返回子串在主串中的位置。
要求:
(1)在主函数中输入两个字符串,调用子函数cmpsubstr()判断,并在主函数输出结果。
(2)子函数的返回值为-1表示未找到,否则返回子串的位置(起始下标)。
#include
#include
voidmain()
{
intcmpsubstr(char*s1,char*s2);
charstr1[20],str2[50];
char*s1=str1,*s2=str2;
gets(str1);
gets(str2);
printf("%d",cmpsubstr(s1,s2));
}
intcmpsubstr(char*s1,char*s2)
{
inti,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);
elsereturn(i-d+2);
}
2、输入一个字符串,内有数字和非数字字符,如:
a123x45617960?
302tab5876,将其中连续的数字作为一个整数,依次存放到数组a中。
例如,123放在a[0]中,456放在a[1]中等等,统计共有多少个整数,并输出这些整数。
要求:
(1)在主函数中输入字符串,并输出结果。
调用子程序处理字符串。
(2)子函数的返回值为整数的个数。
#include
#include
voidmain()
{
intsearch(char*str,int*sum);
charstr[100];
intd,sum[20],i;
gets(str);
d=search(str,sum);
for(i=0;i } search(char*str,int*sum) { inti,t=0,a=0; for(i=0;*(str+i)! ='\0';i++) { if(*(str+i)>='0'&&*(str+i)<='9') { if(a==0) { *(sum+t)=(int)(*(str+i)-'0'); a++; } else { *(sum+t)=*(sum+t)*10+(int)(*(str+i)-'0'); } } elseif(*(str+i-1)>='0'&&*(str+i-1)<='9') { t++; a=0; } } if(*(str+i-1)>='0'&&*(str+i-1)<='9')return(t+1); elsereturn(t); } 3、编写一个主函数和子函数tran(x,r),要求是: 函数tran(x,r)将十进制整数x转换成r进制数y(r在2-16之间),x和r的值由主调函数(即主函数)传入,y的值需要返回主调函数进行输出。 要求: y的值利用字符数组进行存储,数组的每一个元素存放y的一位数字字符。 #include #include #include #include voidmain() { char*tran(intx,intr); intx,r; char*y; printf("Pleaseinputx&r=\n"); scanf("%d,%d",&x,&r); y=tran(x,r); puts(y); } char*tran(intx,intr) { intlen1,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(t<10) *(y1+i)=(char)(t+48); else*(y1+i)=(char)(t+87); x=(int)x/r; } *(y1+i)='\0'; len2=strlen(y1); y2=(char*)malloc(len2*sizeof(char)); for(i=0;i { *(y2+i)=*(y1+len2-i-1); } *(y2+i)='\0'; return(y2); } 4、编写一个主函数和函数tran(x),要求是: (1)函数tran(x)产生支付指定金额x(如234.78元)的各种面额人民币的数量(注意: 尽量支付大面额的人民币),要求按100元、50元、10元、1元、5角、1角、5分、1分八种面额进行统计,产生的结果存放在数组中返回主函数。 (2)在主函数中输入一金额,并以该金额调用tran函数,并输出该函数返回的统计结果。 5、编写程序实现将键盘输入的一行字符按单词倒排输出。 如键盘输入“Iloveyou”,屏幕显示“youloveI”。 要求: (1)编写一个函数intinvertion(charch1[],charch2[])实现按单词倒排字符串,第一个形参ch1接受实参传过来的原字符串,倒排后的新字符串通过第二个形参返回主函数,函数中还需要统计该字符串中共有多少个单词,函数最后返回字符串中包含的单词个数。 (2)主函数中输入字符串,调用子函数invertion,输出倒排后的字符串及字符串中包含的单词个数。 #include #include #include #include voidmain() { intinvertion(charch1[],charch2[]); intlen; char*ch1,*ch2; ch1=(char*)malloc(100); ch2=(char*)malloc(100); gets(ch1); len=invertion(ch1,ch2); puts(ch2); printf("%d\n",len); } intinvertion(charch1[],charch2[]) { inti,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)=*(ch1+i);//将ch1的单词转移到str上// t++; } else { sum++;//单词个数加一// *(ch2+len1)=''; len1=len1-t; for(j=0;j t=0; len1--; } } sum++;//最后一个单词转移到ch2上// *(ch2+len1)=''; len1=len1-t; for(j=0;j *(ch2+len)='\0'; return(sum); } 6、编写一个主函数以及一个函数maxlong(str)。 要求是: (1)函数maxlong(str)找出字符串str中包含的第一个最长单词(用字符数组进行存储),并返回主调函数。 (2)在主函数中输入一个字符串,假定输入字符串中只含字母和空格,空格用来分割不同单词;以该字符串作为参数调用maxlong函数,并输出返回的结果。 #include #include #include #include voidmain() { char*maxlong(char*str); charstr[100],*str0; gets(str); str0=maxlong(str); puts(str0); } char*maxlong(char*str) { char*word,*str0; intt=0,i,max=0; for(i=0;*(str+i)! ='\0';i++) { if(*(str+i)! ='')t++;//t为单词字母个数// else { if(t>max)//比较t与之前最大的单词个数的大小// { word=(str+i-t); max=t; } t=0;//t初始化// } } if(t>max)//最后一个单词在循环中没有比较// { word=(str+i-t); max=t; } str0=(char*)malloc(max+1); for(i=0;i { *(str0+i)=*(word+i);//将最大的单词赋给str0// } *(str0+i)='\0'; return(str0); } 7、编写一个函数ad(a,m,n)找出一个m行n列的二维数组a中的“鞍点”;在主函数中输入二维数组的值(假设数组中任意两个数都不相等),并将它作为实参调用ad函数。 所谓“鞍点”是指该位置上的元素在该行上最大,在该列上最小;一个二维数组中可能没有鞍点。 #include #include #include #include voidmain() { int**input(intm,intn); voidprint(int**p,intm,intn); intad(int**p,intm,intn); int**p,m,n; while(! ad(p,m,n)){ printf("请输入行数: m,列数: n.\n"); m=n=7; p=input(m,n); print(p,m,n);} } intad(int**p,intm,intn)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 上机 练习题
![提示](https://static.bdocx.com/images/bang_tan.gif)