您好,欢迎访问三七文档
当前位置:首页 > 办公文档 > 工作计划 > C语言教案-第十二周
65第十二节函数1:通过本节课学习,使学生理解函数的嵌套是什么并能够调用,学习局部变量和全局变量。1.1学习目的:1.理解函数的嵌套调用2.理解数组作为函数参数3.灵活使用局部变量和全局变量1.2学习内容:1.函数的嵌套调用2.数组作为函数参数3.局部变量与全局变量1.3学习重点:局部变量与全局变量的应用1.4教学方法:讲授法、举例1.5学习方法:练习、总结1.6学习时间第十八周2:回顾上一节:[10分钟]举例:实参与形参3:课程知识点讲解:66具体知识点1:函数的嵌套调用[25分钟]知识讲解:函数的嵌套调用案例讲解:计算s=22!+32!。编程分析:可用两个函数,实现求解。一个是用来计算平方值的函数f1,另一个是用来计算阶乘值的函数f2。主函数先调f1计算出平方值,再在f1中以平方值为实参,调用f2计算其阶乘值,然后返回f1,再返回主函数,在循环程序中计算累加和。程序如下:longf1(intp)/*定义求平方值的函数*/{intk;longr;longf2(int);k=p*p;r=f2(k);returnr;}longf2(intq)/*定义求阶乘值的函数*/{longc=1;inti;for(i=1;i=q;i++)c=c*i;returnc;}main()/*主函数*/{inti;longs=0;for(i=2;i=3;i++)s=s+f1(i);/*调用函数,进行累加,参数为i*/printf(\ns=%ld\n,s);}程序运行结果:s=362904具体知识点2:数组作为函数参数[20分钟]知识点讲解:数组可以作为函数的参数使用,进行数据传送。数组用作函数67参数有两种形式,一种是把数组元素(下标变量)作为实参使用;另一种是把数组名作为函数的形参或实参使用。数组元素作函数实参:数组元素就是下标变量,它与普通变量并无区别。因此它作为函数实参使用与普通变量是完全相同的,在发生函数调用时,把作为实参的数组元素的值传送给形参,实现单向的值传送。数组名作为函数参数:多维数组也可以作为函数的参数案例讲解:voidnzp(inta[8]){inti;printf(\nvaluesofarrayare:\n);for(i=0;i8;i++){if(a[i]0)a[i]=0;printf(%d,a[i]);}}main(){intb[5],i;printf(input5numbers:);for(i=0;i5;i++)scanf(%d,&b[i]);printf(initialvaluesofarraybare:\n);for(i=0;i5;i++)printf(%d,b[i]);nzp(b);printf(\nlastvaluesofarraybare:\n);for(i=0;i5;i++)printf(%d,b[i]);}程序运行结果:input5numbers:13579回车initialvaluesofarraybare:13579valuesofarrayare:1357902923522lastvaluesofarraybare:13579老师提问:问题1:按址传递会影响原始变量的值吗?问题2:按值与按址的区别?具体知识点3:局部变量与全局变量[20分钟]知识点讲解:局部变量68在一个函数内部或复合语句内定义的变量,这些变量只在本函数或本复合语句内才能使用,所有形参都是局部变量。auto(默认)所在函数调用结束时,其值自动消失。局部变量register如不赋初值,取不确定值为初值。static所有函数调用结束,其值仍保留。案例讲解:判断程序运行结果。main(){inta=2,i;clrscr();for(i=0;i3;i++)printf(%4d,f(a));}f(inta){intb=0;staticintc=3;b++;c++;returna+b+c;}程序运行结果:789程序运行分析:aibcf(a)200→147210→158220→169知识点讲解:全局变量[10分钟]一个源文件可以包含一个或若干个函数,在函数内定义的变量是局部变量,而在函数之外定义的变量称为全局变量。全局变量可以为本文件中其他函数共用。extern(默认)允许本源文件中其他函数及其他源文件使用。全局变量static只限本源文件中使用。案例讲解:定义两个外部变量,判断程序运行结果。externintx,y;/*可以省略int。如果没有此句,编译就会出错*/main(){clrscr();printf(x=%d,y=%d\n,x,y);}x=100,y=200;69老师提问:问题1:请举出局部变量和全局变量定义的关键字。4本节总结[5分钟]考核点考核点1:数组名和数组元素作为参数的异同考核点2:全局变量与局部变量的定义及使用测试题测试题1:写一个程序打印出2的顺序各次幂。让它打印出2的前30个幂,看看会出现什么情况。用一个条件为真的循环打印2的各次幂,看看会出现什么情况。测试题2:从键盘输入两个正整数,然后求这两个数的最大公约数。扩展部分:扩展部分1:变量的存储类型扩展部分2:函数的递归调用学生问题汇总:问题1:问题2:作业:习题1:请到查出银行一年定期存款的利率和5年定期存款的利率。假定现在要存入100元钱,存款到期后立即将利息与本金一起再次存入。请写出程序,计算按每次存一年和按照每次存5年,总共存50年后两种存款方式的得款总额。对两种情况都每隔5年输出一次当时的总金额。习题2:(1)不用函数,直接写一个主程序计算并输出直径为100毫米和150毫米的金、银、铜、铁、锡球的重量(以kg为单位输出)。(2)重新完成上面程序,先定义一个带有两个参数的函数,它能求出直径为x的比重为y的圆球的重量,而后在主程序里调用这个函数完成所需工作。将这样得到的解与不用函数的解比较,比较它们的长度、容易出错的程度。假设现在要求修改所用圆周率的精度,考虑用两种方式写程序的修改难度。(3)请写程序,求出边长为100毫米和150毫米的金、银、铜、铁、锡立方体的重量。你可以利用前面的程序吗?是否很容易修改前面程序,完成这一计算?比较不用函数的解法和使用函数的解法在易修改和重复使用方面的效用。
本文标题:C语言教案-第十二周
链接地址:https://www.777doc.com/doc-2907973 .html