实验6-2 编写一个函数f,将传入此函数的直角坐标值 转换为极坐标值,并返回主调函数中。求极 坐标的公式是:c=Sqrt(x*x+y*y); q=arctan(y/x) 若要将两值返回主调函数,有多种方式可以 完成,请试之: (1)两值均以指针形参带回; (2)由指针形参带回一个值,函数值返回另 一个值。 (3)两值均以引用形参返回。 017年4月26日12时 第8章类和对象 HOME 2分 BACK NEX
HOME • 编写一个函数f,将传入此函数的直角坐标值 转换为极坐标值,并返回主调函数中。求极 坐标的公式是:c=sqrt(x*x+y*y); q=arctan(y/x) 若要将两值返回主调函数,有多种方式可以 完成,请试之: (1)两值均以指针形参带回; (2)由指针形参带回一个值,函数值返回另 一个值。 (3)两值均以引用形参返回。 2017年4月26日12时 12分 第8章 类和对象 1
void fun(float x,flaot y,float &c,float &c) c=sqrt(x*x+y*y); q=arctan(y/x); void fun (float x,flaot y,float *c,float *c) *c=sqrt(x*x+y*y); *q=arctan(y/x); float fun (float x,flaot y,float &c) float q; c=sqrt(x*x+y*y)为 q=arctan(y/x); return q; HOME BACK NEXT
HOME • void fun(float x,flaot y,float &c,float &c) { c=sqrt(x*x+y*y); q=arctan(y/x); } void fun (float x,flaot y,float *c,float *c) { *c=sqrt(x*x+y*y); *q=arctan(y/x); } float fun (float x,flaot y,float &c) { float q; c=sqrt(x*x+y*y); q=arctan(y/x); return q; }
例4.2调用函数时的数据传递 #include using namespace std; int main() { int a,b,c; int max(int x,int y); cout>a>>b; c=max(a,b); /调用max函数,给定实参为a,b。函数值赋给c couty?x:y; return(Z); 2017年4月26日12时 第4章函数与预处理 3 BACK NEXT
HOME2017年4月26日12时 12分 第4章 函数与预处理 3 #include using namespace std; int main( ) { int a,b,c; int max(int x,int y) ; cout>a>>b; c=max(a,b); //调用max函数,给定实参为a,b。函数值赋给c couty?x:y; return(z); }
有关形参与实参的说明 (1)在定义函数时指定的形参,在未出现函数 调用时,它们并不占内存中的存储单元,因此 称它们是形式参数或虚拟参数 只有在发生函数调用时,函数max中的形参 才被分配内存单元,以便接收从实参传来的数 据 在调用结束后,形参所占的内存单元被释放。 2)定义函数时,必须在函数首部指定形参类 型。 017年4月26日12时 第4章 函数与预处理 HOME 分 BACK NEX
HOME2017年4月26日12时 12分 第4章 函数与预处理 4 (1) 在定义函数时指定的形参,在未出现函数 调用时,它们并不占内存中的存储单元,因此 称它们是形式参数或虚拟参数。 只有在发生函数调用时,函数max中的形参 才被分配内存单元,以便接收从实参传来的数 据。 在调用结束后,形参所占的内存单元被释放。 (2) 定义函数时,必须在函数首部指定形参类 型
(3)实参变量对形参变量的数据传递是“值传 递”,即单向传递,只由实参传给形参。形 参的值如果改变,不会改变主调函数中实参的 值。 a 2 3 a 2 b 3 X 2 3 10 15 2017年4月26日12时 第4章函数与预处理 H0座务 5 BACK NEXT
HOME2017年4月26日12时 12分 第4章 函数与预处理 5 (3) 实参变量对形参变量的数据传递是“值传 递” ,即单向传递,只由实参传给形参。 形 参的值如果改变,不会改变主调函数中实参的 值
例6.3输入a和b两个整数,按先大后小的顺序输 出a和b,要求用函数处理,函数参数为指针。 #include using namespace std; int mainO) { void swap(int *pl,int *p2); /函数形参为指针 int *pointer_1,*pointer_2,a,b; cin>>a>>b; pointer 1=&a; /使pointer1指向a pointer 2=&b; /使pointer2指向b if(a<b)swap(pointer_1,pointer_2); cout<<"max="<<a<<"min="<<b<<endl; return 0; 2017年4月26日12时 第6章指针 BACK NEXT
HOME2017年4月26日12时 12分 第6章 指针 6 #include using namespace std; int main( ) { void swap(int *p1,int *p2); //函数形参为指针 int *pointer_1, *pointer_2,a,b; cin>>a>>b; pointer_1=&a; //使pointer_1指向a pointer_2=&b; //使pointer_2指向b if(a<b) swap(pointer_1,pointer_2); cout<<"max="<<a<<" min="<<b<<endl; return 0; }
void swap(int *pl,int *p2) pl(形参) pl(形参) &a &a a a pointer 1 a pointer 1 45 pointer 1 78 pointer 1 a &a 45 &a &a &a 78 pointer 2 b p2(形参) p2(形参) pointer 2 b &b 78 &b &b 45 b b &b pointer 2 78 pointer 2 45 &b &b (a) (b) (c) (d) 2017年4月26日12时 H0座务 第6章指针 BACK NEXT
HOME2017年4月26日12时 12分 第6章 指针 7 void swap(int *p1,int *p2) { int temp; temp=*p1; *p1=*p2; *p2=temp; } //交换a和b的值,p1和p2的值不变
void swap(int *pl,int *p2) { int *temp; temp=pl; p1=p2; p2=temp; /不能通过改变形参指针变量的值而使实参指针 变量的值改变。 2017年4月26日12时 第6章指针 8 BACK NEXT
HOME2017年4月26日12时 12分 第6章 指针 8 void swap(int *p1,int *p2) { int *temp; temp=p1; p1=p2; p2=temp; } //不能通过改变形参指针变量的值而使实参指针 变量的值改变
实参变量和形参变量之间的数据传递是单向的“值 传递”方式。指针变量作函数参数也要遵循这一规 则。调用函数时不会改变实参指针变量的值,但可 以改变实参指针变量所指向变量的值。 pointer 1 a a pl a pointer 1 a &a 45 &a 45 &b 45 &b 45 pointer 2 b p2 b p2 b pointer 2 b &b 78 &b 78 &a 78 &a 78 (a) (b) (c) (d) 2017年4月26日12时 H0平务 第6章指针 9 BACK NEXT
HOME2017年4月26日12时 12分 第6章 指针 9 实参变量和形参变量之间的数据传递是单向的“值 传递”方式。指针变量作函数参数也要遵循这一规 则。调用函数时不会改变实参指针变量的值,但可 以改变实参指针变量所指向变量的值
#include #include using namespace std; double*f(int a,int b); double*fl(int x,int y,double*m); int mainO{ double*z,m; int x,y; cout长>x>>y; z=f(x,y); cout<<"sqrt"<<*z<<endl; cout长<"tan值"<*(z+1)<<end; z=f1(K,y,&m); cout<<"sqrt"<<*z<<endl; cout长<"tan值"<<m<endl;return 0; 2017年4月26日12时 H0座务 第8章类和对象 10 BACK NEXT
HOME• #include #include using namespace std; double* f(int a,int b); double*f1(int x,int y,double*m); int main(){ double*z, m; int x,y; cout>x>>y; z=f(x,y); cout<<"sqrt值"<<*z<<endl; cout<<"tan值"<<*(z+1)<<endl; z=f1(x,y,&m); cout<<"sqrt值"<<*z<<endl; cout<<"tan值"<<m<<endl;return 0; } 2017年4月26日12时 12分 第8章 类和对象 10