资源描述:
《数组作函数参数、函数嵌套与递归调用、变量作用域》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、《C语言程序设计》教案19-数组作函数参数、函数嵌套调用、变量作用域教师姓名韩晓翠授课班级授课形式边讲边练授课日期年月日第周授课时数授课章节第7章用函数实现模块化程序设计7.5函数嵌套调用7.6函数递归调用7.7数组名作函数参数7.8-7.11变量作用域教学目的熟练掌握数组元素作函数参数熟练掌握数组名作函数参数掌握函数的嵌套调用熟悉变量的作用域教学重点数组元素作函数参数数组名作函数参数教学难点数组名作函数参数变量的作用域教学内容授课要点数组元素作函数参数数组名作函数参数函数的嵌套调用变量的存储类别和作用域一、数组元素作函数参数数组元素
2、作函数参数和普通变量作函数参数效果和用法一样问题1:调用函数输出数组元素的值。问题1解决:#includevoidmyfun(intx,inty,intz);main(){inta[3]={1,2,3};myfun(a[0],a[1],a[2]);}voidmyfun(intx,inty,intz){printf("%d,%d,%d",x,y,z);}运行结果:1,2,3注:数组元素作函数参数实现的是“值传递”。如:#includevoidswap1(intx,inty){intz;z=x;x=
3、y;y=z;}main(){inta[2]={1,2};swap1(a[0],a[1]);printf("a[0]=%da[1]=%d",a[0],a[1]);}12a调用前FFAAFFAE12x调用时yFF01FAAC21x交换yFF01FAAC12a返回FFAAFFAE二、数组名作函数参数数组名作函数参数——地址传递C语言规定,不带任何下标的数组名代表数组的首地址,即第一个元素的地址例如,有定义语句intnum[10];那么,数组名num和&num[0]的意义是相同的。采用数组名作为函数参数就是将数组的首地址作为函数参数传
4、递给被调用的函数。例如,以下程序段是把数组num的地址传给函数sort():main(){intnum[10];/*……*/sort(num);/*……*/}接收数组num的函数既可以定义为:voidsort(intarr[10]){/*……*/}也可以定义为:voidsort(intarr[]){/*……*/}即使定义为:voidsort(intarr[20]){/*……*/}程序编译时也不会报错。因为C编译程序产生的代码是令函数sort()接收数组num的首地址,并不生成具有20个元素的数组arr,也不进行下标边界检查。为了避免发
5、生错误,向函数传递数组时,最好同时再用一个参数传递数组的长度。例如,对于上面的例子可以写程序:main(){intnum[10];/*……*/sort(num,10);/*……*/}voidsort(intarr[],intn){/*……*/}问题2:实现两个整型变量的值的互换。(假设两个整型变量是一个长度为2的整型数组的元素)问题2解决---自定义函数#includevoidswap2(intx[2])//形参用数组定义,等价于intx[]{intz;z=x[0];x[0]=x[1];x[1]=z;}main(){
6、inta[2]={1,2};swap2(a,2);printf("a[0]=%da[1]=%d",a[0],a[1]);}12a调用前12ax调用21ax交换21a返回问题3:定义一个函数,求全班学生的某门课程总分,并将总分返回到主函数中输出。问题3解决---自定义函数求总分#includefloatsum(floatstu[],intn);voidmain(){floatscore[10];inti;floattotal;printf("Input10scores:");for(i=0;i<10;i++
7、)scanf("%f",&score[i]);total=sum(score,10);//实参用数组名printf("sumis:%f",total);}floatsum(floatstu[],intn)//形参用数组定义{inti;floattotal=0;for(i=0;i8、组中,定义函数求最大元素和该数是第几个数。2、在主函数输入8个整数保存到数组中,自定义函数对数组元素排序,并在主函数中将排序后的数组输出。参考程序:1.P193例7.92.P196例7.12讨论并总结1.数组元素作函数参