例:定义一函数名求整数x,x、n均为整数。 分析:在math中有函数说明 double pow( double x, double y) 计算xy,当x=0且y<=0或者x<0且y不是一整数时,定义域错。 x=xxx结果为一较大的整数。 extern long power(int x, int n) long p=l; for(i=l; i<=n; i++) return p;
例:定义一函数名求整数x n , x、n均为整数。 分析:在math.h中有函数说明 double pow(double x,double y) 计算x y,当x=0 且y<=0 或者x<0且y不是一整数时,定义域错。 x n =x*x*….x 结果为一较大的整数。 extern long power(int x, int n) { int i; long p=1; for(i=1;i<=n;i++) p*=x; return p; }
5.3函数名调用与参数传递 53.1函数调用 函数调用表示为使用函数的功能而执行函数。 函数调用形式: 函数名(参数表) 参数表的形式:参数1,参数2,。。。,参数n 各参数是表达式,表达式的值是函数执行时要处理的实际数 据。实际参数(实参)
5.3 函数名调用与参数传递 5.3.1 函数调用 函数调用表示为使用函数的功能而执行函数。 函数调用形式: 函数名(参数表) 参数表的形式:参数1,参数2,。。。,参数n 各参数是表达式,表达式的值是函数执行时要处理的实际数 据。实际参数(实参)
例:输入整数m计算mm2,面每次我行 ip分配单元。 mainO 控制转移,x,n分配 单元。m→ x,i>n long power(intk,intn) int m.i. scanf(“%d”,&m); int i; long p=1; for(i=1;i<=10;i++) for(i=l; i<=n;i++) i long w; p=, w=power(m,i return p; printf(" power(%od, %od) “=%10ld”,m,i,w); 释放本次调用分配的所有 单元,控制转移,返回xn
例:输入整数m,计算m1 ,m2 ,….m10 long power(int x, int n) { int i; long p=1; for(i=1;i<=n;i++) p*=x; return p; } main() { int m,i; scanf(“%d”,&m); for(i=1;i<=10;i++) { long w; w=power(m,i); printf(“power(%d,%d)” “=%10ld”,m,i,w); } } 控制转移,x,n分配 单元。m➔x,i➔n 释放本次调用分配的所有 单元,控制转移,返回x n 每次执行, i,p分配单元
注意: (1)实参与形参应在数目上、次序上和类型上一致。 (2)有返回值的函数,函数调用可作为表达式或语句出现。 getchar C;作为语句出现,目的等待输入一个字符。 c= getchar o;作为表达式出现。 power(10,4);作为语句出现,返回的10没起作用。 (3)无返回值(返回类型为void)的函数,函数调用只能 作为语句出现。 (4)无参数的函数调用形式:函数名() ()不能省却
注意: (1)实参与形参应在数目上、次序上和类型上一致。 (2)有返回值的函数,函数调用可作为表达式或语句出现。 getchar (); 作为语句出现,目的等待输入一个字符。 c=getchar (); 作为表达式出现。 power(10,4); 作为语句出现,返回的104没起作用。 (3)无返回值(返回类型为void)的函数,函数调用只能 作为语句出现。 (4)无参数的函数调用形式:函数名() ()不能省却
参数的求值次序: 标准C中,函数调用时,实际参数表达式的求值次序没有规 定。绝大多数编译程序按从右至左进行实际参数表达式的求 值(如 TURBO O)。 main int x=U, printf( %od, %od, X++, x++) TURBO O下,输出结果:1,0 在某些C编译环境下,输出会是结果:0,1
参数的求值次序: 标准C中,函数调用时,实际参数表达式的求值次序没有规 定。绝大多数编译程序按从右至左进行实际参数表达式的求 值(如 TURBO C)。 main() { int x=0; printf(“%d,%d”,x++,x++); } TURBO C下,输出结果:1,0 在某些C编译环境下,输出会是结果:0,1