第Ⅱ部分 程序语言基础(第六章).ppt
《第Ⅱ部分 程序语言基础(第六章).ppt》由会员分享,可在线阅读,更多相关《第Ⅱ部分 程序语言基础(第六章).ppt(330页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第六章第六章 函数函数第第部分部分 程序语言基础(程序语言基础(C语言)语言)函数概述函数概述模块化程序设计 思想问题问题2问题n问题1问题21问题12问题11问题n1问题n12问题22C程序函数调用示意图mainabna2a1b1b2n1n2#include include using namespace std;using namespace std;doubledoublepower(double x,int n);power(double x,int n);int main()int main()cout 5 to the power 2 is cout 5 to the power
2、2 is power(5,2)endl;power(5,2)ch;return ch;#include include using namespace std;using namespace std;int main()int main()cout 5 to the power 2 is cout 5 to the power 2 is power(5,2)endl;power(5,2)endl;系统函数、自定义系统函数、自定义函数必须被主函数函数必须被主函数直接或间接调用,直接或间接调用,才能执行才能执行函数的调用函数的调用 保存:保存:返回地址返回地址当前现场当前现场恢复:恢复:主调程序现
3、场主调程序现场返回地址返回地址power()返回返回main()调调power()结束结束int main()int i=5,j=2;int k=max(i,j);coutkn2)r=n1;else r=n2;return r;传递实参传递实参i,j的值给形参的值给形参k:j:2i:5a)主函数被调用主函数需要的空间主函数需要的空间k:j:2i:5主函数需要的空间主函数需要的空间b)max函数被调用r:5n2:2n1:5max函数需要的空间函数需要的空间k:5j:2i:5c)max函数调用结束,返回值传递给k主函数需要的空间主函数需要的空间d)主函数结束栈空栈空函数调用形式有返回值的函数通过表
4、达式来调用:有返回值的函数通过表达式来调用:函数名(实参表)函数名(实参表)无返回值的函数通过语句来调用:无返回值的函数通过语句来调用:函数名(实参表);函数名(实参表);#includeusing namespace std;int max(int x1,int x2)if(x1=x2)return x1;elsereturn x2;void output(int y)coutyx1x2;y=max(x1,x2);output(y);return 0;#includeusing namespace std;int max(int x1,int x2)if(x1=x2)return x1;el
5、sereturn x2;void output(int y)coutyx1x2;y=max(x1,x2);/有返回值有返回值,表达式形式表达式形式output(y);return 0;#includeusing namespace std;int max(int x1,int x2)if(x1=x2)return x1;elsereturn x2;void output(int y)coutyx1x2;y=max(x1,x2);output(y);/无返回值无返回值,语句形式语句形式return 0;编写函数编写函数,根据根据/41-1/3+1/5-1/7+公式公式计算计算的近似值的近似值,精
6、度为精度为10-6。1、多个函数,如何区分?、多个函数,如何区分?2、要实现什么?、要实现什么?3、需要提供那些数据?、需要提供那些数据?4、最后得到的结果是什么?、最后得到的结果是什么?如何编写函数如何编写函数1、多个函数,如何区分?(函数名)、多个函数,如何区分?(函数名)2、要实现什么?、要实现什么?3、需要提供那些数据?、需要提供那些数据?4、最后得到的结果是什么?、最后得到的结果是什么?如何编写函数如何编写函数1、多个函数,如何区分?、多个函数,如何区分?2、要实现什么?(函数体)、要实现什么?(函数体)3、需要提供那些数据?、需要提供那些数据?4、最后得到的结果是什么?、最后得到的
7、结果是什么?如何编写函数如何编写函数1、多个函数,如何区分?、多个函数,如何区分?2、要实现什么?、要实现什么?3、需要提供那些数据?(参数)、需要提供那些数据?(参数)4、最后得到的结果是什么?、最后得到的结果是什么?如何编写函数如何编写函数1、多个函数,如何区分?、多个函数,如何区分?2、要实现什么?、要实现什么?3、需要提供那些数据?、需要提供那些数据?4、最后得到的结果是什么?(返回值)、最后得到的结果是什么?(返回值)如何编写函数如何编写函数A.确定输入项:确定输入项:(形参)(形参)B.期望的输出:期望的输出:的值(返回值)的值(返回值)C.相关算法:相关算法:(1-1/3+1/5
8、-1/7+)*4(函数体)函数体)定义一个函数,求一元二次方程定义一个函数,求一元二次方程ax2+bx+c=0的的实数解。实数解。bool fun(double a,double b,double c)double d,x1,x2;d=b*b-4*a*c;if(d=0)x1=-b/(2*a);x2=-b/(2*a);coutx1=x2=x10)x1=(-b+sqrt(d)/(2*a);x2=(-b-sqrt(d)/(2*a);coutx1=x1endl;coutx2=x2endl;return 1;else return 0;#include#includeusing namespace st
9、d;int main()double a,b,c,;Loop:cout输入系输入系”abc;if(a=0)goto Loop;else coutfun(a,b,c)x1X2y1y2;d=pointdistance(x1,x2,y1,y2);/实参形参可同名实参形参可同名 coutdendl;return 0;调用者和被调用者的物理位置关系调用者和被调用者的物理位置关系void fun1()cout“hellow”endl;int main()fun1();return 0;int main()fun2();return 0;void fun2()cout“hellow”endl;不能运行不能运
10、行void fun2();/前向声明前向声明int main()fun2();return 0;void fun2()cout“hellow”endl;#include include using namespace std;using namespace std;doubledoublepower(double x,int n);power(double x,int n);int main()int main()cout 5 to the power 2 is cout 5 to the power 2 is power(5,2)endl;power(5,2)endl;d doubleoub
11、le power(double x,int n)power(double x,int n)double val=1.0;double val=1.0;while(n-)while(n-)val=val*x;val=val*x;return(val);return(val);调用前先声明函数原型:在调用函数中,调用前先声明函数原型:在调用函数中,或程序文件中所有函数之外,按如下形式或程序文件中所有函数之外,按如下形式说明:说明:类型标识符类型标识符 被调用函数名被调用函数名 (含类型说明的形参表)(含类型说明的形参表);int max(int x1,int x2);void output(int
12、 y);前条件:指明函数调用时要满足什么条件;前条件:指明函数调用时要满足什么条件;后条件:函数执行后的结果。后条件:函数执行后的结果。案例:超市定价系统案例:超市定价系统函数原型的写法函数原型的写法供别人使用的函数必须严格注释,特别是入供别人使用的函数必须严格注释,特别是入口参数和出口参数。口参数和出口参数。double price(double cost,int turnover);/*前条件:cost是一件商品的批发价,turnover是商品预计售出的天数后条件:返回商品的零售价*/void get_input(double&cost,int&turnover);/*前条件:用户准备好输
13、入正确的值 后条件:cost的值设为一件商品的批发价,turnover的值设为商品预计售出的天数*/void give_output(double cost,int turnover,double price);/*前条件:cost是一件商品的批发价,turnover是商品预计售出的天数,price是商品的零售价后条件:在屏幕上输出cost,turnpver和price的值*/float tempConvert(float inTemp);/*功能:把华氏温度转换为摄氏温度功能:把华氏温度转换为摄氏温度 前条件:前条件:inTemp表示华氏温度表示华氏温度 后条件:返回摄氏温度值后条件:返回摄
14、氏温度值*/int max(int x1,int x2);/函数原型函数原型void output(int y)/函数首部函数首部提供返回数提供返回数据的类型、据的类型、函数名称、函数名称、发送什么类发送什么类型的数据到型的数据到函数函数void max(int x,int y);/函数原型,形参名函数原型,形参名x,y可省略可省略int max(int x,int y)/函数首部,形参名不可省略函数首部,形参名不可省略 int y=max(56,79);/函数调用,提供实参函数调用,提供实参函数名出现的位置函数名出现的位置输入一个输入一个8位二进制数,将其转换为十进制数位二进制数,将其转换为
15、十进制数输出。输出。例如:例如:11012=1(23)+1(22)+0(21)+1(20)=1310#include include using namespace std;using namespace std;double double powerpower(double x,int n);(double x,int n);int main()int main()int i;int i;int value=0;int value=0;char ch;char ch;cout Enter an 8 bit binary number ;cout=0;ifor(i=7;i=0;i-)cin c
16、h;cin ch;if(ch if(ch=1)1)valuevalue=value+int(value+int(powerpower(2,i);(2,i);cout Decimal value is valueendl;cout Decimal value is valueendl;double double powerpower (double x,int n)(double x,int n)double val=1.0;double val=1.0;while(n-while(n-)-)val*=x;val*=x;return(val);return(val);运行结果:运行结果:Ente
17、r an 8 bit binary number 01101001Decimal value is 10539检查一个数是否是偶数,若是,返检查一个数是否是偶数,若是,返回回true。#includeusing namespace std;void f(int i,int num)int j;for(j=1;j=i;j+)coutnum ;num=num*2;int main()int i=1;while(i3=4)f(i,2);i+;return 0;给出运行结果1.每个函数只限于完成一个定义良好的任务,每个函数只限于完成一个定义良好的任务,函数名应有效的表达这个任务,这样可以函数名应有效的
18、表达这个任务,这样可以提高软件复用性提高软件复用性2.如果无法用简单名称表达函数的作用,则如果无法用简单名称表达函数的作用,则可能定义的函数要完成的任务太分散,通可能定义的函数要完成的任务太分散,通常应把这种函数分解为几个更小的函数。常应把这种函数分解为几个更小的函数。3.函数的定义之间加上空行,分隔函数可以函数的定义之间加上空行,分隔函数可以提高程序的可读性。提高程序的可读性。定义函数注意事项定义函数注意事项定义错误的函数fun1()/函数返回值函数返回值不不/是是intdouble fun2()/需要返回值时,需要返回值时,/函数体中没函数体中没/有有return语句语句void fun3
19、()return 8.9;/不需要返回值时,不需要返回值时,/函数体中函数体中/有有返回值返回值语句语句int max(int x,int y)int x;/错误错误 /不可以在函数体内定义和形参同名的变量不可以在函数体内定义和形参同名的变量int main()int max(int x,int y)/错误,函数不可以嵌套定义错误,函数不可以嵌套定义int max(int x,int y)float min();float min();int max(int x,int y)最佳选最佳选择择可行的函数:可行的函数:void fun1(flaot x1,x2);/合理性取决于系统合理性取决于系统
20、void fun2(int a,)coutaendl;调用:调用:fun1(4);fun2(4,5);struct Student /学生信息结构体学生信息结构体 int num;/学号学号 char name20;/姓名姓名 char gender;/性别性别 int age;/年龄年龄 float score;/成绩成绩 char addr30;/住址住址;编写函数编写函数,编写函数,把给定的某把给定的某个学生信息个学生信息输出输出void outputStudent(struct Student s1)couts1.nums1.name;编写函数,编写函数,把给定的某把给定的某学生的学号
21、学生的学号输出输出void outputStudent(struct Student&s1)couts1.nums1.name;(struct Student s1)函数的调用方式和返回值函数的调用方式和返回值函数的调用方式函数的调用方式 调用方式分为传值调用和引用调用 void f1(int x);/传值void f2(int&x);/引用传值调用XN被调函数:被调函数:主调函数:主调函数:3 2.5AD=power(A,M)2.53double power(double X,int N)M在函数被调用时,给值形参分配内存单元。在函数被调用时,给值形参分配内存单元。把实参的值复制到值形参所分
22、配的内存单把实参的值复制到值形参所分配的内存单元中。元中。实参可以是常量、变量、数组元素、表达实参可以是常量、变量、数组元素、表达式(先对表达式求值)。式(先对表达式求值)。函数中,对值形参的操作不会影响实参。函数中,对值形参的操作不会影响实参。实参类型应与形参类型相容,当类型不一实参类型应与形参类型相容,当类型不一致时,系统会把实参进行隐式类型转换。致时,系统会把实参进行隐式类型转换。1 1 1 1值传递机制值传递机制值传递机制值传递机制#include void main()float add1(float,float);/函数原型函数原型 float add2(int,int);/函数原
23、型函数原型 float a,b,c;cin a b;c=add1(a,b);cout c1=c endl;c=add2(1/a,1/b);cout c2=c endl;float add1(float x,float y)return(x+y);float add2(int i,int j)return(i+j);强制类型转换强制类型转换#include void main()float add1(float,float);/函数原型函数原型 float add2(int,int);/函数原型函数原型 float a,b,c;cin a b;c=add1(a,b);cout c1=c endl
24、;c=add2(1/a,1/b);cout c2=c endl;float add1(float x,float y)return(x+y);float add2(int i,int j)return(i+j);类型强制转换类型强制转换截取整数部分传送给形参截取整数部分传送给形参1 1 1 1值传递机制值传递机制值传递机制值传递机制#includeint add(int,int);void main()int a,b,c;cin a b;c=add(a,b);cout c=c endl;int add(int i,int j)i+;j+;return(i+j);abc int a,b,c;值参
25、传递值参传递1 1 1 1值传递机制值传递机制值传递机制值传递机制#includeint add(int,int);void main()int a,b,c;cin a b;c=add(a,b);cout c=c a b;值参传递值参传递1 1 1 1值传递机制值传递机制值传递机制值传递机制#includeint add(int,int);void main()int a,b,c;cin a b;c=add(a,b);cout c=c endl;int add(int i,int j)i+;j+;return(i+j);abc24 c=add(a,b);值参传递值参传递1 1 1 1值传递机制
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第部分 程序语言基础第六章 部分 程序语言 基础 第六
限制150内