C语言89实用教案

上传人:鲁** 文档编号:570681686 上传时间:2024-08-05 格式:PPT 页数:93 大小:1.73MB
返回 下载 相关 举报
C语言89实用教案_第1页
第1页 / 共93页
C语言89实用教案_第2页
第2页 / 共93页
C语言89实用教案_第3页
第3页 / 共93页
C语言89实用教案_第4页
第4页 / 共93页
C语言89实用教案_第5页
第5页 / 共93页
点击查看更多>>
资源描述

《C语言89实用教案》由会员分享,可在线阅读,更多相关《C语言89实用教案(93页珍藏版)》请在金锄头文库上搜索。

1、1第八章函数(hnsh)intsquare(int);floatsqrt1(int);main()intk;for(k=1;k=10;k+)printf(”%d的平方(pngfng)%d:”,k,square(k);printf(”%d的平方(pngfng)根%f:”,k,sqrt1(k);intsquare(inty)returny*y;floatsqrt1(inty)returnsqrt(y);第1页/共92页第一页,共93页。2第八章函数(hnsh)说明一个源程序文件由一个或多个函数组成,一个源程序文件是一个编译单位。一个C程序由一个或多个源程序文件组成C程序的执行从main函数开始,调

2、用(dioyng)其他函数后返回到main函数所有函数都是平行的,不能嵌套,但可以互相调用(dioyng)(不能调用(dioyng)main函数)函数分标准函数和用户自定义函数第2页/共92页第二页,共93页。3库函数简介系统自带的标标准库函数根据(gnj)不同的功能作用放在不同的头文件中。使用时只需在程序的开头加上一条语句:#include根据使用的函数根据使用的函数(hnsh)(hnsh)来确定来确定第3页/共92页第三页,共93页。4如:如:stdio.hstdio.h用于标准输入用于标准输入(shr)/(shr)/输出输出math.hmath.h用于数学计算用于数学计算ctype.h用

3、于字符(z f)处理string.hstring.h用于字串处理用于字串处理(chl)(chl)time.h用于时间/日期的处理dir.h用于控制目录和路径用于控制目录和路径graphics.hgraphics.h用于图形操作dos.hdos.hbios.hbios.h用于接口处理用于接口处理第4页/共92页第四页,共93页。5函数调用的执行(zhxng)过程函数(hnsh)的声明与使用main( )调fun( )结束fun( )返回保存:返回地址当前现场恢复:主调程序现场返回地址第5页/共92页第五页,共93页。6第八章函数(hnsh)函数定义形式(xngsh)无参函数类型标识符函数名()声

4、明部分语句例如p143,printstar()和print_message()函数有参函数类型标识符函数名(形式(xngsh)参数表列)声明部分语句第6页/共92页第六页,共93页。7第八章函数(hnsh)有参函数(hnsh)举例intmul(intx,inty)intz;z=x*y;return(z);形参说明的传统方式intmul(x,y)intx,y;intz;z=x*y;return(z);第7页/共92页第七页,共93页。8第八章函数(hnsh)空函数类型(lixng)标识符函数名(形式参数表列)例如:dummy()第8页/共92页第八页,共93页。9函数参数和函数值形式参数和实际参

5、数(简称形参和实参)在定义函数中指定的形参,在未出现函数调用时,它们不占内存中的存储单元。只有(zhyu)在发生函数调用时,形参才被分配内存单元。在调用结束后,形参所占的内存单元被释放。实参可以是常量、变量或表达式,在调用时实参要有确定的值。例:a=5;b=7;mul(10,a+b);实参与形参的类型应相同或赋值兼容当实参变量为简单类型时,实参变量对形参变量的数据传递是“值传递”,其特点是形参值的变化不会改变实参值的变化。第9页/共92页第九页,共93页。10第八章函数(hnsh)main()inta,b;a=5;b=8;swap(a,b);printf(“a=%d,b=%dn”,a,b);s

6、wap(intx,inty)intt;t=x;x=y;y=t;考虑(kol):a与b的值是多少?第10页/共92页第十页,共93页。11第八章函数(hnsh)函数的返回值三种类型:单纯计算,专门对一系列参数作运算,并将结果返回。像sqtr(x)、sin(x)、pow(y,x)等。返回操作信息,并返回一个表明操作是否成功的简单值。无明确的返回值,此函数是一个单纯的过程(guchng),产生的结果不会令人感兴趣。像printf()函数返回所写入的字符个数。如果想要从被调函数中得到明确的值,则函数中一定包含return语句。第11页/共92页第十一页,共93页。12第八章函数(hnsh)一个函数中可

7、以有一个以上的return语句,只要遇到return语句就返回到主调(zhdio)函数中。如果一个函数明确表示没有返回值,可用void定义函数类型为无类型,例:voidprintstar()voidprint_message()注:如果函数已用void声明,则在主调(zhdio)函数中不能出现下面的用法:a=printstar();b=print_message();第12页/共92页第十二页,共93页。13第八章函数(hnsh)函数(hnsh)的调用函数(hnsh)语句printstar();只要求函数(hnsh)完成一个操作过程函数(hnsh)表达式m=100+mul(a,b);要求此函数

8、(hnsh)有返回值函数(hnsh)参数m=max(a,mul(b,c);或printf(”%d”,max(a,b);第13页/共92页第十三页,共93页。14第八章函数(hnsh)被调函数的声明使用库函数时,应在程序头部用#include命令(mnglng)将调用有关库函数所需的信息包含到文本中来使用用户自定义函数使用在前,定义在后,则在主调函数中要声明被调函数第14页/共92页第十四页,共93页。15第八章函数(hnsh)main()floatadd(float,float);floata,b,c;scanf(”%f,%f”,&a,&b);c=add(a,b);printf(”sumis%

9、f”,c);floatadd(floatx,floaty)floatz;z=x+y;return(z);第15页/共92页第十五页,共93页。16floatadd(floatx,floaty)floatz;z=x+y;return(z);main()floata,b,c;scanf(”%f,%f”,&a,&b);c=add(a,b);printf(”sumis%f”,c);定义在前,使用(shyng)在后,则在主调函数中不必声明被调函数第16页/共92页第十六页,共93页。17在所有函数定义之前,在函数的外部做了声明(shngmng),则在各主调函数中不必再声明(shngmng)要调用的函数f

10、loatadd(floatx,floaty);main()floata,b,c;scanf(”%f,%f”,&a,&b);c=add(a,b);printf(”sumis%f”,c);floatadd(floatx,floaty)floatz;z=x+y;return(z);第17页/共92页第十七页,共93页。18第八章函数(hnsh)函数(hnsh)的嵌套调用函数(hnsh)定义是相互平行的、独立的,不能嵌套定义,但函数(hnsh)之间可以相互调用,下面是错的f1(intx,inty)intz;if(xy).f2(floatu,floatv)intk,j;.第18页/共92页第十八页,共9

11、3页。19第八章函数(hnsh)下面使用(shyng)是正确的f1(intx,inty)intw,u,v;if(xy).w=f2(u,v);f2(ints,intt).第19页/共92页第十九页,共93页。20第八章函数(hnsh)函数的递归调用(dioyng)定 义 : 在 调 用 (dioyng)一 个 函 数 的 过 程 中 又 出 现 直 接 或 间 接 地 调 用(dioyng)该函数本身。调用(dioyng)方式直接调用(dioyng)间接调用(dioyng)第20页/共92页第二十页,共93页。21第八章函数(hnsh)间接( jinji)调用F1(intx,inty)F2(in

12、ta,intb)intu,v;intr,s;.F2(u,v);F1(r,s);.出现的机会很少,编程时防止出现死循环调用第21页/共92页第二十一页,共93页。22第八章函数(hnsh)直接(zhji)调用F1(intx,inty)intu,v;.F1(u,v);. 出现出现(chxin)(chxin)的机的机会多会多第22页/共92页第二十二页,共93页。23递归的特点递归的特点一个问题能够一个问题能够(nnggu)(nnggu)成为递归必须具备的条件是:成为递归必须具备的条件是:后一部分与原始问题类似后一部分与原始问题类似后一部分是原始问题的简化后一部分是原始问题的简化第23页/共92页第

13、二十三页,共93页。24编程时一般将直接递归调用认为递归调用。函数递归调用编程时也有一定的次数,否则会变成死循环调用。一般情况下递归调用须能写出如下(rxi)函数形式:An=0or1(A,B为常数)f(n)=Bf(n-1)n0orn1注:Bf(n-1)表示与f(n)有某种特定关系,非数学函数中的定义式。第24页/共92页第二十四页,共93页。25它写成程序后包含(bohn)两个过程:回推和递推回推:从函数自变量n=N不定值推到函数自变量n=1时的确定值递推:从函数自变量n=1时的确定值依次推到函数自变量n=N时的函数值例:P160例8.8第25页/共92页第二十五页,共93页。265!的执行(

14、zhxng)过程:设设: : 输入输入(shr) (shr) 5 5 (n=5) (n=5)第1次调用(dioyng):y=fac(5) 返回:y=5fac(4)第第2 2次调用:次调用:y=5*4fac(3)第3次调用:y=5*4*3fac(2)y=5*4*3fac(2)第第4 4次调用:次调用:y=5*4*3*2fac(1)y=5*4*3*2fac(1)第5次调用:y=5*4*3*2*1*fac(0)第26页/共92页第二十六页,共93页。27例:用递归法将一个(y )整数n拆成一位一位的输出。如输入483,拆成3位4、8、3,按位输出4、8、3,位数任意。 n n=10第27页/共92页

15、第二十七页,共93页。28#include “stdio.hvoid convert( long n) long i; if (n10) printf (“%ld “, n); return ; else printf (“%ld “, n%10);i=n/10; convert(i); 返返回回( (f f n nh hu u ) )convert(438)convert(438)打印打印8 8convert(43)convert(43)打印打印3 3convert(4)convert(4)打印打印4 4返返回回( (f f n nh hu u ) )在在convert(i)convert(

16、i)后加一条语句:后加一条语句:printf(“n#”)printf(“n#”);观察;观察(gunch)(gunch)打印几次打印几次“#”“#”第28页/共92页第二十八页,共93页。29 main() long x; scanf(“%ld”,&x); convert(x); 输入(shr):1234 输出:4321 考虑:如何(rh)打印出 1234 的顺序?第29页/共92页第二十九页,共93页。30void convert( long n) long i; if (n0)fun(k-1);printf(“%d”,k);0 1 2 3 4 5第32页/共92页第三十二页,共93页。33

17、设计函数int ArrayMin(int d ,int n);其中d为数组,n为数组元素(yun s)个数,ArrayMin返回d中最小元素(yun s)。 dn-1 当n=1 f(d,n)= dn-11 第33页/共92页第三十三页,共93页。34#include stdio.h int ArrayMin(int d,int n) if (n=1) return dn-1; else if (dn-1 05.求杨辉三角形中第n行(n0)的第k个系数(0kn)。6.1k=0ork=n7.C(n,k)=8.C(n-1,k-1)+C(n-1,k)0kn9.编写程序实现十进制转换为S进制(2S9)。

18、第35页/共92页第三十五页,共93页。36第八章函数(hnsh)数组作为函数参数数组元素作函数参数与用简单( jindn)变量作实参一样,是单项传递,即“值传递”举例第36页/共92页第三十六页,共93页。37第八章函数(hnsh)main( ) int mul(int , int); int a=2, 2, 2, 2, b=4, 4, 4, 4, c4, k ; for (k=0 ; k 4 ; k+) ck=mul(ak, bk); for (k=0 ; k 4 ; k+) printf(“%d, %d, %d n”, ak, bk, ck); int mul(int x, int y)

19、 x= x+2 ; y= y+2 ; return (x*y) ; 第37页/共92页第三十七页,共93页。38第八章函数(hnsh)数组名作函数参数在主调函数和被调函数中都要定义数组实参数组和形参数组类型须一致实参数组和形参数组大小可一致或不一致形参数组可不指定大小传递方式是地址传递,即把实参数组的起始地址串地传递给形参数组,实参数组与形参数组共同(gngtng)占用同一段内存单元(p166 图8.14)形参数组中各元素值的变化将引起实参数组中各元素值同时变化举例第38页/共92页第三十八页,共93页。39main()intmul(int,int,int,int);inta=2,2,2,2,

20、b=4,4,4,4,c4,k;mul(a,b,c,4);for(k=0;k4;k+)printf(“%d,%d,%dn”,ak,bk,ck);intmul(intx,inty,intz,intn)intj;for(j=0;jn;j+)xj=xj+2;yj=yj+2;cj=xj*yj;第39页/共92页第三十九页,共93页。40第八章函数(hnsh)值传递时最多只能返回一个值,而地址传递隐含地可返回多个值多维数组名作函数参数(cnsh)与前面数组名作参数(cnsh)一样,但在被调函数中对数组的定义可指定每一维的大小,也可省略第一维的大小说明。例如:intarray320;或intarray20;

21、但不能写成:intarray;或intarray3;第40页/共92页第四十页,共93页。41例:有以下数组定义(dngy)和f函数调用语句,则在f函数的说明中,对形参数组array的错误定义(dngy)方式为_inta34;f(a);A)f(intarray6)B)f(intarray3)C)f(intarray4)D)f(intarray25)B例:假设有子串“ould”,任意输入一个句子,并在句子中寻找给出的匹配子串,若找到,打印整个(zhngg)句子,找不到,继续输入句子直到输入一个空句子。第41页/共92页第四十一页,共93页。42举例:模拟投骰子n次,观察(gunch)1到6的每个

