版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 研究式学习研究式学习C程序设计(第二章)程序设计(第二章) 研究式学习研究式学习C程序设计(第五章)程序设计(第五章)1第五章第五章2 2函数的嵌套调用函数的嵌套调用变量的存储类型变量的存储类型编译预处理编译预处理 研究式学习研究式学习C程序设计(第二章)程序设计(第二章) 研究式学习研究式学习C程序设计(第五章)程序设计(第五章)2上讲内容回顾上讲内容回顾函数的概念函数的概念函数的定义及调用函数的定义及调用函数的返回值函数的返回值函数的参数及其传递方式函数的参数及其传递方式 研究式学习研究式学习C程序设计(第二章)程序设计(第二章) 研究式学习研究式学习C程序设计(第五章)程序设计(第五章
2、)3本讲本讲主要内容主要内容函数的嵌套调用函数的嵌套调用变量的存储类型变量的存储类型全局量和局部量全局量和局部量内部函数和外部函数内部函数和外部函数编译预处理编译预处理程序的组合(自学)程序的组合(自学)标准库函数(自学)标准库函数(自学) 研究式学习研究式学习C程序设计(第二章)程序设计(第二章) 研究式学习研究式学习C程序设计(第五章)程序设计(第五章)4 C C语言中的函数定义是互相独立的,函数和函语言中的函数定义是互相独立的,函数和函数之间没有从属关系,一个函数既可以被其它函数之间没有从属关系,一个函数既可以被其它函数调用,也可以调用别的函数,这就是数调用,也可以调用别的函数,这就是m
3、ain()调用调用f1()函数函数f1()调用调用f2()函数函数f2() 研究式学习研究式学习C程序设计(第二章)程序设计(第二章) 研究式学习研究式学习C程序设计(第五章)程序设计(第五章)5例例5_95_9int f1(int a,intint f1(int a,int b)/ b)/* *定义定义f1f1函数函数* */ / intint c; c; a+=a;b+=b; a+=a;b+=b; c= c=f11(a,b);f11(a,b); / /* *调用调用f11f11函数函数* */ / return creturn c* *c;c; int f11(int a,intint f
4、11(int a,int b) / b) /* *定义定义f11f11函数函数* */ / intint c; c; c=a c=a* *b%3;b%3; return c; return c; main()main() int int x=11,y=19; x=11,y=19; printfprintf(“%dn”,f1(x,y)(“%dn”,f1(x,y); /; /* *调用调用f1f1函数函数* */ / a=22,b=38c=22*38%3=836%3=2运行结果:运行结果:4 研究式学习研究式学习C程序设计(第二章)程序设计(第二章) 研究式学习研究式学习C程序设计(第五章)程序设
5、计(第五章)6例例5_12 5_12 利用全局变量来写一个函利用全局变量来写一个函数,送入圆的半径数,送入圆的半径r r后,得到圆的后,得到圆的面积及圆的周长的程序。面积及圆的周长的程序。float clfloat cl;/;/* *定义全局变量定义全局变量c1c1* */ /float careafloat carea(float r)(float r)float arfloat ar; ; ar ar=3.14=3.14* *r r* *r;r; clcl=2=2* *3.143.14* *r;r;return arreturn ar; ; main()main()float r,area
6、;float r,area; printf printf(“r=?”);(“r=?”); scanf scanf(“%f”,&r);(“%f”,&r);area=careaarea=carea(r);(r); printf(“r=%5.2f,caprintf(“r=%5.2f,carae=%5.2f,clrae=%5.2f,cl=%5.2f=%5.2fn”,r,area,n”,r,area,clcl); ); 程序运行结果:程序运行结果:r=?3 r=?3 r= 3.00,caraer= 3.00,carae=28.26,c1=18.84=28.26,c1=18.84 研究式学
7、习研究式学习C程序设计(第二章)程序设计(第二章) 研究式学习研究式学习C程序设计(第五章)程序设计(第五章)7intint p=1,q=5;/ p=1,q=5;/* *定义外部变量定义外部变量 * */ /float f1(intfloat f1(int a) / a) /* *定义定义f1f1函数函数 * */ / intint b,c; b,c; char c1,c2; /char c1,c2; /* *定义外部变量定义外部变量 * */ /char f2(intchar f2(int x) / x) /* *定义定义f2f2函数函数 * */ / intint b,j; b,j; ma
8、in()/main()/* *主函数主函数 * */ / intint m,n; m,n; P,q作用域作用域 C1,c2作用域作用域局部变量(函数体内定义)局部变量(函数体内定义)作用域仅仅局限作用域仅仅局限于定义它的函数,在不同的函数内可以于定义它的函数,在不同的函数内可以定义同名的局部变量(定义同名的局部变量(f1f1、f2f2函数都有变量函数都有变量b b)全局变量(函数体外定义)全局变量(函数体外定义) :作用域从它定作用域从它定义的位置开始到本源文件结束,变量名不能重。义的位置开始到本源文件结束,变量名不能重。(c1,c2c1,c2的作用范围小)的作用范围小) 研究式学习研究式学习
9、C程序设计(第二章)程序设计(第二章) 研究式学习研究式学习C程序设计(第五章)程序设计(第五章)8问题:通过问题:通过5 5次函数调用打印次函数调用打印1 1到到5 5的阶乘值。的阶乘值。1!=1,1!=1,在在1!1!的基础上再乘的基础上再乘2,2,就得就得2!(2!=1!2!(2!=1!* *2), 2), 在在2!2!的基础的基础上再乘上再乘3,3,就得就得3!(3!=2!3!(3!=2!* *3),3), ,int fact(intint fact(int x) x) staticstatic int int t=1; t=1; t t* *=x;=x; return t; retu
10、rn t; main()main()intint i; i;for(i=1;i=5;i+)for(i=1;i=5;i+) printfprintf(“%d!=%dn”i,fact(i)(“%d!=%dn”i,fact(i);); 程序运行结果为:程序运行结果为:1!=11!=12!=22!=23!=63!=64!=244!=245!=1205!=120函数必须能保存函数必须能保存上一次的阶乘值上一次的阶乘值! ! 研究式学习研究式学习C程序设计(第二章)程序设计(第二章) 研究式学习研究式学习C程序设计(第五章)程序设计(第五章)9一个变量的完整定义形式为:一个变量的完整定义形式为: 存储类型
11、说明符存储类型说明符 数据类型说明符数据类型说明符 变量表变量表如:如:static int j; extern float x 等等 定义变量时不但要说明变量的数据类型,还要定义变量时不但要说明变量的数据类型,还要说明变量的存储类型。变量的存储类型确定了变量说明变量的存储类型。变量的存储类型确定了变量的存储方式、生存期和作用域。的存储方式、生存期和作用域。作用域:作用域:是指变量起作用的有效范围。按变量的作是指变量起作用的有效范围。按变量的作用域可以把变量分为全局变量和局部变量。用域可以把变量分为全局变量和局部变量。生存期:生存期:是指变量占用存储空间的时限。按变量的是指变量占用存储空间的时
12、限。按变量的生存期可以把变量分为静态变量和动态变量。生存期可以把变量分为静态变量和动态变量。 研究式学习研究式学习C程序设计(第二章)程序设计(第二章)10 研究式学习研究式学习C程序设计(第五章)程序设计(第五章)10存储类型说明符有:存储类型说明符有:Auto( (自动自动) )型型:属于临时性存储,其存储空间可属于临时性存储,其存储空间可以被若干变量多次覆盖使用以被若干变量多次覆盖使用register( (寄存器寄存器) )型型( (一般情况下不这样指定一般情况下不这样指定) )* *存放在存放在CPUCPU的通用寄存器中的通用寄存器中, ,目的是提高执行速度目的是提高执行速度*long
13、,double,float不能设为不能设为register型,因为超过型,因为超过寄存器长度寄存器长度static( (静态静态) )型:型:存放在静态存储区域中存放在静态存储区域中, ,生命期生命期长长extern( (外部外部) )型:型:用于定义或说明变量是外部的用于定义或说明变量是外部的。 研究式学习研究式学习C程序设计(第二章)程序设计(第二章)11 研究式学习研究式学习C程序设计(第五章)程序设计(第五章)11程序代码区程序代码区静态存储区静态存储区动态存储区动态存储区*存放可执行程序的机器指令存放可执行程序的机器指令*存放需要占用固定存储单元的变量存放需要占用固定存储单元的变量*
14、存放不需要占用固定存储单元的变量存放不需要占用固定存储单元的变量C语言程序所占用的存储空间通常分为三部分语言程序所占用的存储空间通常分为三部分: 全局变量或静态变量存放在静态存储区中,全局变量或静态变量存放在静态存储区中,直到整个程序运行结束时才释放存储单元;局部直到整个程序运行结束时才释放存储单元;局部变量或自动变量存放在动态存储区中,函数调用变量或自动变量存放在动态存储区中,函数调用结束时就释放存储单元结束时就释放存储单元。 研究式学习研究式学习C程序设计(第二章)程序设计(第二章)12 研究式学习研究式学习C程序设计(第五章)程序设计(第五章)12自动变量的使用:自动变量的使用:#在函数
15、内定义的变量,若没有指定存储类型就是自动在函数内定义的变量,若没有指定存储类型就是自动类存储变量类存储变量#自动变量是在动态存储区内分配单元的。调用函数时自动变量是在动态存储区内分配单元的。调用函数时分配这些单元,返回时释放这此单元分配这些单元,返回时释放这此单元#自动变量在每调用一次时都赋一次值,且默认初值不自动变量在每调用一次时都赋一次值,且默认初值不确定确定void test_auto()int va=0;printf(“auto=%d,”,va);+va; /*值不被保存值不被保存*/main()int i; for(i=0;i2;i+) test_auto();va为自动变量,运行结
16、果:为自动变量,运行结果:auto=0,auto=0, 研究式学习研究式学习C程序设计(第二章)程序设计(第二章)13 研究式学习研究式学习C程序设计(第五章)程序设计(第五章)13void test_static()static int vs=0;printf(“static=%dn”,vs);+vs;main()int i; for(i=0;i4;i+) test_static();运运 行行*静态局部变量是在静态存储区分配存储单元的,调用结束后其静态局部变量是在静态存储区分配存储单元的,调用结束后其值不消失,但其它函数仍然不能访问值不消失,但其它函数仍然不能访问*静态局部变量是在编译过程
17、中赋初值的,且只赋一次初值。多静态局部变量是在编译过程中赋初值的,且只赋一次初值。多次调用时,上一次调用的结果就是下一次调用的初值次调用时,上一次调用的结果就是下一次调用的初值调用次数调用次数vs初值初值vs结束值结束值1 2 3 4 0 1 2 31 2 3 4 研究式学习研究式学习C程序设计(第二章)程序设计(第二章)14 研究式学习研究式学习C程序设计(第五章)程序设计(第五章)14extern int i;int x,y;static float f;main()extern int k; char ch; int k;void fc()int v; 外部变量:外部变量:没有说明为没有
18、说明为static的全局变量,它使得一个的全局变量,它使得一个文件引用另外一个文件中定义的外部变量成为可能文件引用另外一个文件中定义的外部变量成为可能* i 是其它源程序文件定义的变量,引是其它源程序文件定义的变量,引用时必须在本程序的开头所有函数外用时必须在本程序的开头所有函数外用用extern语句说明语句说明*x、y是外部变量,可在本源程序或其是外部变量,可在本源程序或其它源程序中被引用它源程序中被引用*f是静态外部变量,只能在本源程序是静态外部变量,只能在本源程序中引用,而不能被其它文件访问中引用,而不能被其它文件访问*k是外部变量,在是外部变量,在main()后定义,要后定义,要在主函
19、数中引用,需用在主函数中引用,需用extern说明说明*x,y,i,k,f都是全局量,都是全局量,x,y,k是定义在本是定义在本文件的全局变量,作用域为定义之后文件的全局变量,作用域为定义之后,i是定义在其他文件中的全局变量,是定义在其他文件中的全局变量,必须用必须用extern 说明,才能使用。说明,才能使用。f是其是其他文件不得引用的静态全局变量。他文件不得引用的静态全局变量。*v是局部变量,其作用域为是局部变量,其作用域为fc()函数中函数中*ch是局部变量,其作用域为主函数中是局部变量,其作用域为主函数中注意:注意:1.全局变量分为外部变量和静态变量全局变量分为外部变量和静态变量2.e
20、xtern能用于说明变量,也能用于定能用于说明变量,也能用于定义变量义变量3.所有全局量都是在静态存储区分配存所有全局量都是在静态存储区分配存储单元的,其默认的初值为储单元的,其默认的初值为0 研究式学习研究式学习C程序设计(第二章)程序设计(第二章)15 研究式学习研究式学习C程序设计(第五章)程序设计(第五章)15使用外部变量时应注意以下问题:使用外部变量时应注意以下问题:uu 在同一个源程序文件中使用外部变量时,如果使在同一个源程序文件中使用外部变量时,如果使用在前,定义在后,必须用用在前,定义在后,必须用externextern进行引用性声明。进行引用性声明。uu 使用另一个源程序文件
21、中定义的外部变量,必须使用另一个源程序文件中定义的外部变量,必须用用externextern声明后,才能使用。声明后,才能使用。uu 当全局变量和局部变量名相同时,在局部变量的当全局变量和局部变量名相同时,在局部变量的作用范围内,局部变量起作用,全局变量被屏蔽作用范围内,局部变量起作用,全局变量被屏蔽 研究式学习研究式学习C程序设计(第二章)程序设计(第二章)16 研究式学习研究式学习C程序设计(第五章)程序设计(第五章)16使用全局变量传递数据使用全局变量传递数据* *在所有函数之外说明的变量是全局变量,它在所有函在所有函数之外说明的变量是全局变量,它在所有函数中都是可见的。数中都是可见的。
22、* *利用全局变量这个特性,可以在函数间传递多个数据利用全局变量这个特性,可以在函数间传递多个数据int a;main()a=100; printf(“a in main is %dn”,a); printf(“a*a in func is %dn”,func();int func()printf(“a in func is %dn”,a); return(a*a);a是全局量,作用域为本程序文件是全局量,作用域为本程序文件运运 行行程序运行结果:程序运行结果:a in main is 100a in func is100a*a in func is 10000 研究式学习研究式学习C程序设计
23、(第二章)程序设计(第二章)17 研究式学习研究式学习C程序设计(第五章)程序设计(第五章)17内部函数和外部函数内部函数和外部函数内部函数内部函数: :也称为静态函数,只能在定义它的程序也称为静态函数,只能在定义它的程序文件中被调用,而不能被其它文件中的函数所调用。文件中被调用,而不能被其它文件中的函数所调用。* *定义形式为:定义形式为: static 类型标识符类型标识符 函数名函数名( (形参表形参表) )外部函数:外部函数:除了内部函数,其余的函数都可以为除了内部函数,其余的函数都可以为其它文件调用其它文件调用* *定义形式:定义形式: extern 类型标识符类型标识符 函数名函数
24、名( (形参表形参表) )* *extern缺省时隐含为外部函数,调用文件中也要缺省时隐含为外部函数,调用文件中也要用用extern说明说明file1.c(文件文件1)#include “stdio.h”main()extern string(),print(); static char str80; string(str); print(str);file2.c(文件文件2)extern string(char str80 )gets(str);file3.c(文件文件3)extern print(char str80)printf(“%s”,str);用外部函数输入字符串的值用外部函数输入
25、字符串的值用外部函数输出字符串的值用外部函数输出字符串的值语句末不能加分号语句末不能加分号可缺省可缺省不可缺省不可缺省 研究式学习研究式学习C程序设计(第二章)程序设计(第二章)18 研究式学习研究式学习C程序设计(第五章)程序设计(第五章)18运运 行行编程编程:输入输入100个整数个整数,把其中最大值和最小值显示出来把其中最大值和最小值显示出来int max,min;void find(a,n)int a,n;int i; max=min=a0; for(i=1; imax)max=ai; if(aimin)min=ai;main()int d100,i; for(i=0;i100;i+)
26、 scanf(“%d”,&di); find(d,100); printf(“Max=%d,”,max); printf(“Min=%dn”,min); 研究式学习研究式学习C程序设计(第二章)程序设计(第二章)19 研究式学习研究式学习C程序设计(第五章)程序设计(第五章)19编译预处理编译预处理文件包括文件包括文件包含:文件包含:是指一个源文件可以将另外一个指定的源文是指一个源文件可以将另外一个指定的源文件包括进来。其一般形式为:件包括进来。其一般形式为:# #include * *编译系统按系统设定的标准目录搜索包括文件编译系统按系统设定的标准目录搜索包括文件或或 # #incl
27、ude 包括文件路径名包括文件路径名 * *编译系统按指定路径搜索编译系统按指定路径搜索* *未指定路径名时,首先在当前目录中搜索未指定路径名时,首先在当前目录中搜索* *找不到时再按系统设定的标准目录搜索包括文件找不到时再按系统设定的标准目录搜索包括文件例如例如:#include “stdio.h” #include #include “file1.c”功能是用相应文件中的全部功能是用相应文件中的全部内容来替换该预处理语句内容来替换该预处理语句编译预处理:编译预处理:是是C语言区别于其它高级语言的一个重要语言区别于其它高级语言的一个重要特点。预处理程序是特点。预处理程序是C语言编译系统的组成
28、部分,它负语言编译系统的组成部分,它负责分析和处理程序中使用的几种预处理语句。预处理程责分析和处理程序中使用的几种预处理语句。预处理程序对预处理语句的处理是在编译程序的其它部分处理之序对预处理语句的处理是在编译程序的其它部分处理之前进行的。前进行的。预处理语句主要包括如下三种:预处理语句主要包括如下三种:1.宏定义宏定义2.文件包括文件包括3.条件编译条件编译(自学自学) 研究式学习研究式学习C程序设计(第二章)程序设计(第二章)20 研究式学习研究式学习C程序设计(第五章)程序设计(第五章)20编译预处理编译预处理文件包含文件包含 C C语言编译系统中以语言编译系统中以“.h”.h”为扩展名
29、的文件为扩展名的文件称为头文件,在使用称为头文件,在使用C C语言编译系统提供的库函语言编译系统提供的库函数进行程序设计时,经常需要在源程序中包含相数进行程序设计时,经常需要在源程序中包含相应的应的“头文件头文件”,如,如“stdiostdio.h.h”、“string.hstring.h”等。等。 用用C C语言设计程序时,通常将全局变量的定语言设计程序时,通常将全局变量的定义、符号常量的定义、结构类型的定义以及函数义、符号常量的定义、结构类型的定义以及函数类型说明等语句放在头文件中。这样,对于需要类型说明等语句放在头文件中。这样,对于需要该文件的源程序来讲,都可以通过该文件的源程序来讲,都
30、可以通过# #includeinclude语句语句将其包含到程序中。正确使用将其包含到程序中。正确使用#include#include语句,将语句,将会减少不必要的重复工作,提高编程效率。会减少不必要的重复工作,提高编程效率。 研究式学习研究式学习C程序设计(第二章)程序设计(第二章)21 研究式学习研究式学习C程序设计(第五章)程序设计(第五章)21编译预处理编译预处理宏定义宏定义* *宏定义可分为两种形式宏定义可分为两种形式: :1.1.不带参的宏定义,形式为不带参的宏定义,形式为: # #define 标识符标识符(或符号常量名)(或符号常量名) 字符串字符串作用:作用:是用一个指定的标
31、识符来代替一个字符串。是用一个指定的标识符来代替一个字符串。例如:例如:#defime N 10 /*用标识符用标识符N来代替字符来代替字符串串10*/ 在编译预处理时,预处理程序会把程序中该语句在编译预处理时,预处理程序会把程序中该语句以后的所有以后的所有 N 都用字符串都用字符串“10”来替换。来替换。 2.2.带参的宏定义,形式为带参的宏定义,形式为: # #define 宏名宏名(参数表参数表) 字符串字符串注意:注意:字符串中应包含参数表中指定参数。字符串中应包含参数表中指定参数。 研究式学习研究式学习C程序设计(第二章)程序设计(第二章)22 研究式学习研究式学习C程序设计(第五章)程序设计(第五章)22编译预处理编译预处理宏定义宏定义 带参数的宏定义的展开替换过程为:带参数的宏定义的展开替换过程为:程序中如果程序中如果有带实参的宏名,则按有带实参的宏名,则按#define语句中指定的字符串从语句中指
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 上海工商外国语职业学院《高等数学 CI》2025-2026学年期末试卷(A卷)
- 企业供应链协同制度
- 生物医药行业研发投资策略报告
- 国内旅游产业复苏趋势研究
- 2025年事业单位招聘考试综合类专业知识试卷及答案(区块链)
- 【8英WY期中】合肥市包河区2025-2026学年八下期中英语教学质量检测试卷
- 【7数期中】安徽淮南市高新集团2025-2026学年下学期七年级数学期中学情检测试卷
- 2025新大数据分析师实战模拟试题及答案
- 2026农产品产业链多级发展现状调研与供应链优化研究
- 2026农业技术行业市场现状技术创新投资评估规划研究发展趋势报告
- 食品安全管理员培训模拟试卷
- 华润燃气管理能力测评题库及答案详解
- 设备工程师转正工作总结
- 2025年轻型民用无人驾驶航空器安全操控(多旋翼)理论备考试题库含答案
- 上海初中入团考试试题及答案
- 2025向量化与文档解析技术加速大模型RAG应用
- 2025年工会财务知识竞赛考试题库及参考答案
- 酮症酸中毒教学课件
- 供应商信息安全管理制度
- 国有企业招标培训课件
- 丛林寺院管理制度
评论
0/150
提交评论