C++语言程序设计 第三章 函数 清华大学 郑 莉.

Slides:



Advertisements
Similar presentations
C++语言程序设计教程 第5章 构造数据类型 第6章 C++程序的结构.
Advertisements

第一章 C语言概述 计算机公共教学部.
VC++系统开发 第二章 C++语言基础 河北经贸大学信息技术学院.
第4章 数组 数组是由一定数目的同类元素顺序排列而成的结构类型数据 一个数组在内存占有一片连续的存储区域 数组名是存储空间的首地址
C++中的声音处理 在传统Turbo C环境中,如果想用C语言控制电脑发声,可以用Sound函数。在VC6.6环境中如果想控制电脑发声则采用Beep函数。原型为: Beep(频率,持续时间) , 单位毫秒 暂停程序执行使用Sleep函数 Sleep(持续时间), 单位毫秒 引用这两个函数时,必须包含头文件
C++程序设计 王希 图书馆三楼办公室.
4.3函数 4.3.1函数的概念及定义 1、函数的概念: 可以被其它程序调用具有 特定功能的一段相对独立的 程序(模块),称函数。
函數(一) 自訂函數、遞迴函數 綠園.
第4章 函数与预处理 4.1 概述 4.2 定义函数的一般形式 4.3 函数参数和函数的值 4.4 函数的调用 *4.5 内置函数
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第四章 数组及自定义数据类型 C++语言程序设计.
第一章 程序的基本结构. 第一章 程序的基本结构 教材及授课结构 本章目标 基本内容 扩展阅读 上机指导 应用举例 习题.
授课老师:龚涛 信息科学与技术学院 2018年3月 教材: 《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
Object-Oriented Programming in C++ 第一章 C++的初步知识
2 C++ 的基本語法和使用環境 親自撰寫和執行程式是學好程式語言的不二法門。本章藉由兩個簡單的程式,介紹C++ 程式的基本結構和開發環境,讓初學者能逐漸建立使用C++ 的信心。
走进编程 程序的顺序结构(二).
第八章 函数.
辅导课程六.
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
Chap 5 函数 5.1 计算圆柱体积 5.2 使用函数编写程序 5.3 变量与函数.
第3讲 C++程序控制结构 3.1 顺序结构 3.2 分支结构 3.3 循环结构 3.4 转向控制 3.5 综合案例分析.
第五章 函 数. 第五章 函 数 教学目标 (1) 了解函数在程序设计中的作用; (2) 掌握函数的定义方法; (3) 掌握函数调用和参数传递的机制和方法; (4) 了解变量的作用域和生存期的概念。
类类型 C++支持的内置类型和操作,如 int i=10; i=i%6; i=i+4;
C++语言程序设计 第二章 C++简单程序设计.
C++大学基础教程 第4章 函数 北京科技大学 信息基础科学系.
程序的三种基本结构 if条件分支语句 switch多路开关语句 循环语句 循环嵌套 break,continue和goto语句
3 數學運算 3.1 鍵盤輸入 輸入函數cin 多重輸入cin 輸出格式化 3-3
切換Dev c++顯示語言 工具->環境選項(V)->介面->language (Chinese TW)
第七章 操作符重载 胡昊 南京大学计算机系软件所.
第2章 C++流程控制语句 if 语句 switch语句 for语句 while语句 do - while语句 break语句
第1章 概述 本章要点: C语言程序结构和特点 C语言程序的基本符号与关键字 C语言程序的编辑及运行 学习方法建议:
C++ 程式設計 基礎篇 張啟中 Chang Chi-Chung.
C++大学基础教程 第3章 C++控制语句 北京科技大学 信息基础科学系.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
1.3 C语言的语句和关键字 一、C语言的语句 与其它高级语言一样,C语言也是利用函数体中的可执行 语句,向计算机系统发出操作命令。按照语句功能或构成的不 同,可将C语言的语句分为五类。 goto, return.
第二章 基本数据类型及运算 C数据类型概述 基本数据类型 运算符和表达式 混合运算与类型转换 数据的输入输出 顺序程序设计举例.
C++语言程序设计 C++语言程序设计 第五章 函数 第十一组 C++语言程序设计.
程式結構&語法.
第三章 C++的语句和简单的程序设计 主要内容:
C++语言程序设计 第三章 函数.
C++语言程序设计 C++语言程序设计 第三章 控制语句 第十一组 C++语言程序设计.
函数 概述 模块化程序设计 基本思想:将一个大的程序按功能分割成一些小模块, 特点: 开发方法: 自上向下,逐步分解,分而治之
物件導向程式設計 CH2.
Chap 5 函数 5.1 计算圆柱体积 5.2 使用函数编写程序 5.3 变量与函数.
7.1 C程序的结构 7.2 作用域和作用域规则 7.3 存储属性和生存期 7.4 变量的初始化
第11章 從C到C++語言 11-1 C++語言的基礎 11-2 C++語言的資料型態與運算子 11-3 C++語言的輸出與輸入
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
第4章 Excel电子表格制作软件 4.4 函数(一).
C++语言程序设计教程 第2章 数据类型与表达式 第2章 数据类型与表达式 制作人:杨进才 沈显君.
<编程达人入门课程> 本节内容 为什么要使用变量? 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
第二章 类型、对象、运算符和表达式.
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
第二章 高级函数特性.
隨機數 (亂數) 10後,取餘數 n = rand(); 利用 Code::Block 驗證一下 n = rand() %10; 998
挑戰C++程式語言 ──第9章 函數.
#include <iostream.h>
第四章 函数 丘志杰 电子科技大学 计算机学院 软件学院.
第7章 模板 陈哲 副教授 南京航空航天大学 计算机科学与技术学院.
C++语言程序设计 C++语言程序设计 第二章 基本数据类型与表达式 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第十章 多态 第十一组 C++语言程序设计.
《数据结构与算法设计》第一部分 面向对象的C++程序设计基础.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
第三章 高级函数特性.
C++语言程序设计 C++语言程序设计 第十章 多态 第十一组 C++语言程序设计.
C++语言程序设计教程 第4章 函数 第4章 函数.
變數與資料型態  綠園.
資料!你家住哪裏? --談指標 綠園.
函式庫補充資料 1.
C++语言程序设计 C++语言程序设计 第二章 基本数据类型与表达式 第十一组 C++语言程序设计.
Presentation transcript:

