




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、会计学1对函数对函数(hnsh)的进一步讨论的进一步讨论第一页,共39页。8.1 局部变量与全局变量局部变量:在函数的头部、内部声明的变量。局部变量具有私有性,其可访问区域在函数内部,其他函数不能访问它们。私有性使得不同函数可以使用相同名称(mngchng),而不会引起冲突。全局变量:在函数外部声明的变量。全局变量具有公共性。它们可被程序中其后定义的函数访问。公共性使得不同函数可以共享同一个变量中的数据,从而达到数据传递的目的。两种变量规定了变量名称(mngchng)的可访问区域,也称为变量的作用域。第1页/共38页第二页,共39页。#include#include#define EPSILO
2、N 1e-6float disc,x1,x2,realpart,imagpart;float disc,x1,x2,realpart,imagpart;void root1(double 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,&a,&b,&c); discdisc=b*b-4*a*c; if (fabs(disc)EPSILON)root2(a,b);printf(has distinct
3、real roots:%8.4f and %8.4fn,x1,x2x1,x2); else root3(a,b);printf(has complex roots:n);printf(%8.4f+%8.4f in,realpart,imagpartrealpart,imagpart);printf(%8.4f-%8.4f in,realpart,imagpartrealpart,imagpart); ; 第2页/共38页第三页,共39页。void root1(double a, double b ) x1=-b/(2*a);void root2(double a, double b) x1=(
4、-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页/共38页第四页,共39页。8.2 变量的存储(cn ch)属性变量(binling)的作用域规定了变量(binling)名称的可访问区域。变量(binling)的存储类别规定了在何时何处为变量(binling)分配存储空间,当变量(binling)初始化后,生存期是多长,哪些函数可以使用它。C中有4种存储类别: 自动存储寄存器存储 静态存储 外部存储
5、第4页/共38页第五页,共39页。lauto类别是使用内存最高效的方式,因此是局部变量的默认类型。lstatic存储属性的变量在程序开始执行时一次性分配和初始化,其存在于整个程序运行期间。将一个局部变量声明为static 的目的用来记忆函数的信息和一次性初始化大量数据。l在由多个源文件组成的程序中,有些函数、全局变量需要限制在一个源文件中使用(内部函数、内部全局变量),有些函数、全局变量需要被其他源文件引用(ynyng)(外部函数、外部全局变量) ,可以通过static或extern关键字对这些函数和数据对象进行声明成内部的或外部的。第5页/共38页第六页,共39页。/* file1.*/#i
6、nclude 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); 第6页/共38页第七页,共39页。/* file2.*/extern int A; /int power(int ) int i,y1; for(i=1;i=;i+)y*A; return ;第7页/共38页第八页,共39页。8.3 函数(hnsh)的存储属性函数的存储(cn ch)类别默认为extern。
7、在调用其他源文件中定义的函数时,只需在调用文件中对函数进行声明。例如,File2.c中定义了函数enter_string#include void enter_string(char str) gets(str); 单独(dnd)编译第8页/共38页第九页,共39页。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中定义(dngy)了函数delete_string第9页/共38页第十页,共39页。#include void pri
8、nt_string(char str) puts(str);File4.c中定义(dngy)了函数print_string第10页/共38页第十一页,共39页。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个外部函数(hnsh),只需对它们进行声明单
9、独(dnd)编译第11页/共38页第十二页,共39页。static void f(int n);/函数(hnsh)名f限制在本文件void main ( ) f(m); void f(int n) file1.c如果(rgu)要将函数名的作用域限制在本文件,可以在函数声明的前面加static关键字,这种函数称为“内部函数”第12页/共38页第十三页,共39页。static int A;/全局变量名A限制(xinzh)在本文件void main ( ) file1.c如果要将全局变量的作用域限制在本文件,可以在声明(shngmng)语句前加一个static关键字,这种全局变量称为“内部全局变量”
10、第13页/共38页第十四页,共39页。什么是编译预处理?源程序在编译前由编译预处理器执行的命令(mng lng),主要完成程序的文本处理以提高程序开发效率。#define、#include都是编译预处理命令(mng lng)。8.4 编译(biny)预处理第14页/共38页第十五页,共39页。语法(yf):#define 宏标识符 字符串例:#define PI 3.1415926预处理程序将源程序中的宏标识符替换成字符串。1 不带参数(cnsh)的宏定义第15页/共38页第十六页,共39页。 #define PI 3.1415926 void main() float r,area; sca
11、nf(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); 源程序预处理编译(biny)中间(zhngjin)源程序第16页/共38页第十七页,共39页。宏名一般习惯用大写字母表示,以便与变量名相区别。 宏定义没有“=”(3)宏定义不是语句(yj),不必在行末加分号。 (5)宏的作用域为定义之后到文件结束。(6)在宏定义中,可以引用已定义的宏。 第17页/共38
12、页第十八页,共39页。#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);预处理编译(biny)注意(zh y):双引号内与宏名相同的字符串不进行置换源程序中间(zhngjin)源程序第18页/共38页第十九页,共39页。2 带参数(cnsh)的宏定义一般形式(xngsh): define 标识符(参数) 字符串例如:#define PO
13、WER(X) X*X*X#define AREA(r) PI*r*r含义: POWER(X)=X*X*X AREA(r)=PI*r*r第19页/共38页第二十页,共39页。宏替换的方法:先替换参数,然后(rnhu)再把宏展开#define POWER(X) X*X*XPOWER(3) 3*3*3第20页/共38页第二十一页,共39页。#define POWER(X) X*X*Xmain() printf(%dn, POWER(3);main()printf(“%dn”, 3*3*3);源程序中间(zhngjin)源程序预处理编译(biny)第21页/共38页第二十二页,共39页。宏定义:#de
14、fine 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)结论(jiln):在定义带参数的宏时,常常需要将字符串中的参数加括号。第22页/共38页第二十三页,共39页。编程题(2)定义一个带参数(cnsh)的宏,实现求余数操作。#define MOD(a,b) (a)%(b) void main() int a=2,b=3; printf(dn, MOD(11, 5) ); printf(dn, MOD(a, b) ); printf(d
15、n, MOD(11+5, a+b) );第23页/共38页第二十四页,共39页。预处理编译(biny)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)%(5) ); printf(dn,(a)%(b) ); printf(dn,(11+5)%(a+b) );源程序中间(zhngjin)源程序第24页/共38页第二十五页,共39页
16、。编程题(1)定义带参数(cnsh)的宏,求两个数中较大数#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) );第25页/共38页第二十六页,共39页。预处理编译(biny)#define MAX(x,y) (x)(y)?(x):(y)void main() int a,b,c; printf(“enter 3 number“); scanf(“%d%d%d
17、”,&a,&b,&c); printf(dn,MAX(MAX(a,b),c) );void main() int a,b,c; printf(“enter 3 number“); scanf(“%d%d%d”,&a,&b,&c); printf(dn,(a)(b)?(a):(b)(c)?(a)(b)?(a):(b):(c);第26页/共38页第二十七页,共39页。8.4.2 文件包含(bohn)命令#include 1、包含系统头文件,对所调用的库函数进行声明。一般(ybn)形式: #include “文件名” 或 #include “文件名”先
18、在当前目录查找,若没有,再到系统指定的目录查找。 仅在系统指定的目录查找。第27页/共38页第二十八页,共39页。2、包含自己的头文件。头文件通常包含了模块之间的接口,即外部函数、全局(qunj)常量的导入性指令。/ scroe.#include “a.h”/自己(zj)的头文件void aver_stu(float scoreN, float avestu);void aver_cor(float scoreN, float avecor);void print_tab(float scoreN, float avestu, float avecor);void main() float s
19、coreMN=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);第28页/共38页第二十九页,共39页。scroe.a.hscroe.a.h源程序中间(zhngjin)源程序预处理编译(biny)第29页/共38页第三十页,共39页。【综合练习】运行多文件的程序 已知10个学生5门课成绩,分别用函数实现下列(xili)功能:计算每个学生5门课平均分aver_stu
20、();计算每门课程10个学生平均分aver_cor();输出结果print_tab();第30页/共38页第三十一页,共39页。 学号/课程(kchng)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.0070.60 691.0079.0083.0081.0052.0077.20 762.0071.0083.0092.0096.
21、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第31页/共38页第三十二页,共39页。scoreMN数组avestuM数组avecorN第32页/共38页第三十三页,共39页。#include “a.h”/自己(zj)的头文件void aver_stu(void);void aver_cor(void);void print_tab(void);float scoreMN=91,
22、79,83,81,52,;/全局数组float avestuM; /全局数组float avecorN;/全局数组void main() aver_stu(); aver_cor(); print_tab(void);方法1、利用(lyng)全局数组传递数据:第33页/共38页第三十四页,共39页。#include “a.h” /自己(zj)的头文件void aver_stu(float scoreN, float avestu);void aver_cor(float scoreN, float avecor);void print_tab(float scoreN, float avest
23、u, 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);方法2、利用(lyng)数组参数传递数据:第34页/共38页第三十五页,共39页。创建(chungjin)源程序文件a.c#include “a.h”void aver_stu(float scoreN, float avestu);void aver_cor(f
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 44851.10-2025道路车辆液化天然气(LNG)燃气系统部件第10部分:不锈钢钢管
- 2024年火电电力职业鉴定考前冲刺练习题含答案详解【突破训练】
- 应急安全培训标语大全课件
- 应急安全培训仿真课件
- 应急处理课件教学
- 秋季腹泻的流行病学特征与高危人群分析
- 呼吸道传染病患者气道管理与护理措施
- 病毒感染与癌症关联机制
- 城镇建设合同(标准版)
- 2024安全监察人员考前冲刺练习题及完整答案详解【必刷】
- 燃料电池催化剂研究报告
- 2025年化妆品代理合同范本模板
- 2025年江苏省农垦集团有限公司人员招聘笔试备考及参考答案详解
- 2025至2030年中国粗杂粮及粗杂粮加工行业市场调研分析及投资战略咨询报告
- 军用无人机讲解课件
- 2025年中国移动校园招聘笔试试题解析及答题技巧
- 2025-2026学年地质版(2024)小学体育与健康三年级(全一册)教学设计(附目录P123)
- 【MOOC】人格与精神障碍-学做自己的心理医生-暨南大学 中国大学慕课MOOC答案
- NB-T 47013.15-2021 承压设备无损检测 第15部分:相控阵超声检测
- NMR有机氟谱课件
- 急诊科标本采集错误应急预案脚本
评论
0/150
提交评论