C语言第8章数组做函数参数.pptVIP

  • 38
  • 0
  • 约5.87千字
  • 约 36页
  • 2019-12-02 发布于广东
  • 举报
例如: int f(int a) { auto int b, c=3; …… } 说明:关键字“auto”可以省略不写(隐含指定为自动变量)。 例如: auto int b,c=3; int b,c=3; 三、 用static声明局部变量 静态局部变量: ⒈ 特点:函数中的局部变量的值在函数调用结束后不消失而 保留原值,即其所占用的存储单元不释放,在下一 次调用该函数时,该变量已有值,就是上一次函数 调用结束时的值。 ⒉ 声明:(用关键字static进行声明) static 类型标识符 变量名 例如: static float a; 例 考察静态局部变量的值。 #include stdio.h int f(int a) { int b = 0; static int c = 3; b = b + 1; c = c + 1; return (a + b + c); } int main(void) { int am = 2, i; for(i=0; i2; i++) { printf(“%d”, f(am)); } return 0; } 运行结果:? i=0 函数调用开始 函数调用结束 2 a 0 b 3 c 4 c 1 b 2 a 5 c 1 b 2 a 2 a 0 b 4 c i=1 函数调用开始 函数调用结束 关于静态局部变量的说明: ☆ 如在定义静态局部变量时不赋初值,编译时自动赋初值0 (对数值型数据)或空字符(对字符变量)。而对自动变 量来说,如果不赋初值,它的值是一个不确定的值。 ☆ 静态局部变量仍属于局部变量,其它函数不能引用它。 例如: 对静态局部变量: static int a; (a=0) static float b; (b=0.0) static char c; (c=‘\0’) 对自动变量: int a; (a的值不确定) float b; (b的值不确定) char c; (c的值不确定) 递归算法 一、递归求n! 递归算法的两个必要条件: (1)n的求解必然和前面n-1的求解,甚至n-2…的求解有联系,即是和前一(或前几)层之间存在递归规律 (2)递归到前面的某一层一定有确定的返回值或结束继续递归 递归的实现——栈(先进后出) 递归算法 二、递归的实际应用举例 汉诺塔游戏 第8讲 函 数_2 * 内 容 提 要 一维数组做函数参数 二维数组做函数参数 变量的作用域和存储类别(理论性知识) 进一步理解函数的递归调用和递归算法的应用 回顾上周内容 怎样编写自定义函数? 怎样调用自定义函数? 函数的格式 函数值类型 函数名(形式参数) { 函数体 } 说明: 如果函数没有函数值,函数值类型为void 如果函数有函数值,函数值类型为某种数据类型,函数值由return语句返回; 如果函数没有形式参数,表示为void 如果函数有形式参数,则每一个形参的说明均为: 数据类型 形参名 如果有多个形参,用逗号分隔。 函数的调用 要让计算机执行一个函数,就必须对函数进行调用。 说明: 调用库函数,需要在源程序最前面通过include预编译指令引入对应库函数的头文件 调用库函数的关键是遵守函数原型定义的约定 使用正确的函数名 传递的实参在数量,类型和顺序必须和形参一致 如果有函数值,注意返回值的类型 函数可以嵌套调用,递归调用,但是不能循环调用。 1、实参与形参的个数相等,类型一致; 2、实参可以是变量、表达式、常数,实参必须有确定的值; 3、在调用函数时,如果被调用函数的形参是变量,实参和形参分别拥有各自的内存空间,实参将值传递给对应的形参,形参值的改变不影响实参; 4、如果函数调用在前,函数定义在后,则在调用函数前必须对函数进行原型声明。 函数总结 1、输入的时候。 scanf(“%d ”, a); 2、数组名。 int a[10], b[10]; a = b; //错误,为什么 之前哪些地方涉及过“地址”这个概念 在调用函数时,如果被调函数的形参是一维数组,则对应的实参是一个内存单元的地址,实参数组

文档评论(0)

1亿VIP精品文档

相关文档