C++语言程序设计 第三章 函数 清华大学 郑 莉

本章主要内容 函数的声明和调用 函数间的参数传递 内联函数 带默认形参值的函数 函数重载 C++系统函数

函数的声明 函数的声明与使用 函数是面向对象程序设计中,对功能的抽象 函数声明的语法形式 类型标识符 函数名(形式参数表) { 语句序列 } 类型标识符 函数名(形式参数表) { 语句序列 } 若无参数,写void 是被初始化的内部变量,寿命和可见性仅限于函数内部 若无返回值,写void

函数的声明 函数的声明与使用 形式参数表 <type1> name1, <type2> name2, ..., <typen> namen 函数的返回值 由 return 语句给出,例如: return 0 无返回值的函数(void类型),不必写return语句。

函数的调用 函数的声明与使用 调用前先声明函数原型: 调用形式 嵌套调用 递归调用 在调用函数中,或程序文件中所有函数之外,按如下形式说明: 类型标识符 被调用函数名 (含类型说明的形参表); 调用形式 函数名(实参列表) 嵌套调用 函数可以嵌套调用,但不允许嵌套定义。 递归调用 函数直接或间接调用自身。

例3-1编写一个求x的n次方的函数 函数的声明与使用 #include <iostream> using namespace std; double power (double x, int n); void main(void) { cout << "5 to the power 2 is " << power(5,2) << endl; } double power (double x, int n) double val = 1.0; while (n--) val = val*x; return(val);

例3-1编写一个求x的n次方的函数 函数的声明与使用 运行结果: 5 to the power 2 is 25

例3-2 数制转换 函数的声明与使用 题目: 输入一个8位二进制数,将其转换为十进制数输出。 例3-2 数制转换 函数的声明与使用 题目: 输入一个8位二进制数,将其转换为十进制数输出。 例如:11012 = 1(23) + 1(22) + 0(21) + 1(20) = 1310 所以,如果输入1101,则应输出13

#include <iostream> using namespace std; double power (double x, int n); void main(void) { int i; int value = 0; char ch; cout << "Enter an 8 bit binary number "; for (i = 7; i >= 0; i--) cin >> ch; if (ch == '1') value += int(power(2,i)); } cout <<"Decimal value is "<<value<<endl; double power (double x, int n) double val = 1.0; while (n--) val *= x; return(val); 运行结果: Enter an 8 bit binary number 01101001 Decimal value is 105 9

例3-3编写程序求π的值 函数的声明与使用 其中arctan用如下形式的级数计算: 直到级数某项绝对值不大于10-15为止;π和x均为double型。

