文档库 最新最全的文档下载
当前位置:文档库 › C语言上机练习题1

C语言上机练习题1

C语言上机练习题1
C语言上机练习题1

C语言上机考试练习题(1)

说明:我们已经学习完成了基本数据类型、基本控制语句,以及数组、函数这些知识了,请同学

们看看附件中的这些题目是否能够快速编写岀来?可能有个别题目与过去的练习有些重复, 量不要去参考过去

请尽的答案。如果现在编写起来困难还很多,那你就要加倍努力了。

1、编写一个程序,判定一个字符串是否是另一个字符串的子串,若是,返

回子串在主串中的位置。要求:

(1)在主函数中输入两个字符串,调用子函数cmpsubstrO判断,并在主函

数输出结果。

(2)子函数的返回值为-1表示未找到,否则返回子串的位置(起始下标)。

#i ncludevstdio.h> #i ncludevstri ng.h> void mai n()

int cmp substr(char *s1,char *s2);

char str1[20],str2[50];

char *s1=str1,*s2=str2;

gets(str1);

gets(str2);

prin tf("%d",cm psubstr(s1,s2));

int cmp substr(char *s1,char *s2)

int i,d,a=0,situati on=0;

d=strle n( s1);

for(i=0;*(s2+i)!='\0';i++)

if(*(s1+a)==*(s2+i))

a++;

if(a==d)

situatio n=1;

break;

else

a=0;

if(situatio n==0)retum(-1);

else return(i-d+2);

2、输入一个字符串,内有数字和非数字字符,如:a123x456

17960?302tab5876,将其中连续的数字作为一个整数,依次存放到数组a中。例如,123放在a[0]中,456放在a[1]中等等,统计共有多少个整数,并输出这些

(1)在主函数中输入字符串,并输出结果。调用子程序处理字符串。

(2)子函数的返回值为整数的个数。

#i ncludevstdio.h> #in clude void mai n()

int search(char *str,i nt *sum);

char str[100];

{

int d,sum[20],i;

gets(str);

d=search(str,sum);

for(i=0;ivd;i++) prin tf("%d\n",*(sum+i));

search(char *str,i nt *sum)

int i,t=0,a=0;

for(i=0;*(str+i)!='\0';i++)

if(*(str+i)>='0'&&*(st r+i)v='9')

if(a==0)

*(sum+t)=(i nt)(*(str+i)-'0');

a++;

else

*(sum+t)=*(sum+t)*10+( in t)(*(str+i)-'0');

else if(*(str+i-1)>='0'&&*(st r+i-1)v=9)

t++;

a=0;

if(*(str+i-1)>='0'&&*(st r+i-1)v=9)return(t+1);

else retum(t);

3、编写一个主函数和子函数tran(x, r),要求是:函数tran(x, r)将十进

制整数x转换成r进制数y (r在2 — 16之间),x和r的值由主调函数(即主函数)传入,y的值需要返回主调函数进行输出。要求:y的值利用字符数组进行存储,数组的每一个元素存放y的一位数字字符。

#i ncludevstdio.h> #i ncludevstri ng.h> #i ncludevmalloc.h> #in clude void mai n()

char* tran (i nt x,i nt r);

int x,r;

char *y;

printfC'P lease input x & r =\n");

sca nf("%d,%d", &x,&r);

y=tra n(x,r);

puts(y);

char* tran (i nt x,i nt r)

int len 1,le n2,i,t;

char *y1,*y2;

len 1=2+(i nt)log((double)x)/log((double)r);

y1=(char*)malloc(le n1*sizeof(char));

for(i=O;x!=O;i++)

t=x%r;

{

if(tv10) *(y1+i)=(char)(t+48);

else *(y1+i)=(char)(t+87);

x=(i nt)x/r;

*(y1+i)='\0';

len 2=strle n(y1);

y2=(char*)malloc(le n2*sizeof(char));

for(i=0;i

*(y2+i)=*(y1+le n2-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、编写程序实现将键盘输入的一行字符按单词倒排输出。如键盘输入“I love you ”,屏幕显示“ you love I ”。要求:

实现按单词倒

(1)编写一个函数intinvertion(char ch1[], char ch2[])

排字符串,第一个形参ch1接受实参传过来的原字符串,倒排后的新字符串通过第二个形参返回主函数,函数中还需要统计该字符串中共有多少个单词,函数最后返回字符串中包含的单词个数。

⑵主函数中输入字符串,调用子函数invertion ,输出倒排后的字符串及字符串中包含的单词个数。

{ #in cludevstdio.h>

#i ncludevstri ng.h>

#in clude

#in clude

void mai n()

int inv erti on( char ch1[], char ch2[]);

in t le n;

char *ch1,*ch2;

ch1=(char*)malloc(100);

ch2=(char*)malloc(100);

gets(ch1);

len=inv erti on( ch1,ch2);

puts(ch2);

prin tf("%d\n",le n);

int inv erti on( char ch1[], char ch2[])

int i,j,t=0,le n1,le n, sum=0;

char *str;

str=(char*)malloc(10);

for(i=0,le n=0;*(ch1+i)!='\0';i++,le n++);

len 1=le n;

for(i=0;*(ch1+i)!='\0';i++)

if(*(ch1+i)!='')

*(str+t)=*(ch1+i);

词转移到

str 上////将ch1的单

}

移到ch2上//

*(ch2+le n1)='';

len 1=le n1-t;

for(j=0;j

*(ch2+le n)='\0';

return(sum);

maxlong(str)找出字符串str 中包含的第一个最长单词 并返回主调函数。(2)在主函数中输入一个字符串,假定输入字符串中只含字 母和空格,空格用来分割不同单词;以该字符串作为参数调用 maxlong 函数,并 输出返回的结果。

#i ncludevstdio.h> #in clude #in clude

t++;

else

sum++;

// 单词个数加一 // *(ch2+le n1)='';

len 1=le n1-t;

for(j=0;jvt;j++)*(ch2+j+le n1)=*(str+j); //将str 转

移到ch2上//

t=0;

len 1--;

sum++;

// 最后一个单词转

6编写一个主函数以及一个函数

maxlo ng(str)。 要求是: (1)函数

(用字符数组进行存储),

相关文档