22、数值出现的次数#includestdio.h#includestdlib.hvoidp_rand(intn,intA)inti,x;for(i=1;i=n;i+)x=1+rand()%6;Ax+;第42页/共92页第四十二页,共93页。43main()voidp_rand(int,intA);inti,k;intnum7=0;printf(请输入(shr)投骰子的次数:);scanf(%d,&k);p_rand(k,num);for(i=1;i=6;i+)printf(n%d:%d,i,numi);第43页/共92页第四十三页,共93页。44注意:重复调用rand函数可产生一系列伪随机数,但每

23、次执行程序时,这组数值是重复的。为了(wile)调整为在每次执行程序时产生不同的随机数系列,用一个函数srand()取不同的种子,即可在每次执行程序时产生不同的随机数系列。上面的主程序可改成:第44页/共92页第四十四页,共93页。45#include“stdlib.h”main()voidp_rand(int,intA);inti,k,seed;intnum7=0;printf(“请输入(shr)投骰子的次数:”);scanf(%d,&k);printf(“请输入(shr)一个随机正整数:”);scanf(%d,&seed);srand(seed);p_rand(k,num);for(i=1

24、;i=6;i+)printf(n%d:%d,i,numi);第45页/共92页第四十五页,共93页。46第八章函数(hnsh)例1:P166的例8.13、P168的例8.14例2:编制折半检索函数,其功能是判断在递增(dzng)排序的数组v中,是否出现值为x的元素。如果在v中有元素值为x,则函数返回该元素的位置(数组元素下标的序号);否则返回-1。第46页/共92页第四十六页,共93页。47第八章函数(hnsh)1.置数组v的下界low为0,上界high为n-1(n为数组元素个数)2.当lowhigh,函数返回-1值,表示(biosh)在数组中找不到其值为x的元素3.置mid为low与high