#include<iostream> using namespace std; void main() { double a,b; double arctan(double x) ; //函数原型声明 a=16.0*arctan(1/5.0) ; b=4.0*arctan(1/239.0) ; //注意:因为整数相除结果取整, //如果参数写1/5,1/239,结果就都是0 cout<<"PI="<<a-b<<endl; } 11

运行结果: PI=3.14159 double arctan(double x) { int i; double r,e,f,sqr; sqr=x*x; r=0; e=x; i=1; while(e/i>1e-15) { f=e/i; r=(i%4==1)? r+f : r-f ; e=e*sqr; i+=2; } return r ; 运行结果: PI=3.14159 12

例3-4 函数的声明与使用 寻找并输出11~999之间的数m,它满足m、m2和m3均为回文数。 分析: 回文:各位数字左右对称的整数。 例如:11满足上述条件 112=121,113=1331。 分析: 10取余的方法,从最低位开始,依次取出该数的各位数字。按反序重新构成新的数,比较与原数是否相等,若相等,则原数为回文。

#include <iostream> using namespace std; void main() { bool symm(long n); long m; for(m=11; m<1000; m++) if (symm(m)&&symm(m*m)&&symm(m*m*m)) cout<<"m="<<m<<" m*m="<<m*m <<" m*m*m="<<m*m*m<<endl; } 14

bool symm(long n) { long i, m; i=n ; m=0 ; while(i) m=m*10+i%10; i=i/10 ; } return ( m==n ); 15

运行结果: m=11 m*m=121 m*m*m=1331 m=101 m*m=10201 m*m*m=1030301 16

例3-5 函数的声明与使用 计算如下公式,并输出结果: 其中r、s的值由键盘输入。SIN x的近似值按如下公式计算,计算精度为10-6:

#include <iostream> #include<cmath> using namespace std; void main() { double k,r,s; double tsin(double x); cout<<"r="; cin>>r; cout<<"s="; cin>>s; if (r*r<=s*s) k=sqrt(tsin(r)*tsin(r)+tsin(s)*tsin(s)) ; else k=tsin(r*s)/2; cout<<k<<endl; } 18

t=-t*x*x/(2*n-1)/(2*n-2); }while(fabs(t)>=p); return g; } double tsin(double x) { double p=0.000001,g=0,t=x; int n=1; do { g=g+t; n++; t=-t*x*x/(2*n-1)/(2*n-2); }while(fabs(t)>=p); return g; } 运行结果: r=5 s=8 1.37781 19

例3-6投骰子的随机游戏 函数的声明与使用 游戏规则是:每个骰子有六面,点数分别为1、2、3、4、5、6。游戏者在程序开始时输入一个无符号整数,作为产生随机数的种子。 每轮投两次骰子,第一轮如果和数为7或11则为胜,游戏结束;和数为2、3或12则为负,游戏结束;和数为其它值则将此值作为自己的点数,继续第二轮、第三轮...直到某轮的和数等于点数则取胜,若在此前出现和数为7则为负。 由rolldice函数负责模拟投骰子、计算和数并输出和数。

#include <iostream> #include <cstdlib> using namespace std; int rolldice(void); void main() { int gamestatus,sum,mypoint; unsigned seed; cout<<"Please enter an unsigned integer:"; cin>>seed; //输入随机数种子 srand(seed); //将种子传递给rand() sum=rolldice(); //第一轮投骰子、计算和数 21

default: //其它情况,游戏尚无结果,状态为0,记下点数,为下一轮做准备 gamestatus=0; mypoint=sum ; switch(sum) { case 7: //如果和数为7或11则为胜,状态为1 case 11: gamestatus=1; break; case 2: //和数为2、3或12则为负,状态为2 case 3: case 12: gamestatus=2; default: //其它情况,游戏尚无结果,状态为0,记下点数,为下一轮做准备 gamestatus=0; mypoint=sum ; cout<<"point is "<<mypoint<<endl; } 22

while ( gamestatus==0 ) //只要状态仍为 0,就继续进行下一轮 { sum=rolldice(); if(sum==mypoint) //某轮的和数等于点数则取胜,状态置为1 gamestatus=1 ; else if ( sum==7 ) //出现和数为7则为负,状态置为2 gamestatus=2; } //当状态不为0时上面的循环结束,以下程序段输出游戏结果 if( gamestatus==1 ) cout<<"player wins\n"; cout<<"player loses\n"; 23

