C语言函数练习题.docx

上传人:b****8 文档编号:9041128 上传时间:2023-02-02 格式:DOCX 页数:17 大小:30.90KB
下载 相关 举报
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语言程序设计实验教学(8)

【实验目的】函数是C程序的基本组成部分,学习函数的设计和调用是很重要的。

实验目的是掌握函数的定义、变量的作用域和函数的调用。

【实验要求】实际应用程序通常是由多个函数构成的,要求将常见的功能模块用函数形式实现,并学会在主函数或其他函数中调用定义的函数。

要学会函数声明。

【实验课时】6.0

【实验内容】

1.编写函数fun(n),n为三位自然数,判断n是否为水仙花数,是返回1,否返回0。

编写main函数,输入一个数num,调用fun(num)函数,并输出判断结果。

#include

#include

intfun(intn)

{inta,b,c;

a=n%10;b=n/10%10;c=n/100;

if(a*a*a+b*b*b+c*c*c==n)return

(1);

elsereturn(0);}

voidmain()

{intnum;clrscr();

scanf("%d",&num);

while(num<100||num>=1000)

{printf("pleaseenterthenumagain!

(num>=100&&num<1000)\n");

scanf("%d",&num);}

if(/**/fun(num)==1/**/)printf("%disasxhs.\n",num);

elseprintf("%disnotasxhs.\n",num);}

2.编写函数ss(n),判断n是否为素数,是返回1,否返回0。

编写main函数,输入一个数num,调用ss(num)函数,并输出判断结果。

#include

#include

intss(intn)

{inti;

for(i=2;i

if(n%i==0)break;

if(i>=n)return

(1);

elsereturn(0);}

voidmain()

{intnum;clrscr();

scanf("%d",&num);

if(/**/ss(num)==1/**/)printf("%disasushu.\n",num);

elseprintf("%disnotasushu.\n",num);}

3.编写一个函数fun(n),计算n!

,并编写main函数测试,在main函数中输入num,调用fun(num),输出计算的结果。

#include

#include

longfun(intn)

{longs=1;inti;

for(i=1;i<=n;i++)s=s*i;

return(s);}

voidmain()

{intnum;clrscr();

scanf("%d",&num);

if(num>0)printf("%d!

=%ld\n",num,/**/fun(num)/**/);

elseprintf("inputdataerror!

\n");}

4.使用递归函数实现计算n!

,并在main函数中调用。

#include

#include

longfun(intn)

{longf;

if(n==1||n==0)f=1;

elsef=n*fun(n-1);

returnf;}

voidmain()

{intnum;clrscr();

scanf("%d",&num);

if(num>0)printf("%d!

=%ld\n",num,/**/fun(num)/**/);

elseprintf("inputdataerror!

\n");}

5.某数列为K(n)的定义为:

用递归的方法求该数列的第6项k(6)。

1n=1

k(n)=k(n-1)×2n为偶数

k(n-1)×3n为奇数

#include

#include

intk(intn)

{intc;

if(n==1)c=1;

elseif(n%2==0)c=k(n-1)*2;

elsec=k(n-1)*3;

returnc;}

voidmain()

{intm;clrscr();

scanf("%d",&m);

if(m>=1)printf("k(%d)=%d\n",m,/**/k(m)/**/);

elseprintf("inputdataerror!

\n");}

6.计算s=(1!

)+(1!

+2!

)+…+(1!

+…+n!

)。

n由用户输入,小于10。

(设计:

函数h1(n)计算n的阶乘;函数h2(m)计算1!

+2!

+…+m!

的累加运算。

在主函数中调用h2()函数,h2()函数中调用h1()函数来实现累加。

#include

#include

longh1(intn)

{longt=1;inti;

for(i=1;i<=n;i++)t=t*i;

returnt;}

longh2(intm)

{longs=0;inti;

for(i=1;i<=m;i++)

s=s+h1(i);

returns;}

voidmain()

{intk,num;longsum=0;clrscr();

scanf("%d",&num);

for(k=1;k<=num;k++)

/**/sum=sum+h2(k)/**/;

printf("(1!

)+(1!

+2!

)+...+(1!

+2!

+...+%d!

)=%ld\n",num,/**/sum/**/);}

7.设计一个函数fc,其功能为统计数组中偶数的个数。

编写main函数,用数组名num做为函数传递的参数调用fc函数,实现对数组num的统计,并输出统计结果。

#include"stdio.h"

intfc(inta[],intn)

{inti,c=0;

for(i=0;i

if(a[i]%2==0)c=c+1;

return(c);}

main()

{inti,num[10];

for(i=0;i<10;i++)

scanf("%d",&num[i]);

printf("oushu:

%d\n",fc(num,10));

printf("jishu:

%d\n",10-fc(num,10));}

8.在一个一维数组a中存放10个正整数,求其中所有的素数。

(用数组元素作为函数的实际参数)

intsushu(intx)

{inti,k=1;

if(x==1)k=0;

for(i=2;i<=x/2;i++)

if(x%i==0)k=0;

return(k);}

main()

{inta[10],i;

for(i=0;i<10;i++)scanf("%d",&a[i]);

printf("sushuofarrayaare:

\n");

for(i=0;i<10;i++)

if(sushu(a[i]))printf("%5d",a[i]);

printf("\n");}

9.设计一个函数,计算两个自然数的最大公约数。

intgcd(intm,intn)

{intr;r=m%n;

while(r!

=0)

{m=n;n=r;r=m%n;}

returnn;}

main()

{intm,n;

scanf("%d,%d",&m,&n);

printf("%d\n",gcd(m,n));}

10.设计一个函数floatave(inta[10]),计算数组a所有元素的平均值。

(用数组名作为函数的实际参数)

floatave(inta[10])

{inti,sum=a[0];floataver;

for(i=1;i<10;i++)

sum=sum+a[i];

aver=1.0*sum/10;

return(aver);}

voidmain()

{inti,score[10];floataver;

for(i=0;i<10;i++)

scanf("%d",&score[i]);

printf("\n");

aver=ave(score);

printf("averagescoreis%5.2f\n",aver);}

11.用选择法对数组中10个整数按升序排序。

(要求将排序功能设计成函数,数组名作为参数)。

voidsort(intarray[],intn)

{inti,j,k,t;

for(i=0;i

{k=i;

for(j=i+1;j

if(array[j]

t=array[k];array[k]=array[i];array[i]=t;}}

voidmain()

{inta[10],i;

printf("inputthearray:

\n");

for(i=0;i<10;i++)scanf("%d",&a[i]);

sort(a,10);

printf("outputthearrayafterordered:

\n");

for(i=0;i<10;i++)printf("%5d",a[i]);

printf("\n");}

12.设有一个3×4的矩阵,求出其中的最大元素。

(要求:

将计算最大值的功能设计成函数,数组名作为参数)

max_value(intarray[12])

{inti,max;

max=array[0];

for(i=0;i<12;i++)

if(array[i]>max)max=array[i];

return(max);}

main()

{inta[3][4]={{1,3,5,7},{2,4,6,8},{15,17,34,12}};

printf("max=%d\n",max_value(a));}

13.设计一个函数,使输入的一个字符串按反序存放,在主函数中输入和输出字符串。

(学习指导书P74)

#include

main()

{intinverse(charstr[]);/*函数原型声明*/

charstr[100];

printf("Inputstring:

\n");

gets(str);

inverse(str);

printf("Outputstringafterinverse:

\n");

puts(str);}

intinverse(charst[])/*函数定义*/

{chart;inti,j;

for(i=0,j=strlen(st);i

{t=st[i];

st[i]=st[j-1];

st[j-1]=t;}

}

14.设计一个函数,输入一个4位数字,要求输出这4个数字字符,但每两个数字间空一个空格。

如输入1990,应输出“1990”。

(学习指导书P76)

#include

main()

{charstr[80];

voidinsert(charstr[]);

printf("\nInputfourdigits:

\n");

gets(str);

insert(str);

printf("\nOutputdigitsafterinsertspace:

\n");

puts(str);

}

voidinsert(charstr[])

{inti;

for(i=strlen(str);i>0;i--)

{str[2*i]=str[i];str[2*i-1]='';}

}

15.使用局部静态变量,求1到5的阶乘。

intfac(intn)

{staticintf=1;

f=f*n;

returnf;}

main()

{inti;

for(i=1;i<=5;i++)

printf("%d!

=%d\n",i,fac(i));}

16.编写一个程序,在主函数中输入10个等长的字符串。

用另一个函数sort()

对它们排序,函数sort()原型为:

voidsort(char(*s)[6]);,要求形参是指向

由6个元素组成的一维数组的行指针,然后在主函数输出这10个已排好的

字符串。

#include

#include

main()

{voidsort(char(*s)[6]);

inti;charstr[10][6];char(*p)[6];

printf("Input10strings:

\n");

for(i=0;i<10;i++)

scanf("%s",str[i]);

p=str;

sort(p);

printf("Now,thesequenceis:

\n");

for(i=0;i<10;i++)

printf("%s\n",str[i]);

}

 

voidsort(char(*s)[6])/*冒泡法对10个字符串排序的函数*/

{inti,j;char*t,temp[6];

t=temp;

for(i=0;i<9;i++)

for(j=0;j<9-i;j++)

if(strcmp(s[j],s[j+1])>0)

{strcpy(t,s[j]);

strcpy(s[j],s[j+1]);

strcpy(s[j+1],t);}

}

 

运行结果:

Input10strings:

China↙

Japan↙

Korea↙

Egypt↙

Nepal↙

Burma↙

Ghana↙

Sudan↙

Italy↙

Libya↙

Now,thesequenceis:

Burma

China

Egypt

Ghana

Italy

Japan

Korea

Libya

Nepal

Sudan

17.编写一个程序,在主函数中输入10个不等长的字符串。

用另一个函数

sort()对它们排序,函数sort()原型为:

voidsort(char*p[6]);,要求用指针

数组处理,然后在主函数输出这10个已排好的字符串。

#include

#include

main()

{voidsort(char*p[]);

inti;char*s[10],str[10][20];

for(i=0;i<10;i++)

s[i]=str[i];/*将第i个字符串的首地址赋予指针数组p的第i个元素*/

printf("Input10strings:

\n");

for(i=0;i<10;i++)

scanf("%s",s[i]);

sort(s);

printf("Now,thesequenceis:

\n");

for(i=0;i<10;i++)

printf("%s\n",s[i]);

}

 

voidsort(char*p[])/*冒泡法对10个字符串排序的函数*/

{inti,j;char*temp;

for(i=0;i<9;i++)

for(j=0;j<9-i;j++)

if(strcmp(*(p+j),*(p+j+1))>0)

{temp=*(p+j);

*(p+j)=*(p+j+1);

*(p+j+1)=temp;}

}

 

运行情况如下:

Input10strings:

China↙

Japan↙

Yemen↙

Pakistan↙

Mexico↙

Korea↙

Brazil↙

Iceland↙

Canada↙

Mongolia↙

Now,thesequenceis:

Brazil

Canada

China

Iceland

Japan

Korea

Mexico

Mongolia

Pakistan

Yemen

18.编写一个程序,用指向指针的指针的方法对5个字符串排序并输出。

自定义函数sort()的原型为:

voidsort(char**p);。

#include

#defineLINEMAX20/*定义字符串的最大长度*/

main()

{voidsort(char**p);

inti;char**p,*pstr[5],str[5][LINEMAX];

for(i=0;i<5;i++)

pstr[i]=str[i];/*将第i个字符串首地址赋予指针数组pstr的第i个元素*/

printf("Input5strings:

\n");

for(i=0;i<5;i++)

scanf("%s",pstr[i]);

p=pstr;

sort(p);

printf("stringssorted:

\n");

for(i=0;i<5;i++)

printf("%s\n",pstr[i]);

}

 

voidsort(char**p)/*选择法对5个字符串排序的函数*/

{inti,j;char*temp;

for(i=0;i<4;i++)

for(j=i+1;j<5;j++)

if(strcmp(*(p+i),*(p+j))>0)/*比较后交换字符串地址*/

{temp=*(p+i);*(p+i)=*(p+j);*(p+j)=temp;}

}

 

运行情况如下:

Input5strings:

China↙

America↙

India↙

Philippines↙

Canada↙

stringssorted:

America

Canada

China

India

Philippines

19.编写一个程序,用指向指针的指针的方法对n个整数排序并输出。

求写一个自定义函数sort(),其原型为:

voidsort(int**p,intn);n和整数在

主函数中输入。

排序后结果最后在主函数中输出。

#include

main()

{voidsort(int**p,intn);

inti,n,data[10],**p,*pstr[10];

printf("Inputn:

");

scanf("%d",&n);

for(i=0;i

pstr[i]=&data[i];/*将第i个整数的地址赋予指针数组pstr的第i个元素*/

printf("Input%dintegernumbers:

\n",n);

for(i=0;i

scanf("%d",pstr[i]);

p=pstr;

sort(p,n);

printf("Now,thesequenceis:

\n");

for(i=0;i

printf("%d",*pstr[i]);

printf("\n");

}

 

voidsort(int**p,intn)/*选择法对n个整数排序的函数*/

{inti,j,*temp;

for(i=0;i

for(j=i+1;j

if(**(p+i)>**(p+j))/*比较后交换整数的地址*/

{temp=*(p+i);*(p+i)=*(p+j);*(p+j)=temp;}

}

 

运行情况如下;

Inputn:

7↙

Input7integernumbers:

3498561222651↙

Now,thesequenceis:

1122234566598

说明:

data数组用来存放n个整数;pstr是指针数组,每一个元素指向data数组中的一个元素;p是指向指针的指针。

请参考图10.7。

图10.7(a)表示的是排序前的情况。

图10.7(b)表示的是排序后的情况。

在图中可以看到,data数组中数的次序没有变化,而pstr指针数组中的各元素的值(也就是它们的指向)改变了。

 

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

当前位置:首页 > 自然科学 > 数学

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

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