第6章函数源程序.docx

上传人:b****3 文档编号:27044340 上传时间:2023-06-26 格式:DOCX 页数:16 大小:16.98KB
下载 相关 举报
第6章函数源程序.docx_第1页
第1页 / 共16页
第6章函数源程序.docx_第2页
第2页 / 共16页
第6章函数源程序.docx_第3页
第3页 / 共16页
第6章函数源程序.docx_第4页
第4页 / 共16页
第6章函数源程序.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

第6章函数源程序.docx

《第6章函数源程序.docx》由会员分享,可在线阅读,更多相关《第6章函数源程序.docx(16页珍藏版)》请在冰豆网上搜索。

第6章函数源程序.docx

第6章函数源程序

第6章函数

例6.1从键盘输入三个小的整数,求三个整数的阶乘之和。

不用函数实现:

#include"stdio.h"

voidmain()

{

inta,b,c,n;

longm,s=0;

scanf("%d%d%d",&a,&b,&c);

for(n=1,m=1;n<=a;n++)

m=m*n;

s=s+m;

for(n=1,m=1;n<=b;n++)

m=m*n;

s=s+m;

for(n=1,m=1;n<=c;n++)

m=m*n;

s=s+m;

printf("%ld\n",s);

}

下面改用函数方法实现上述程序:

#include"stdio.h"

longfun(intx)

{

longm=1;

intn;

for(n=1;n<=x;n++)

m=m*n;

returnm;

}

voidmain()

{

inta,b,c;

longs;

scanf("%d%d%d",&a,&b,&c);

s=fun(a)+fun(b)+fun(c);

printf("%ld\n",s);

}

例6.2从键盘输入两个整数,求较大的整数。

#include"stdio.h"

intmax(intx,inty)

{

intz;

if(x>y)

z=x;

else

z=y;

returnz;

}

voidmain()

{

inta,b,c;

scnaf("%d,%d",&a,&b);

c=max(a,b);

printf("Max=%d\n",c);

}

例6.3定义一个函数,其功能输出一个字符串。

#include"stdio.h"

voidPrint(void)

{

printf("Thisisaexample.\n");

}

voidmain()

{

Print();

}

例6.4用函数编程实现两个实数的加减运算。

#include"stdio.h"

floatAdd(floatop1,floatop2)

{

floatres;

res=op1+op2;

returnres;

}

floatSub(floatop1,floatop2)

{

floatres;

res=op1-op2;

returnres;

}

voidmain()

{

floatx,y;

scanf("%f%f",&x,&y);

printf("%f+%f=%f\n",x,y,Add(x,y));

printf("%f-%f=%f\n",x,y,Sub(x,y));

}

例6.5编一函数求y=xn,其中x≠0,n为整数且不为0。

doublePower(doublex,intn)

{

doubley=1;

inti;

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

y=y*x;

returny;

}

voidmain()

{

doublex;

intn;

scanf("%lf,%d",&x,&n);

printf("y=%f\n",Power(x,n));

}

例6.6求球的表面积和体积。

程序为:

#include"stdio.h"

floatArea(floatr)

{

floats;

s=4*3.14*r*r;

returns;

}

floatVolume(floatr)

{

floatv

v=4*3.14/3*r*r*r;

returnv;

}

voidmain()

{

floatR;

scanf("%f",&R);

printf("Area=%f,Volume=%f\n",Area(R),Volume(R));

}

例6.7将例6.6改用嵌套调用的方式实现程序。

程序为:

#include"stdio.h"

floatArea(floatr)

{

floats;

s=4*3.14*r*r;

returns;

}

floatVolume(floatr)

{

floatv;

v=Area(r)*r/3;

returnv;

}

voidmain()

{

floatR;

scanf("%f",&R);

printf("Area=%f,Volume=%f\n",Area(R),Volume(R));

}

例6.8求n!

=n•(n-1)•(n-2)•…•2•1

例6.9递归法求f(n)=n!

.

计算阶乘可用如下形式描述:

程序如下:

#include"stdio.h"

unsignedlongfact(intn)

{

unsignedlongp;

if(n==1)

p=1;

else

p=n*fact(n-1);

returnp;

}

voidmain()