25、的中间值4.若vmid的值等于x,返回函数值mid5.若vmid的值x,置high=mid-1第47页/共92页第四十七页,共93页。48注:一般来说,线性查找方法适用(shyng)于小数组或未排序数组。但对于大数组,线性查找是低效的。如果是排序数组,则高速折半查找效率最高第48页/共92页第四十八页,共93页。49下面add函数的功能(gngnng)是求两个参数的和,并将和值返回调用函数。函数中错误的部分是_;改正后为_voidadd(floata,floatb)floatc;c=a+b;returnc;错误错误(cuw)(cuw):void void 改正:改正:float add(flo

26、at a, float b)float add(float a, float b)第49页/共92页第四十九页,共93页。50下面(ximian)是一个计算阶乘的程序。程序中的错误语句是_,应改为_doublefactorial(int);main()intn;printf(“Enteraninteger:”);scanf(“%d”,&n);printf(“nn%d!=%lgn”,n,factorial(n);doublefactorial(intn)doubleresult=1.01;while(n1|n1 | n1 | n1 & n1 & n170) result*=(double)n-

27、;第50页/共92页第五十页,共93页。51下面(ximian)程序的运行结果是_main()inti=2,x=5,j=7;fun(j,6);printf(“i=%d;j=%d;x=%dn”,i,j,x);fun(inti,intj)intx=7;printf(“i=%d;j=%d;x=%dn”,i,j,x”);i=7; j=6; x=7 i=7; j=6; x=7 i=2; j=7; x=5i=2; j=7; x=5第51页/共92页第五十一页,共93页。52第八章函数(hnsh)局部变量和全局变量局部变量一个函数内部定义的变量是局部变量,它只在本函数范围内有效不同函数中可使用同名的变量,但

28、它们代表不同的对象,各占有不同的内存单元,互不干扰形参是局部变量在函数内部,可以(ky)在复合语句中定义变量,这些变量只在复合语句中有效举例第52页/共92页第五十二页,共93页。53例:以下正确的说法是_如果在一个函数中的复合语句中定义了一个变量,则该变量只在该复合语句中有效在该函数中有效在本程序范围(fnwi)内均有效为非法变量A第53页/共92页第五十三页,共93页。54第八章函数(hnsh)main( ) void f1(int,int); int a,b; a=5; b=10; f1(a,b); printf(”a=%d,b=%d n”,a,b) ;void f1(int x,int

29、 y) int a,b; a=x+10; b=y+10; printf( ”a=%d,b=%d n”,a,b);a=15, b=20a=15, b=20a=5, b=10a=5, b=10第54页/共92页第五十四页,共93页。55第八章函数(hnsh)全局变量在 所 有 函 数 之 外 定 义 的 变 量 是 全 局 变 量 , 即 外 部 变 量 , 它 有 效(yuxio)范围为从定义变量的位置开始到源文件结束举例第55页/共92页第五十五页,共93页。56例:以下程序的正确运行的结果(jigu)是_voidnum()externintx,y;inta=15,b=10;x=a-b;y=a

30、+b;intx,y;main()inta=7,b=5;x=a+b;y=a-b;num();printf(“%d,%dn”,x,y);A)12,2B)不确定C)5,25D)1,12C第56页/共92页第五十六页,共93页。57第八章函数(hnsh)intx1=30,x2=40;main()voidsub(int,int);intx3=10,x4=20;sub(x3,x4);sub(x2,x1);printf(”%d,%d,%d,%dn”,x3,x4,x1,x2);voidsub(intx,inty)x1=x;x=y;y=x1;1010,2020,4040,4040例例1 1:第57页/共92页第

