文档详情

c4-functionc语言

平***
实名认证
店铺
PPT
1.01MB
约94页
文档ID:24939164
c4-functionc语言_第1页
1/94

Computer Science & Technology HIT,September 2011,High-Level Language Programming,ZhongChuan Fu (傅忠传),Chapter IV,Functions 函数,Outline,函数原型(prototype)函数definition定义和函数原型prototype说明declaration的方法及二者区别,调用掌握函数的参数传递方式与函数调用方法实参argument,形参parameter 理解掌握variable变量的scope作用域和storage class存储类的概念Contents,functions函数scope and storage class 变量作用域与存储类*homework Pitfalls5. #define macro 宏定义,Contents,function函数 1.1. functions相关概念 1.2.function definition函数定义 1.3. return value函数的返回值 1.4.function calling调用与parameter passing参数传递 1.5. prototype declaration函数原型声明scope and storage class变量作用域和存储类*homework Pitfalls*#define macro宏定义(macro substitution),Structure of a typical C program,functions函数,(1) functions —— commercial programs have hundreds or thousands of lines of code. In order to reduce the complexity involved in writing large programs, they have to be broken into smaller, less complex parts. Functions, along with classes become the building block of c/c++.即所谓的分而治之(divide and conquer).,(3)C程序的执行从main()函数开始。

没有main( )函数的程序,不能执行 调用其他函数后流程回到main函数,在main函数结束整个程序运行 main函数是系统定义的4)主函数可以调用任意子函数,而子函数不能调用主函数 子函数的地位是平等的,相互独立,相互无从属关系,可以相互调用 子函数可以直接或间接地自己调用自己,即递归调用functions(1),Built-in standard library functions标准库函数 使用:用#include 命令将调用函数所需头 文件包含到源文件中之后可直接调用从用户角度看:,如:scanf、printf、sqrt、getchar等,用户自定义函数user defined functions:先定义而后使用(调用)! 用户自定义函数过程:,definition定义,declaration声明, call调用,无参函数 int a( ) {…… },functions,从函数的形式看:,有参函数 int max( x , y ) {…… },主调函数调用被调函数时,不能传递参数(数据)。

一般用来执行指定的一组操作User defined function定义,(1)传统风格函数定义: 类型 函数名(形参表列) 形参说明 { 说明部分 语句 },形参表列是用逗号分隔的形参parameter,形参又称为形式参数、哑元、虚参、虚拟参数在形参说明中,说明形参表中每个形参的类型函数类型:用来说明函数返回值的类型当函数返回值是整型或不要求返回值时,可省略类型说明无返回值可用“空类型” —void,函数定义时的参数称为行参parameter;函数调用时的参数称为实参argument2)函数的现代定义方式,类型 函数名 (形参说明表列){ 说明部分 语句},,函数体,将形参说明包含到形参列表中,即在 列出形参的同时,说明形参类型形参列表:类型 参数1,类型 参数2,… ,类型 参数n,传统定义举例 现代定义举例 int add(x, y) int add(int x, int y) int x, y; {……{……} },程序举例1,编写一个求模函数。

int mod(int m,int n){ int x; x=m%n; return x;},⒉当函数不需要参数时,省略形参表列和形参说明,但不能省略括号,函数名后的括号内为空,即为无参函数Void print_info( ){printf("-------------------\n"); printf("Welcome to HIT.\n"); printf("-------------------\n");},函数定义说明,⒈当函数为有参函数时,应对其全部参数进行数据类型说明⒊函数使用标识符给函数命名,即取名原则与变量名相同Int max(float x, float y){float z; z=x>y?x: y; return(z); },⒋函数名前面的类型即为函数的类型 函数的类型实际上是函数返回值的类型当被调函数无返回值时,实际上就是带回的是一个不确定的值,可用“void”定义“无类型”(或称“空类型”)当函数的返回值为整型时,函数名前的数据类型可以省略⒌形参表列中,形参与形参间用“,”分隔 ⒍形参说明是对形式参数的数据类型的说明⒎在定义函数中指定的形参,在未被调用时,他们不占用内存单元,只有在该函数被调用时,函数中的形参才被分配内存单元。