{

intn;

unsignedlongp;

scanf("%d",&n);

p=fact(n);

printf("%d!

=%lu\n",n,p);

}

例6.10当f(0)=1,f

(1)=1,f(n)=f(n-1)+(f(n-2)(n>1)用递归法求f(10)的值。

程序如下:

#include"stdio.h"

longintfun(intn)

{

longintp;

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

p=1;

else

p=fun(n-1)+fun(n-2);

returnp;

}

voidmain()

{

printf("%ld\n",fun(10));

}

递归程序的设计很容易进行无休止的递归,在例6.10中,将fun函数改成以下时,整个程序就会无法得到终止:

longintfun(intn)

{

longintp;

if(n==0)

p=1;

if(n==1)

p=1;

else

p=fun(n-1)+fun(n-2);

returnp;

}

例6.11汉诺塔问题。

有3个塔,每个堆放若干个盘子。

开始时,所有盘子均在塔A上,前且,盘从上到下,按直径增大的次序放置(如图6-3所示)。

设计一个移动盘子的程序,使得塔A上的所有盘子借助于塔B移到塔C上,但有两个限制条件:

一是一次只能搬动一个盘子,二是任何时候不能把盘子放在比它小的盘子的上面。

#include"stdio.h"

intstep;

voidmove(intn,charfrom,charbuf,charto)

{

if(n>0)

{

move(n-1,from,to,buf);

step++;

printf("step=%d\tn=%d\t",step,n);

printf("%c-à%c\n",from,to);

move(n-1,buf,from,to);

}

}

voidmain()

{

inttotal,num;

scanf("%d",&num);

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

{

printf("total=%d\n",total);

step=0;

move(total,‘a’,‘b’,‘c’);

printf("\n");

}

}

例6.12局部特性的分析。

#include"stdio.h"

voidadd(intx)

{

x++;

printf("%d,",x);

}

voidsub(intx)

{

x--;

printf("%d,",x);

}

voidmain()

{

inty=1;

add(y);

sub(y);

add(y);

sub(y);

}

例6.13局部变量作用域示例。

#include"stdio.h"

main()

{

intx=1,y=2;

{

intx=10;

x=x+10;

printf("x=%d,",x);

printf("y=%d,",y);

}

x=x+9;

printf("x=%d\n",x);

}

例6.14用函数实现求ax2+bx+c=0(a≠0)的根。

#include"stdio.h"

#include"math.h"

floatx1,x2;/*定义两个全局变量*/

voidf1(floata,floatb,floatc)

{

x1=(-b+sqrt(b*b-4*a*c))/(2*a);

x2=(-b-sqrt(b*b-4*a*c))/(2*a);

}

voidf2(floata,floatb)

{

x1=x2=-b/(2*a);

}

voidf3(floata,floatb,floatc)

{

x1=-b/(2*a);

x2=sqrt(4*a*c-b*b)/(2*a);

}

main()

{

floata,b,c;

scanf("%f%f%f",&a,&b,&c);

if(b*b-4*a*c>1e-5)

{

f1(a,b,c);

printf("x1=%f,x2=%f\n",x1,x2);

}

else

if(fabs(b*b-4*a*c)<1e-5)

{

f2(a,b);

printf("x1=x2=%f\n",x1);

}

else

{

f3(a,b,c);

printf("x1=%f+I%f,x2=%f-I%f\n",x1,x2,x1,x2);

}

}

例6.15外部变量引用示例。

#include

intx=10;

voidf1()

{

x++;

printf("x=%d,",x);

printf("y=%f\n",y);

}

floaty=2;

main()

{

intx=1;

x++;

fl();

printf("x=%d,y=%f\n",x,y);

}

程序运行时,编译将显示y变量在fl函数中未定义。

这是因为外部变量y是定义在f1函数之后,在f1函数中不能直接引用。

f1函数的定义应改成如下:

voidf1()

{

externfloaty;/*外部变量的引用说明*/

x++;

printf("x=%d,",x);

printf("y=%f\n",y);

}

例6.16静态局部变量示例。

#include

voidf1()

{

intx=1;

x++;

printf("x=%d,",x);

}

voidf2()

{

staticintx=1;/*静态局部变量的定义*/

x++;

printf("x=%d\n",x);

}

voidmain()

{

f1();f2();

f1();f2();

}

例6.17静态局部变量求10!

程序如下:

#include"stdio.h"

longintfun(intn)

{

staticlongints=1;

s=s*n;

returns;

}

voidmain()

{

intn;

longintp;

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

p=fun(i);

printf("%ld\n",p);

}

例6.18多文件运行示例。

/*filename:

f1.c*/

floatfun1(floatx)

{

floaty;

y=x*x;

returny;

}

/*filename:

f2.c*/

floatfun2(floatx)

{

floaty;

y=x*x*x;

returny;

}

/*filename:

f3.c*/

voidmain()

{

floatx,y;

scanf("%f",&x);

y=fun1(x);

printf("y=%f*%f=%f\n",x,x,y);

y=fun2(x);

printf("y=%f*%f*%f=%f\n",x,x,x,y);

}

编辑3个文件,分别以文件f1.c、f2.c和f3.c文件命名存到磁盘上。

2.创建一个工程文件。

同样使用TurboC编辑器编辑一个文件,内容如下:

f1.c

f2.c

例6.19改用文件包含命令形式实现例6.18。

文件f1.c和f2.c不作任何改变,main改成如下程序:

#include"f1.c"

#include"f2.c"

voidmain()

{

floatx,y;

scanf("%f",&x);

y=fun1(x);

printf("y=%f*%f=%f\n",x,x,y);

y=fun2(x);

printf("y=%f*%f*%f=%f\n",x,x,x,y);

}

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

当前位置:首页 > 外语学习 > 英语考试

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

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