对函数的进一步讨论.ppt

上传人:小飞机 文档编号:4906774 上传时间:2023-05-22 格式:PPT 页数:38 大小:239.49KB
返回 下载 相关 举报
对函数的进一步讨论.ppt_第1页
第1页 / 共38页
对函数的进一步讨论.ppt_第2页
第2页 / 共38页
对函数的进一步讨论.ppt_第3页
第3页 / 共38页
对函数的进一步讨论.ppt_第4页
第4页 / 共38页
对函数的进一步讨论.ppt_第5页
第5页 / 共38页
点击查看更多>>
资源描述

《对函数的进一步讨论.ppt》由会员分享,可在线阅读,更多相关《对函数的进一步讨论.ppt(38页珍藏版)》请在三一办公上搜索。

1、第九章对函数的进一步讨论,8.1 局部变量与全局变量,局部变量:在函数的头部、内部声明的变量。局部变量具有私有性,其可访问区域在函数内部,其他函数不能访问它们。私有性使得不同函数可以使用相同名称,而不会引起冲突。全局变量:在函数外部声明的变量。全局变量具有公共性。它们可被程序中其后定义的函数访问。公共性使得不同函数可以共享同一个变量中的数据,从而达到数据传递的目的。两种变量规定了变量名称的可访问区域,也称为变量的作用域。,#include#include#define EPSILON 1e-6float disc,x1,x2,realpart,imagpart;void root1(doubl

