C语言电子教案第6章函数课件

PPT
  • 阅读 54 次
  • 下载 0 次
  • 页数 32 页
  • 大小 379.500 KB
  • 2022-11-13 上传
  • 收藏
  • 违规举报
  • © 版权认领
下载文档25.00 元 加入VIP免费下载
此文档由【小橙橙】提供上传,收益归文档提供者,本网站只提供存储服务。若此文档侵犯了您的版权,欢迎进行违规举报版权认领
C语言电子教案第6章函数课件
可在后台配置第一页与第二页中间广告代码
C语言电子教案第6章函数课件
可在后台配置第二页与第三页中间广告代码
C语言电子教案第6章函数课件
可在后台配置第三页与第四页中间广告代码
C语言电子教案第6章函数课件
C语言电子教案第6章函数课件
还剩10页未读,继续阅读
【这是免费文档,您可以免费阅读】
/ 32
  • 收藏
  • 违规举报
  • © 版权认领
下载文档25.00 元 加入VIP免费下载
文本内容

【文档说明】C语言电子教案第6章函数课件.ppt,共(32)页,379.500 KB,由小橙橙上传

转载请保留链接:https://www.ichengzhen.cn/view-7143.html

以下为本文档部分文字说明:

第6章函数•教学目标:•1.领会函数在C语言程序中的作用;•2.会运用函数调用的原则和参数传递方式;•3.会运用简单的递归算法;•4.能够分析C语言程序中变量的作用域和生存期。本章结构•概述•函数的定义•函数的参数和返回值•函数的调用

•数组作为函数参数•函数的嵌套调用•函数的递归调用•外部变量与内部变量•静态变量与自动变量•变量的存储类别•多文件程序的编译与连接6.1概述◆C语言程序是一种独特的模块结构,每个模块都是一个函数◆有且只能有一个名为main的主函数◆main可以调用

其他函数,但其他函数不能调用主函数自定义函数的作用函数分类:•从用户角度–主函数:名为main的函数–标准函数(库函数):由系统提供–用户自定义函数•从函数形式–无参函数–有参函数[类型标识符]函数名(形参列表)/*函数头*/{说

明部分/*函数体*/语句部分}例intmax(intx,inty){intz;z=x>y?x:y;return(z);}例无参函数printstar(){printf(―**********\n‖);}6.2函数定义的一般形式6.3函数参数和返回值6.3.1

形式参数与实际参数max(intx,inty){intz;Z=x>y?x:y;return(z);}main(){inta,b;a=2;b=3;Printf(“%d”,max(a,b));}实际参数形式参数•返回语句•形式:re

turn(表达式);或return表达式;或return;•功能:使程序控制从被调用函数返回到调用函数中,同时把返值带给调用函数•说明:−函数中可有多个return语句−若无return语句,遇}时,自动返回调用函数6.3.2函数的返回值f

loatarea(floata,floatb){floats;s=a*b;return(s);}•6.4.1函数调用的一般形式6.4函数的调用函数名(实参表)•函数语句:例printstar();prin

tf(“Hello,World!\n”);•函数表达式:例m=max(a,b)*2;•函数参数:例printf(“%d”,max(a,b));m=max(a,max(b,c));函数的调用方式•对被调用函数要求:−必须是已存在的函数−库函数

:#include<*.h>−用户自定义函数:函数类型说明•函数说明−一般形式:函数类型函数名(形参类型[形参名],…..);或函数类型函数名();−作用:告诉编译系统函数类型、参数个数及类型,以便检验−函数定义与函数说明不同−函数说明位置:程序的数据说明部分(函数内或外)−下列

情况下,可不作函数说明–若函数返值是char或int型,系统自动按int型处理函数说明•实参必须有确定的值•形参必须指定类型•形参与实参类型一致,个数相同•若形参与实参类型不一致,自动按形参类型转换——

