




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1请将您的手机铃声
设置为震动
2实验讲义
1、阅读程序P573、修改程序P584、程序填空P59作业3函数的概念函数的定义函数的调用函数的嵌套函数的调用复习回顾4
方式:函数调用时才为形参分配单元,并将实参的值复制到形参单元值传递方式形参与实参占用不同的内存单元单方向传递函数的调用方式
特点:5#include<stdio.h>swap(inta,intb){inttemp;temp=a;a=b;b=temp;}main(){intx=7,y=11;
swap(x,y);printf("x=%d,\ty=%d\n",x,y);}例
值传递方式temp11x:y:
调用之前7a:b:711函数调用7117数据交换调用结束6方式:函数调用时,将数据的存储地址传递给形参特点:地址传递形参与实参占用同样的存储单元“双向”传递函数的调用方式7例
地址传递方式sort(inta[],intn){……}main(){…sort(x,10);….}x[0]x[1]x[2]…x[9]x=&x[0]a[0]a[1]a[2]…a[9]a=&a[0]10936852714123456789108函数的递归调用变量的作用区域变量的存储类别新课讲授9定义:函数在自身的定义中又调用自身的过程称为函数的递归调用函数的递归调用f()调f特点:1.在函数里调用自身;2.在使用递归策略时,必须有一个明
确的递归结束条件,称为递归出口。10longfac(intn){longf;if(n==1)f=1;elsef=n*fac(n-1);return(f);}
1(n=1)n!=
n*(n-1)!(n2)例用递归算法计算n!==11main()调用fac(3)打印fac(3)fac(2)3*fac(2)
⑩例函数的递归调用2*fac(1)fac(1)12*13*26#include"stdio.h"longfac(intn){longf;if(n==1)f=1;elsef=n*fac(n-1);return(f);}voidmain(){intn;longy;scanf("%d",&n);y=fac(n);printf("%ld",y);}12如何使用递归计算斐波那契数列?思考
1(n=1)
Fib(n)=1(n=2)
Fib(n)=Fib(n-1)+Fib(n-2)(n3)13变量的属性变量类型确定变量的存储长度和运算方式int、float、char、double…例
5/2=5/2.0=22.514变量的属性变量类型确定变量的存储长度和运算方式作用区域确定变量能被有效使用的范围全局变量、局部变量15变量的属性变量类型确定变量的存储长度和运算方式作用区域确定变量能被有效使用的范围确定变量能够生存的时间auto、static、register、extern存储类别16变量的属性变量类型确定变量的存储长度和运算方式作用区域确定变量能被有效使用的范围存储类别确定变量能够生存的时间17局部变量floatf1(inta){intb,c;…….}main(){intm,n;…….}a,b,c有效m,n有效变量的作用域定义:在函数内部定义的变量18变量的作用域说明:各局部变量只在本函数有效#include"stdio.h"intsum(){inta=100;returnx+a;}voidmain(){intx=10;printf("%d",sum());}errorC2065:'x':undeclaredidentifier局部变量定义:在函数内部定义的变量19变量的作用域形式参数也是局部变量#include"stdio.h"floatf1(inta){intb,c;…….}main(){….}说明:各局部变量只在本函数有效局部变量定义:在函数内部定义的变量a,b,c有效20变量的作用域各函数中同名变量是不同对象形式参数也是局部变量说明:各局部变量只在本函数有效局部变量定义:在函数内部定义的变量21a:xx#include"stdio.h"sub(){inta;a=6;printf("sub:a=%d\n",a);}main(){inta;a=3;
printf("main:a=%d\n",a);sub();printf("main:a=%d\n",a);}运行结果:main:a=3sub:a=6main:a=3例不同函数中的同名变量3a:xx622变量的作用域可在复合语句中定义有效变量各函数中同名变量是不同对象形式参数也是局部变量说明:各局部变量只在本函数有效局部变量定义:在函数内部定义的变量23#include"stdio.h"#defineN5main(){inti,a[N]={1,2,3,4,5};for(i=0;i<N/2;i++){
intt;t=a[i];a[i]=a[N-i-1];a[N-i-1]=t;
}for(i=0;i<N;i++)printf("%d\n",a[i]);}例复合语句中定义的变量t有效24下面程序最后是否能打印出t的值?#include"stdio.h"#defineN5main(){inti,a[N]={1,2,3,4,5};for(i=0;i<N/2;i++)
{
intt;t=a[i];a[i]=a[N-i-1];a[N-i-1]=t;
}
printf("%d\n",t);}errorC2065:'t':undeclaredidentifier思考25变量的作用域定义:在函数外部定义的变量全局变量#include"stdio.h"inta=3,b=5;max(intx,inty){return(x>y?x:y);}voidmain(){printf("%d",max(a,b));}局部变量定义:在函数内部定义的变量ab有效26作用范围从定义起到文件尾定义:在函数外部定义的变量全局变量变量的作用域说明:#include"stdio.h"intp=1;floatf1(inta){intb,c;
…….}intm=3;main(){…….}p有效m有效27作用范围从定义起到文件尾变量的作用域与局部变量同名时被屏蔽定义:在函数外部定义的变量全局变量说明:28#include"stdio.h"inta=3,b=5;max(intx,inty){intc;c=x>y?x:y;return(c);}main(){inta=8;
printf("%d",max(a,b));}例全局变量与局部变量同名被屏蔽829作用范围从定义起到文件尾变量的作用域与局部变量同名时被屏蔽定义:在函数外部定义的变量全局变量说明:3)未初始化初值为"0"
或'\0'#include"stdio.h"intc;main(){
printf("%d",c);}030作用范围从定义起到文件尾变量的作用域与局部变量同名时被屏蔽定义:在函数外部定义的变量全局变量说明:3)未初始化初值为"0"
或'\0'4)能够加强函数间数据联系31#include"stdio.h"intx[2]={1,2};voidswap(){intt;t=x[0];x[0]=x[1];x[1]=t;}voidmain(){swap();printf("x[0]=%d,",x[0]);printf("x[1]=%d",x[1]);}例全局变量的优点x[0]x[1]有效32作用范围从定义起到文件尾变量的作用域与局部变量同名时被屏蔽定义:在函数外部定义的变量全局变量说明:3)未初始化初值为"0"
或'\0'4)能够加强函数间数据联系降低程序清晰性,容易出错33变量的存储类别动态存储程序运行时根据需要动态分配存储空间静态存储程序运行时占据固定的存储空间不释放程序区静态存储区动态存储区形式参数、自动变量全局变量、静态变量34变量的存储类别自动存储#include"stdio.h"voidmain(){autointa,b;a=3;b=5;}定义:auto
类型名局部变量名;inta,b;35说明:函数内定义的局部变量为自动变量变量的存储类别max(intx,inty){intc;c=x>y?x:y;return(c);}自动存储定义:auto
类型名局部变量名;36变量的存储类别变量存储单元随函数的调用而取得#include"stdio.h"max(intx,inty){intz;z=x>y?x:y;return(z);}voidmain(){inta=3,b=5,c;c=max(a,b);printf("%d",c);}说明:函数内定义的局部变量为自动变量自动存储定义:auto
类型名局部变量名;max(intx,intyintz37变量的存储类别若变量未被赋值,则其初值不确定#include"stdio.h"voidmain(){intc;printf("%d",c);}变量存储单元随函数的调用而取得说明:函数内定义的局部变量为自动变量自动存储定义:auto
类型名局部变量名;38变量的存储类别寄存器存储定义:register
类型名局部变量名;fun(){registerinti;for(i=1;i<=100;i++)printf("%d",i*i);}39变量的存储类别变量存储单元分配在CPU寄存器中说明:只能定义有限数目的寄存器变量适用于同一变量频繁出现的地方局部静态变量不能定义为寄存器变量寄存器存储定义:register
类型名局部变量名;40变量的存储类别静态存储定义:static
类型名局部变量名;说明:程序执行时静态内部变量始终存在#include"stdio.h"add(){staticintz=0;z++;return(z);}voidmain(){intc;c=add();printf("%d",c);}41变量的存储类别变量仅仅在程序编译时被赋值一次静态存储定义:static
类型名局部变量名;说明:程序执行时静态内部变量始终存在42#include"stdio.h"voidinc(){intx=0;x++;printf("%d",x);}voidmain(){inc();inc();inc();}#include"stdio.h"voidinc(){staticintx=0;x++;printf("%d",x);}voidmain(){inc();inc();inc();}例动态与静态局部变量的区别11112343变量的存储类别变量不初始化自动赋以"0"
或'\0'#include"stdio.h"voidmain(){staticintc;printf("%d",c);}变量仅仅在程序编译时被赋值一次静态存储定义:static
类型名局部变量名;说明:程序执行时静态内部变量始终存在44变量的存储类别定义:extern
类型名全局变量名;说明:变量可被同程序中前面的函数引用#include"stdio.h"voidgx(){externintx;printf("2:x=%d\n",x);}intx;main(){printf("1:x=%d\n",x);x=100;gx();}外部存储1:x=02:x=10045变量的存储类别定义:extern
类型名全局变量名;说明:变量可被同程序中前面的函数引用外部存储变量被另外一个C源程序文件引用46intglobal;fun1(){intlocal; . .
.}file1.cexternintglobal;func2(){
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 节拍训练中的独特技巧乐理试题及答案
- 物理实效转化2025年试题及答案
- 如何解读创业扶持政策的新规试题及答案
- 绿色供应链在制造业中的绿色产品市场推广团队协作能力培养策略研究报告
- 河北单招全套试题及答案
- 教育直播平台2025年运营挑战与教育资源共享策略研究报告
- 农业灌溉用水高效利用与现代农业节水技术政策研究报告
- 量子通信技术在工业互联网平台中的数据加密与隐私保护预研报告
- 广东ps考证试题及答案解析
- 节水灌溉技术在农业中的应用成果鉴定报告2025
- 【MOOC】数据结构与算法-北京大学 中国大学慕课MOOC答案
- 农村社区体育课件
- 江苏省南通市2024-2025学年高一上学期11月期中英语试题(无答案)
- 2024年“头脑奥林匹克万人大挑战”题库
- 智研咨询发布:2025年中国金针菜(黄花菜)行业市场全景调查及投资前景预测报告
- 医院定岗定编方案
- 保健推拿操作技术规范 第3部分:小儿DB41-T 1782.3-2019
- AIGC视域下非遗文创产品的数字化转型升级路径研究
- 七年级英语上册全册单元检测题(附听力材料及答案)
- -摩擦磨损试验机结构设计
- 高处安装维护拆除作业课件-改
评论
0/150
提交评论