31、五十七页,共93页。58第八章函数(hnsh)inta=5,b=7;main()intplus(int,int);inta=4,b=5,c;c=plus(a,b);printf(”A+B=%d,a=%d,b=%dn”,c,a,b);intplus(intx,inty)intz;z=x+y;a+;b+;printf(”a=%d,b=%dn”,a,b);return(z);9,4,56,8例例2 2:第58页/共92页第五十八页,共93页。59第八章函数(hnsh)intk=1;main()voidfun(int);intj=4;fun(j);printf(”(1)%d,%dn”,j,k);voi

32、dfun(intm)m+=k;k+=m;chark=B;printf(”(2)%dn”,k-A) ;printf(”(3)%d,%dn”,m,k);(1) 4, 6(2) 1(3) 5, 6例例3 3:第59页/共92页第五十九页,共93页。60第八章函数(hnsh)在同一个源文件中,全局变量与局部变量同名时,则在局部变量的作用范围内,全局变量不起作用一个函数中改变了全局变量的值,会影响到其它函数利用全局变量的性质,可以从函数中得到一个以上的返回值全局变量在程序的整个执行过程中都占用(zhnyn)存储单元使用全局变量会使函数的通用性降低全局变量使用过多,会降低程序的清晰度第60页/共92页第六

33、十页,共93页。61第八章函数(hnsh)变量的存储类别动态存储方式与静态存储方式静态存储方式在程序运行期间分配固定的存储空间的方式动态存储方式在程序运行期间根据需要进行动态的分配存储空间的方式内存中供用户使用的存储空间分三部分(bfen):程序区静态存储区动态存储区第61页/共92页第六十一页,共93页。62第八章函数(hnsh)w静态存储区w存放全局变量和静态变量,直到整个程序结束才被释放w动态存储区w存放形参、自动变量、现场保护和返回信息w存储类别种类(zhngli)w自动的(auto)w静态的(static)w寄存器的(register)w外部的(extern)第62页/共92页第六十

