函数及变量的作用域课件.ppt

上传人(卖家):三亚风情 文档编号:3348101 上传时间:2022-08-22 格式:PPT 页数:64 大小:1.08MB
下载 相关 举报
函数及变量的作用域课件.ppt_第1页
第1页 / 共64页
函数及变量的作用域课件.ppt_第2页
第2页 / 共64页
函数及变量的作用域课件.ppt_第3页
第3页 / 共64页
函数及变量的作用域课件.ppt_第4页
第4页 / 共64页
函数及变量的作用域课件.ppt_第5页
第5页 / 共64页
点击查看更多>>
资源描述

1、第四讲函数及变量的作用域函数及变量的作用域第1页,共64页。第2页,共64页。第3页,共64页。即函数返回值的类型。无返回值为void类型语句序列。描述了实现功能的过程,并一般要最后执行一条return语句。可包含多个形式参数。定义了函数将从调用函数中接收多少个数据及其类型第4页,共64页。第5页,共64页。即所有参数的数据类型第6页,共64页。注注 意意第7页,共64页。#include void f1();/函数说明void f2();void main()f1();/函数调用 f2();void f1()/函数定义 cout Function f1.n;f2();void f2()cou

2、t Function f2.n;main()f1()f2()第8页,共64页。第9页,共64页。第10页,共64页。第11页,共64页。函数声明函数声明调用表达式调用表达式函数定义函数定义实参的个数、类型及顺序要与形参保持一致形式参数实际参数第12页,共64页。第13页,共64页。有时也称:第14页,共64页。#include#include void swap(void swap(int,intint,int););void main()void main()int int a=3,b=5;a=3,b=5;coutbefore swap:a=a,b=bendl;coutbefore swap

3、:a=a,b=bendl;swap(swap(a,ba,b););coutafter swap:a=a,b=bendl;coutafter swap:a=a,b=bendl;void swap(void swap(int a,int bint a,int b)int temp;int temp;temp=a;a=b;b=temp;temp=a;a=b;b=temp;coutin swap:a=a,b=bendl;coutin swap:a=a,b=bendl;第15页,共64页。调用swap时,内存单元分配情况:353ababtemp 实参 形参3535实参形参35过程调用中35过程调用后te

4、mp=a;a=b;b=temp;第16页,共64页。第17页,共64页。#include#include void swap(void swap(int int*,int,int*););void main()void main()int int a=3,b=5;a=3,b=5;coutbefore swap:a=a,b=bendl;coutbefore swap:a=a,b=bendl;swap(swap(&a,&ba,&b);/);/实参为变量地址 coutafter swap:a=a,b=bendl;coutafter swap:a=a,b=bendl;void swap(void sw

5、ap(int int*a,int a,int*b b)/)/形参为指针类型 int temp;int temp;temp=temp=*a;a;*a=a=*b;b;*b=temp;/b=temp;/注意引用方式 coutin swap:a=a,b=bendl;coutin swap:a=a,b=bendl;第18页,共64页。调用swap时,内存单元分配情况:35353过程调用后 形参ababtemp 实参3510012008实参形参2008100120081001过程调用中35temp=*a;*a=*b;*b=temp;第19页,共64页。第20页,共64页。#include void swa

6、p(int&,int&);void main()int a=3,b=5;coutbefore swap:a=a,b=bendl;swap(a,b);/实参为变量名 coutafter swap:a=a,b=bendl;void swap(int&a,int&b)/形参为引用类型 int temp;temp=a;a=b;b=temp;/注意区别 coutin swap:a=a,b=bendl;第21页,共64页。调用swap时,内存单元分配情况:35353过程调用后 形参ababtemp 实参35实参形参20081001过程调用中35temp=a;a=b;b=temp;第22页,共64页。第23

7、页,共64页。#include#include int add(int x,int y);int add(int x,int y);/函数声明函数声明 void main()void main()int a=4,b=6;int a=4,b=6;int z=add(int z=add(+a,a+b+a,a+b);/);/从左至右为从左至右为5 115 11 coutzendl;/coutzendl;/从右至左为从右至左为5 105 10 int add(int x,int y)int add(int x,int y)/函数定义(实现)函数定义(实现)return x+y;return x+y;第

