C语言-第6章函数.doc_第1页
C语言-第6章函数.doc_第2页
C语言-第6章函数.doc_第3页
C语言-第6章函数.doc_第4页
C语言-第6章函数.doc_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C语言程序设计教学案-第七章第七章 函数本章要点1、 掌握函数的定义与使用;2、 掌握局部变量与全局变量、静态变量与动态变量的使用;3、 掌握存储区的概念及其作用;4、 了解寄存器变量的含义。总课时20第一节 概述?活动一:旧知回顾(目标了解函数的含义)1、源程序是由若干个 组成的,且至少有一个 。2、源程序从 函数开始执行,并结束于 函数。3、语言提供函数的类型有: 、 。4、已学的库函数有:类型函数原型包含的头文件功能数值字符?活动二:自主学习(目标掌握自定义函数的定义) if (ab) c=a; else c=b; return c;1、观察下列自定义函数: int max(int a, int b) int c; 2、训练:(1)定义一个实型无参函数sort(),其函数头为 (2)定义一个整型函数find (),有两个整型参数,其函数头为: &总结:1、自定义函数的定义方法:其中:(1) 类型标识符和函数名称为 ;(2) 类型标识符指明 的类型,其实际上是 的类型;(3) 在形参表中给出的参数称为 ,它们可以是各种类型的变量,各参数之间用 间隔;(4) 中的内容称为 ;(5) 声明部分是对函数体内部所用到的 进行类型说明;(6) return语句用于 ,若函数无需带回值,则类型标识符可写为 ;(7) 在很多情况下都不要求无参函数有返回值。2、函数分类:(1)有无参数分: 、 ;(2)有无返回值分: 、 ;(3)作用域分: 、 。?活动三:自主学习(目标掌握函数的调用/使用)1、观察下列程序,将使用函数max()的语句用线画出: int max(int a, int b) int c;if (ab) c=a; else c=b; return c;main()int x,y; scanf(“%d,%d”,&x,&y); printf(“%d”,max(x,y); int max(int a, int b) int c;if (ab) c=a; else c=b; return c;main()int x,y,z; scanf(“%d,%d”,&x,&y);z=max(x,y); printf(“%d”,z);&总结:1、函数调用的一般形式为:其中:(1)实参表中的参数可以是 、 、 或其它构造类型数据,各实参之间用 分隔;(2)函数调用的方式: 、 、 ; :函数作为表达式中的一项出现在表达式中,如例 :函数调用的一般形式加上分号即构成函数语句 :函数作为另一个函数调用的实际参数出现,如例 2、函数的声明main()int max(int a, int b); 或 int max(int, int);int x,y,z; scanf(“%d,%d”,&x,&y);z=max(x,y); printf(“%d”,z);int max(int a, int b) int c;if (ab) c=a; else c=b; return c;&总结:1、声明函数使编译系统知道被调函数返回值的类型,以便在主调函数中按此种类型对返回值作相应的处理,与定义函数有本质区别。2、声明函数的方法:在 函数中调用某函数之前声明 函数,其一般形式为:3、省去主调函数中对被调函数的函数声明:1) 被调函数的返回值是 或 类型时;2) 当被调函数的函数定义出现在主调函数之 时;3) 在所有函数定义之前,在函数外预先说明了各个函数的类型,则在以后的各主调函数中,可不再对被调函数作说明。?活动四:课堂检测1、程序改错:int max(int, int);main()int x,y,z; scanf(“%d,%d”,&x,&y);z=max(int x,int y); printf(“%d”,z);max(a,b) int c;if (ab) c=a; else c=b; return c;2、程序改错:main() max ;float max() int a=5,b=4;if (ab) c=a; else c=b; printf(“%d”,c);3、程序填空 int i; for(i=n-1;i=1;i-) n=n+i; printf(n=%dn,n);main() int n; scanf(%d,&n); s(n); printf(n=%dn,n);第二节 自定义函数的执行过程?活动一:自主学习(目标掌握被调函数的执行过程)int s(int n) int i; for(i=n-1;i=1;i-) n=n+i; printf(s n=%dn,n);1、程序阅读: main() int n=6; s(n); printf(m n=%dn,n);回顾:(1)自定义函数为 , (有/无)返回值;(2)主调函数为 ,被调函数为 ,以 方式调用。分析:从 函数开始执行, 时执行s()函数,在程序中用箭头线条描绘出执行过程。&小结:函数调用时执行过程:程序从 开始执行,执行到 时,程序转入 开始执行 , 执行完毕后, 。 ?活动二:研究探索(目标掌握被调函数的数据输入)int s(int n) int i; for(i=n-1;i=1;i-) n=n+i; printf(s n=%dn,n);1、程序阅读: main() int n=6; s(n); printf(m n=%dn,n);分析:(1)写出各函数中出现的变量及其值:函数变量初值有效范围main()s()(2)实参与形参实参 n 形参 n(3)输出:&小结:1、形参出现在 中,只有在 时才分配内存单元,在 时释放所分配的内存单元,故只在 内可以使用;2、实参出现在 中,在进行函数调用时,都必须具有 的值,进入被调函数后,实参变量 能使用;3、发生函数调用时, 函数把 的值传送给 函数的 ;4、实参和形参的 、 、 必须一一对应;5、函数调用中发生的数据传送是 向的,形参的值发生改变,实参中的值 会变化。?活动三:讨论学习(目标掌握被调函数的结果输出)int s(int n) int i; for(i=n-1;i=1;i-) n=n+i; 1、程序填空:下列程序完成1+2+3+10的值的计算,请完善程序。 main() int n=10,sum; printf(sum=%dn,sum);思考:如何将函数处理的结果带回到主调函数呢?主调函数又该如何处理被调函数的处理结果呢?&小结:函数的值通过 语句返回主调函数,其一般形式:int test(int a)float s; s=a%10; if (a%3=0) return s/3; else return s/2;2、程序阅读题:main() int a=25,b; b=test(a); printf(b=%dn,b);&小结:1、在函数中允许有 个return语句,但每次调用只能有 个return 语句被执行,因此只能返回 个函数值。2、函数值的类型和函数定义中函数的类型应 ,如果两者不一致,则以 的类型为准,自动进行类型转换。void test(int a)float s; s=a%10;3、改错:main() int a=25,b; b=test(a);&总结:自定义函数的数据输入通过 实现,结果输出通过 实现。&小结:1、不返回函数值的函数,可以明确定义为“空类型”,类型说明符为 。2、一旦函数被定义为空类型后,就不能在主调函数中使用 。printf(b=%dn,b);?活动四:课堂检测1、程序阅读long int f(int b) long int s=1;int i; for(i=2;ib) a=a-b else b-=a;z=a+b; return z; 写出各函数中出现的变量及其值:函数变量初值有效范围main()s()&小结:1、变量的有效性的范围称 。2、语言中的变量,按作用域范围可分为 变量和 变量。?活动二:研究探索(目标掌握局部变量的使用)1、main() int x,y; x=3;y=4; printf(%d,sum(x,y);printf(x=%d,y=%d,x,y); sum(int a,int b) int x=6,y=5,z;printf(x=%d,y=%d,x,y);if (ab) a=a-b else b-=a;z=a+b; return z; 分析:main()变量名值sum()&小结:1、局部变量也称为 变量,在 中定义,其作用域仅限于 ;2、主函数中定义的变量也只能在 中使用, 能在其它函数中使用。主函数中 能使用其它函数中定义的变量;3、形参变量是属于 的局部变量,实参变量是属于 的局部变量。2、main() int i=2,j=3,k; k=i+j; int k=8; printf(%dn,k);printf(%dn,k);&小结:1、在复合语句中也可定义变量,其作用域只在 内。?活动三:研究探索(目标掌握全局变量的使用)1、int x,y;void sum1() x=3;y=4; printf(nx=%d,y=%d,x,y);int z;sum2(int a,int b) if (ab) a=a-b; else b-=a; z=a+b; printf(nx=%d,y=%d,x,y); return z;main() sum1(); printf(n%d,sum2(x,y); printf(nx=%d,y=%d,z=%d,x,y,z);分析:&小结:全局变量也称为 ,它是在 定义的变量,其作用域是 。2、int a=3,b=5; max(int a,int b) int c; c=ab?a:b; return(c);main()int a=8; printf(%dn,max(a,b);&小结:如果同一个源文件中,外部变量与局部变量同名,则在局部变量的作用范围内,外部变量被 可以用。?活动四:课堂检测1、程序阅读题int a=5;int b=7;int plus (int,int);main() int a=4,b=5,c; c=plus(a,b);printf(A+B=%dn,c);plus(int x,int y) int z;z=x+y;printf(“%d”,a);return(z);第四节 变量的存储类别?活动一:回顾旧知(目标回忆变量的作用域)void fun2() a+=b-; printf(“%d%dn”, a,b);程序阅读题int a, b;void fun1() a=100; b=200; printf(“%d%dn”, a,b);main() int a=5, b=7;fun1();fun2();printf(“%dd n”, a,b);?活动二:学习探索(目标掌握静态变量与动态变量)1、阅读课本内容,完成下列空表,并将相应的变量与其存储区域用线连起来。&小结:1、从变量的作用域(即空间)来分,可以分为 和 ,从变量值存在时间(即生存期)来分,可以分为 和 ;2、静态存储方式:在程序运行期间分配 的存储空间的方式, 动态存储方式:在程序运行期间分配 的存储空间的方式。2、思考:int f(int a) auto int b,c=3; 是形参, 是自动变量,执行完f函数后,自动释放a,b,c所占的存储单元。main()int a=2,i; for(i=0;i3;i+) printf(%d,f(a);3、程序阅读题f(int a)auto b=0; static c=3; b=b+1; c=c+1; return(a+b+c);&小结:1、 局部变量 2、自动变量,又称 变量,用关键字 (可省)作存储类别的声明,属于 存储类别,占 存储空间,函数调用结束后即释放, 、 和 均为自动变量。3、静态局部变量,用关键字 作存储类别的声明,属于 存储类别,占 存储空间,在程序整个运行期间都不释放。4、静态局部变量在编译时赋初值,即赋初值 次;自动变量赋初值是在函数调用时进行,每调用一次函数重新给一次初值。5、在定义局部变量不赋初值时,若是静态局部变量,则自动赋初值 或 ;若是自动变量,则它的值 。训练:说出功能: int fac(int n)static int f=1; f=f*n; return(f);main()int i; for(i=1;i=5;i+) printf(%d!=%dn,i,fac(i);?活动三:了解认识 (了解变量的存储方式register变量)阅读:int fac(int n)register int i,f=1; for(i=1;i=n;i+)f=f*i; return(f);main()int i; for(i=0;iy?x:y; return(z);main()extern A,B; printf(%dn,max(A,B);int A=13,B=-8;&小结:1、外部变量(即全局变量),在 定义,作用域为 ;用extern声明后,该变量的作用域变为 。&总结:变量的种类作用域定义关键字备注局部变量/内部变量在 定义autoregister全局变量/外部变量在 定义?活动五:课堂测试 程序阅读题:int b=20; void fun1(int c) static int a=10;a=a+c;b=a+b;c=a+b;printf(%d,%d,%dn,a,b,c);main() int a=5, b=7,c=4;fun1(a);fun1(b);printf(%d,%d,%dn, a,b,c);第五节 自定义函数的简单应用?活动一:学习探索(目标用自定义函数实现程序的步骤)1、利用自定义函数实现思考:审题后,你首先思考的什么问题? 分析:程序:&小结:1、利用自定义函数实现程序的步骤:定 、定 、定 。2、确定功能的方法: 、 、 。3、确定参数的方法: 。?活动二:尝试运用(目标学会用自定义函数实现程序)1、程序填空题:输入一个年份,输出该年2月的天数。main() int year,day; scanf(%d,&year); ;printf(%d,day);int test(int y)2、以下函数的功能是计算s=1+1/2!+1/3!+1/n!,请填空。分析:程序:第六节 函数的嵌套调用?活动一:学习探索(目标掌握嵌套调用的含义)下列程序的功能:计算s=22!+32!long f1(int p) long r; long f2(int); /本行语句的功能: p=p*p; r=f2(p); return r; long f2(int q) long c; int i;return c; main() int i; long s=0; for (i=2;i=3;i+) s=s+f1(i); printf(ns=%ldn,s);分析上列程序,完成:(1) 使用的自定义了函数有: ;(2) 本程序中出现 次调用,分别为 ;(3) 在 函数中出现了嵌套调用,并在程序中用横线画出;(4) 函数f1中p,对于main(),它为 ;对于f2(),它为 ;&小结:1、嵌套调用: 。2、C程序中, 可嵌套定义, 可嵌套调用。?活动二:分析思考(目标掌握嵌套调用的执行过程)分析活动一中例题,完成:(1) 完善f2()函数。(2) 写出程序的执行过程:程序从 函数开始执行,调用 函数执行,再调用 函数执行,返回 ,再返回 ;&小结:3、画出嵌套调用的执行过程: main() a() b() a(); b(); ?活动三:课堂测试1、程序阅读题:int a=8,b=20; void fun1(int c) static int a=10;a=a+c;b=a+b;c=a+b;printf(%d,fun2(a);printf(%d,%d,%dn,a,b,c);int fun2(int c) c=(a+b)/c;return c;main() int a=5, b=7,c=4;fun1(a);fun1(b);printf(%d,%d,%dn, a,b,c);2、利用自定义函数完成:求一个二次方程ax2+bx+c=0的根(包括虚数根)int a,b,c;#includevoid plus() double r1,r2,der; der= ; r1= ; r2= ; printf(%lf,%lfn,r1,r2);void minus() double r,der; der= ; r= ; printf(“%lf+%lf*i,%lf-%lf*in,r,der,r,der);void zero() printf(the only result is %lf,-b/(2*a);double dereta(int a,int b,int c) return (b*b-a*a*c);void main()scanf(%d%d%d,&a,&b,&c); 第七节 函数的递归调用?活动一:学习探索(目标掌握递归调用的含义)观察下列函数: int f(int x) int y; z=f(y); return z; int f1(int x) int y; z=f2(y); return z; int f2(int x) int y; z=f1(y); return z;完成:(1)函数中,调用语句有 ;(2)函数中,调用语句有 ;(3)函数中均出现 。&小结:1、递归调用: 。2、种类: 、 ?活动二:思考分析(目标掌握递归调用的执行过程)(1)int f(int x) int z;z=f(+x); return z;main()printf(“%d”,f(2);描述出上列程序的执行过程: &小结:1、递归函数执

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论