C语言上机练习题.docx

上传人:b****2 文档编号:2314930 上传时间:2022-10-28 格式:DOCX 页数:17 大小:36.38KB
下载 相关 举报
C语言上机练习题.docx_第1页
第1页 / 共17页
C语言上机练习题.docx_第2页
第2页 / 共17页
C语言上机练习题.docx_第3页
第3页 / 共17页
C语言上机练习题.docx_第4页
第4页 / 共17页
C语言上机练习题.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

C语言上机练习题.docx

《C语言上机练习题.docx》由会员分享,可在线阅读,更多相关《C语言上机练习题.docx(17页珍藏版)》请在冰豆网上搜索。

C语言上机练习题.docx

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)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1