数组作函数参数、函数嵌套与递归调用、变量作用域.doc
《数组作函数参数、函数嵌套与递归调用、变量作用域.doc》由会员分享,可在线阅读,更多相关《数组作函数参数、函数嵌套与递归调用、变量作用域.doc(11页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、【精品文档】如有侵权,请联系网站删除,仅供学习与交流数组作函数参数、函数嵌套与递归调用、变量作用域.精品文档.C语言程序设计教案19-数组作函数参数、函数嵌套调用、变量作用域 教师姓名 韩晓翠 授课班级 授课形式边讲边练 授课日期 年 月 日 第 周 授课时数 授课章节第7章 用函数实现模块化程序设计7.5 函数嵌套调用7.6 函数递归调用7.7 数组名作函数参数7.8-7.11 变量作用域教学目的熟练掌握数组元素作函数参数熟练掌握数组名作函数参数掌握函数的嵌套调用熟悉变量的作用域教学重点数组元素作函数参数数组名作函数参数教学难点数组名作函数参数变量的作用域教学内容授课要点数组元素作函数参数数
2、组名作函数参数函数的嵌套调用变量的存储类别和作用域一、数组元素作函数参数数组元素作函数参数和普通变量作函数参数效果和用法一样问题1:调用函数输出数组元素的值。问题1解决:#includevoid myfun(int x,int y,int z);main() int a3=1,2,3; myfun(a0,a1,a2);void myfun(int x,int y,int z) printf(%d,%d,%dn,x,y,z); 运行结果:1,2,3注:数组元素作函数参数实现的是“值传递”。如:#include void swap1(int x,int y) int z; z=x; x=y; y=
3、z;main() int a2=1,2; swap1(a0,a1); printf(a0=%dna1=%dn,a0,a1);12a调用前FFAAFFAE12x调用时yFF01FAAC21x交换yFF01FAAC12a返回FFAAFFAE二、数组名作函数参数数组名作函数参数地址传递C语言规定,不带任何下标的数组名代表数组的首地址,即第一个元素的地址 例如,有定义语句int num10;那么,数组名num和&num0的意义是相同的。采用数组名作为函数参数就是将数组的首地址作为函数参数传递给被调用的函数。例如,以下程序段是把数组num的地址传给函数sort():main() int num10; s
4、ort(num);接收数组num的函数既可以定义为:void sort(int arr10)也可以定义为:void sort(int arr)即使定义为:void sort(int arr20)程序编译时也不会报错。因为C编译程序产生的代码是令函数sort( )接收数组num的首地址,并不生成具有20个元素的数组arr,也不进行下标边界检查。为了避免发生错误,向函数传递数组时,最好同时再用一个参数传递数组的长度。例如,对于上面的例子可以写程序:main() int num10; sort(num,10);void sort(int arr,int n)问题2:实现两个整型变量的值的互换。(假设
5、两个整型变量是一个长度为2的整型数组的元素)问题2解决-自定义函数#include void swap2 (int x2) /形参用数组定义, 等价于int x int z; z=x0; x0=x1; x1=z;main() int a2=1,2; swap2(a,2); printf(a0=%dna1=%dn,a0,a1);12a调用前12ax调用21ax交换21a返回问题3:定义一个函数,求全班学生的某门课程总分,并将总分返回到主函数中输出。问题3解决-自定义函数求总分#include float sum(float stu, int n); void main() float score
6、10;int i; float total; printf(Input 10 scores:n); for( i=0; i10; i+ ) scanf(%f, &scorei); total=sum(score,10); /实参用数组名 printf(sum is:%fn, total);float sum(float stu , int n) /形参用数组定义 int i; float total=0; for( i=0; in; i+ ) total += stui; return total;数组名作函数参数总结 数组名作函数参数地址传递 在主调函数与被调函数分别定义数组,且类型应一致,
7、实参用数组名,形参用数组定义 形参、实参数组名是地址变量模仿练习1、输入10个整数保存到数组中,定义函数求最大元素和该数是第几个数。2、在主函数输入8个整数保存到数组中,自定义函数对数组元素排序,并在主函数中将排序后的数组输出。参考程序:1.P193例7.92.P196例7.12讨论并总结1. 数组元素作函数参数时,实参和形参间的传递方式是什么?2. 数组名作函数参数时,实参和形参的写法有什么不同?结论1:数组元素作函数参数时,实参与形参间单向值传递。结论2:数组名作函数参数时,实参和形参间发生地址传递;在主调函数与被调函数分别定义数组,且类型应一致;形参数组大小(多维数组第一维)可不指定,形
8、参数组名表示地址;实参写数组名,形参为数组定义。学以致用寻找你身边的一个实际问题,用到数组名作函数参数。 例如:定义一个函数,实现10个同学身高的比较,从中找出最高身高,并返回到主函数中输出。P193例7.9三、函数的嵌套调用问题4问题3延续:定义两个函数,分别求全班学生(假设10名学生)的某门课程总分和平均分,并将总分和平均分返回到主函数中输出。问题4分析:float aver(float stu , int n) int i; float total=0; for( i=0; in; i+ ) total += stui; return total/(float)n; 求总分和平均分int
9、 sum(float stu, int n) int i; float total=0; for( i=0; in; i+ ) total += stui; return total;问题4解决函数嵌套调用 C规定:函数定义不可嵌套,但可以嵌套调用函数main( )调用函数a结束b函数a函数调用函数b自定义aver函数:#include float sum(float stu, int n);float aver(float stu , int n);void main() float score10,average,total; int i; printf(Input 10 scores:n
10、); for( i=0; i10; i+ ) scanf(%f, &scorei); total=sum(score,10); average=aver(score,10); printf(sum is:%f, aver is:%fn,total, average);float sum(float stu, int n) int i; float total=0; for( i=0; in; i+ ) total += stui; return total;float aver(float stu , int n) float total; total = sum( stu , n); ret
11、urn total/n;*自学内容:问题5:求三个数中最大数。自定义函数mymax3()和mymax2(),分别求出3个参数的最大值和2个参数的最大值,在mymax3()中两次调用mymax2()求出3个参数的最大值将值返回给主函数,输出该结果。函数首部为: float mymax3(float x, float y, float z) float mymax2(float x, float y)问题5解决函数嵌套调用#includefloat mymax3(float x, float y, float z);float mymax2(float x, float y);void main(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数组 函数 参数 嵌套 递归 调用 变量 作用
限制150内