任务6-2、多人协作完成一个任务_第1页
任务6-2、多人协作完成一个任务_第2页
任务6-2、多人协作完成一个任务_第3页
任务6-2、多人协作完成一个任务_第4页
任务6-2、多人协作完成一个任务_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

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

文档简介

1、C语言程序设计与项目实践清华大学出版社模块化与团队协作模块化程序设计项目6回顾函数的结构包括:返回值类型、函数名、参数列表、函数体函数的调用函数的参数传递目标 掌握变量的作用域范围 理解外部函数与内部函数预习检查 什么叫作用域 内部函数与外部函数项目任务任务任务6-2、多人协作完成一个任务、多人协作完成一个任务1、如何实现多人合作开发2、如何实现数据与函数的共享。变量的作用域与可见性 变量的作用域是指一个范围,是一个标识符在程序正文中有效地区域变量的作用域是指一个范围,是一个标识符在程序正文中有效地区域。从代码空间的角度考虑问题,它决定了变量的可见性变量的可见性。作用域有:函数原型作用域、块作

2、用域(局部作用域)、函数作用域(局部作用域)、文件作用域(全局作用域),根据变量的作用域范围,我们将变量分为局部变量(local variable)、全局变量(global variable)。 程序中变量也有不同的使用范围,称为变量的作用域。变量的作用域决定变量的可访问性变量的作用域void display() float discount; . . . . . . . . .局部变量:不能在函数外使用float discount;void main() . . . . . .void display() . . . . . .全局变量:可以在整个程序中使用局部变量所谓所谓“局部变量局部变量

3、”是指在一定范围内有效的变量是指在一定范围内有效的变量。在C语言中,在以下各位置定义的变量均属于局部变量,其作用域也不同。(1)、在函数体内定义的变量,在本函数范围内有效,即其作用域只局限在本函数体内。(2)、有参函数中的形式参数也是局部变量,只在其所在的函数范围内有效。(3)、在函数原型声明时形式参数的作用域范围就是函数原型作用域。(4)、在复合语句内定义的变量,仅在本复合语句范围内有效,也称为块作用域块作用域。int f2(int x) int y,z; double Area(double radius);void main() int s,a; int b; s=a+b; /*b作用域

4、*/ /*s,a作用域*/局部变量【例【例6-9】各函数局部变量同名的应用例子。】各函数局部变量同名的应用例子。void main() int i; /函数内的局部变量 i=5; int i; /定义局部变量,具有块作用域 i=7; printf(i=%dn,i); printf(i=%dn,i); printf(fun1:%d,i=%dn,fun1(i),i);/调用函数 fun2(i);/调用函数 printf(i=%dn,i); void fun2(int &i) /引用参数i int x=5; i=x*i;int fun1(int x) /x 值参 int i=5; /函数内局

5、部变量i i=x*i; return i;全局变量 全局变量声明在函数的外部,因此又称外部变量全局变量声明在函数的外部,因此又称外部变量,其作用域一般从变量声明的位置起,在程序源文件结束处结束。 全局变量作用范围最广,甚至可以作用于组成该程序的所有源文件。 当将多个独立编译的源文件链接成一个程序时,在某个文件中声明的全局或函数,在其他相链接的文件中也可以使用它们,但是用前必须进行extern外部声明。extern可以置于变量或者函数前。 全局变量与局部变量的比较#include void addNumbers() int m,n,sum; printf(n 请输入两个数:); scanf(%d

6、 %d,&m,&n); sum=num1+num2; printf( 子函数中 sum 的值是 %d n,sum);void main() int sum=0; addNumbers(); printf(n 主函数中 sum 的值是 %d n ,sum);内存内存summ045m请输入两个数:56 45子函数中sum的值是101主函数中sum的值是 056sum101全局变量与局部变量的比较#include int sum=0;void add()int m,n;printf(n 请输入两个数:);scanf(%d %d,&m,&n);sum=num1+num2