8、24页,共64页。第25页,共64页。第26页,共64页。第27页,共64页。#include void invert(char b,int n);void main()char s60;int n;couts;cout字符串原始顺序:sendl;n=strlen(s);invert(s,n);cout字符串反转后的顺序:sendl;void invert(char b,int n)for(int i=0;in/2;i+)char c=bi;bi=bn-1-i;bn-1-i=c;S0S1S2S3S4输入一字符串个数,反序存放并输出输入一字符串个数,反序存放并输出不能写成invert(sn,n)

9、有问题吗?第28页,共64页。第29页,共64页。#include void invert(char*b,int n);void main()char s60;int n;/char*p=s;couts;cout字符串原始顺序:sendl;n=strlen(s);invert(s,n);/invert(p,n);cout字符串反转后的顺序:sendl;void invert(char*b,int n)for(int i=0;in/2;i+)char c=*(b+i);*(b+i)=*(b+n-1-i);*(b+n-1-i)=c;输入一字符串个数,反序存放并输出输入一字符串个数,反序存放并输出第

10、30页,共64页。第31页,共64页。#include typedef char arr60;/先用类型定义一个char型的数组类型void invert(&b,int n);void main()char s60;int n,*p=s;coutp;cout字符串原始顺序:sendl;n=strlen(s);invert(s,n);cout字符串反转后的顺序:sendl;void invert(arr&b,int n)for(int i=0;iy)?x:y);double max(double x,double y)return(xy)?x:y);#include void main()cou

11、tmax(10,20)endl;coutmax(1.23,2.34)endl;靠将实参的个数及类型和所被调用的f()函数的形参的个数及类型一一比较来判断。第39页,共64页。()作为重载函数至少在参数个数、参数类型上有所不同。若仅在返回类型上不同,编译器是无法区别的。如:void func(int);int func(int);void func(int);int func(int);/错误 int min(int,int);int min(int,int);int min(int,int,int);int min(int,int,int);/正确 int add(int,int);int a

12、dd(int,int);double add(double,double);double add(double,double);/正确()typedef定义的类型只是给已有类型取另外一个名字,编译器不能将其同原类型区分。如:typedef INT int;typedef INT int;void func(int x).void func(int x).void func(INT x)void func(INT x)(3)重载函数一般应具有相同的功能,否则会破坏程序的可读性。第40页,共64页。第41页,共64页。第42页,共64页。#include#include const int k=4