34、二页,共93页。63第八章函数(hnsh)auto变量函数中的局部变量,前面没有声明为static,它们(tmen)都是动态地分配存储空间。例如:main()intx,y;charc1,c26;floatu,v;.intf(inta)intc,d=5;.第63页/共92页第六十三页,共93页。64第八章函数(hnsh)register变量与auto相似,但变量的值保存在CPU的寄存器中,速度快。注意局部静态变量不能定义为registerintfac(intn)registerinti,f=1;for(i=1;i=n;i+)f=f*i;return(f);如n的值大,则能节省许多(xdu)执行时

35、间。第64页/共92页第六十四页,共93页。65第八章函数(hnsh)static局部变量在函数体内用static说明的变量称为静态局部变量,它的值在函数调用结束后不消失(xiosh)而保留原值,例1:main()intfunc(int,int);intk=4,m=1,p;p=func(k,m);printf(“%d,”,p);p=func(k,m);printf(“%dn”,p);第65页/共92页第六十五页,共93页。66第八章函数(hnsh)intfunc(inta,intb)staticintm=0,i=2;i=i+m+1;m=i+a+b;return(m);结果结果(ji gu)(j

36、i gu):8 , 178 , 17第66页/共92页第六十六页,共93页。67第八章函数(hnsh)例2:i=1 j=1i=1 j=1next(i)=1next(i)=1last(i)=10last(i)=10new(i+j)=12new(i+j)=12i=1 j=2i=1 j=2next(i)=2next(i)=2last(i)=9last(i)=9new(i+j)=13new(i+j)=13i=1 j=3i=1 j=3next(i)=3next(i)=3last(i)=8last(i)=8new(i+j)=14new(i+j)=14第67页/共92页第六十七页,共93页。68例3:mai