rand srand 函数原型:int rand(void); 所需头文件:<cstdlib> 功能和返回值:求出并返回一个伪随机数 srand 函数原型:void srand(unsigned int seed); 参数:seed产生随机数的种子。 功能:为使rand()产生一序列伪随机整数而设置起始点。使用1作为seed参数,可以重新初化rand()。 24

int rolldice(void) { //投骰子、计算和数、输出和数 int die1,die2,worksum; die1=1+rand()%6; die2=1+rand()%6; worksum=die1+die2; cout<<"player rolled "<<die1<<'+'<<die2<<'='<<worksum<<endl; return worksum; } 25

Please enter an unsigned integer:23 player rolled 6+3=9 point is 9 运行结果2: Please enter an unsigned integer:23 player rolled 6+3=9 point is 9 player rolled 5+4=9 player wins 26

函数调用的执行过程 函数的声明与使用 main() 调fun() 结束 ① ② ④ ⑥ ⑦ ③ ⑤ 保存: 返回地址 fun() 当前现场 恢复: 主调程序现场 ⑤

嵌套调用 函数的声明与使用 main{} 调fun1() 结束 fun1() 调fun2() 返回 fun2() 返回 ① ② ③ ④ ⑤ ⑨ ⑦ ⑧ ⑥

例3-6 输入两个整数,求平方和。 函数的声明与使用 #include <iostream> using namespace std; void main(void) { int a,b; int fun1(int x,int y); cin>>a>>b; cout<<"a、b的平方和:" <<fun1(a,b)<<endl; }

return (fun2(x)+fun2(y)); } int fun2(int m) return (m*m); int fun1(int x,int y) { int fun2(int m); return (fun2(x)+fun2(y)); } int fun2(int m) return (m*m); 运行结果: 3 4 a、b的平方和:25 30

递归调用 函数的声明与使用 函数直接或间接地调用自身,称为递归调用。 递归过程的两个阶段: 递推: 未知 已知 回归: 4!=4×3! → 3!=3×2! → 2!=2×1! → 1!=1×0! → 0!=1 未知 已知 回归: 4!=4×3!=24←3!=3×2!=6←2!=2×1!=2←1!=1×0!=1←0!=1 未知 已知

例3-8 求n! 函数的声明与使用 分析:计算n!的公式如下: 这是一个递归形式的公式,应该用递归函数实现。

#include <iostream> using namespace std; long fac(int n) { 源程序: #include <iostream> using namespace std; long fac(int n) { long f; if (n<0) cout<<"n<0,data error!"<<endl; else if (n==0) f=1; else f=fac(n-1)*n; return(f); } 33

cout<<"Enter a positive integer:"; cin>>n; y=fac(n); void main() { long fac(int n); int n; long y; cout<<"Enter a positive integer:"; cin>>n; y=fac(n); cout<<n<<"!="<<y<<endl; } 运行结果: Enter a positive integer:8 8!=40320 34

例3-9 函数的声明与使用 用递归法计算从n个人中选择k个人组成一个委员会的不同组合数。 分析: 由n个人里选k个人的组合数 当n==k或k==0时,组合数为1

#include<iostream> using namespace std; void main() { int n,k; int comm(int n, int k); cin>>n>>k; cout<<comm(n,k) <<endl; } int comm(int n, int k) { if ( k>n ) return 0; else if( n==k||k==0 ) return 1; else return comm(n-1,k)+comm(n-1,k-1) ; 运行结果: 18 5 8568 36

例3-10汉诺塔问题 函数的声明与使用 有三根针A、B、C。A针上有N个盘子,大的在下,小的在上,要求把这N个盘子从A针移到C针,在移动过程中可以借助B针,每次只允许移动一个盘,且在移动过程中在三根针上都保持大盘在下,小盘在上。 A B C

分析: 将n 个盘子从A针移到C针可以分解为下面三个步骤: ①将A 上n-1个盘子移到 B针上(借助C针); ②把A针上剩下的一个盘子移到C针上; ③将n-1个盘子从B针移到C针上(借助A针); 事实上,上面三个步骤包含两种操作: ①将多个盘子从一个针移到另一个针上,这是一个递归的过程。 hanoi函数实现。 ②将1个盘子从一个针上移到另一针上。 用move函数实现。

#include <iostream> using namespace std; void move(char getone,char putone) { cout<< getone <<"-->"<<putone<<endl; } void hanoi(int n,char one,char two,char three) { void move(char getone,char putone); if (n==1) move (one,three); else { hanoi (n-1,one,three,two); move(one,three); hanoi(n-1,two,one,three); } 39

