chap函数与宏定义PPT学习教案_第1页
chap函数与宏定义PPT学习教案_第2页
chap函数与宏定义PPT学习教案_第3页
chap函数与宏定义PPT学习教案_第4页
chap函数与宏定义PPT学习教案_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

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

文档简介

1、会计学1chap函数与宏定义函数与宏定义 C 函数分函数分标准函数标准函数(库函数库函数)和和自定义函数自定义函数。 所有函数都是平行的,相互独立不能嵌套定义,函数所有函数都是平行的,相互独立不能嵌套定义,函数间可以相互调用,但不能调用间可以相互调用,但不能调用main()函数。函数。第1页/共40页6.1.1 函数的定义古典形式:古典形式:类型标识符类型标识符 函数名函数名(形式参数表形式参数表)形式参数说明;形式参数说明; 函数体;函数体;现代简洁形式:现代简洁形式:类型标识符类型标识符 函数名函数名(形参说明表形参说明表) 函数体函数体;第2页/共40页例:例:int max(x,y)i

2、nt x, y;/ 形式参数说明形式参数说明 / int z;/ 函数体中的说明部分函数体中的说明部分 / z=xy ? x : y; return(z);这两行可以写成一行:这两行可以写成一行:int max(int x, int y)例:例:int max(int x, int y) int z;/ 函数体中的说明部分函数体中的说明部分 / z=xy ? x : y; return(z);第3页/共40页函数参数和函数的值函数参数和函数的值1形式参数和实际参数形式参数和实际参数例例 从键盘输入两个数,输出其中较大的一个。从键盘输入两个数,输出其中较大的一个。 main( ) int a,

3、b, c ; scanf(%d %d, &a, &b); c=max(a,b); /* a, b为实际参数为实际参数 */ printf(Max is %d,c); getch(); max(int x, int y) /* x, y为形式参数为形式参数 */ int z; z=xy ? x : y; return(z); 第4页/共40页注意注意:第5页/共40页2函数的返回值函数的返回值第6页/共40页 若函数中没有若函数中没有return语句,则函数被调用后也会带回语句,则函数被调用后也会带回不确定的值不确定的值。 为了明确表示不需要函数返回值,可以用为了明确表示不需要函

4、数返回值,可以用“void”定定义函数为义函数为“无类型无类型”。此时,不得使用。此时,不得使用a=f( )之类的赋之类的赋值语句。值语句。凡不需要返回值的函数,一般均定义为凡不需要返回值的函数,一般均定义为“void”类型类型。第7页/共40页函数的调用函数的调用第8页/共40页 将函数调用作为一个函数的实参。将函数调用作为一个函数的实参。如:如:m=max(max(a, b), c);2函数调用的方式函数调用的方式第9页/共40页 如果被调函数为自定义函数且其定义在主调函数定义如果被调函数为自定义函数且其定义在主调函数定义之后,则应在主调函数中对该函数进行声明。其语句形之后,则应在主调函数

5、中对该函数进行声明。其语句形式一般为:式一般为: 类型标识符类型标识符 被调函数名被调函数名(参数列表参数列表); 如:如:float add(int x, int y );第10页/共40页第11页/共40页局部变量和全局变量局部变量和全局变量6.2 变量的作用域和存储类型变量的作用域和存储类型第12页/共40页在文件开头定义的外部变量才可在整个文件范围内使用,若在定义点之前的函数需引用外部变量,则可用关键字在文件开头定义的外部变量才可在整个文件范围内使用,若在定义点之前的函数需引用外部变量,则可用关键字“extern”作作“外部变量声明外部变量声明”。注意注意:外部变量的定义外部变量的定义

6、只能有一次,它的位置在所有函数之外。而同一程序中的只能有一次,它的位置在所有函数之外。而同一程序中的外部变量声明外部变量声明可以有多次,它的位置在函数之内可以有多次,它的位置在函数之内(哪个函数要用就在哪个函数中说明哪个函数要用就在哪个函数中说明)。系统根据外部变量的定义。系统根据外部变量的定义(而不是根据外部变量的说明而不是根据外部变量的说明)分配存储单元。对外部变量的初始化只能在分配存储单元。对外部变量的初始化只能在“定义定义”时进行,时进行,“extern”只是申明该变量是一个已在外部定义过的变量而已只是申明该变量是一个已在外部定义过的变量而已。如果在同一源文件中,外部变量与局部变量同名

7、,则在局部变量的作用范围内,外部变量不起作用。如果在同一源文件中,外部变量与局部变量同名,则在局部变量的作用范围内,外部变量不起作用。 第13页/共40页输出结果输出结果:10, 4, 810, 2, 5例例#include stdio.hmain( ) int a=1, b=2, c=3; a+; c+=b; int b=4, c; c=2*b; a+=c; printf(%d,%d,%dn, a, b, c); printf(%d,%d,%dn, a, b, c); getch();第14页/共40页变量的存储类型变量的存储类型第15页/共40页2) 若希望被调函数在结束后,其局部变量占用