—函数调用转换•形参在函数被调用前不占内存;函数调用时为形参分配内存;调用结束,内存释放函数参数说明(1)值传递:函数调用时,为形参分配存储单元,并将实参的值传送到形参中;调用结束时,形参单元释放,实参单元仍保留

并维持原值特点:①形参和实参占用不同的内存单元②单向传递参数传递方式(2)地址传递:函数调用时,将数据的存储地址作为参数传递给形参特点:①形参与实参占用同样的存储单元②实现了数据的“双向”传递③实参和形参必须是地址利用自定义函数计算:

1!+2!+…5!•fact(n)/*阶乘函数*/•{•inti,t=1;•for(i=1;i<=n;i++)•t=t*i;•return(t);/*返回阶乘值*/•}•main()•{•inti,sum=0;•for(i=1;i<=5;i++)•{sum=sum+fact(i);/

*调用阶乘函数,之后进行累加*/•printf("sum=%d\n",sum);•}}music(hz,t){inti;sound(hz);/*演奏音阶*/for(i=0;i<=t;i++)/*以延时形成节

拍*/delay(2000000000);nosound();}模拟电子琴键盘#include<stdio.h>#include<dos.h>#include<conio.h>#include<stdl

ib.h>main(){chari=1,j;inthz,t;while((i=getch())!='\x1b')/*Esc键退出演奏*/{switch(i){case’a':hz=262;break;case's':hz=294;break;c

ase'd':hz=330;break;case'f':hz=349;break;case'j':hz=392;break;case'k':hz=440;break;case'l':hz=494;break;ca

se';':hz=523;break;case'm':hz=523;break;case',':hz=523;break;case'.':hz=523;break;default:break;}if(kbhit()&&getch()=='

')t=20;elset=10;music(hz,t);}}69xy:调用前:调用结束:#include<stdio.h>swap(inta,intb){inttemp;temp=a;a=b;b=temp;}main(){intx=6,y=9;printf("x

=%d,\ty=%d\n",x,y);swap(x,y);printf("x=%d,\ty=%d\n",x,y);}调用:a:b:swap:temp交换两个变量的值:xy:69699696xy:69b:a:y:x结果:x=6y=96.5数组作为参数数

组作为参数时:实参数组的首地址传给形参sort(intb[])/*形参b长度不定*/{┇}{inta[11];┇sort(a);/*实参a长度11*/┇}首地址例6-9调用自定义排序函数对数组排序mai

n(){inti,a[11]={0};voidsort(intb[11]);for(i=1;i<=10;i++)scanf("%d",&a[i]);sort(a);printf("\n");for(i=1;i<=

10;i++)printf("%6d",a[i]);}/*输出已排序的数组a*//*调用*/voidsort(intb[11]){inti,j,t;for(i=1;i<=9;i++)for(j=2;j<=11-i;j++)if(b[j]>b[j-1]){t=b[j];b[j]=b[j-1];b

[j-1]=t;}for(i=1;i<=10;i++)printf("%6d",b[i]);}/*自定义函数中输出排序后的数组b*/6.6函数的嵌套主函数main()子函数fun1()子函数fun2()#include<stdio

.h>main(){inti,j,n,t,t1,t2,s[4][11];voidoutput(intscore[4][11]);for(i=1;i<=3;i++){printf("no.%d:1-10?",i);for(j=1;j<=10;j++)

scanf("%d",&s[i][j]);}for(n=1;n<=3;n++)for(i=1;i<=9;i++)for(j=2;j<=11-i;j++)if(s[n][j]>s[n][j-1]){t=s[n][j];s[n][j]=s[n][j-1];s

[n][j-1]=t;}output(s);}voidoutput(intcore[4][11]){inti,j;print_line();for(i=1;i<=3;i++){printf("\n|");for(j=1;j<=10

;j++)printf("%3d|",score[i][j]);printf("\n");print_line();}}print_line(){inti;for(i=1;i<=40;i++)putch('-');}6.7函数的递归调用实质:子函数自身的调用main(){longfact(i

nt),y;intn;printf("Entern(n>0):");scanf("%d",&n);y=fact(n);printf("%d!=%ld\n",n,y);}longfact(intn){longf;if(n==0|

|n==1)f=1;elsef=n*fact(n-1);return(f);}/*递归时如果没有“如果”,一定是错误的!*/6.8外部变量与内部变量内部变量(局部变量):在一个函数内部起作用外部变量(全局变量):从定义开始处直到程序结束6.8

.1外部变量的定义(1)在整个函数之前定义。如:floatx,y;floataverage(x,y){floataver;aver=(x+y)/2;return(aver);}(2)在整个函数之后定义

。如:floataverage(x,y){floataver;aver=(x+y)/2;return(aver);}floatx,y;(3)在函数体之前,函数头部。如:floataverage(x,y)floatx,y;{floataver;aver=(x+y)/2;return(a

ver);}6.8.2外部变量的作用范围intx=2;main(){voidprint();inta=x;printf("a=%dx=%d\n",a,x);print(a);printf("a=%dx=%d\n",a,x);}voidprint(inta){a+

+;x++;printf("a=%dx=%d\n",a,x);}运行结果:a=2x=2a=3x=3a=2x=3/*外部变量*//*a为内部变量*/6.9静态变量和自动变量静态变量:赋值后一直保留到程序结束。自动变量:每次调用值都

可能发生变化外部变量时静态变量;内部变量如果没有特殊说明都是自动变量静态变量的声明:如:staticinta=3;static类型名变量名;main(){voidprint();inta=2,b=2;st

aticintc=2;printf("a=%db=%dc=%d\n",a,b,c);print(a);print(a);printf("a=%db=%dc=%d\n",a,b,c);}/*a,b为自动

变量,只在main中有效*//*c为静态局部变量,只在main中有效*/voidprint(inta){intb=2;/*a,b为自动变量只在内部有效*/staticintc=2;/*c为静态局部变量,只

在内部有效*/a++;b++;c++;printf("a=%db=%dc=%d\n",a,b,c);}a=2b=2c=2a=3b=3c=3a=3b=3c=4a=2b=2c=26.10变量的存储类别auto:内部变量没有特别声明时register:存取速度极快,但数量有限static:外部变量为静态

变量extern:可作特别说明6.11内部函数与外部函数内部函数:仅在文件内部调用用static定义。如:staticfunc1(inta,intb){}外部函数:可在多个文件中调用用exturn定义。如:exturnfunc2(intx,inty){}本章小结•1.学会自定义函数

的编写和函数的相互调用关系,是程序设计的基本技能。函数之间是通过函数名和参数来建立联系的。•2.主调函数调用其它函数时提供的参数称为实在参数,被调函数中的参数称为形式参数。函数调用时,主调函数将实在参数传递给形式参数。•3.当被调用的函数又调用另一个函数时

,就出现了函数的嵌套调用。而当一个函数又调用自身的功能时,就出现了递归调用。•4.程序中的变量作用范围是不同的。当一个变量在几个函数中或整个程序中都有效时,就称为全局变量。当一个变量仅在一个函数内部有效时,就称为局部变量,也称为内部变量。•5.au

to型变量所占存储单元在退出函数时释放;static型变量所占存储单元要到程序结束才释放。•6.所有函数可以构成一个源程序文件,也可以构成多个源程序文件。无论有几个源程序文件,最终都要生成一个可执行文件。

小橙橙
小橙橙
文档分享,欢迎浏览!
  • 文档 25747
  • 被下载 7
  • 被收藏 0
相关资源
广告代码123
若发现您的权益受到侵害,请立即联系客服,我们会尽快为您处理。侵权客服QQ:395972555 (支持时间:9:00-21:00) 公众号
Powered by 太赞文库
×
确认删除?