当前位置:文档之家› C语言课件(4,5)资料

C语言课件(4,5)资料


第 四章
模块化程序设计
例 求一个整数的绝对值的函数。 int absolute_value( int x) 形参 { return(x>=0?x:-x); }
当调用结束时,如果需要 函数提供一个运算结果的 话,就需要用return语句 来带回该值。
第 四章
模块化程序设计
例 打印n个空格的函数。 void space(int n) { 如果不要求函数在运算结束提 供值的时候,对于函数类型就 int i; 可以选择void型。 for (i=0; i<n; i++) printf(“ ”); 此时,return函 return; 数不带回任何值。 }
第 四章
模块化程序设计
main( ) { int a=3,b=5; void swap(int x, int y); swap( a, b); printf( “a=%d, b=%d\n”,a, b); } void swap(int x,int y) { int temp; temp=x,x=y,y=temp; printf(“x=%d, y=%d\n”,x, y); }
模块化程序设计
main( )
函数
x
3
y 4
(实参)
fun( ) 函数
a
3
x b
(形参)
第 四章
模块化程序设计
注意: 1. 形参与实参各占一个独立的存储空间。 2. 形参的存储空间是函数被调用时才分配的。 调用开始,系统为形参开辟一个临时存储 区,然后将各实参之值传递给形参,这时 形参就得到了实参的值。 3. 函数返回时,临时存储区也被撤消。 4. 传值方向只能由实参向形参传递,而不能 由形参向实参传递。即值传递是单向传递。 也就是说,形参的改变,不会影响实参的 值。
第 四章
模块化程序设计
7. 函数的嵌套调用及递归调用 •嵌套调用:在一个函数中又调用另外一个 函数。 函数不允许嵌套定义,但可以嵌套调用!
main 函数 { u=f1(i,t); } 1 7 f1 函数 { 2
c=f2(b-1,b+1);
f2 函数 3 5 4
返回f2函数值
} 6
第 四章
模块化程序设计
第 四章
5. 函数的声明
模块化程序设计
如果函数的定义出现在函数调用之后,则对 将要调用的函数作一个声明,即向编译系统 提供函数必要的信息:函数名,函数类型, 函数参数个数、类型及排列次序。
类型标识符 函数名(类型标识符 参数1,…); 当一个函数要被一个文件中的多个函数调用 时,可以将该函数的声明写在所有函数之前。
main( ) { int x=1; { void prt(void); int x = 3; prt( ); printf(“2nd x = %d\n”,x); } printf(“1st x = %d\n”,x); } void prt (void) { int x = 5 ; printf(“3th x = %d\n”,x) }
• 函数递归调用:一个函数直接或间接调用 它自己。 f1( ) { … f1( ) … } f1( ) { … f2( ) … f2( ) { … f1( ) … }
}
第 四章
递归方式 中止条件
模块化程序设计
long rfact( int n) { if(n<0) { printf(“Negative”); exit(-1); } else if(n<=1) return(1); else return(n*rfact(n-1)); }
函数不能嵌套定义,也就是说,一个函数不 能定义在另外一个函数内部。函数与函数在 定义时是相互独立的。
第 四章
4 . 函数的返回
模块化程序设计
函数执行的最后一个操作是返回。其意义是: (1) 使流程返回主调函数,宣告函数的一次执行 终结,在调用期间所分配的变量单元被撤消。 (2) 送函数值到调用表达式中。有些函数有返回 值,有些可以没有。
第 四章
一 函数
模块化程序设计
main函数
C程序
其他函数
库函数
用户自定义函数
第 四章
模块化程序设计
1. 函数与函数之间的调用关系
第 四章
2. 函数基本组成
模块化程序设计
函数返回值类型 函数名(参数列表)
{ 函数体; }
第 四章
3 函数定义 函数类型
模块化程序设计
函数名 形式参数数目、类型 函数体
第 四章
模块化程序设计
6. 函数的调用:使用函数的功能。 变量参数:传值 参数 指针参数:传址
第 四章
形参:
虚 实 结 合
模块化程序设计
被调函数,表示将从主调函数中获得哪 些类型的信息。
实参: 主调函数,向被调函数传递必要信 息。
第 四章
假定函数fun: fun(int a, int b) { … } main( ) { int x=3,y=4; t = fun(x, y ); }
第 四章
模块化程序设计
说明: 1、自动变量是局部变量 2、在对自动变量赋值之前,它的值是不确定的。 3、对同一个函数的两次调用之间,自动变量的 值是不保留的。
第 四章
模块化程序设计
x=1 x=3 调用prt printf(“2nd x=%d\n”,x); printf(“1st x = %d\n”, x);
第 四章
二 变量的存储属性
模块化程序设计
变量的值
变量 变量的操作属性 变量的存储属性 变量存储器位置 变量生存期
变量可用域
第 四章
1 动态变量
模块化程序设计
动态变量是在程序执行的某一时刻被动态地 建立并在另一时刻被动态地撤消的一种变量, 它们存在于程序的局部,也只在这个局部中 可以使用。动态变量有两种:自动(auto)变量 和寄存器(register)变量。 ① 自动变量 [auto] 数据类型 变量名[=初值表达式],…;
第 四章
例 float y(float x) { if (x<0) return(x*x-x+1); else return(x*x*x+x+3); }
模块化程序设计
虽然,这里有两个return语 句,但是,每调用一次, 只有一个return语句有效。 另外,要求两个return语句 后的表达式类型要相同。 (为什么?)
prt
x=5 printf(“3th x = %d\n”, x);
第 四章
模块化程序设计
② 寄存器变量:具有与自动变量完全相同的 性质。 2 静态变量 “静态”是相对于“动态”而言的。 (1) 静态变量的存储空间在程序的整个运行 期间是固定的(static) 。一个变量被指定为静 态变量,则在编译时就为其分配存储空间, 程序一开始执行便被建立,直到该程序执行 结束都是存在的。
相关主题