C语言程序设计 第8章函数与预处理命令 八西亚斯围陈学院自动化 2021/2/24
2021/2/24 1 第8章 函数与预处理命令 西亚斯国际学院 自动化 C 语言程序设计
复习 1函数的定义 ●2函数的声明 ●3函数的调用 函数调用的方式:函数语句,函数表达 式 调用函数所具备的条件 4实参与形参的值的单项传递 ●5函数的返回值与 ireturn语句 2021/2/24
2021/2/24 2 复习 ⚫ 1 函数的定义 ⚫ 2 函数的声明 ⚫ 3 函数的调用 – 函数调用的方式:函数语句,函数表达 式 – 调用函数所具备的条件。 ⚫ 4 实参与形参的值的单项传递 ⚫ 5 函数的返回值与return语句
复习例题 试写一个add()函数,调用该函数时传 入起始值( initial)和终值( final), add()函数会计算起始至终值之间整数 的综合(temp),并将计算结果返回 main()函数,再将总和(tota)显示 到屏幕上。 2021/2/24
2021/2/24 3 复习例题: ⚫ 试写一个add()函数,调用该函数时传 入起始值(initial)和终值(final), add()函数会计算起始至终值之间整数 的综合(temp),并将计算结果返回 main()函数,再将总和(total)显示 到屏幕上
include void main( int add(int, int) total=add(5, 15) printf(“n5+6+7++15is:%dn”,tota int add(int initial, int final) int temp=0, for(i=initial; i<=final; i ++ temptemp+l; return temp; 2021/2/24
2021/2/24 4 ⚫ #include ⚫ void main() ⚫ { ⚫ int add(int, int); ⚫ total=add(5,15); ⚫ printf(“\n5+6+7+…+15 is:%d\n”,total); ⚫ } ⚫ int add(int initial, int final) ⚫ { ⚫ int temp=0,I; ⚫ for(i=initial; i<=final;i++) ⚫ { ⚫ temp=temp+I; ⚫ } ⚫ return temp; ⚫ }
85函数的嵌套调用 ●在调用一个函数的过程中,又调用另一个 函数。 ●函数不能嵌套定义,但是可以嵌套调用。 main函数 a函数 b函数 调用a函数 调用b函数 结束 2021/2/24
2021/2/24 5 8.5 函数的嵌套调用 ⚫ 在调用一个函数的过程中,又调用另一个 函数。 ⚫ 函数不能嵌套定义,但是可以嵌套调用
58.6函数的递归调用 在调用一个函数的过程中又出现直接或间接 地调用该函数本身,称为函数的递归调用 C语言的特点之一就在于允许函数的递归 调用。 2021/2/24
2021/2/24 6 §8.6函数的递归调用 在调用一个函数的过程中又出现直接或间接 地调用该函数本身,称为函数的递归调用。 C语言的特点之一就在于允许函数的递归 调用
个2人周要最他痛3代 岁 说E第1个人大 0岁。请向第5个人多米。后向第个大, age(5)=age(4)+2 ge(4)=age(3) ●age(3)=age(2) 2 o age(2)=age(1) +++ 2 ●age(1)=10 ●可以用数学公式表述如下: ●age(n)=10 (n=1) age(n-1)+2 (n>1) 2021/2/24
2021/2/24 7 例8.6.1 有5个人坐在一起,问第5个人多少岁?他说比 第4个人大2岁。问第4个人岁数,他说比第3个人大 2岁。问第3个人,又说比第2个人大2岁。问第2个 人,说比第1个人大2岁。最后问第1个人,他说是1 0岁。请问第5个人多大。 ⚫ age(5)=age(4)+2 ⚫ age(4)=age(3)+2 ⚫ age(3)=age(2)+2 ⚫ age(2)=age(1)+2 ⚫ age(1)=10 ⚫ 可以用数学公式表述如下: ⚫ age(n)=10 (n=1) ⚫ age(n-1)+2 (n>1)
8 ●可以用一个函数来描述上述递归过程: int age(intn)/*求年龄的递归函数* ●{intc;/*c用作存放函数的返回值的变量* f(n==1)c=10 else c=age(n-1)+2: return(c) 用一个主函数调用age函数,求得第5人的年龄。 ●# include void main() pri n t f(%d", age(5))i 2021/2/24
2021/2/24 8 ⚫ 可以用一个函数来描述上述递归过程: ⚫ int age(int n) /* */ ⚫ { int c; /* c用作存放函数的返回值的变量 */ ⚫ if(n==1) c=10; ⚫ else c=age(n-1)+2; ⚫ return(c); ⚫ } ⚫ 用一个主函数调用age函数,求得第5人的年龄。 ⚫ #include ⚫ void main() ⚫ { ⚫ printf(″%d″,age(5)); ⚫ }
58.7数组作为函数参数 1数组元素作为函数实参(略) 同普通变量作实参的方式相同 2数组名作函数参数 问题:多个返回值的处理? 解决方法一:在被调用函数内整个数组 经过计算处理完毕,再将整个数组返回给 原调用函数数组。 调用方式:在原调用函数的实参中,只 需写上数组名,后面不加[]在被调用函数 的形参中,数组名后面加上中括号[] 2021/2/24
2021/2/24 9 §8.7数组作为函数参数 ⚫ 1 数组元素作为函数实参(略)。 ⚫ 同普通变量作实参的方式相同。 ⚫ 2 数组名作函数参数 ⚫ 问题:多个返回值的处理? ⚫ 解决方法一:在被调用函数内整个数组 经过计算处理完毕,再将整个数组返回给 原调用函数数组。 ⚫ 调用方式:在原调用函数的实参中,只 需写上数组名,后面不加[ ];在被调用函数 的形参中,数组名后面加上中括号[ ]
8.72一维数组名作函数参数 10 数组名表示数组在内存中的起始地址。 例如:数组a在内存中从2000地址开始存放,则a的值 为2000。2000是地址值,是指针类型的数据(第8 中将介绍指针类型),不能把它看成是整型或其他 类型数据。 >实参是数组名,形参也应定义为数组形式,形参数 组的长度可以省略,但[不能省,否则就不是数组 形式了。 【例871】用冒泡法将10个整数排序。 2021/2/24
2021/2/24 10 8.7.2 一维数组名作函数参数 ➢ 数组名表示数组在内存中的起始地址。 例如:数组a在内存中从2000地址开始存放,则a的值 为2000。2000是地址值,是指针类型的数据(第8 中将介绍指针类型),不能把它看成是整型或其他 类型数据。 ➢ 实参是数组名,形参也应定义为数组形式,形参数 组的长度可以省略,但[ ]不能省,否则就不是数组 形式了。 【例8.7.1】用冒泡法将10个整数排序