版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1C+语言程序设计C+语言程序设计清华大学 郑莉2本章主要内容本章主要内容l函数的定义和调用函数的定义和调用l函数间的参数传递函数间的参数传递l内联函数内联函数l带默认形参值的函数带默认形参值的函数l函数重载函数重载lC+系统函数系统函数l深度探索深度探索C+语言程序设计清华大学 郑莉3函数的定义函数的定义l函数是面向对象程序设计中,对功能的函数是面向对象程序设计中,对功能的抽象抽象l函数定义的语法形式函数定义的语法形式类型标识符 函数名(形式参数表) 语句序列函数的声明与使用是被初始化的内部变量,寿命和可见性仅限于函数内部若无返回值,写voidC+语言程序设计清华大学 郑莉4函数的定义函数的
2、定义l形式参数表形式参数表 name1, name2, ., namenl函数的返回值函数的返回值由 return 语句给出,例如:return 0无返回值的函数(void类型),不必写return语句。函数的声明与使用C+语言程序设计清华大学 郑莉5函数的调用函数的调用l调用前先声明函数:调用前先声明函数:若函数定义在调用点之前,则无需另外声明;若函数定义在调用点之后,则需要在调用函数前按如下形式声明函数原型: 类型标识符 被调用函数名(含类型说明的形参表);l调用形式调用形式 函数名(实参列表) l嵌套调用嵌套调用函数可以嵌套调用,但不允许嵌套定义。l递归调用递归调用函数直接或间接调用自身
3、。函数的声明与使用C+语言程序设计清华大学 郑莉6例例3-1编写一个求编写一个求x的的n次方的函数次方的函数# #include include using namespace std;using namespace std;/计算计算x的的n次方次方double power(double x, int n) double power(double x, int n) double val = 1.0;double val = 1.0;while (n-) val while (n-) val * *= x;= x;return val;return val; int main() int m
4、ain() cout 5 to the power 2 is cout 5 to the power 2 is powerpower(5, 2) endl;(5, 2) endl;return 0;return 0; 函数的声明与使用C+语言程序设计清华大学 郑莉7运行结果:运行结果:5 to the power 2 is 255 to the power 2 is 25例例3-1编写一个求编写一个求x的的n次方的函数次方的函数函数的声明与使用C+语言程序设计清华大学 郑莉8例例3-2 数制转换数制转换题目:题目: 输入一个输入一个8 8位二进制数,将其转换位二进制数,将其转换为十进制数输出。
5、为十进制数输出。例如:例如:110111012 2=1(2=1(23 3)+1(2)+1(22 2)+0(2)+0(21 1)+1(2)+1(20 0)=13)=131010 所以,如果输入所以,如果输入11011101,则应输出,则应输出1313函数的声明与使用# #include include using namespace std;using namespace std;/计算计算x的的n次方次方double double powerpower (double x, int n); (double x, int n);int main() int main() int value =
6、0;int value = 0;cout Enter an 8 bit binary number ;cout = 0; i-) for (int i = 7; i = 0; i-) char ch; char ch; cin ch; cin ch; if (ch = 1) if (ch = 1) value += static_cast( value += static_cast(powerpower(2, i);(2, i); cout Decimal value is value endl;cout Decimal value is value endl;return 0;return
7、0; double double powerpower (double x, int n) (double x, int n) double 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 1059C+语言程序设计清华大学
8、郑莉10例例3-3编写程序求编写程序求的值的值其中其中arctanarctan用如下形式的级数计算:用如下形式的级数计算:直到级数某项绝对值不大于直到级数某项绝对值不大于1010-15-15为止;为止;和和x x均为均为doubledouble型。型。函数的声明与使用2391arctan451arctan16357arctan357xxxxx#include #include using namespace std;using namespace std;double arctan(double x) double arctan(double x) double sqr = x double
9、sqr = x * * x; x;double e = x;double e = x;double r = 0;double r = 0;int i = 1;int i = 1;while (e / i 1e-15) while (e / i 1e-15) double f = e / i;double f = e / i;r = (i % 4 = 1) ? r + f : r - f;r = (i % 4 = 1) ? r + f : r - f;e = e e = e * * sqr; sqr;i += 2;i += 2; return r;return r; 11int main() i
10、nt main() double a = 16.0 double a = 16.0 * * arctan(1 / 5.0)arctan(1 / 5.0); ; double b = 4.0 double b = 4.0 * * arctan(1 / 239.0)arctan(1 / 239.0); ; /注意:因为整数相除结果取整,如果参数写注意:因为整数相除结果取整,如果参数写1/51/5,1/2391/239,结果就都是,结果就都是0 0cout PI = a - b endl;cout PI = a - b endl;return 0;return 0; 运行结果:运行结果:PI=3.1
11、4159PI=3.1415912C+语言程序设计清华大学 郑莉13例例3-4l寻找并输出寻找并输出1111999999之间的数之间的数m m,它满足,它满足m m、m m2 2和和m m3 3均为回文数。均为回文数。回文:各位数字左右对称的整数。例如:11满足上述条件 112 2=121,113 3=1331。l分析:分析:10取余的方法,从最低位开始,依次取出该数的各位数字。按反序重新构成新的数,比较与原数是否相等,若相等,则原数为回文。函数的声明与使用#include #include using namespace std;using namespace std;/判断判断n n是否为回
12、文数是否为回文数bool symm(unsigned n) bool symm(unsigned n) unsigned i = n; unsigned i = n;unsigned m = 0;unsigned m = 0;while (while (i 0i 0) ) m = m = m m * * 10 + i % 10 10 + i % 10; ; i /= 10; i /= 10; return m = n; return m = n; 14int main() int main() for(unsigned m = 11; m 1000; m+)for(unsigned m = 1
13、1; m 1000; m+) if ( if (symmsymm(m) & (m) & symmsymm(m (m * * m) & m) & symm symm(m (m * * m m * * m) m) cout m = m; cout m = m; cout m cout m * * m = m m = m * * m; m; cout m cout m * * m m * * m = m = m m * * m m * * m endl; m endl; return 0;return 0; 15运行结果:运行结果:m=11 mm=11 m* *m=1
14、21 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=136763116C+语言程序设计清华大学 郑莉17例例3-5计算如下公式,并输出结果:计算如下公式,并输出结果:其中其中r r、s s的值由键盘输入。的值由键盘输入。sin xsin x的近似的近似值按如下公式计算,计算精度为值按如下公式计算,计算精度为1010-6-6:函数的声明与使用112175
15、3)!12() 1(! 7! 5! 3! 1sinnnnnxxxxxx222222sinsinr1sin()r2rsskrss当当#include #include #include /#include /对对C+C+标准库中数学函数的说明标准库中数学函数的说明using namespace std;using namespace std;const double TINY_VALUE = 1e-10;const double TINY_VALUE = 1e-10;double tsin(double x) double tsin(double x) double g = 0;double g
16、 = 0;double t = x;double t = x;int n = 1;int n = 1;do do g += t;g += t;n+;n+;t = -t t = -t * * x x * * x / (2 x / (2 * * n - 1) / (2 n - 1) / (2 * * n - 2); n - 2); while (fabs(t) = TINY_VALUE); while (fabs(t) = TINY_VALUE); return g;return g;18int main() int main() double k, r, s;double k, r, s;cou
17、t r = ;cout r;cin r;cout s = ;cout s;cin s;if (r if (r * * r = s r = s * * s) s)k = sqrt(k = sqrt(tsintsin(r) (r) * * tsintsin(r) + (r) + tsintsin(s) (s) * * tsin(s);tsin(s);elseelsek = k = tsintsin(r (r * * s) / 2; s) / 2;cout k endl;cout k endl;return 0;return 0; 运行结果:r=5s=81.3778119C+语言程序设计清华大学 郑
18、莉20例例3-6投骰子的随机游戏投骰子的随机游戏每个骰子有六面,点数分别为每个骰子有六面,点数分别为1 1、2 2、3 3、4 4、5 5、6 6。游戏者在程序开始时输入一个无符号整数,作为产生游戏者在程序开始时输入一个无符号整数,作为产生随机数的种子。随机数的种子。每轮投两次骰子,第一轮如果和数为每轮投两次骰子,第一轮如果和数为7 7或或1111则为胜,则为胜,游戏结束;和数为游戏结束;和数为2 2、3 3或或1212则为负,游戏结束;和数则为负,游戏结束;和数为其它值则将此值作为自己的点数,继续第二轮、第为其它值则将此值作为自己的点数,继续第二轮、第三轮三轮.直到某轮的和数等于点数则取胜,
19、若在此前直到某轮的和数等于点数则取胜,若在此前出现和数为出现和数为7 7则为负。则为负。由由rolldicerolldice函数负责模拟投骰子、计算和数并输函数负责模拟投骰子、计算和数并输出和数。出和数。函数的声明与使用lrandrand函数原型:int rand(void);所需头文件:功能和返回值:求出并返回一个伪随机数lsrandsrand函数原型:void srand(unsigned int seed);参数:seed产生随机数的种子。所需头文件:功能:为使rand()产生一序列伪随机整数而设置起始点。使用1作为seed参数,可以重新初化rand()。21#include #incl
20、ude #include #include using namespace std;using namespace std;/投骰子、计算和数、输出和数投骰子、计算和数、输出和数int rollDice() int rollDice() int die1 = 1 + rand() % 6;int die1 = 1 + rand() % 6;int die2 = 1 + rand() % 6;int die2 = 1 + rand() % 6;int sum = die1 + die2;int sum = die1 + die2;cout player rolled die1 + cout pl
21、ayer rolled die1 + die2 = sum endl;die2 = sum endl;return sum;return sum; 22enum GameStatus WIN, LOSE, PLAYING ;enum GameStatus WIN, LOSE, PLAYING ;int main() int main() int sum, myPoint;int sum, myPoint;GameStatus status;GameStatus status;unsigned seed; unsigned seed; cout Please enter an unsigned
22、integer: ;cout seed;/cin seed;/输入随机数种子输入随机数种子srand(seed);/srand(seed);/将种子传递给将种子传递给rand()rand()sum = sum = rollDicerollDice(); /(); /第一轮投骰子、计算和数第一轮投骰子、计算和数23switch (sum) switch (sum) case 7: /case 7: /如果和数为如果和数为7 7或或1111则为胜则为胜, ,状态为状态为WINWINcase 11:case 11: status = WIN; status = WIN; break; break;c
23、ase 2: /case 2: /和数为和数为2 2、3 3或或1212则为负则为负, ,状态为状态为LOSELOSEcase 3: case 3: case 12:case 12: status = LOSE; status = LOSE; break; break;default: /default: /其它情况其它情况, ,游戏尚无结果游戏尚无结果, ,状态为状态为PLAYING,PLAYING,记记下点数下点数, ,为下一轮做准备为下一轮做准备 status = PLAYING;status = PLAYING; myPoint = sum; myPoint = sum; cout p
24、oint is myPoint endl; cout point is myPoint endl; break; break; 24while (status = PLAYING) /while (status = PLAYING) /只要状态仍为只要状态仍为PLAYING,PLAYING,就继续就继续进行下一轮进行下一轮 sum = sum = rollDicerollDice();(); if (sum = myPoint) / if (sum = myPoint) /某轮的和数等于点数则取胜某轮的和数等于点数则取胜 status = WIN; status = WIN; else if
25、(sum = 7) / else if (sum = 7) /出现和数为出现和数为7 7则为负则为负 status = LOSE; status = LOSE; /当状态不为当状态不为PLAYINGPLAYING时上面的循环结束时上面的循环结束, ,以下程序段输出游戏结以下程序段输出游戏结果果if (status = WIN)if (status = WIN) cout player wins endl; cout player wins endl;elseelse cout player loses endl; cout player loses endl;return 0;return 0
26、; 25运行结果运行结果2 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 wins26C+语言程序设计清华大学 郑莉27嵌套调用嵌套调用函数的声明与使用main调fun1()结束fun1()调fun2()返回fun2()返回C+语言程序设计清
27、华大学 郑莉28例例3-6 输入两个整数,求平方和。输入两个整数,求平方和。#include #include using namespace std;using namespace std;int int fun2fun2(int m) (int m) return m return m * * m; m; int int fun1fun1(int x,int y) (int x,int y) return return fun2fun2(x) + (x) + fun2fun2(y);(y); 函数的声明与使用int main() int main() int a, b;int a, b;c
28、out Please enter two integers (a cout a b;cin a b;cout The sum of square of a and cout The sum of square of a and b: b: fun1fun1(a, b) endl;(a, b) endl;return 0;return 0; 运行结果:运行结果:Please enter two integers(a and b): 3 4Please enter two integers(a and b): 3 4The sum of square of a and b: 25The sum o
29、f square of a and b: 2529C+语言程序设计清华大学 郑莉30递归调用递归调用l函数直接或间接地调用自身,称为递归调用。l递归过程的两个阶段:递推: 4!=43!3!=32!2!=21!1!=10!0!=1未知 已知回归:4!=43!=243!=32!=62!=21!=21!=10!=10!=1未知未知 已知已知函数的声明与使用C+语言程序设计清华大学 郑莉31例例3-8 求求n!分析:计算n!的公式如下:这是一个递归形式的公式,应该用递归函数实现。函数的声明与使用)0()!1()0(1!nnnnn源程序:源程序:#include #include using names
30、pace std;using namespace std;unsigned unsigned facfac(int n)(int n)unsigned f;unsigned f;if (n = 0)if (n = 0) f = 1; f = 1; else else f = f = facfac(n - 1) (n - 1) * * n; n; return f; return f; 32int main() int main() unsigned n;unsigned n;cout Enter a positive integer:;cout n;cin n;unsigned y = uns
31、igned y = facfac(n);(n);cout n ! = y endl;cout n ! = y endl;return 0;return 0; 运行结果:运行结果:Enter a positive integer:8Enter a positive integer:88! = 403208! = 4032033C+语言程序设计清华大学 郑莉34例例3-9l用递归法计算从用递归法计算从n n个人中选择个人中选择k k个人组个人组成一个委员会的不同组合数。成一个委员会的不同组合数。l分析:分析: 由n个人里选k个人的组合数 = 由n-1个人里选k个人的组合数 +由n-1个人里选k-1
32、个人的组合数当n = k或k = 0时,组合数为1函数的声明与使用#include #include using namespace std;using namespace std;int comm(int n, int k) int comm(int n, int k) if (k n)if (k n) return 0; return 0;else if (n = k | k = 0)else if (n = k | k = 0) return 1; return 1;elseelse return comm(n - 1, k) + comm(n - 1, k - 1); return c
33、omm(n - 1, k) + comm(n - 1, k - 1); int main() int main() int n, k;int n, k;cout Please enter two integers n and k: ;cout n k;cin n k;cout C(n, k) = comm(n, k) endl;cout C(n, k) = comm(n, k) endl;return 0;return 0; 运行结果:18 5856835C+语言程序设计清华大学 郑莉36例例3-10汉诺塔问题汉诺塔问题有三根针有三根针A A、B B、C C。A A针上有针上有N N个盘子,大
34、个盘子,大的在下,小的在上,要求把这的在下,小的在上,要求把这N N个盘子从个盘子从A A针针移到移到C C针,在移动过程中可以借助针,在移动过程中可以借助B B针,每次针,每次只允许移动一个盘,且在移动过程中在三根只允许移动一个盘,且在移动过程中在三根针上都保持大盘在下,小盘在上。针上都保持大盘在下,小盘在上。函数的声明与使用ABC分析:分析:将将n n 个盘子从个盘子从A A针移到针移到C C针可以分解为下面三个步骤:针可以分解为下面三个步骤:将将A A 上上n-1n-1个盘子移到个盘子移到 B B针上(借助针上(借助C C针)针); ;把把A A针上剩下的一个盘子移到针上剩下的一个盘子移
35、到C C针上针上; ;将将n-1n-1个盘子从个盘子从B B针移到针移到C C针上(借助针上(借助A A针)针); ;事实上,上面三个步骤包含两种操作:事实上,上面三个步骤包含两种操作:将多个盘子从一个针移到另一个针上,这是一个递将多个盘子从一个针移到另一个针上,这是一个递归的过程。归的过程。 hanoihanoi函数实现。函数实现。将将1 1个盘子从一个针上移到另一针上。个盘子从一个针上移到另一针上。用用movemove函数实现。函数实现。37#include #include using namespace std;using namespace std;/把把srcsrc针的最上面一个盘
36、子移动到针的最上面一个盘子移动到destdest针上针上void move(char src, char dest) void move(char src, char dest) cout src dest endl;cout src dest endl; /把把n n个盘子从个盘子从srcsrc针移动到针移动到destdest针,以针,以mediummedium针作为中介针作为中介void hanoi(int n, char src, char medium, char dest) void hanoi(int n, char src, char medium, char dest) if
37、(n = 1)if (n = 1) move(src, dest); move(src, dest);else else hanoi(n - 1, src, dest, medium); hanoi(n - 1, src, dest, medium); move(src, dest); move(src, dest); hanoi(n - 1, medium, src, dest); hanoi(n - 1, medium, src, dest); 38int main() int main() int m;int m;cout Enter the number of diskes: ;cou
38、t m;cin m;cout the steps to moving m cout the steps to moving m diskes: endl;diskes: CA - CA - BA - BC - BC - BA - CA - CB - AB - AB - CB - CA - CA - C40C+语言程序设计清华大学 郑莉41函数的参数传递机制函数的参数传递机制 传递参数值传递参数值l在函数被调用时才分配形参的存储在函数被调用时才分配形参的存储单元。单元。l实参可以是常量、变量或表达式。实参可以是常量、变量或表达式。l实参类型必须与形参相符。实参类型必须与形参相符。l传递时是传递参
39、数值,即单向传递。传递时是传递参数值,即单向传递。函数的声明与使用C+语言程序设计清华大学 郑莉42函数的参数传递机制函数的参数传递机制 参数值传递举例参数值传递举例XN被调函数:被调函数:主调函数:主调函数:3 3 2.5 2.5AD = power(A,3) 2.5 2.53 3double power(double X,int N)函数的声明与使用C+语言程序设计清华大学 郑莉43例例3-11 输入两个整数交换后输出输入两个整数交换后输出#include#includeusing namespace std;using namespace std;void void swapswap(i
40、nt a, int b) (int a, int b) int t = a;int t = a;a = b;a = b;b = t;b = t; 函数的声明与使用int main() int main() int x = 5, y = 10;int x = 5, y = 10;cout x = x y = y endl;cout x = x y = y endl;swapswap(x, y);(x, y);cout x = x y = y endl;cout x = x y = y endl;return 0;return 0; 运行结果运行结果: :x = 5 y = 10 x = 5 y
41、= 10 x = 5 y = 10 x = 5 y = 1044a=b;5 x10 y5 a10 b执行主函数中的函数调用s);s);t=a;5 x10 y5 a10 b5tb=t;5 x10 y10 a5 b5t5 x10 y10 a10 b5t在swap子函数中返回主函数以后5x x10y4545C+语言程序设计清华大学 郑莉46函数的参数传递函数的参数传递 用引用做形参用引用做形参l引用引用(&)(&)是标识符的别名是标识符的别名, ,例如例如: :int i, j;int &ri = i; /建立一个int型的引用ri,并将其 /初始化为变量i的一个别名j =
42、10;ri = j;/相当于 i = j;l声明一个引用时,必须同时对它进行初始化,声明一个引用时,必须同时对它进行初始化,使它指向一个已存在的对象。使它指向一个已存在的对象。l一旦一个引用被初始化后,就不能改为指向一旦一个引用被初始化后,就不能改为指向其它对象。其它对象。l引用可以作为形参引用可以作为形参void s &a, int &b) .void s &a, int &b) .函数的声明与使用C+语言程序设计清华大学 郑莉47例例3-12 输入两个整数交换后输出输入两个整数交换后输出#include#includeusing namespace std;
43、using namespace std;void void swapswap(int(int& & a, int a, int& & b) b) int t = a;int t = a;a = b;a = b;b = t;b = t; int main() int main() int x = 5, y = 10;int x = 5, y = 10;cout x = x y = y endl;cout x = x y = y endl;swapswap(x, y);(x, y);cout x = x y = y endl;cout x = x y = y end
44、l;return 0;return 0; 函数的声明与使用运行结果运行结果: :x = x = 5 5 y = 10 y = 10 x = 10 y = x = 10 y = 5 5t=a;x x5t5x 的引用a ax xy y510y 的引用x 的引用a ab by 的引用x 的引用a ab bx x10y y10a=bb=t;y5t5y 的引用b bx xy y105s);48C+语言程序设计清华大学 郑莉49内联函数声明与使用内联函数声明与使用l声明时使用关键字声明时使用关键字 inlineinline。l编译时在调用处用函数体进行替换编译时在调用处用函数体进行替换, ,节省了参数传递
45、、控制转移等开销。节省了参数传递、控制转移等开销。l注意:注意:内联函数体内不能有循环语句和switch语句。内联函数的声明必须出现在内联函数第一次被调用之前。对内联函数不能进行异常接口声明。内联函数C+语言程序设计清华大学 郑莉50例例3-14 内联函数应用举例内联函数应用举例#include #include using namespace std;using namespace std;const double PI = 3.149;const double PI = 3.149;inline double calArea(double radius) inline double cal
46、Area(double radius) return PI return PI * * radius radius * * radius; radius; int main() int main() double r = 3.0;double r = 3.0;double areadouble area= calArea(r);= calArea(r);cout area endl;cout area endl;return 0;return 0; 内联函数C+语言程序设计清华大学 郑莉51缺省形参值的作用缺省形参值的作用l函数在声明时可以预先给出缺省的形参值,函数在声明时可以预先给出缺省的形
47、参值,调用时如给出实参,则采用实参值,否则采调用时如给出实参,则采用实参值,否则采用预先给出的缺省形参值。用预先给出的缺省形参值。l例如:例如:int add(int x = 5,int y = 6) return x + y;int main() add(10,20);/10+20add(10); /10+6add(); /5+6带缺省形参值的函数C+语言程序设计清华大学 郑莉52缺省形参值的说明次序缺省形参值的说明次序l有缺省参数的形参必须在形参列表的最后,有缺省参数的形参必须在形参列表的最后,也就是说缺省形参值的右面不能有无缺省也就是说缺省形参值的右面不能有无缺省值的参数。因为调用时实参
48、与形参的结合值的参数。因为调用时实参与形参的结合是从左向右的顺序。是从左向右的顺序。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);/错误带缺省形参值的函数C+语言程序设计清华大学 郑莉53缺省形参值与函数的调用位置缺省形参值与函数的调用位置l如果一个函数有原型声明,且原型声明在定义之前,则缺如果一个函数有原型声明,且原型声明在定义之前,则缺省形参值必须在函数原型声明中给出;而如果只有函数的省形参值必
49、须在函数原型声明中给出;而如果只有函数的定义,或函数定义在前,则缺省形参值需在函数定义中给定义,或函数定义在前,则缺省形参值需在函数定义中给出。出。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();带缺省形参值的函数C+语言程序设计清华大学 郑莉54重载函数的声明重载函数的声明lC+C+允许功能
50、相近的函数在相同的作用域内以允许功能相近的函数在相同的作用域内以相同函数名声明,从而形成重载。方便使用,相同函数名声明,从而形成重载。方便使用,便于记忆。便于记忆。l例:例:形参类型不同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); 函 数 重 载C+语言程序设计清华大学 郑莉55注意事项注意事项 不要将不同功能的函数声明为重载函数,以免出现调用结果的误解、混淆。这样不好:int add(int x,int y);int add
51、(int a,int b);编译器不以形参名来区分int add(int x,int y);void add(int x,int y);编译器不以返回值来区分int add(int x, int y) return x + + y; float add(float x,float y) return x - - y; 函 数 重 载重载函数的形参必须不同:个数不同或类型不同。编译程序将根据实参和形参的类型及个数的最佳匹配来选择调用哪一个函数。C+语言程序设计清华大学 郑莉56例例3-16重载函数应用举例重载函数应用举例编写两个名为编写两个名为sumOfSquaresumOfSquare的重载函
52、数,分别求的重载函数,分别求两整数的平方和及两实数的平方和。两整数的平方和及两实数的平方和。#include #include using namespace std;using namespace std;int sumOfSquare(int a, int b)int sumOfSquare(int a, int b) return a return a * * a + b a + b * * b; b; double sumOfSquare(double a, double b)double sumOfSquare(double a, double b) return a return
53、a * * a + b a + b * * b; b; 函 数 重 载int main() int main() int m, n;int m, n;cout Enter two integer: ;cout m n;cin m n;cout Their sum of square: sumOfSquare(m, n) cout Their sum of square: sumOfSquare(m, n) endl; endl;double x, y;double x, y;cout Enter two real number: ;cout x y;cin x y;cout Their sum
54、 of square: sumOfSquare(x, y) cout Their sum of square: sumOfSquare(x, y) endl; endl;return 0;return 0; 57运行结果:运行结果:Enter two integer: 3 5Enter two integer: 3 5Their sum of square: 34Their sum of square: 34Enter two real number: 2.3 5.8Enter two real number: 2.3 5.8Their sum of square: 38.93Their su
55、m of square: 38.9358C+语言程序设计清华大学 郑莉59C+系统函数系统函数lC+的系统库中提供了几百个函数可的系统库中提供了几百个函数可供程序员使用。供程序员使用。例如:求平方根函数(sprt)、求绝对值函数(abs)等。l使用系统函数时要包含相应的头文件。使用系统函数时要包含相应的头文件。例如:cmath 或 math.h使用C+系统函数C+语言程序设计清华大学 郑莉60例例3-17系统函数应用举例系统函数应用举例l题目:题目:从键盘输入一个角度值,求出该角度的正弦值、余弦值和正切值。l分析:分析:系统函数中提供了求正弦值、余弦值和正切值的函数:sin()、cos()、t
56、an(),函数的说明在头文件cmath中。使用C+系统函数#include #include #include #include using namespace std;using namespace std;const double PI = 3.149;const double PI = 3.149;int main() int main() double angle;double angle;cout Please enter an angle: ;cout angle;cin angle;/输入角度值输入角度值double radian = angle double radian =
57、angle * * PI / 180; PI / 180;/转化为弧度值转化为弧度值cout sin( angle ) = sin(radian) cout sin( angle ) = sin(radian) endl;endl;cout cos( angle ) = cos(radian) cout cos( angle ) = cos(radian) endl;endl;cout tan( angle ) = tan(radian) cout tan( angle ) = tan(radian) endl; Visual Studio - Visual C+ - Reference - Libraries Reference -Run-Time Library - Run-Time Routines by Category 使用C+系统
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 自我评价与发展计划
- 2021年山东省泰安市公开招聘警务辅助人员辅警笔试自考题1卷含答案
- 2023年内蒙古自治区赤峰市公开招聘警务辅助人员辅警笔试自考题1卷含答案
- 2024年山东省青岛市公开招聘警务辅助人员辅警笔试自考题2卷含答案
- 2024年增味剂项目资金申请报告代可行性研究报告
- 2024年PCB高纯化学品项目资金筹措计划书代可行性研究报告
- 2025年无机矿物填充塑料项目规划申请报告模范
- 2025年盆景及园艺产品项目提案报告
- 2025年电池组配件项目申请报告范文
- 2025年监控摄像头项目申请报告模稿
- 公猪站工作总结汇报
- 医学专业医学统计学试题(答案见标注) (三)
- cnas实验室规划方案
- 新教材苏教版三年级上册科学全册单元测试卷
- 胶囊内镜定位导航技术研究
- 温病护理查房
- 职工心理健康知识手册
- 11396-国家开放大学2023年春期末统一考试《药事管理与法规(本)》答案
- 天津市四校2022-2023学年高二上学期期末联考数学试题(原卷版)
- 全国优质课一等奖人教部编版小学四年级下册道德与法治《说话要算数》公开课课件(内嵌视频)
- 四年级上册道德与法治全册知识点汇总
评论
0/150
提交评论