7、;printf( 子函数中 sum 的值是 %d n,sum);void main()addNumbers();printf(n 主函数中 sum 的值是 %d n ,sum);内存内存sumn045m请输入两个数:56 45子函数中sum的值是101主函数中sum的值是10156101可见性 我们从另一个角度-标识符的引用,来看变量的有效范围。即标识符的可见性。程序运行到某一点,能够引用到的标识程序运行到某一点,能够引用到的标识符,就是该处可见的标识符。符,就是该处可见的标识符。可见性表示从内存作用域向外层作用域可见性表示从内存作用域向外层作用域“看看”时能看到什么。因此,时能看到什么。因此

8、,可见性和作用域之间有密切的关系。可见性和作用域之间有密切的关系。文件的作用域最大,接下来依次是函数作用域和块作用域。如图文件的作用域最大,接下来依次是函数作用域和块作用域。如图6-7描述描述了作用域的一般关系了作用域的一般关系。可见性案例【案例【案例6-12】作用域与可见】作用域与可见性性int i=5,j=5; /全局变量,文件作用域void main() int i; /局部变量,函数级作用域。和全局变量同名,局部变量优先 i=10;/局部变量赋值 int i; /块级作用域,局部变量,与函数级作用域变量同名,块级变量优先 i=30; /给块级作用域变量赋值 coutblock i=ie

9、ndl; fun();/调用函数 coutlocal i=iendl; /输出函数级的局部变量 coutglobal j=jendl;/数据全局变量的值void fun() i=40; /给具有文件作用域的i赋值 coutglobal i=iendl;/ 数据全局变量的值变量的生存周期 变量的生存期取决于变量的存储方式。在生存期内,变量将保持它值不变,直到它被更新为止。在C语言中,变量的存储方式可分为:动态存储方式:是在程序运行期间根据需要进行动态的分配存储空间的方式。自动变量(auto)和寄存器型变量(register)属于动态存储方式.静态存储方式:是指在程序运行期间分配固定的存储空间的方

10、式。外部变量(extern)和静态变量(static)属于静态存储方式。存储类型 2-2动态存储方式 所谓“动态存储方式”指的是在程序运行期间根据需要为相关的变量动态分配存储空间的方式。 动态生存期变量诞生于声明点,结束于该标识符作用域结动态生存期变量诞生于声明点,结束于该标识符作用域结束处。束处。 变量的动态存储方式主要有自动型存储方式和寄存器型存储方式等两种形式 .动态存储方式(1)、自动型存储方式)、自动型存储方式(auto)自动型存储方式(auto)是C语言中使用最多的存储方式,也是系统默认的存储方式。由自动类型存储的变量也可称为自动变量。其中,auto为自动存储类别符,它可以省略。当

11、其缺省时默认为auto。自动变量定义的一般格式为:auto 类型说明符 变量名1,变量名2,;int x,y,z;auto int x,y,z;等价动态存储方式(2)寄存器型存储方式)寄存器型存储方式(register) 为了提高效率,C语言允许将局部变量的值放在CPU中的寄存器中,这种变量叫“寄存器变量”,用关键字register作声明。寄存器变量定义的一般格式为:register 类型说明符 变量名1,变量名2,;其中,register是寄存器型存储方式类别符,不可省略。register long sum;动态存储方式【例【例6-13】寄存器变量的应用例子。】寄存器变量的应用例子。void

12、 main() int num; long s; printf(Enter number); scanf(%d,&num); s=fun(num); printf(sum=%ldn,s);/fun函数中的形参n是寄存器存储的整型变量long fun(register int n) register long sum; /s是寄存器存储的长整型变量 for(sum=0;n;n-) sum+=n; return sum;静态存储方式 所谓“静态存储方式”指的是在程序编译时就给相关的变量分配固定的存储空间(即在程序运行的整个期间内都不变)的方式。 如果变量的生存期与程序运行期相同,我们就称如

13、果变量的生存期与程序运行期相同,我们就称其为静态生存期。其为静态生存期。静态存储方式(1)、静态存储的局部变量)、静态存储的局部变量由静态存储方式存储的局部变量也可称为静态局部变量。其中,static是静态型存储方式类别符,不可省略静态变量的定义格式为:static 类型说明符 变量名=初始化值,;static int a=10,b;静态局部变量的存储空间是在程序编译时由系统分配的,且静态局部变量的存储空间是在程序编译时由系统分配的,且在程序运在程序运行的整个期间都固定不变行的整个期间都固定不变静态局部变量的初值是在程序编译时一次性赋予的,即静态局部变量的初值是在程序编译时一次性赋予的,即在程

