c语言课件(谭浩强版)ch08

上传人:tian****1990 文档编号:74763600 上传时间:2019-01-29 格式:PPT 页数:85 大小:722.31KB
返回 下载 相关 举报
c语言课件(谭浩强版)ch08_第1页
第1页 / 共85页
c语言课件(谭浩强版)ch08_第2页
第2页 / 共85页
c语言课件(谭浩强版)ch08_第3页
第3页 / 共85页
c语言课件(谭浩强版)ch08_第4页
第4页 / 共85页
c语言课件(谭浩强版)ch08_第5页
第5页 / 共85页
点击查看更多>>
资源描述

《c语言课件(谭浩强版)ch08》由会员分享,可在线阅读,更多相关《c语言课件(谭浩强版)ch08(85页珍藏版)》请在金锄头文库上搜索。

1、1,Ch8 函 数,作业:202页 1、2、5、7、9、10、11、16,2,3,8.1 概述,C程序的结构,4,1. 一个 C 程序由一个或多个源程序文件构成,一个源程序文件是一个编译单位,而不是以函数为单位进行编译 2. 一个 C 源程序可以分为若干个函数 3. 每个C源程序有且只能有一个主函数(main),其他函数都是“子函数” 4. 子函数可以互相调用,但主函数不能被调用,5,例8.1 #include void printstar( ) printf(“*n“); void printmessage( ) printf(“ Hello, world.n“); printstar( )

2、; void main( ) printstar( ); printmessage( ); ,6,1. C程序的执行从void main函数开始,调用其他函数后仍回到void main函数, 程序在void main函数结束时结束 2. 所有子函数都是平行的, 任何函数都不属于其他函数 3. 从用户的角度看, 函数可分为: 标准函数, 即库函数 自定义函数 4. 从函数形式看, 可分为: 无参数函数: 如 printstar( ) 有参数函数: 如 printf( “.”),说明,7,8.2 函数定义的一般形式,函数定义的一般形式: 类型说明 函数名(形式参数说明) 函数体 形式参数说明方法:

3、 类型说明 变量名, 类型说明 变量名,8,1、无参函数的定义形式 类型说明 函数名() 函数体 ,例如: void printhello( ) printf(“Hello, world.n“); ,9,2、有参函数的定义形式 类型说明 函数名(形式参数说明) 函数体 ,3、空函数的定义形式 类型说明 函数名(形式参数说明) ,例如: 又如: int sum ( int x , int y ) void printhello ( char name ) int z; printf(“Hello, %sn“, name); z = x + y; return (z); ,10,8.3 函数参数和

4、函数的值,一、形式参数和实际参数,函数参数 : 用于数据的交流 形式参数 : 定义函数时使用的参数 实际参数 : 引用函数时使用的参数,11,例8.2 #include int max ( int x, int y) int z; z = ( x y ) ? x : y; return ( z ); void main( ) int a, b, c; scanf ( “%d,%d“, ,x、y是形式参数,a、b是实际参数,/*定义一个函数max()*/,12,1、定义函数时, 必须说明形参的类型 2、函数被调用前, 形参不占用内存; 函数调用结束后, 形参所占用的内存也将被回收。形参与实参各占

5、一个独立的存储空间 3、实参可以是常量、变量或表达式,说明,例 #include int max ( int x, int y ) int z; z = ( x y ) ? x : y; return ( z ); main( ) int a, b, c; scanf ( “%d,%d“, ,13,4、实参与形参的类型必须一致 5、C语言中实参对形参的数据传递是“值传递”,是单向传递,说明,总结:函数中对形参变量的操作不会影响到调用函 数中的实参变量,即形参值不能传回给实参,14,注意:在内存中,实参单元与形参单元是不同的单元, 形参的值如果发生改变,并不会改变主调函数实参的值,例8.2a #

