例如:编写一个求两个电阻的串联值和并联值的程序 main() float series(float, float); float parallel(float, float) float r1, r2rt: char s printf(Enter resistor r1, r2. scanf( %f%p, &r1, &r2) /函数原型说明 printf(Enter 's', p While(sp= getchar()==n)/去掉 scania句输数后的换行符 if(sp=='s) rt= serles(r1,「2);鬥函数调用 else if(sp t= parallel(r1,r2);/函数调用 printf( The total resistance=%f ohms, rt) 2021年2月20日星期六
11 2021年2月20日星期六 例如: 编写一个求两个电阻的串联值和并联值的程序。 main( ) { float series(float,float); float parallel(float,float); float r1,r2,rt; char sp; printf(”Enter resistor r1,r2:”); scanf(”%f%f”,&r1,&r2); printf(”Enter ‘s’,’p’:”); while((sp=getchar( ))==‘\n’) /* 去掉scanf语句输数后的换行符 */ ; if(sp==‘s’) rt=series(r1,r2); /*函数调用*/ else if(sp==‘p’) rt=parallel(r1,r2); /*函数调用*/ printf(“The total resistance=%f ohms\n”,rt); } /*函数原型说明*/
float series(rs1,rs2)/自定义函数 float rs 1. rs2 float rs rs=rs 1+rs2: return(rs) float parallel(rp1,rp2)/自定义函数 float rp1, rp2 float rp rp=(rp1 rp2)/(rp1+rp2) return(rp) 2021年2月20日星期六
12 2021年2月20日星期六 float series(rs1,rs2) /* 自定义函数 */ float rs1,rs2; { float rs; rs=rs1+rs2; return(rs); } float parallel(rp1,rp2) /*自定义函数 */ float rp1,rp2; { float rp; rp=(rp1*rp2)/(rp1+rp2); return(rp); }
6.3函数参数 函数调用的参数传递方式有: 传值 单向传递即实参传数值 形参 形参不能改变实参 传地址 传址—双向传递即实参 形参 形参能改变实参 6.3.1传值调用 C语言通常使用传值调用的方法传递参数,前面的例子 均使用这种方法。 在传值调用中,只是实参的复制值被传递给形参,实 参与形参不再有任何其他联系。因此,形参不能改变实参。 2021年2月20日星期六
13 2021年2月20日星期六 函数调用的参数传递方式有: 6.3 函数参数 传值—— 单向传递 即 实参 形参 传址—— 双向传递 即 实参 形参 传数值 形参不能改变实参 传地址 形参能改变实参 6.3.1 传值调用 C语言通常使用传值调用的方法传递参数,前面的例子 均使用这种方法。 在传值调用中,只是实参的复制值被传递给形参,实 参与形参不再有任何其他联系。因此,形参不能改变实参
6.3.2传址调用 传值是一种单向传递,形参不能改变实参。在程 序设计中有时需要实现双向传递,使形参的值能直接改 变实参的值。为了实现这个目的,通常使用传地址调用。 传地址调用的方法 1、传递实参的地址; 2、形参必须定义为指针变量; 3、函数调用时,实参地址→形参指针。形参指向的目标 变量即为实参数,形参的改变将影响实参的改变。 2021年2月20日星期六
14 2021年2月20日星期六 6.3.2 传址调用 传值是一种单向传递,形参不能改变实参。在程 序设计中有时需要实现双向传递,使形参的值能直接改 变实参的值。为了实现这个目的,通常使用传地址调用。 传地址调用的方法: 1、传递实参的地址; 2、形参必须定义为指针变量; 3、函数调用时,实参地址→形参指针。形参指向的目标 变量即为实参数,形参的改变将影响实参的改变
例如:下面程序通过传址调用实现两个整型数的交换 include <stdio h> void swap(nt*,nt为);/函数原型说明 maino int a=3. b=8 printf(”a=%,b=%dⅦn;a,b); sWap8a&b);/传址调用 printf(After swapping. .n) 2 printf("a=%d,b=%dIn",a, b) void swap(nt*xnty)/函数定义形参定义为指针 int temp=X 运行结果: a=3,b=8 y=temp After swapping… a=8,b=3 2021年2月20日星期六
15 2021年2月20日星期六 例如:下面程序通过传址调用实现两个整型数的交换 #include <stdio.h> void swap(int *,int *); /*函数原型说明*/ main() { int a=3,b=8; printf(”a=%d, b=%d\n”,a,b); swap(&a,&b); /* 传址调用 */ printf(”After swapping…\n”); printf(”a=%d, b=%d\n”,a,b); } void swap(int *x,int *y) /*函数定义, 形参定义为指针*/ { int temp=*x; *x=*y; *y=temp; } 运行结果: a=3,b=8 After swapping… a=8,b=3