Return value函数返回值,功能,将被调函数中的结果值返回给主调函数语句,return(返回值表达式);,举例,int add(int x, int y){int z; z=x+y; return(z);},Return,⒈当函数要求返回函数值时,函数体内最后执行的语句应为返回语句return一个函数中可以有一条或多条return语句,只有被执行到的return语句才起作用当函数不需要返回值时 ,后面不加括号和表达式,也可没有return⒉当函数值的类型和return语句后的表达式类型不一致时,则以函数类型为准对数值型数据可自动转换int max(float x, float y){float z; z=x>y?x: y; return(z); },⒊有些系统可省略return后的括号 return _ 表达式;4.“函数类型就是函数中return语句后表达式的类型”是错误!5.return语句完成了被调函数向主调函数值传递的功能Function definition函数定义,下面add函数的功能是求两个参数的和,并将和值返回调用函数函数中的错误是:void add(float a, float b) { float c; c=a+b; return c;},void add(float a, float b),,float add(float a, float b),calling of a function,格式,函数名(实参argument表列),——与调用标准函数相同,说明,1.无参函数实参形参均为空;有参函数调用时,实参列表中各参数以逗号分隔,且实参与形参应在个数、类型、位置一一对应。

即要按形参定义为准2.实参可以是常量、变量或表达式,调用函数前必须保证每个实参都有确定值 且调用时发生了实参向虚参进行参数传递的过程3. 调用时,主调函数与被掉函数发生了程序执行权的转移,被调函数只有在被调用时,才被调入内存,获得程序执行权;函数退出时,将返回值返回给主调函数,被掉所占存储空间被释放,程序执行权返还给主调函数,主调函数继续在断点处执行 4. 形参变量和实参变量占据不同的存储单元,有不同的作用域5.实参argument和形参parameter 的数据传递是单向的(即只有实参传递给形参,而不能由形参传回数据给实参)Example (3),辗转相除法求最大公约数include main(){ int m,n,r; scanf("%d,%d", },int mod(int m,int n){ int x; x=m%n; return x;},函数调用方式,调用方式,,函数调用语句,函数表达式,函数参数,print_star(n);,void print_star(int n){int i; for(i=1; i<=n; i++) printf("*");},x=max(a, b)+5;,x=max(max(a, b), c);,程序举例(4),分析一下程序,写出运行结果。

include main( ){int a=5, b=10; printf("a=%d, b=%d\n", a, b); fun(a, b); /*函数调用*/ printf("a=%d, b=%d\n", a, b);}int fun(int x, int y)/*现代风格函数定义*/{x=3; y=3; return;},a=5 , b=10a=5 , b=10,参数传递,主调函数向被调函数传值的方式:,赋值调用 把实参的值赋给形参赋地址调用 把实参的地址付给形参在被调函数中,用该地址访问主调函数中的实参实参,形参,,,调用,返回,单向值传递,Argument passing by value简单变量作函数参数,传递方式,属于赋值调用,将实参值传给虚参虚参要求,必须是简单变量实参要求,可为一般变量、常量、数组元素或者表达式哑实结合,哑元和实元按顺序一一结合由于是赋值调用,修改哑元,对实元无影响,Pi function example,下面函数pi的功能是:根据以下公式,返回满足精度(0.0005)要求的π的值,请填空程序举例5—2,#include /*Direct MSDOS console input/output*/#include #include double pi(double eps ) /*子函数的定义*/{double s, t; int n; for( ; t>eps; n++) {s+=t; t=n*t/(2*n+1);} return ( ); /*函数的返回值*/}main( ) /*主函数*/{double x,p; printf("\nPlease enter a precision: "); scanf(" %lf ", },。

下载提示
相似文档
正为您匹配相似的精品文档