6、include int max ( int x, int y) int z; z = ( x y ) ? x : y; return ( z ); main( ) int a, b, c; scanf ( “%d,%d“, ,int max ( float x, float y) float z; z = ( x y ) ? x : y; return ( z ); main( ) float a, b; int c; scanf ( “%f,%f“, ,1.5,2.5,x=1.5 y=2.5,15,#include int max ( int x, int y) int z; z = ( x

7、 y ) ? x : y; return ( z ); void main( ) int a, b, c; scanf ( “%d,%d“, ,int max ( int x, int y) x = ( x y ) ? x : y; return ( x ); ,int max ( int a, int b) int c; c = ( a b ) ? a : b; return ( c ); ,思考:将函数 max 作如下变形会怎样?C的值怎样,16,#include int sum ( int a, int b) a = a + b; b = a + b; return a; void ma

8、in( ) int a = 1, b = 3, c; c = sum (a, b); printf (“Sum of %d, %d is %d n“, a, b, c); ,例8.3 读程序,写出运行结果,输出: Sum of 1, 3 is 4,17,二、函数的返回值,int max ( int x, int y) int z; z = ( x y ) ? x : y; return ( z ); ,函数的返回值也就是函数值,是一个确定的值, 如果函数有返回值,就必须使用 return 语句,1、返回函数值的方法,18, 一个函数中可以有一个以上的 return 语句,但不论执行到哪个 re

9、turn 都将结束函数的调用返回主调函数。,int max ( int x, int y) if ( x y ) return x; return y; , return 语句中的括号可以省略;return 后面的值可以是一个表达式。,int max ( int x, int y) return ( x y ) ? x : y; ,19,int max ( int x, int y) int z; z = ( x y ) ? x : y; return ( z ); , 函数的类型即函数值的类型 省略了类型说明的函数是 int 型的 return 语句中表达式的值一般应与函数类型一致 如果不一

10、致,则需要进行类型转换。只有数值型数据可以进行自动类型转换,2、函数值的类型,20,#include int f( int x ) x = 1; void main( ) int a = 0, b; b = f ( a ); printf (“%d,%d n“, a, b); , 如果函数中没有使用 return 语句,函数返回的是一个不确定的数值,3、不需要返回值的函数,21, 如果函数不需要返回值(表示一个过程),可以用 void 做类型说明。可以没有return语句或者只有不带参数的return语句。,void printstar( ) printf(“*n“); , 如果一个函数被声明

11、为 void 类型,就不允许再引用它的返回值,22,8.4 函数的调用,一、函数调用的一般形式,一般形式: 函数名 (实参表列) 说明: 调用无参函数,省略实参,但括号不能省 实参的个数和形参一般相等,次序相同 实参与形参的类型应一一对应,必要时使用类型转换,23,例8.2 #include int max ( int x, int y) int z; z = ( x y ) ? x : y; return ( z ); void main( ) int a, b, c; scanf ( “%d,%d“, ,float max ( float x, float y) float z; z =

12、( x y ) ? x : y; return ( z ); ,24,例8.4 读程序,写出结果 #include int f ( int a, int b) if ( a b ) return 1; else if ( a = = b ) return 0; else return -1; void main( ) int i = 2, p; p = f ( i, + i ); printf( “%d“, p ); ,注意:不同系统中实参的计算顺序不同。微机上一般从由右到左。为避免混乱,一般应在调用函数前计算出实参的值。,void main( ) int i = 2, j, p; j = +

13、 i; p = f ( i, j ); printf( “%d“, p ); ,25,二、函数调用的方式,1、函数语句 形式为:函数名 (实参表列); 例如: printmessage( ); printf (“%d“, p); 这种方式不考虑函数有没有返回值,因此对任何类型的函数都适用,26,2、函数表达式 函数的返回值参与运算 例如: m = max(a , b ); m = 3 * max (a , b); printf( “Max is %d“, max (a , b); 说明:这种调用方式不能用于 void 型函数,27,三、函数的说明,被调函数需满足以下条件: 1、被调函数必须存在

14、,且遵循“先定义后使用”的原则,2、如果被调函数的定义在主调函数之后,可以先给出原型说明 原型说明的形式为: 类型说明 函数名(参数说明);,#include void printstar( ) printf(“*n“); void printmessage( ) printf(“ Hello, world.n“); printstar( ); main( ) printstar( ); printmessage( ); ,28,例如(先定义后使用) #include float f ( float x ) return 2 * x * x + 3 * x + 1; void main ( )

15、 float x; scanf ( “%f“, ,29,又如(后定义,使用原型说明) #include float f ( float x ) ; void main ( ) float x; scanf ( “%f“, ,函数的原型说明,有参函数定义,30,说明:库函数的原型存放在头文件( .h )中,通过使用 include 预处理命令将原型说明插入程序中,#include #include void main ( ) float x, y; scanf ( “%f“, ,31,8.5 函数的嵌套调用,例8.1 #include void printstar( ) printf(“*n“); void printmessage( ) printf(“ Hello, world.n“); printstar( ); void main( ) printstar( ); printmessage( ); ,嵌套调用是指在调用一个函数的过程中又调用了其他函数。(也就是说在执行被调用函数时,被调用函数又调用了其它函数。),32,程序的执行过程如下:,开始,结束,33,编写函数的过程,先确定函

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号