8、的存储空若希望被调函数在结束后,其局部变量占用的存储空间不释放,以便保留其变量的值,用于下次调用该函数间不释放,以便保留其变量的值,用于下次调用该函数,则用,则用“static”说明为说明为 “局部静态变量局部静态变量”。第16页/共40页第17页/共40页例例 打印打印1到到5的阶乘值。的阶乘值。 int fac(int n) static int f =1; / 定义定义f 为为int型静态变量型静态变量 / f = f n ; return( f ); main( ) int i; for (i=1; i1 f(0)=1,f(1)=1第23页/共40页第24页/共40页6.5 预处理预处

9、理第25页/共40页6.5.1 宏定义宏定义例例 求正圆锥体的底周长、底面积和它的体积。求正圆锥体的底周长、底面积和它的体积。 #define PI 3.1415926 /* 宏名宏名PI用大写,行末无分号用大写,行末无分号 */ main( ) float l, s, r, v ; scanf(%f,&r); l = 2.0*PI*r; s = PI*r*r ; v = 4.0 / 3*PI*r*r*r ; printf(l=%10.4f ns=%10.4f nv=%10.4f n,l,s,v); getch(); 第26页/共40页 宏名的有效范围为该宏定义命令之后至本源文件结束宏

10、名的有效范围为该宏定义命令之后至本源文件结束。通常,宏定义命令一般写在文件开头或函数之前作为。通常,宏定义命令一般写在文件开头或函数之前作为该文件的一部分。该文件的一部分。 可以用可以用 #undef 命令终止宏定义的作用域。如:命令终止宏定义的作用域。如:#define G 9.8main( )#undef Gfloat f( ) G 的作用范围的作用范围第27页/共40页2带参数的宏定义带参数的宏定义语句形式:语句形式:#define 宏名宏名(形参表形参表) 字符串字符串注意:字符串应包含形参表中的参数注意:字符串应包含形参表中的参数例例#define PI 3.1415926#defi

11、ne S(r) PI*r*rmain( )float a, area; a=3.6; area=S(a); /*area=3.1415926*a*a,但不会置换,但不会置换a为为3.6 */ printf(r=%f narea=%f n,a,area); getch();第28页/共40页第29页/共40页 定义带参数的宏,可以实现一些简单的函数功能。定义带参数的宏,可以实现一些简单的函数功能。如:如:#define MAX(x,y) (x)(y)?(x) : (y) main( )int a, b, c, t ; t = MAX(a+b, c+d); 第30页/共40页6.5.2 “文件包含

12、文件包含” 用用 #include 命令实现一个文件包含另一个文件。命令实现一个文件包含另一个文件。 语句形式:语句形式: #include “文件名文件名”例例#include stdio.h#define N 2#define M N+1#define NUM (M+1)*M/2main( ) int i, n=0; for (i=1; i=NUM; i+) n+; printf(%2d, n); getch();输出结果:输出结果:1 2 3 4 5 6 7 8第31页/共40页 NUM被代换展开后为:被代换展开后为:( 2+1+1) 2+1/2#include命令中,文件名既可用双引命

13、令中,文件名既可用双引“ ”号号(推荐推荐),也可用尖括号),也可用尖括号括起来。括起来。表示被包含在标表示被包含在标准目录中准目录中(include).“”表示被包含文件在指定目录表示被包含文件在指定目录中,若只有文件名不带路径,则在当前目录中,若中,若只有文件名不带路径,则在当前目录中,若找不到,再到标准目录中找。找不到,再到标准目录中找。包含文件名可以是包含文件名可以是.c源文件或源文件或.头文件,如头文件,如#include #include “myhead.h”#include “D:myexammyfile.c”第32页/共40页所谓所谓“宏名已定义宏名已定义”是无论是无论“宏名宏

14、名”定义为什么内定义为什么内容。容。 条件编译的作用:缩短编译时间,减少目标程序的条件编译的作用:缩短编译时间,减少目标程序的长度。长度。 第33页/共40页2#ifndef 宏名宏名 程序段程序段1 #else 程序段程序段2 #endif第34页/共40页第35页/共40页例例 #define TED 10main() #ifdef TED printf(Hi,Tedn); #else printf(HI,Anyonen); #endif #ifndef PALPH printf(RAPLH not definedn); #endif getch();第36页/共40页例main() #if MAX99 printf(compile for array greater than 99); #else printf(compile for small array); #endif g

温馨提示

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

最新文档

评论

0/150

提交评论