void hanoi(int n,char one,char two,char three); int m; void main() { void hanoi(int n,char one,char two,char three); int m; cout<<"Enter the number of diskes:"; cin>>m; cout<<"the steps to moving "<<m<<" diskes:"<<endl; hanoi(m,'A','B','C'); } 40

Enter the number of diskes:3 the steps to moving 3 diskes: A-->C 运行结果: Enter the number of diskes:3 the steps to moving 3 diskes: A-->C A-->B C-->B B-->A B-->C 41

函数的参数传递机制 ——传递参数值 函数的声明与使用 在函数被调用时才分配形参的存储单元。 实参可以是常量、变量或表达式。 函数的参数传递机制 ——传递参数值 函数的声明与使用 在函数被调用时才分配形参的存储单元。 实参可以是常量、变量或表达式。 实参类型必须与形参相符。 传递时是传递参数值,即单向传递。

函数的参数传递机制 ——参数值传递举例 函数的声明与使用 X N 被调函数: 主调函数: 3 2.5 A D = power(A,3) 函数的参数传递机制 ——参数值传递举例 函数的声明与使用 X N 被调函数: 主调函数: 3 2.5 A D = power(A,3) double power(double X, int N)

例3-11 输入两 整数交换后输出 函数的声明与使用 #include<iostream> using namespace std; void Swap(int a, int b); int main() { int x(5), y(10); cout<<"x="<<x<<" y="<<y<<endl; Swap(x,y); return 0; }

void Swap(int a, int b) { int t; t=a; a=b; b=t; } 运行结果: x=5 y=10 45

a=b; 5 x 10 y a b t=a; t b=t; 在Swap子函数中 返回主函数以后 执行主函数中的函数调用 Swap(x,y); 46

函数的参数传递 ——用引用做形参 函数的声明与使用 引用(&)是标识符的别名,例如: 函数的参数传递 ——用引用做形参 函数的声明与使用 引用(&)是标识符的别名,例如: int i,j; int &ri=i; //建立一个int型的引用ri,并将其 //初始化为变量i的一个别名 j=10; ri=j;//相当于 i=j; 声明一个引用时,必须同时对它进行初始化,使它指向一个已存在的对象。 一旦一个引用被初始化后,就不能改为指向其它对象。 引用可以作为形参 void swap(int& a, int& b) {...}

例3-12 输入两个整数交换后输出 函数的声明与使用 #include<iostream> using namespace std; void Swap(int& a, int& b); int main() { int x(5), y(10); cout<<"x="<<x<<" y="<<y<<endl; Swap(x,y); return 0; } void Swap(int& a, int& b) { int t; t=a; a=b; b=t; 运行结果: x=5 y=10 x=10 y=5

t t y Swap(x,y); t=a; x a x y a b a b x y a=b b=t; b x y 5 x 的别名 5 10 49

内联函数声明与使用 内联函数 声明时使用关键字 inline。 编译时在调用处用函数体进行替换,节省了参数传递、控制转移等开销。 注意: 内联函数体内不能有循环语句和switch语句。 内联函数的声明必须出现在内联函数第一次被调用之前。 对内联函数不能进行异常接口声明。

例3-14 内联函数应用举例 内联函数 #include<iostream> using namespace std; inline double CalArea(double radius) { return 3.14*radius*radius; } int main() { double r(3.0); double area; area=CalArea(r); cout<<area<<endl; return 0;

默认形参值的作用 带默认形参值的函数 函数在声明时可以预先给出默认的形参值,调用时如给出实参,则采用实参值,否则采用预先给出的默认形参值。 例如: void main(void) { add(10,20); //10+20 add(10); //10+6 add(); //5+6 } int add(int x=5,int y=6) { return x+y; }

默认形参值的说明次序 带默认形参值的函数 默认形参值必须从右向左顺序声明,并且在默认形参值的右面不能有非默认形参值的参数。因为调用时实参取代形参是从左向右的顺序。 例: 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); //错误