13、;const int k=4;constconst int n=6;int n=6;/符号常量定义符号常量定义int power(int,int);int power(int,int);/求幂的函数说明求幂的函数说明int sum(int,int);int sum(int,int);/求和的函数说明求和的函数说明void main()void main()coutSum of coutSum of=;=;coutsum(k,n)endl;coutsum(k,n)endl;/调用调用sumsum函数函数 第43页,共64页。int sum(int k,int n)int sum(int k,in

14、t n)/*计算计算1 1到到n n的的k k次方之累加和次方之累加和*/int s=0;int s=0;for(int i=1;i=n;i+)for(int i=1;i=n;i+)s+=power(i,k);s+=power(i,k);/累加累加 return s;return s;/调用调用f1f1函数函数 int power(int m,int n)int power(int m,int n)/*计算计算mm的的n n次方次方*/int p=1,i;int p=1,i;for(i=1;in;i+)p for(i=1;i1三、调用函数本身,但参数值趋于结束条件一、有一个使递归结束的条件二、

15、当条件成立时,不再调用自己,而有确定值第45页,共64页。s:=fac(3)主程序fac(3):=fac(2)*3n=3fac(2):=fac(1)*2n=2fac(1):=1n=1fac:=6fac:=2fac:=1第46页,共64页。第47页,共64页。第48页,共64页。第49页,共64页。在不同作用域中允许同名。在同一作用域中不允许同名。蓝色为函数作用域绿色为块作用域不为x x的原因是局局部优先部优先4 5 4 5 4 505第50页,共64页。第51页,共64页。#includeint i(5);/外部变量外部变量externstatic int j(6);/外部静态变量外部静态变量

16、void min(int x,int y)/形参形参 int i(3);/自动变量自动变量 auto register int j(2);/寄存器变量寄存器变量 static int k(1);/内部静态变量内部静态变量 void main()局部变量全局变量蓝色为文件作用域绿色为函数作用域注意:同名时是局部优先第52页,共64页。分析程序结果分析程序结果int a(5),b(7),c(10);coutatbtcendl;coutatbtcendl;int b(8);double c(8.8);coutatbtcendl;a=b;int c;c=b;coutatbtcendl;coutatbt

17、cendl;coutatbtcendl;5 7 105 7 105 8 8.85 8 8.88 8 88 8 88 7 108 7 108 8 8.88 8 8.8第53页,共64页。第54页,共64页。第55页,共64页。输入输入15个数,用函数求和与平均值个数,用函数求和与平均值void main()double a15,s(0),ave(0);for(int i=0;i15;i+)cout输入第(i+1)ai;for(i=0;i15;i+)s+=ai;ave=s/15;cout和:sendl;cout平均值:aveendl;sum(15)ave(15)第56页,共64页。double s

18、um(int x);/函数声明double ave(int x);/函数声明double a15,s(0);/全局变量void main()for(int i=0;i15;i+)cout输入第(i+1)ai;cout和:sum(15)endl;/函数调用 cout平均值:ave(15)endl;第57页,共64页。double sum(int x)/求和函数的定义 for(i=0;ix;i+)s+=ai;return s;double ave(int x)/求平均值函数的定义 return s/x;第58页,共64页。数组排序冒泡法数组排序冒泡法第一轮第一轮 B D C A E原数据原数据 B

19、 E D C A第三轮第三轮 B A C D E第二轮第二轮 B C A D E第四轮第四轮 A B C D E 4 3 2 1结论:轮数结论:轮数(外循环外循环)为为:n-1,每轮次数每轮次数(内循环内循环)为为:n-i第59页,共64页。void main()const int N=6;int bN=89,3,56,44,12,99;for(int i=1;iN;i+)/控制轮数 for(int j=0;jbj+1)/如果交换两数 /输出排序后数组 for(int k=0;kN;k+)coutbkt;第60页,共64页。int a10=8,5,7,8,3,5,6,1,9,1,n=10;fo

20、r(i=0;i10;i+)for(j=i+1;jm;/输入int sqrtm=sqrt(m);for(int I=2;I=sqrtm;I+)if(m%I=0)/若能被某数整除 flag=0;/标志置0,并终止循环 break;else /否则标志置1,flag=1;if(flag)/如果全部比较后标志为1则是素数coutm is prime.n;else coutm isnt prime.n;判断一个数是否素数?判断一个数是否素数?第62页,共64页。int a10=8,5,7,8,3,5,6,1,9,1,b10,n=10;int i,j,flag,k=0;for(i=0;in;i+)flag

21、=0;/用标志可简化编程 for(j=i+1;jn;j+)if(ai=aj)/若元素重复 flag=0;break;/置标志为0,并终止比较 elseflag=1;if(flag)/若比较一轮无重复 bk=ai,k+;/把此元素放入b /并使个数加1输入输入10个数,去除重复值后排序个数,去除重复值后排序第63页,共64页。本讲作业本讲作业1、编程求出50至100之内所有素数之和(计算素数要求调用函数实现);2、设定数组的10个元素(有重复)并输出,调用函数(数组名作参数)去除数组重复值,再调用函数(数组名作参数)对无重复元素的数组排序,输出排序后的各元素;3、用函数重载的方式实现两个数的四则运算;第64页,共64页。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(函数及变量的作用域课件.ppt)为本站会员(三亚风情)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|