37、n()inta=2,i;for(i=0;i=0;k-) for(k=strlen(num)-1;k=0;k-) printf(%c,numk); printf(%c,numk); 第79页/共92页第七十九页,共93页。80convert(long s,char num,int base)convert(long s,char num,int base) int i=0,j; int i=0,j; do do j=s%base; numi+=(j=9) ? j+0 : j+a-10; s=s/base; while(s!=0); while(s!=0); numi=0 ; 第80页/共92页第

38、八十页,共93页。81例8.14书上作业(p186)分析:要编制的函数input_stu(intsNM):输入N个学生的成绩aver_stu(int sNM),float a_sN):计算每个学生的平均成绩aver_cor(intsNM),floata_cM):计算每门课的平均成绩highest(intsNM):找出最高分数(fnsh)所对应的学生和课程s_diff(floata_sN):计算方差并显示计算结果main()函数中有局部变量:intscoreNM:存放N个学生M门课的成绩floatavr_sN:存放N个学生的平均成绩floatavr_cM:存放M门课程的平均成绩第81页/共92页

39、第八十一页,共93页。82第八章函数(hnsh)例8.15书上作业(zuy)(p186)分析:要编制的函数input_worker(intnumN,charnameN8)输入N个职工的工号和姓名sort(intnumN,charnameN8)按职工号升序排序search(intnumber,intnumN,charnameN8)根据输入的职工号查找职工的姓名,用折半法第82页/共92页第八十二页,共93页。83第九章预处理命令(mnglng)C语言提供三种预处理功能宏定义文件包含条件编译宏定义不带参数的宏定义#define标识符字符串例:#definePI3.14159#defineN10宏定

