资源描述
C+程序设计实用教程,清华大学出版社2008,第3章数据的表示及I/O操作,第2讲,第3章数据的表示及I/O操作,数据的表示函数运算表达式语句I/O流格式控制应用举例*趣味程序行走的字符串小结,3.2函数,3.2.1函数的形式参数传值型参数(传递右值)引用型参数(传递变量,传递左值)3.2.2函数的返回类型无返回类型(void)数值返回(临时变量)引用返回(变量返回),概述,函数是程序按功能划分的基本单位,俗称子程序函数有三个方面的内容:函数原型编译器检查程序中调用函数语句语法正确性的依据程序员编写调用函数语句的依据函数定义函数功能的具体实现是连接器链接目标代码、函数库的依据函数调用实际使用函数,必要时需提供待加工的实际数据(被称为实际参数),函数原型,语法格式返回类型函数名(形式参数表);例如:intrand();/产生随机数doublesqrt(doublex);/算术平方根doublepow(doublex,doubley);/x的y次幂或只指出形参的数据类型intrand(void);/无形式参数doublesqrt(double);/一个形参(一元函数)doublepow(double,double);/两个形参(二元函数),函数定义,系统所提供的函数(标准函数)已经定义且被编译成函数库文件函数原型在相应的头文件中只要包含相应的头文件,便可使用这些函数但这些函数的具体定义成为黑箱例如:doublex=2.0,y;y=sqrt(x);sqrt函数到底是如何将2.0加工成1.414的,不必关心。用户自定义函数函数实现根据算法实现具体的功能;是求解问题算法的程序语言表达。,函数调用,将实际参数交给函数进行加工,返回一定的结果函数的形式参数决定了对实际参数的使用方式无参数仅某个表达式的值(包括某变量的值)传递给函数将变量本身传递给函数函数的返回类型无返回(void)仅返回一个数值(存放在临时变量中)返回一个变量(已经存在的变量),3.2.1函数的形式参数,无形式参数调用函数时无须提供实际参数,但是表示函数调用的圆括号不能缺少。例如:n=rand();/产生一个随机数传值型(形式参数为定义变量)函数调用时,将创建形参变量,意味着为形式参数变量分配自己的内存空间;用实际参数(表达式)的值初始化形参变量;新创建的形参变量存放在栈空间中,函数返回时销毁(与自动变量类似);函数体内对形参的操作与实参无关。,3.2.1函数的形式参数,引用型(形式参数为声明引用)函数调用时,不创建变量,形参为实参的别名,意味着:形参不另外占用内存空间;用实参初始化形参的引用声明;引用型形参“绑定”实参,直至函数返回;函数体内对形参的操作,就是对实参的操作(与实参相关)。,3.2.1函数的形式参数,综上所述函数在调用时,其形式参数变量的定义及初始化,遵循变量定义及初始化的规定;函数在调用时,其形式参数引用的声明及初始化,遵循引用声明及初始化的规定;形式参数的生命期从函数调用时起,至函数返回时止。函数原型中形式参数名称可以缺省,不能缺省的数据类型传值型数据类型函数结果存放在一个临时变量中,该临时变量用函数调用表达式本身表示;该临时变量的在参与一次运算后被销毁。引用返回数据类型返回一个已经存在的变量,该变量用函数调用表达式本身表示。,例3.2求解一元二次方程,问题描述由于一元二次方程ax2+bx+c=0由其系数唯一确定,可将方程抽象为3个系数a,b,c(数据类型为double);在实数域中,一元二次方程可能:无实数根(类型0)有两个相同的根(类型1)有两个不同的根(类型2)需两个变量x1,x2(double型)存放方程可能的根;还需要一个变量flag(数据类型int)表示方程的类型,以便确定x1与x2是否有意义(x1与x2总是联系某内存单元,总数有其数值的)。要求设计一个函数(黑箱)根据a,b,c(假定a0)确定x1,x2及flag的值。,函数原型设计,函数原型设计方案一返回类型void。6个参数a,b,c传值型;x1,x2,flag引用型voidSolver(doublea,doubleb,doublec,double返回方程的类型,符号intSolver(doublea,doubleb,doublec,double/判别式等于0,返回1,#include/测试函数的功能usingnamespacestd;intSolver(doublea,doubleb,doublec,double,关于参数单向/双向传递,函数的黑箱特性接收输入实现功能返回结果形式参数传值型接收实参(输入:单向传递给函数)引用型接收实参并“返回”结果(输入/输出:双向)返回类型返回结果返回一个数据(输出:单向)intSolver(double,double,double,double,返回结果,单向传递,双向传递“返回”结果,返回与“返回”,利用函数的返回类型只能返回一种数据类型的结果;利用引用型形式参数能“返回”多个多种数据类型的计算结果;注意:对应于引用型形式参数的实际参数必须是可以被引用的量如:flag=Solver(1,2,-3,4,5);是错误的(不能将常量4、5作为变量)。,例3.3交换两个实参的值,#includeusingnamespacestd;voidswap(int,希望输出x=3,y=5x=5,y=3如何设计swap函数?,分析:函数返回类型void,要求“返回”2个数值,inttemp=a;a=b;b=temp;,#includeusingnamespacestd;voidswap1(inta,intb)inttemp;temp=a;a=b;b=temp;intmain()intx=3,y=5;cout”x=”x”,y=”yendl;swap1(x,y);cout”x=”x”,y=”yendl;return0;,输出结果x=3,y=5x=3,y=5Swap1是个无用的函数,函数返回类型举例,无类型(void)返回voidgreeting()cout”Hello.”endl;return;/此语句可省略数值返回(例3.4)函数调用表达式表示一个临时变量,不能作左值;引用返回(例3.5)函数调用表达式表示所返回的变量,可作左值。,例3.4加法运算函数,#includeusingnamespacestd;intAdd(inta,intb)a+=b;returna;intmain()inta=3,b;b=Add(a,2);couta”,”b及=0?x:-x;,3.3.7逗号运算,一系列用逗号连接起来的表达式。格式表达式1,表达式2,表达式n依次计算各表达式的值整个逗号表达式的值为表达式n的值区分作用域:全局变量名std:cout”OK”std:endl;cin,cout,endl等属于std名字空间。编写语句usingnamespacestd;之后可以省略std:,3.4语句,语句是对程序某动作的完整表达表达式语句(赋值语句、输入语句、输出语句、函数调用语句)。格式:表达式;(表达式后加分号)流程控制语句(条件分支语句、开关语句、循环语句、跳转语句、返回语句)复合语句用一对花括号包围起来的若干条(0条、一条或多条)语句;在语法上作为一个单语句使用;空语句;(一个分号),intsum(intn)inti,s=0;for(i=1;i=n;)s+=i;i+;returns;,intsum(intn)inti,s=0;for(i=1;i=n;s+=i+);returns;,intsum(intn)inti,s=0;for(i=1;i=n;i+)s+=i;returns;,累加计算函数(1+2+3+n),循环体语句分别是单语句复合语句空语句3种方法等效,ThankYou!,
展开阅读全文