1、第三章第三章 函数函数C+语言程序设计1C+语言程序设计本章主要内容本章主要内容l函数的定义、声明和调用函数的定义、声明和调用l函数间的参数传递函数间的参数传递l内联函数内联函数l带默认形参值的函数带默认形参值的函数l函数重载函数重载lC+系统函数系统函数2C+语言程序设计函数的定义函数的定义l函数是面向对象程序设计中,对功能的函数是面向对象程序设计中,对功能的抽象抽象l函数定义的语法形式函数定义的语法形式类型标识符 函数名(形式参数表)语句序列函数的声明与使用是被初始化的内部变量,寿命和可见性仅限于函数内部若无返回值,写voiddoubledouble power(double x,int
2、n)power(double x,int n)double val=1.0;double val=1.0;while(nwhile(n -)-)val=valval=val*x;x;return(val);return(val);3C+语言程序设计函数的调用函数的调用l调用前先声明函数原型:调用前先声明函数原型:在调用函数中,或程序文件中所有函数之外,按如下形式说明:类型标识符 被调用函数名(含类型说明的形参表);l调用形式调用形式 函数名(实参列表)l嵌套调用嵌套调用函数可以嵌套调用,但不允许嵌套定义。递归调用函数直接或间接调用自身。函数的声明与使用4C+语言程序设计例例3-1编写一个求编写
3、一个求x的的n次方的函数次方的函数#include iostreaminclude doubledouble power(double x,int n);power(double x,int n);int main()int main()cout5 to the power 2 is cout5 to the power 2 is powerpower(5,2)endl;(5,2)endl;doubledouble power(double x,int n)power(double x,int n)double val=1.0;double val=1.0;while(n-)while(n-)
4、val=valval=val*x;x;return(val);return(val);函数的声明与使用5C+语言程序设计运行结果:运行结果:5 5 to the power 2 is 25to the power 2 is 25例例3-1编写一个求编写一个求x的的n次方的函数次方的函数函数的声明与使用6C+语言程序设计例例3-2 数制转换数制转换题目:题目:输入一个输入一个8 8位二进制数,将其转换为十进位二进制数,将其转换为十进制数输出。制数输出。例如:例如:0 0110111010010012 2 =0 0(2(27 7)+1+1(2(26 6)+1+1(2(25 5)+0+0(2(24
5、4)+1(21(23 3)+)+0 0(2(22 2)+0(2)+0(21 1)+1(2)+1(20 0)=1051051010 所以,所以,如果输入如果输入0 011010011101001,则应输出,则应输出105105函数的声明与使用7#include iostreaminclude double double powerpower(double x,int n);(double x,int n);/声明函数原型声明函数原型powerpowerint main()int main()int i;int i;int value=0;int value=0;char ch;char ch;c
6、out Enter an 8 bit binary number ;cout=0;i-)for(i=7;i=0;i-)cin ch;cin ch;if(ch=1)if(ch=1)value+=int(value+=int(powerpower(2,i);(2,i);/调用函数调用函数powerpower cout Decimal value is valueendl;cout Decimal value is valueendl;double double powerpower(double x,int n)(double x,int n)/声明函数声明函数powerpower double
7、val=1.0;double val=1.0;while(n-)while(n-)val val*=x;=x;return(val);return(val);运行结果:运行结果:Enter an 8 bit binary number Enter an 8 bit binary number 0110100101101001Decimal value is 105Decimal value is 10588C+语言程序设计例例3-3编写程序求编写程序求的值的值其中其中arctanarctan用如下形式的级数计算:用如下形式的级数计算:直到级数某项绝对值不大于直到级数某项绝对值不大于1010-1
8、5-15为止;为止;和和x x均为均为doubledouble型。型。函数的声明与使用2391arctan451arctan16753)arctan(753xxxxx9#includeincludeiostream.hintint main()main()double a,b;double a,b;double double arctanarctan(double(double x);/x);/函数原型声明函数原型声明 a=16.0a=16.0*arctanarctan(1/5.0);(1/5.0);b=4.0 b=4.0*arctanarctan(1/239.0);(1/239.0);/注意
9、:因为整数相除结果取整,注意:因为整数相除结果取整,/如果参数写如果参数写1/51/5,1/2391/239,结果就都是,结果就都是0 0 coutcoutPI=a-bPI=a-b1e-15)while(e/i1e-15)f=e/i;f=e/i;r=(i%4=1)?r+f:r=(i%4=1)?r+f:r-fr-f;e=e e=e*sqrsqr;i+=2;i+=2;return r;return r;运行结果:运行结果:PI=3.14159PI=3.141591111C+语言程序设计例例3-4l寻找并输出寻找并输出1199911999之间的数之间的数m m,它满足它满足m m、m m2 2和和m
10、 m3 3均为回文数。均为回文数。回文:各位数字左右对称的整数。例如:11满足上述条件 112 2=121,113 3=1331。l分析:分析:10取余的方法,从最低位开始,依次取出该数的各位数字。按反序重新构成新的数,比较与原数是否相等,若相等,则原数为回文。-参见例参见例2-6函数的声明与使用12#include include iostream.hintint main()main()boolbool symmsymm(long(long n);n);long m;long m;for(m=11;m1000;m+)for(m=11;m1000;m+)if(if(symmsymm(m)&(
11、m)&symmsymm(m(m*m)&m)&symmsymm(m(m*m m*m)m)coutcoutm=m mm=m m*m=mm=m*m m m m*m m*m=mm=m*m m*mmendlendl;1313boolbool symm(longsymm(long n)n)long i,m;long i,m;i=n;m=0;i=n;m=0;while(while(i i)/等价于等价于while(i!=0)while(i!=0)m=m=m m*10+i%1010+i%10;/对求出的每一位累加对求出的每一位累加 i=i/10 ;i=i/10 ;return(m=n);return(m=n)
12、;1414运行结果:运行结果:m=11 mm=11 m*m=121 mm=121 m*m m*m=1331m=1331m=101 mm=101 m*m=10201 mm=10201 m*m m*m=1030301m=1030301m=111 mm=111 m*m=12321 mm=12321 m*m m*m=1367631m=13676311515C+语言程序设计例例3-5计算如下公式,并输出结果:计算如下公式,并输出结果:其中其中r r、s s的值由键盘输入。的值由键盘输入。sinsin x x的近似的近似值按如下公式计算,计算精度为值按如下公式计算,计算精度为1010-6-6:函数的声明与
13、使用222222r)sin(21r)(sin)(sinssrssrk当当1121753)!12()1(!7!5!3!1sinnnnnxxxxxx16#include include iostream.h#include#includecmath.hintint main()main()double k,r,s;double k,r,s;double double tsintsin(double(double x);x);coutcoutr=;r;r;coutcouts=;s;s;if(r if(r*r=sr=s*s)s)k=k=sqrt(sqrt(tsintsin(r(r)*tsintsin(
14、r)+(r)+tsintsin(s(s)*tsintsin(s(s););else else k=k=tsintsin(r(r*s)/2;s)/2;coutcoutkk=p);)=p);return g;return g;运行结果:r=5s=81.37781181121753)!12()1(!7!5!3!1sinnnnnxxxxxxg:存放累加和t:存放任一项当前项 =(-1)*前一项*X*X/(2*n-1)/(2*n-2)18C+语言程序设计例例3-6投骰子的随机游戏投骰子的随机游戏每个骰子有六面,点数分别为每个骰子有六面,点数分别为1 1、2 2、3 3、4 4、5 5、6 6。游戏者在程
15、序开始时输入一个无符号整数,作为产生游戏者在程序开始时输入一个无符号整数,作为产生随机数的种子。随机数的种子。每轮投两次骰子,第一轮如果和数为每轮投两次骰子,第一轮如果和数为7 7或或1111则为胜,则为胜,游戏结束;和数为游戏结束;和数为2 2、3 3或或1212则为负,游戏结束;和数则为负,游戏结束;和数为其它值则将此值作为自己的点数,继续第二轮、第为其它值则将此值作为自己的点数,继续第二轮、第三轮三轮.直到某轮的和数等于点数则取胜,若在此前直到某轮的和数等于点数则取胜,若在此前出现和数为出现和数为7 7则为负。则为负。由由rolldicerolldice函数负责模拟投骰子、计算和数并输函
16、数负责模拟投骰子、计算和数并输出和数。出和数。函数的声明与使用19#include include iostream.h#include#include cstdlib.hintint rolldicerolldice(void(void););intint main()main()intint gamestatus,sum,mypointgamestatus,sum,mypoint;unsigned seed;unsigned seed;coutcoutPlease enter an unsigned integer:;seed;/seed;/输入随机数种子输入随机数种子 srand(see
17、dsrand(seed);/);/将种子传递给将种子传递给rand()rand()sum=sum=rolldicerolldice();/();/第一轮投骰子、计算和数第一轮投骰子、计算和数2020 switch(sum)switch(sum)case 7:/case 7:/如果和数为如果和数为7 7或或1111则为胜则为胜,状态为状态为1 1 case 11:case 11:gamestatusgamestatus=1;=1;break;break;case 2:/case 2:/和数为和数为2 2、3 3或或1212则为负则为负,状态为状态为2 2 case 3:case 3:case 1
18、2:case 12:gamestatusgamestatus=2;=2;break;break;default:default:/其其他他情况情况,游戏尚无结果游戏尚无结果,状态为状态为0,0,记下点数记下点数,为下一轮做准备为下一轮做准备 gamestatusgamestatus=0;=0;mypointmypoint=sum ;=sum ;coutcoutpoint is point is mypointmypointendlendl;break;break;2121 while(gamestatuswhile(gamestatus=0)=0)/只要状态仍为只要状态仍为 0,0,就继续进行
19、下一轮就继续进行下一轮 sum=sum=rolldicerolldice();();if(sum=if(sum=mypointmypoint)/某轮的和数等于点数则取胜某轮的和数等于点数则取胜,状态置为状态置为1 1 gamestatusgamestatus=1=1 else else if(sum=7 )/if(sum=7 )/出现和数为出现和数为7 7则为负则为负,状态置为状态置为2 2 gamestatusgamestatus=2;=2;/当状态不为当状态不为0 0时上面的循环结束时上面的循环结束,以下程序段输出游戏结果以下程序段输出游戏结果 if(if(gamestatusgamest
20、atus=1 )=1 )coutcoutplayer winsn;player winsn;else else coutcoutplayer losesn;player losesn;2222lrandrand函数原型:int rand(void);所需头文件:功能和返回值:求出并返回一个伪随机数lsrandsrand函数原型:void srand(unsigned int seed);参数:seed产生随机数的种子。所需头文件:功能:为使rand()产生一序列伪随机整数而设置起始点。使用1作为seed参数,可以重新初化rand()。2323intint rolldice(voidrolldi
21、ce(void)/投骰子、计算和数、输出和数投骰子、计算和数、输出和数 intint die1,die2,worksum;die1,die2,worksum;die1=1+rand()%6;die1=1+rand()%6;die2=1+rand()%6;die2=1+rand()%6;worksumworksum=die1+die2;=die1+die2;coutcoutplayer rolled player rolled die1+die2=die1+die2=worksumworksumendlendl;return return worksumworksum;2424运行结果运行结果2
22、 2:Please enter an unsigned integer:23Please enter an unsigned integer:23player rolled 6+3=9player rolled 6+3=9point is 9point is 9player rolled 5+4=9player rolled 5+4=9player winsplayer wins2525C+语言程序设计函数调用的执行过程函数调用的执行过程函数的声明与使用main()调fun()结束fun()返回保存:返回地址当前现场恢复:主调程序现场返回地址26C+语言程序设计嵌套调用嵌套调用函数的声明与使用
23、main调fun1()结束fun1()调fun2()返回fun2()返回27C+语言程序设计例例3-6 输入两个整数,求平方和。输入两个整数,求平方和。#include include iostream.hintint main()main()intint a,b;a,b;intint fun1(int fun1(int x,intx,int y);y);cincinab;ab;coutcoutaa、b b的平方和:的平方和:fun1fun1(a,b)(a,b)endlendl;函数的声明与使用28intint fun1fun1(int(int x,intx,int y)y)intint fu
24、n2fun2(int m);(int m);return(fun2(x)+fun2(y);return(fun2(x)+fun2(y);intint fun2fun2(int m)(int m)return(m return(m*m);m);运行结果:运行结果:3 43 4a a、b b的平方和:的平方和:25252929C+语言程序设计递归调用递归调用l函数直接或间接地调用自身,称为递归调用。l递归过程的两个阶段:递推:4!=43!3!=32!2!=21!1!=10!0!=1未知 已知回归:4!=43!=243!=32!=62!=21!=21!=10!=10!=1未知未知 已知已知函数的声明
25、与使用30C+语言程序设计例例3-8 求求n!分析:计算n!的公式如下:这是一个递归形式的公式,应该用递归函数实现。函数的声明与使用)0()!1()0(1!nnnnn31源程序:源程序:#include include iostream.hlonglong facfac(int(int n)n)long f;long f;if(n0)if(n0)coutcoutn0,data error!n0,data error!endlendl;else if(n=0)f=1;else if(n=0)f=1;else f=else f=facfac(n-1)(n-1)*n;n;return(f);retu
26、rn(f);3232intint main()main()long long fac(intfac(int n);n);intint n;n;long y;long y;coutcoutEnter a positive integer:;n;n;y=y=facfac(n(n););coutcoutn!=yn!=yendlendl;运行结果:运行结果:Enter a positive integer:8Enter a positive integer:88!=403208!=403203333C+语言程序设计例例3-9l用递归法计算从用递归法计算从n n个人中选择个人中选择k k个人组个人组成一
27、个委员会的不同组合数。成一个委员会的不同组合数。l分析:分析:由n个人里选k个人的组合数=由n-1个人里选k个人的组合数 +由n-1个人里选k-1个人的组合数当n=k或k=0时,组合数为1函数的声明与使用34#includeincludeiostream.hintint main()main()intint n,k;n,k;intint comm(intcomm(int n,n,intint k);k);cincinnk;nk;coutcoutcomm(n,kcomm(n,k)n)return 0;if(kn)return 0;else if(n=k|k=0)else if(n=k|k=0)r
28、eturn 1;return 1;else else return comm(n-1,k)+comm(n-1,k-1);return comm(n-1,k)+comm(n-1,k-1);运行结果:18 585683535C+语言程序设计例例3-10汉诺塔问题汉诺塔问题有三根针有三根针A A、B B、C C。A A针上有针上有N N个盘子,大个盘子,大的在下,小的在上,要求把这的在下,小的在上,要求把这N N个盘子从个盘子从A A针针移到移到C C针,在移动过程中可以借助针,在移动过程中可以借助B B针,每次针,每次只允许移动一个盘,且在移动过程中在三根只允许移动一个盘,且在移动过程中在三根针上
29、都保持大盘在下,小盘在上。针上都保持大盘在下,小盘在上。函数的声明与使用ABC36分析:分析:将将n n 个盘子从个盘子从A A针移到针移到C C针可以分解为下面三个步骤:针可以分解为下面三个步骤:将将A A 上上n-1n-1个盘子移到个盘子移到 B B针上(借助针上(借助C C针)针);把把A A针上剩下的一个盘子移到针上剩下的一个盘子移到C C针上针上;将将n-1n-1个盘子从个盘子从B B针移到针移到C C针上(借助针上(借助A A针)针);事实上,上面三个步骤包含两种操作:事实上,上面三个步骤包含两种操作:将多个盘子从一个针移到另一个针上,这是一个递将多个盘子从一个针移到另一个针上,这
30、是一个递归的过程。归的过程。hanoihanoi函数实现。函数实现。将将1 1个盘子从一个针上移到另一针上。个盘子从一个针上移到另一针上。用用movemove函数实现。函数实现。3737#include include iostream.hvoidvoid move(char move(char getone,chargetone,char putoneputone)coutcoutgetonegetoneputoneputoneendlendl;void void hanoi(inthanoi(int n,char one,char two,char three)n,char one,cha
31、r two,char three)void move(char void move(char getone,chargetone,char putoneputone););if(n=1)move(one,three);if(n=1)move(one,three);elseelse hanoi(n-1,one,three,two);hanoi(n-1,one,three,two);move(one,threemove(one,three););hanoi(n-1,two,one,three);hanoi(n-1,two,one,three);3838intint main()main()void
32、 void hanoi(inthanoi(int n,char one,char two,char three);n,char one,char two,char three);intint m;m;coutcoutEnter the number of m;m;coutcoutthe steps to moving mthe steps to moving m diskesdiskes:CA-CA-BA-BC-BC-BA-CA-CB-AB-AB-CB-CA-CA-C4040C+语言程序设计函数的参数传递机制函数的参数传递机制 传递参数值传递参数值l在函数被调用时才分配形参的存储在函数被调用时
33、才分配形参的存储单元。单元。l实参可以是常量、变量或表达式。实参可以是常量、变量或表达式。l实参类型必须与形参相符。实参类型必须与形参相符。l传递时是传递参数值,即单向传递。传递时是传递参数值,即单向传递。函数的声明与使用41C+语言程序设计函数的参数传递机制函数的参数传递机制 参数值传递举例参数值传递举例XN被调函数:被调函数:主调函数:主调函数:3 3 2.5 2.5AD=power(A,3)2.5 2.53 3double power(double X,int N)函数的声明与使用42C+语言程序设计例例3-11 输入两个整数交换后输出输入两个整数交换后输出#includeinclude
34、iostream.hvoidvoid SwapSwap(int(int a,a,intint b);b);intint main()main()intint x(5),y(10);x(5),y(10);coutcoutx=x y=yx=x y=yendlendl;SwapSwap(x,y);(x,y);coutcoutx=x y=yx=x y=yendlendl;return 0;return 0;函数的声明与使用43void void SwapSwap(int(int a,a,intint b)b)intint t;t;t=a;t=a;a=b;a=b;b=t;b=t;运行结果运行结果:x=5
35、 y=10 x=5 y=10 x=5 y=10 x=5 y=104444a=b;5 x10 y5 a10 b执行主函数中的函数调用Swap(x,ySwap(x,y););t=a;5 x10 y5 a10 b5tb=t;5 x10 y10 a5 b5t5 x10 y10 a10 b5t在Swap子函数中返回主函数以后5x x10y454545C+语言程序设计函数的参数传递函数的参数传递 用引用做形参用引用做形参l引用引用(&)(&)是标识符的别名是标识符的别名,例如例如:int i,j;int&ri=i;/建立一个int型的引用ri,并将其 /初始化为变量i的一个别名j=10;ri=j;/相当于
36、 i=j;l声明一个引用时,必须同时对它进行初始化,声明一个引用时,必须同时对它进行初始化,使它指向一个已存在的对象。使它指向一个已存在的对象。l一旦一个引用被初始化后,就不能改为指向一旦一个引用被初始化后,就不能改为指向其它对象。其它对象。l引用可以作为形参引用可以作为形参void void swap(intswap(int&a,&a,intint&b).&b).函数的声明与使用46C+语言程序设计例例3-12 输入两个整数交换后输出输入两个整数交换后输出#includeincludeiostream.hvoidvoid Swap(int Swap(int&a a,int int&b b);
37、);intint main()main()intint x(5),y(10);x(5),y(10);coutcoutx=x y=yx=x y=yendlendl;SwapSwap(x,y(x,y););coutcoutx=x y=yx=x y=yendlendl;return 0;return 0;void void SwapSwap(int(int&a a,int int&b b)intint t;t;t=a;t=a;a=b;a=b;b=t;b=t;函数的声明与使用运行结果运行结果:x=x=5 5 y=10 y=10 x=10 y=x=10 y=5 547t=a;x x5t5x 的别名a a
38、x xy y510y 的别名x 的别名a ab by 的别名x 的别名a ab bx x10y y10a=bb=t;y5t5y 的地址b bx xy y105Swap(x,y);4848C+语言程序设计内联函数声明与使用内联函数声明与使用l声明时使用关键字声明时使用关键字 inlineinline。l编译时在调用处用函数体进行替换编译时在调用处用函数体进行替换,节省了参数传递、控制转移等开销。节省了参数传递、控制转移等开销。l注意:注意:内联函数体内不能有循环语句和switch语句。内联函数的声明必须出现在内联函数第一次被调用之前。对内联函数不能进行异常接口声明。内联函数49C+语言程序设计例
39、例3-14 内联函数应用举例内联函数应用举例#includeincludeiostream.hinlineinline double double CalAreaCalArea(double(double radius)radius)return 3.14return 3.14*radiusradius*radius;radius;intint main()main()double r(3.0);double r(3.0);double area;double area;area=area=CalAreaCalArea(r(r););coutcoutareaareaendlendl;retur
40、n 0;return 0;内联函数50C+语言程序设计默认形参值的作用默认形参值的作用l函数在声明时可以预先给出默认的形参值,函数在声明时可以预先给出默认的形参值,调用时如给出实参,则采用实参值,否则采调用时如给出实参,则采用实参值,否则采用预先给出的默认形参值。用预先给出的默认形参值。l例如:例如:int add(int x=5,int y=6)return x+y;int main()add(10,20);/10+20 add(10);/10+6 add();/5+6带默认形参值的函数51C+语言程序设计默认形参值的说明次序默认形参值的说明次序l默认形参值必须默认形参值必须从右向左从右向左
41、顺序声明,顺序声明,并且在默认形参值的右面不能有非默并且在默认形参值的右面不能有非默认形参值的参数。因为调用时实参取认形参值的参数。因为调用时实参取代形参是从左向右的顺序。代形参是从左向右的顺序。l例:例:int add(int x,int y=5,int z=6);/正确int add(int x=1,int y=5,int z);/错误int add(int x=1,int y,int z=6);/错误带默认形参值的函数52C+语言程序设计默认形参值与函数的调用位置默认形参值与函数的调用位置l调用出现在函数体实现之前时,默认形参值必须在函调用出现在函数体实现之前时,默认形参值必须在函数原形
42、中给出;而当调用出现在函数体实现之后时,数原形中给出;而当调用出现在函数体实现之后时,默认形参值需在函数实现时给出。默认形参值需在函数实现时给出。l例:例:int add(int x=5,int y=6);int main()add();/调用在实现前int add(int x,int y)return x+y;int add(int x=5,int y=6)return x+y;int main()add();/调用在实现后带默认形参值的函数53C+语言程序设计默认形参值的作用域默认形参值的作用域l在相同的作用域内,默认形参值的说明应保在相同的作用域内,默认形参值的说明应保持惟一,但如果在不
43、同的作用域内,允许说持惟一,但如果在不同的作用域内,允许说明不同的默认形参。明不同的默认形参。l例:例:int add(int x=1,int y=2);int main()int add(int x=3,int y=4);add();/使用局部默认形参值(实现3+4)void fun().add();/使用全局默认形参值(实现1+2)带默认形参值的函数54C+语言程序设计重载函数的声明重载函数的声明lC+C+允许功能相近的函数在相同的作用域内以允许功能相近的函数在相同的作用域内以相同函数名声明,从而形成重载。方便使用,相同函数名声明,从而形成重载。方便使用,便于记忆。便于记忆。l例:例:形参
44、类型不同int add(int x,int y);float add(float x,float y);形参个数不同int add(int x,int y);int add(int x,int y,int z);函 数 重 载55C+语言程序设计注意事项注意事项 不要将不同功能的函数声明为重载函数,以免出现调用结果的误解、混淆。这样不好:int add(int x,int y);int add(int a,int b);编译器不以形参名来区分int add(int x,int y);void add(int x,int y);编译器不以返回值来区分int add(int x,int y)ret
45、urn x+y;float add(float x,float y)return x-y;函 数 重 载重载函数的形参必须不同:个数不同或类型不同。编译程序将根据实参和形参的类型及个数的最佳匹配来选择调用哪一个函数。56C+语言程序设计例例3-16重载函数应用举例重载函数应用举例编写三个名为编写三个名为addadd的重载函数,分别实现两整数的重载函数,分别实现两整数相加、两实数相加和两个复数相加的功能。相加、两实数相加和两个复数相加的功能。#includeincludeiostream.hstructstruct complex complex double real;double real;
46、double imaginary;double imaginary;函 数 重 载57intint main()main()intint m,n;m,n;double x,y;double x,y;complex c1,c2,c3;complex c1,c2,c3;intint add(intadd(int m,m,intint n);n);double add(double x,double y);double add(double x,double y);complex add(complex c1,complex c2);complex add(complex c1,complex c2
47、);coutcoutEnter two integer:;mn;mn;coutcoutinteger m+n=add(m,n)integer m+n=add(m,n)endlendl;5858coutcoutEnter two real number:;xy;xy;coutcoutreal number x+y=add(x,y)real number x+y=add(x,y)endlendl;coutcoutEnter the first complex number:;c1.realc1.imaginary;c1.realc1.imaginary;coutcoutEnter the seco
48、nd complex number:;c2.realc2.imaginary;c2.realc2.imaginary;c3=add(c1,c2);c3=add(c1,c2);coutcoutcomplex number(c1.real,complex number(c1.real,c1.imaginary)+(c2.real,c1.imaginary)+(c2.real,c2.imaginary)=(c3.real,c2.imaginary)=(c3.real,c3.imaginary)n;c3.imaginary)n;5959intint add(intadd(int m,m,intint
49、n)n)return m+n;return m+n;double add(double x,double y)double add(double x,double y)return x+y;return x+y;complex add(complex c1,complex c2)complex add(complex c1,complex c2)complex c;complex c;c.real=c1.real+c2.real;c.real=c1.real+c2.real;c.imaginary=c1.imaginary+c2.imaginary;c.imaginary=c1.imagina
50、ry+c2.imaginary;return c;return c;6060运行结果:运行结果:Enter two integer:3 5Enter two integer:3 5integer 3+5=8integer 3+5=8Enter two real number:2.3 5.8Enter two real number:2.3 5.8real number 2.3+5.8=8.1real number 2.3+5.8=8.1Enter the first complex number:12.3 45.6Enter the first complex number:12.3 45.6