默认形参值与函数的调用位置 带默认形参值的函数 调用出现在函数体实现之前时,默认形参值必须在函数原形中给出;而当调用出现在函数体实现之后时,默认形参值需在函数实现时给出。 例: int add(int x=5,int y=6); void main(void) { add(); //调用在实现前 } int add(int x,int y) { return x+y; } int add(int x=5,int y=6) { return x+y; } void main(void) { add(); //调用在实现后 }

默认形参值的作用域 带默认形参值的函数 在相同的作用域内,默认形参值的说明应保持唯一,但如果在不同的作用域内,允许说明不同的默认形参。 例: int add(int x=1,int y=2); void main(void) { int add(int x=3,int y=4); add(); //使用局部默认形参值(实现3+4) } void fun(void) { ... add(); //使用全局默认形参值(实现1+2)

重载函数的声明 函 数 重 载 C++允许功能相近的函数在相同的作用域内以相同函数名声明,从而形成重载。方便使用,便于记忆。 例: 函 数 重 载 C++允许功能相近的函数在相同的作用域内以相同函数名声明,从而形成重载。方便使用,便于记忆。 例: 形参类型不同 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);

注意事项 函 数 重 载 重载函数的形参必须不同: 个数不同或类型不同。 函 数 重 载 重载函数的形参必须不同: 个数不同或类型不同。 编译程序将根据实参和形参的类型及个数的最佳匹配来选择调用哪一个函数。 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) { return x+y; } float add(float x,float y) { return x-y; }

例3-16重载函数应用举例 函 数 重 载 编写三个名为add的重载函数,分别实现两整数相加、两实数相加和两个复数相加的功能。 函 数 重 载 编写三个名为add的重载函数,分别实现两整数相加、两实数相加和两个复数相加的功能。 #include<iostream> using namespace std; struct complex { double real; double imaginary; };

double add(double x, double y); complex add(complex c1, complex c2); void main(void) { int m, n; double x, y; complex c1, c2, c3; int add(int m, int n); double add(double x, double y); complex add(complex c1, complex c2); cout<<"Enter two integer: "; cin>>m>>n; cout<<"integer "<<m<<'+'<<n<<"="<<add(m,n)<<endl; 59

cout<<"Enter two real number: "; cin>>x>>y; cout<<"real number "<<x<<'+'<<y<<"= "<<add(x,y) <<endl; cout<<"Enter the first complex number: "; cin>>c1.real>>c1.imaginary; cout<<"Enter the second complex number: "; cin>>c2.real>>c2.imaginary; c3=add(c1,c2); cout<<"complex number (" <<c1.real<< ',' << c1.imaginary <<")+("<<c2.real<<',' <<c2.imaginary<<")=("<<c3.real<<',' <<c3.imaginary<<")\n"; } 60

double add(double x, double y) { return x+y; } int add(int m, int n) { return m+n; } double add(double x, double y) { return x+y; } complex add(complex c1, complex c2) { complex c; c.real=c1.real+c2.real; c.imaginary=c1.imaginary+c2.imaginary; return c; } 61

Enter the first complex number: 12.3 45.6 运行结果: Enter two integer: 3 5 integer 3+5=8 Enter two real number: 2.3 5.8 real number 2.3+5.8= 8.1 Enter the first complex number: 12.3 45.6 Enter the second complex number: 56.7 67.8 complex number (12.3,45.6)+(56.7,67.8)= (69,113.4) 62

C++系统函数 使用C++系统函数 C++的系统库中提供了几百个函数可供程序员使用。 使用系统函数时要包含相应的头文件。 例如:求平方根函数(sprt)、求绝对值函数(abs)等。 使用系统函数时要包含相应的头文件。 例如:math.h 或 cmath

例3-17系统函数应用举例 使用C++系统函数 题目: 分析: 从键盘输入一个角度值,求出该角度的正弦值、余弦值和正切值。 系统函数中提供了求正弦值、余弦值和正切值的函数:sin()、cos()、tan(),函数的说明在头文件math.h中。

#include<iostream> #include<cmath> using namespace std; const double pi(3.14159265); void main() { double a,b; cin>>a; b=a*pi/180; cout<<"sin("<<a<<")="<<sin(b)<<endl; cout<<"cos("<<a<<")="<<cos(b)<<endl; cout<<"tan("<<a<<")="<<tan(b)<<endl; } 运行结果: 30 sin(30)=0.5 cos(30)=0.866025 tan(30)=0.57735 65

查找系统函数的使用说明 使用C++系统函数 查编译系统的库函数手册 查联机帮助——VC++6.0联机帮助的使用方法: help/Contents ->(“活动子集”栏)Visual C++ Documentation -> Visual C++ Documentation ->Using Visual C++ -> Visual C++ Programmer's Guide -> Run-Time Library Reference ->Run Time Routines by Category -> Run Time Routines by Category