14、序运行期在程序运行期间不再赋初值间不再赋初值内存内存静态存储方式【例6-14】静态局部变量的应用例子。void main() int i=0; for (;i5; i+ ) print(); printf(n);void print() static int st = -1; / st为静态变量 st+;printf(s=%d , st); sti0-1静态存储方式(2)、静态存储的全局变量、静态存储的全局变量 在C语言中,全局变量的存储都采用静态存储方式全局变量的存储都采用静态存储方式。即在程序编译时就对相应的全局变量分配固定的存储单元,且在程序执行的全过程中始终保持不变。 全局变量赋初值的

15、方法同静态局部变量,即在程序编译时一次性完成。静态存储方式 静态全局变量是在全局变量定义时,在其最前面也可加上static关键字。静态全局变量只能用于本文件,不能被其他文件所引用,不加静态全局变量只能用于本文件,不能被其他文件所引用,不加static关键字声明的全局变量是可以被其他文件所引用的关键字声明的全局变量是可以被其他文件所引用的。这两种形式所定义的全局变量都是静态存储方式,只是作用范围不同而已。静态变量的定义格式为:static 变量类型 变量名; /* 在函数外定义 */静态存储方式 (3)外部变量)外部变量 外部变量和全局变量是对同一类变量的两种不同角度的提法。全局变量是从它作用域

16、方式提出的,外部变外部变量是从它的存储方式提出的,表示了它的生存周期。量是从它的存储方式提出的,表示了它的生存周期。静态存储方式【案例【案例6-15】在多个文件中声明全局变量】在多个文件中声明全局变量在一个工程中创建两个文件。/File2.cpp extern x; func(int a) x=x+a; /File1.Cpp1#include int x=1; func(int a); main( ) int i=3 ; func(i); printf(%dn,x); 变量的生存周期【例【例6-16】在一个文件中声明全局变量。】在一个文件中声明全局变量。int min(int a,int b)

17、;void main() extern gx,gy; /* 声明全局变量gx,gy */ printf(%dn,min(gx,gy);int gx=22,gy=11; /* 定义全局变量gx,gy */int min(int a,int b) int c; c=ab?a:b; return(c);内部函数和外部函数 C语言程序是由函数构成的。函数的本性是属于全局的(外部的)、通用的。也就是说,函数通常即可以被本文件中的各个函数所调用,也可以被其他文件中的函数所调用。如C语言所提供的库函数,任何用户的任何程序均可调用。 为了某种需求,也可以限定函数不能被其他文件中的函数所调用。 根据函数的使用范

18、围,可分为内部函数和外部函数。内部函数 所谓“内部函数”是指只能被本文件中的各个函数所调用,不能被其他文件中的函数所调用的一类函数而言。它们必须用static来说明(1)、内部函数又可称为静态函数。它的使用范围仅限于定义它的源程序文、内部函数又可称为静态函数。它的使用范围仅限于定义它的源程序文件内。对其他文件而言,它是屏蔽的、不可见的。因而,内部函数的保密件内。对其他文件而言,它是屏蔽的、不可见的。因而,内部函数的保密性很好。性很好。(2)、不同文件中的内部函数可以同名,因它们的作用范围不同,不会造成、不同文件中的内部函数可以同名,因它们的作用范围不同,不会造成混淆。混淆。(3)、内部函数的、

19、内部函数的static不可省略。不可省略。内部函数的定义格式为:static 函数类型说明符 函数名( 形式参数 ) 内部函数和外部函数【案例【案例6-17】外部函数的应用】外部函数的应用在一个工程中创建两个程序/fun.cppstatic long fact(int n) long f=1; int i; for (i=1;i=n;i+) f*=i; return f;extern long fun(int n) int i; long s=0; for (i=1;i=n;i+) s+=fact(i); return s;/File1.Cpp#includevoid main() extern long fun(int i); int n; printf(enter n:); scanf(%d,&n); printf(

温馨提示

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

评论

0/150

提交评论