资源预览内容
第1页 / 共95页
第2页 / 共95页
第3页 / 共95页
第4页 / 共95页
第5页 / 共95页
第6页 / 共95页
第7页 / 共95页
第8页 / 共95页
第9页 / 共95页
第10页 / 共95页
亲,该文档总共95页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第5章 函 数 51 函数的引例 52 函数的定义与调用 53 函数的嵌套调用 54 数组作实参 55 变量的存储类别 n 实例的部分程序 51 函数的引例【例51】计算xy的值 请注意:C语言中没有乘方运算符 解法1:调用库函数pow ,计算xy #include #include int main( ) double x , y , z ; printf(“Input data:“); scanf(“%lf%lf“,z=pow(x,y); printf(“%lf的%lf次方是%lfn“,x,y,z);return 0; 计算xy 必须加此行 pow要求x和y为double Input data:2.0 3.0 2.000000的3.000000次方是8.000000解法2:调用自编函数mypow,计算xy若库中未提供求xy的函数, 则用户先编写后再使用 #include #include double mypow ( double x, double y ) int i; double z ; z = 1.0; for ( i = 1; i 输出一行10个“*” 【例52】调用函数,输出若干个“*” 程序2:每行输出 n 个“*”,共输出三行。 void myprint_n (int n) int i ;for (i=1; i输出一行n个“*” 需要解决的问题 :n一个函数调用另一个函数, 应具备什么条件?n函数应该如何编写?n各函数的位置在哪里? 52 函数的定义与调用 5.2.1 函数的定义 5.2.2 函数的调用 5.2.3 函数的调用过程 5.2.4 函数的返回值 5.2.5 被调函数的原型说明 5.2.1 函数的定义【例53】编写求 n!(n0)的函数 int i ; long y=1 ;for ( i = 1; i 0)的函数 形参 int i ; long y=1 ;for ( i = 1; i 0) sqrt是库函数myfac是自编函数 #include long myfac ( int n ) int i ; long y=1 ;for ( i = 1; i long myfac ( int n ) int i ; long y=1 ;for ( i = 1; i #include main( ) int a;myprint ( ) ; a = (int)mypow ( (double)myfac(3) , 2.0); myprint_n (a) ; * 36个6.036说明: (1)调用时函数名要一致 (2)实参与形参个数相同、类型一致 (3)实参与形参可以同名,但占不同存 储单元。打个比方:不同的楼可以有相同编号的房间,这些 房间各自占用不同的空间,它们之间互 不相干函数比喻成楼,各函数中的变量(包括 形参)想象成各楼中的房间,变量名如 同房间号不同函数中的同名变量占用不同的存储 空间,因此,实参与对应形参可以同名 要调用另一函数,应注意: (1)被调函数必须存在 (2)被调函数的定义位置正确尽量采用“自顶向下、逐步细 化、模块化”的方法编写程序【例56】调用mysum,求1+2+3+ nprintf (“Input data: “) ; scanf(“%d“, y = mysum(n); printf(“%d,%ld“,n,y);int n ; long y ;main( ) int i ; long sum=0 ;for ( i =1; iy?100:200;return z; main( ) int a;a=myfun(3,5);printf(“a=%dn”,a);if(xy) z=100;else z=200;a=2003.若有如下公式( a、b由键盘输入)x=2a3+by=a+b5 调用函数计算x和y的值void myfun (long a,long b,long *p,long *q) *p=2*a*a*a+b;*q=a+b*b*b*b*b; main( ) long a,b,x,y;scanf(“%ld%ld”,myfun(a,b,printf(“%ld,%ld,%ld,%ldn”,a,b,x,y);不能用return求x和y的值【例510】编写函数myprime。此函数 的功能是:判断一个整数是否为素数, 若是素数返回1,否则返回0(算法参见例4.16)编程点拨:n 确定函数首部 int myprime ( int a )n 编写函数体 end=(int)sqrt(double)a);for ( i=2; iend )return 1; return 0;elsebreak;编程点拨:n 确定函数首部 int myprime ( int a )n 编写函数体 end=(int)sqrt(double)a);for ( i=2; iend )return 1;return 1;if ( a%i=0 ) return 0;for ( i=2; i#include printf(“%d Non“,a);elseprintf(“%d Yesn“,a);if ( myprime( a ) = 1 )scanf(“%d“, int a;main( )5.2.5 被调函数的原型说明【例511】编写函数,求的值(算法参见例47) printf(“%fn “, sum) ;sum= mycal ( n ) ;scanf(“%d“, int n ; float sum ;main ( )float mycal( int n ) int i, sign=1; float sum=0.0; for ( i=1; i0 )1 2 3 4 5 6 7 8 9 10 printf (“n“ );1 2 3 4 5 6 7 8 9 10for ( i=k; ipj ) k=j; t=pi; pi=pk; pk=t; 等价于int *pvoid myout ( int a , int n ) while ( n0 ) printf (“%4d “, *a ) ; a+; n-; printf (“n“ ); 等价于int *a【例517】输入字符串,调用函数 将字符串逆置 a b c d e f 0 apqmain ( ) char a50;printf (“Input data:“); gets ( a );myfun ( a );printf (“逆置后的字符串为: ”); puts ( a ); #include void myfun ( char *p ); a b c d e f 0 apqvoid myfun ( char *p ) char *q,t;q=strlen(p)-1 ; 要使方法1a b c d e f 0 apqvoid myfun ( char *p ) char *q,t;q=p;qqqqqq方法2a b c d e f 0 apwhile ( *q != 0 ) q+;void myfun ( char *p ) char *q,t;q=p;qa b c d e f 0 apwhile ( *q != 0 ) q+; q-;void myfun ( char *p ) char *q,t;q=p;qa b c d e f 0 apwhile ( *q != 0 ) q+; q-;t = *p; *p = *q; *q = t; p+; q-;void myfun ( char *p ) char *q,t;q=p;qafa b c d e f 0 apwhile ( *q != 0 ) q+; q-;t = *p; *p = *q; *q = t; p+; q-;void myfun ( char *p ) char *q,t;q=p;qafeba b c d e f 0 apwhile ( *q != 0 ) q+; q-;t = *p; *p = *q; *q = t; p+; q-;void myfun ( char *p ) char *q,t;q=p;qafebcda b c d e f 0 apwhile ( *q != 0 ) q+; q-;t = *p; *p = *q; *q = t; p+; q-;void myfun ( char *p ) char *q,t;q=p;qafebwhile ( p q ) cd5.4.3 二维数组名作实参【例5.18】调用函数,输出二维数组元 素的值#define M 3 #define N 4 void myout ( int p MN ) int i , j ;for(i=0; iM; i+) for(j=0; jN; j+) printf(“%5d“,pij);printf(“n“); main( ) int aMN=1,2,3,4,5,6,7,8,9,10,11,12;myout ( a ) ; 行指针 【例5.19】编写函数,计算二维数组 中除周边元素之外的其它元素之和 1 2 3 45 6 7 89 10 11 1213 14 15 16 #define N 4 void myout ( int aNN ) ; int myfun ( int aNN ) ; main( ) int sum, aNN=1,2,3,15,16; myout ( a ); sum=myfun ( a ); printf(“ sum=%dn“,sum); void myou
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号