40、义是用宏名代替一个字符串,只是作简单的置换(zhhun),不作正确性检查。第83页/共92页第八十三页,共93页。84第九章预处理命令(mnglng)宏定义不必在行末加分号宏名的有效范围(fnwi)为定义命令之后到本源文件结束,可以用#undef命令终止宏定义的作用域例:#defineA10main().#undefAf1()第84页/共92页第八十四页,共93页。85第九章预处理命令(mnglng)程序中用“”括起来的字符串内的字符,即使与宏名相同,也不进行置换宏定义与定义变量不同,它只作字符替换(thun),不分配内存空间带参数的宏定义#define宏名(参数)字符串例:#defineS(

41、a,b)a*barea=S(4,5);注意宏展开时的括弧问题(二义性问题)宏定义时,宏名与带参数的括弧之间不能有空格#defineS(r)PI*r*r第85页/共92页第八十五页,共93页。86第九章预处理命令(mnglng)函数调用时,先求出实参表达式的值,然后代入形参。而带参的宏只进行字符替换函数调用是运行时处理的,分配临时内存单元。而宏展开则是在编译时进行的,在展开时不分配内存单元,不进行值的传递处理,也没有“返回值”的概念函数中的实参和形参都要定义类型,二者类型要一致(yzh)。而宏不存在类型问题宏替换只占编译时间,而函数调用则占运行时间第86页/共92页第八十六页,共93页。87已知

42、#defineN3;的宏定义,执行(zhxng)语句i=N*3后,i的值是369A、B、C答案都不对答案:答案:D D,注意是宏定义后的分号,注意是宏定义后的分号(fnho)(fnho)引起的错引起的错第87页/共92页第八十七页,共93页。88第九章预处理命令(mnglng)例:写出结果(jigu)#include#defineBOT(-2)#defineTOP(BOT+5)#definePRI(arg)printf(“%dn”,arg)#defineFOR(arg)for(;(arg);(arg)-)main()inti=BOT,j=TOP;FOR(j)switch(j)case1:PRI

43、(i+);case2:PRI(j);break;default:PRI(i);-2 2-2 1第88页/共92页第八十八页,共93页。89第九章预处理命令(mnglng)“文件(wnjin)包含”处理形式(P194图9.2)#include“文件(wnjin)名”#include举例:P195例9.6第89页/共92页第八十九页,共93页。90第九章预处理命令(mnglng)条件编译(biny)形式1:#ifdef标识符程序段1#else程序段2#endif形式2:#ifdef标识符程序段1#endif第90页/共92页第九十页,共93页。91第九章预处理命令(mnglng)举例(jl):#d

44、efineDEBUGmain()inta=20,b=10,c;c=a/b;#ifdefDEBUGprintf(“a=%o,b=%o”,a,b);#endifprintf(“c=%d”,c);c=2c=2见P198 例9.7第91页/共92页第九十一页,共93页。92感谢您的欣赏(xnshng)!第92页/共92页第九十二页,共93页。内容(nirng)总结1。编写程序实现十进制转换为S进制(2S9)。实参数(cnsh)组和形参数(cnsh)组大小可一致或不一致。printf(请输入投骰子的次数:)。若乘积为一位数,则该乘积就是数列的后继项。printf(%c,numk)。s=s/base。numi=0。s_diff(float a_sN):计算方差并显示计算结果。float avr_sN:存放N个学生的平均成绩。宏替换只占编译时间,而函数调用则占运行时间第九十三页,共93页。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号