C语言程序设计课件演示课件文.ppt

计算机科学系 第7章 函数 7.4.2 函数调用的方式 1. 函数语句 函数名(实参表列); 或 函数名(); 注意,函数后面有一个分号“;”。 2. 函数表达式 当所调用的函数有返回值且需要使用返回值时,函数的调用可作为表达式出现在允许表达式出现的任何地方。 计算机科学系 第7章 函数 7.4.3 函数的声明 调用一个函数,首先要求该函数已经被定义,但有时仅有定义仍然不能正确调用该函数,这时需要增加对被调用函数的声明。 对于有参函数,函数声明的形式如下: 类型标识符 函数名(形参表列); 对于无参函数,函数声明的形式如下: 类型标识符 函数名(); 【例7.5】 计算机科学系 第7章 函数 7.5 函数的参数传送 7.5.1实参与形参之间的数据单向传送 1.形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只有在函数内部有效。函数调用结束返回主调函数后则不能再使用该形参变量。 2.实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等方法使实参获得确定值。 3.实参和形参在数量上,类型上,顺序上应严格一致,否则会发生“类型不匹配”的错误。 4.函数调用中发生的数据传送是单向的,即只能把实参的值传送给形参,而不能把形参的值反向地传送给实参,这称为按值传送。因此在函数调用过程中,形参的值发生改变,而实参中的值不会变化。 【例7.6】 实参与形参之间的数据单向传送。 计算机科学系 第7章 函数 7.5.2数组作参数 1. 数组元素作函数实参 数组元素就是下标变量,它与普通变量并无区别,因此它作为函数实参使用时与普通变量是完全相同的,在进行函数调用时,把作为实参的数组元素的值传送给形参,实现单向的值传送。 【例7.7】 编写程序,判别一个整数数组中各元素的值,若大于0则输出该值,否则输出0。 2. 数组名作函数实参 【例7.8】 编写程序,输入10个学生的成绩,对这些成绩进行排序,输出排序前后的结果。 【例7.9】 编写程序,将一个3行4列的矩阵的每一列的最小值存入另一个一维数组中。 计算机科学系 第7章 函数 7.6 函数的嵌套调用和递归调用 7.6.1 函数的嵌套调用 在C语言中,虽然函数之间的关系是并列的,在函数定义时不能嵌套定义,但是允许函数嵌套调用 。 【例7.10】 函数的嵌套调用。 计算机科学系 第7章 函数 7.6.2 函数的递归调用 函数的递归调用是指在函数调用的过程中,函数直接或间接地调用了函数自身。含有直接或间接调用自身的函数称为递归函数。 递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。 一个问题要采用递归方法来解决时,必须符合以下三个条件: 1.要解决的问题可以转化为一个新的问题,而这个新的问题的解法仍与原来的解法相同,只是所处理的对象有规律地递减。 2.可以应用这个转化过程时使问题得到解决。 3.必定要有一个结束递归的条件。 计算机科学系 第7章 函数 【例7.11】 用递归方法求n!。 【例7.12】 用递归方法求Fibonacci数列。 【例7.13】 Hanoi塔问题。 递归的缺点: 递归算法解题的运行效率较低。在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等。 计算机科学系 第7章 函数 7.7 内部变量和外部变量 变量的作用域是指变量的合法使用范围。变量的作用域与定义变量的位置密切相关,变量只能在它的作用域内使用。 变量的存储类别是指变量在内存中的存储位置。变量的存储类别决定着变量的生存期,变量的生存期是指变量在内存或寄存器中存在的时间段。 变量从作用域来区分可分为内部变量和外部变量。 计算机科学系 第7章 函数 7.7.1 内部变量 在函数内部或复合语句内部定义的变量称为内部变量。 内部变量的作用域是指从定义该变量的位置开始到它所在函数或复合语句结束。 内部变量的生存期是指定义该变量到函数的结束或复合语句的结束这段时间。 内部变量包含自动类型内部变量、寄存器类型内部变量和静态类型内部变量。 计算机科学系 第7章 函数 主函数中定义的内部变量也只能在主函数中使用,不能在其它函数中使用。同时,主函数中也不能使用其它函数中定义的内部变量,因为主函数也是一个函数。它和其它函数是平等关系。 形参变量是属于被调函数的内部变量,实参变量是属于主调函数的内部变量。允许在不同的函数中使用相同的

文档评论(0)

1亿VIP精品文档

相关文档