2、e a,double b);void root2(double a,double b);void root3(double a,double b);void main()float a,b,c;scanf(%f%f%f,void root1(double a,double b)x1=-b/(2*a);void root2(double a,double b)x1=(-b+sqrt(disc)/(2*a);x2=(-b-sqrt(disc)/(2*a);void root3(double a,double b)realpart=-b/(2*a);imagpart=sqrt(-disc)/(2*a

3、);,8.2 变量的存储属性,变量的作用域规定了变量名称的可访问区域。变量的存储类别规定了在何时何处为变量分配存储空间,当变量初始化后,生存期是多长,哪些函数可以使用它。C中有4种存储类别:自动存储寄存器存储 静态存储 外部存储,auto类别是使用内存最高效的方式,因此是局部变量的默认类型。static存储属性的变量在程序开始执行时一次性分配和初始化,其存在于整个程序运行期间。将一个局部变量声明为static 的目的用来记忆函数的信息和一次性初始化大量数据。在由多个源文件组成的程序中,有些函数、全局变量需要限制在一个源文件中使用(内部函数、内部全局变量),有些函数、全局变量需要被其他源文件引用

4、(外部函数、外部全局变量),可以通过static或extern关键字对这些函数和数据对象进行声明成内部的或外部的。,/*file1.*/#include int A;int power(int);void main()int b3,c,d,m;scanf(%d,%d,&A,&m);cA*b;printf(%d*%d%d,A,b,c);dpower(m);printf(*n,A,m,d);,/*file2.*/extern int A;/int power(int)int i,y1;for(i=1;i=;i+)y*A;return;,8.3 函数的存储属性,函数的存储类别默认为extern。在调

5、用其他源文件中定义的函数时,只需在调用文件中对函数进行声明。例如,File2.c中定义了函数enter_string,#include void enter_string(char str)gets(str);,单独编译,void delete_string(char str,char ch)int i,j;for(i=j=0;stri!=0;i+)if(stri!=ch)strj+=stri;stri=0;,File3.c中定义了函数delete_string,#include void print_string(char str)puts(str);,File4.c中定义了函数print_

6、string,void enter_string(char str);void detele_string(char str,char ch);void print_string(char str);void main()char c;char str80;enter_string(str);detele_string(str,c);print_string(str);,在File1.c中引用3个外部函数,只需对它们进行声明,单独编译,static void f(int n);/函数名f限制在本文件void main()f(m);void f(int n),file1.c,如果要将函数名的作用

7、域限制在本文件,可以在函数声明的前面加static关键字,这种函数称为“内部函数”,static int A;/全局变量名A限制在本文件void main(),file1.c,如果要将全局变量的作用域限制在本文件,可以在声明语句前加一个static关键字,这种全局变量称为“内部全局变量”,什么是编译预处理?源程序在编译前由编译预处理器执行的命令,主要完成程序的文本处理以提高程序开发效率。#define、#include都是编译预处理命令。,8.4 编译预处理,8.4.1 宏定义命令#define,语法:#define 宏标识符 字符串例:#define PI 3.1415926预处理程序将源程

8、序中的宏标识符替换成字符串。,1 不带参数的宏定义,#define PI 3.1415926 void main()float r,area;scanf(f,&r);area=PI*r*r;printf(The area is fn,area);,void main()float r,area;scanf(f,&r);area=3.1415926*r*r;printf(The area is fn,area);,源程序,预处理,编译,中间源程序,宏名一般习惯用大写字母表示,以便与变量名相区别。宏定义没有“=”(3)宏定义不是语句,不必在行末加分号。(5)宏的作用域为定义之后到文件结束。(6)在

9、宏定义中,可以引用已定义的宏。,#define R 3.0#define PI 3.1415926#define L 2*PI*R#define S PI*R*Rmain()printf(L=%fnS=%fn,L,S);,main()printf(“L=%fnS=%fn”,2*3.1415926*3.0,3.1415926*3.0*3.0);,预处理,编译,注意:双引号内与宏名相同的字符串不进行置换,源程序,中间源程序,2 带参数的宏定义,一般形式:define 标识符(参数)字符串例如:#define POWER(X)X*X*X#define AREA(r)PI*r*r含义:POWER(X)

10、=X*X*X AREA(r)=PI*r*r,宏替换的方法:先替换参数,然后再把宏展开#define POWER(X)X*X*XPOWER(3)3*3*3,#define POWER(X)X*X*Xmain()printf(%dn,POWER(3);,main()printf(“%dn”,3*3*3);,源程序,中间源程序,预处理,编译,宏定义:#define POWER(X)X*X*X将POWER(i+1)替换成 i+1*i+1*i+1宏定义:#define POWER(X)(X)*(X)*(X)将POWER(i+1)替换成(i+1)*(i+1)*(i+1)结论:在定义带参数的宏时,常常需要将

11、字符串中的参数加括号。,编程题(2)定义一个带参数的宏,实现求余数操作。#define MOD(a,b)(a)%(b)void main()int a=2,b=3;printf(dn,MOD(11,5);printf(dn,MOD(a,b);printf(dn,MOD(11+5,a+b);,预处理,编译,#define MOD(a,b)(a)%(b)void main()int a=2,b=3;printf(dn,MOD(11,5);printf(dn,MOD(a,b);printf(dn,MOD(11+5,a+b);,void main()int a=2,b=3;printf(dn,(11)

12、%(5);printf(dn,(a)%(b);printf(dn,(11+5)%(a+b);,源程序,中间源程序,编程题(1)定义带参数的宏,求两个数中较大数,#define MAX(x,y)(x)(y)?(x):(y)void main()int a,b,c;printf(“enter 3 number“);scanf(“%d%d%d”,&a,&b,&c);printf(dn,MAX(MAX(a,b),c);,预处理,编译,#define MAX(x,y)(x)(y)?(x):(y)void main()int a,b,c;printf(“enter 3 number“);scanf(“%d

13、%d%d”,&a,&b,&c);printf(dn,MAX(MAX(a,b),c);,void main()int a,b,c;printf(“enter 3 number“);scanf(“%d%d%d”,8.4.2 文件包含命令#include,1、包含系统头文件,对所调用的库函数进行声明。一般形式:#include“文件名”或#include“文件名”先在当前目录查找,若没有,再到系统指定的目录查找。仅在系统指定的目录查找。,2、包含自己的头文件。头文件通常包含了模块之间的接口,即外部函数、全局常量的导入性指令。,/scroe.#include“a.h”/自己的头文件void aver_

14、stu(float scoreN,float avestu);void aver_cor(float scoreN,float avecor);void print_tab(float scoreN,float avestu,float avecor);void main()float scoreMN=91,79,83,81,52,62,71,83,92,98,;float avestuM;float avecorM;aver_stu(score,avestu);aver_cor(score,avecor);print_tab(score,avestu,avecor);,scroe.,a.h,

15、scroe.,a.h,源程序,中间源程序,预处理,编译,【综合练习】运行多文件的程序 已知10个学生5门课成绩,分别用函数实现下列功能:计算每个学生5门课平均分aver_stu();计算每门课程10个学生平均分aver_cor();输出结果print_tab();,学号/课程12345平均 191.0079.0083.0081.0052.0077.2 262.0071.0083.0092.0098.0081.20 390.0070.0050.0060.0040.0062.00 478.0098.0087.0083.0067.0082.60 566.0077.0088.0055.0067.007

16、0.60 691.0079.0083.0081.0052.0077.20 762.0071.0083.0092.0096.0081.20 890.0070.0050.0060.0040.0062.00 978.0098.0087.0083.0067.0082.60 1066.0077.0088.0055.0067.0070.60平均 77.4079.0078.2074.2064.80,scoreMN数组,avestuM数组,avecorN,#include“a.h”/自己的头文件void aver_stu(void);void aver_cor(void);void print_tab(voi

17、d);float scoreMN=91,79,83,81,52,;/全局数组float avestuM;/全局数组float avecorN;/全局数组void main()aver_stu();aver_cor();print_tab(void);,方法1、利用全局数组传递数据:,#include“a.h”/自己的头文件void aver_stu(float scoreN,float avestu);void aver_cor(float scoreN,float avecor);void print_tab(float scoreN,float avestu,float avecor);v

18、oid main()float scoreMN=91,79,83,81,52,62,71,83,92,98,;float avestuM;float avecorN;aver_stu(score,avestu);aver_cor(score,avecor);print_tab(score,avestu,avecor);,方法2、利用数组参数传递数据:,创建源程序文件a.c,#include“a.h”void aver_stu(float scoreN,float avestu);void aver_cor(float scoreN,float avecor);void print_tab(fl

19、oat scoreN,float avestu,float avecor);void main()float scoreMN=91,79,83,81,52,62,71,83,92,98,;float avestuM;float avecorN;aver_stu(score,avestu);aver_cor(score,avecor);print_tab(score,avestu,avecor);,创建源程序文件b.c,#include“a.h”void aver_stu(float scoreN,float avestu)/得到avestuM,创建源程序文件c.c,#include“a.h”void aver_cor(float scoreN,float avecor)/得到avecorN,创建源程序文件d.c,#include“a.h”void print_tab(float scoreN,float avestu,float avecor)/输出成绩表,#include#define M 10#define N 5,创建头文件a.h,

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号