为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

《计算机C语言》PPT课件

2022-05-05 47页 ppt 1MB 56阅读

用户头像 机构认证

希望图文

公司秉着用户至上的原则服务好每一位客户,专注课件、范文、教案设计制作

举报
《计算机C语言》PPT课件第6章函数第1章信息技术与计算机C语言程序设计教学目标、要求了解:函数的定义函数的声明函数的调用(嵌套调用、递归调用)形式参数、实际参数和参数的传递局部变量和全局变量变量的存储类别(自动、静态、寄存器、外部)变量的作用域和生存期6.1问题的提出与程序示例计算机高级语言中的函数实际上是一个能完成某一独立功能的子程序,即程序模块。程序设计人员将大而复杂的程序分解为若干相对独立而功能单一的小程序块(函数)来进行编写,并通过在各个函数之间进行调用,来实现总体上的功能。设计C程序的过程,就是编写函数的过程,我们至少要编写一个main()...
《计算机C语言》PPT课件
第6章函数第1章信息技术与计算机C语言程序设计教学目标、要求了解:函数的定义函数的声明函数的调用(嵌套调用、递归调用)形式参数、实际参数和参数的传递局部变量和全局变量变量的存储类别(自动、静态、寄存器、外部)变量的作用域和生存期6.1问题的提出与程序示例计算机高级语言中的函数实际上是一个能完成某一独立功能的子程序,即程序模块。程序设计人员将大而复杂的程序分解为若干相对独立而功能单一的小程序块(函数)来进行编写,并通过在各个函数之间进行调用,来实现总体上的功能。设计C程序的过程,就是编写函数的过程,我们至少要编写一个main()函数。执行C程序,就是执行相应的main()函数,如果在执行过程中遇到其它函数,则调用其它函数,调用完后,返回到刚才调用函数的下一条语句继续执行,而其它函数也只有在执行main()函数的过程中被调用时才会执行。程序示例#includevoidmain(){inta,b,c;scanf("%d,%d",&a,&b);c=max(a,b);printf("max=%d\n",c);}intmax(intx,inty){intz;if(x>y)z=x;elsez=y;return(z);}intmax(intx,inty);函数声明函数调用函数定义6.2函数基础函数定义就是定义函数所能实现的功能,即告诉编译系统函数所做的工作。函数声明即函数原型,就是告诉编译系统函数的名称、类型和形式参数表的构成。函数的调用在C语言中除main()由系统自动调用外,其它函数都是由main()直接或间接调用的。函数定义好之后,就可以通过调用的方式使用这个函数。如果函数定义在前,调用此函数在后,这种调用是合法的;但是如果函数定义在后,而调用此函数在前,就会产生编译错误。为使函数的调用不受函数定义位置的影响,可以在调用函数之前进行函数的声明。函数的调用过程分3步:1.参数传递;2.函数体的执行;3.返回。在一个函数体内允许有一个或多个return语句,一旦执行到其中的某一个return语句时,直接返回调用位置继续往下执行。6.2函数基础形式参数是变量程序在编译时,并不为形参分配内存单元,只有此函数被调用时,形参才临时占用存储空间,并从调用函数中相应实参获得值;当调用结束后,形参所占的存储单元有被释放。实际参数是表达式(常量、变量或表达式)与函数定义中的形参一一对应,即个数相等、次序一致且对应的数据类型相同或相容。函数从用户使用角度上看,可分为标准函数(库函数)和用户定义函数。案例回放#includevoidmain(){intmax(intx,inty);inta,b,c;scanf("%d,%d",&a,&b);c=max(a,b);printf("max=%d\n",c);getch();/*使程序暂停,按任一键继续*/}intmax(intx,inty)/*定义函数max()*/{intz;if(x>y)z=x;elsez=y;return(z);}案例对比voidmain(){intmax(intx,inty);/*函数说明,可以省略*/inta,b,c;scanf("%d,%d",&a,&b);c=max(a,b);printf("max=%d\n",c);getch();/*使程序暂停,按任一键继续*/}#include/*定义一个函数max()*/intmax(intx,inty){intz;if(x>y)z=x;elsez=y;return(z);}6.3函数的定义[类型说明符]函数名([形式参数表]){声明部分;语句;}省略类型说明符,C编译系统确认函数返回int数值;类型说明符为void,函数无返回值;省略形式参数表列,此函数为无参函数。函数不能嵌套定义,即所有函数都是平行的,定义函数时是相互独立的,没有从属关系,但是函数可以相互调用。6.3.1函数定义的形式函数返回值的数据类型说明:6.3函数的定义6.3.2函数的返回值函数的返回值是通过函数中的return语句获得的,一个函数只能返回一个值,但是函数中可以有一个以上的return语句。函数值的类型,在定义函数时指定(缺省值为int类型,不返回值为void类型)。如果函数值定义类型与return语句返回的表达式值类型不一致,以定义类型为准。如果被调用函数中没有return语句,函数返回一个不确定的值。6.4函数调用函数语句函数名(实参表列);如:printf(“max=%d”,c);函数表达式函数为表达式的一部分如:c=2*max(a,b);函数参数函数的调用作为另一个函数的实参如:m=max(a,max(b,c));函数调用一般形式函数名(实际参数表);函数调用的语法格式6.4函数调用函数的嵌套调用在调用一个函数的过程中,又调用了另一个函数。其关系如图所示。嵌套调用案例一、写出下列程序的运行结果1.#includefun(inta,intb){if(a>b)return(a);elsereturn(b);}voidmain(){intx=3,y=8,z=6,r;r=fun(fun(x,y),x*z);printf("%d\n",r);}结果:18案例2.#includeintfun(intx,inty){return(y-x)*x;}voidmain(){inta=3,b=4,c=5,d;d=fun(fun(a,b),fun(a,c));printf("%d\n",d);}结果:96.5函数说明如果使用库函数,一般应在文件开头用#include命令将被调库函数所需的相关的信息“包含”到本源程序文件中。如果使用用户自定义函数,而且该函数与调用它的函数在同一个文件中,一般应在主调函数中对被调函数作声明(用函数的原型声明)。voidmain()voidmain(){floatadd(floatx,floaty);{floatadd(float,float);……………………}}floatadd(floatx,floaty)floatadd(floatx,floaty){……}{……}6.5函数说明如果被调用函数的定义出现在主调函数之前,可以不作声明。如果在所有函数定义之前(在函数外部)已作了函数声明,则各主调函数不必对被调函数作声明。charletter(char,char);/*函数声明*/floatf(float,float);/*函数声明*/inti(float,float);/*函数声明*/voidmain(){……}charletter(charc1,charc2){……}floatf(floatx,floaty){……}inti(floatj,floatk){……}6.6参数传递回顾1.定义函数时,形式参数不占内存单元,只能函数发生调用时,形参才被分配内存单元,而调用结束后,形参所占的内存单元被释放。2.实参可以是常量、变量和表达式(值一定是确定的)。3.定义函数时,需指定形参的类型。4.形参和实参的类型相同或赋值兼容。6.6.1形参和实参参数传递—即虚实结合,调用函数将实际参数的信息传递给被调用函数的形式参数,使形式参数具有确切的含义。C语言规定,实参变量对形参变量的数据传递是单向传递,即值传递,(在内存中,实参单元和形参单元占用不同的内存单元)。6.6.2基本数据类型的形参当形参的数据类型为基本数据类型时,参数传递方式为值传递,被调用函数本身不对实参进行操作,即使形参的值在函数中发生了变化,实参的值也完全不会影响,仍为调用前的值,这种传递方式减少了调用函数与被调用函数之间的数据依赖。例如:输入a,b两个整数,用函数实现按大小顺序输出。#includevoidswap(intx,inty){inttemp;temp=x;x=y;y=temp;}voidmain(){inta,b;scanf("%d,%d",&a,&b);if(avoidmain(){inta,b;int*p1,*p2;a=100;b=10;p1=&a;p2=&b;printf("%d,%d\n",a,b);printf("%d,%d\n",*p1,*p2);}6.6参数传递指针变量作函数参数时,是将一个变量的地址传送到另一个函数中。是值传递。可以实现被调函数对指针所指变量的修改。即通过传递指针变量的值,调用函数和被调用函数可以操作相同的存储单元。6.6.3形参的数据类型是指针类型案例例如:输入a,b两个整数,用函数实现按大小顺序输出。#includevoidswap(int*p1,int*p2){inttemp;temp=*p1;*p1=*p2;*p2=temp;}voidmain(){int*pt1,*pt2,a,b;scanf("%d,%d",&a,&b);pt1=&a;pt2=&b;if(avoidswap(int*p1,int*p2){int*p;p=p1;p1=p2;p2=p;}voidmain(){int*pt1,*pt2,a,b;scanf("%d,%d",&a,&b);pt1=&a;pt2=&b;if(a1n!=floatfac(intn){floatf;if(n<0)printf("n<0,dataerror!");elseif(n==0||n==1)f=1;elsef=fac(n-1)*n;return(f);}voidmain(){intn;floaty;printf("inputaintegernumber:");scanf("%d",&n);y=fac(n);printf("%d!=%15.0f",n,y);}案例2.有5个人坐在一起,问第5个人多少岁?他说比第4人大2岁,第4人比第3人大2岁,以此类推,第1人10岁,求第5个人多大?age(n)=10n=1age(n-1)+2n>1分析:#includeage(intn){intc;if(n==1)c=10;elsec=age(n-1)+2;return;}voidmain(){printf("%d\n",age(5));}补充题3.编写程序将输入的十进制整数转换为二进制输出。#includevoidmain(){voidfun(int);intn;       scanf(“%d”,&n);fun(n);}voidfun(intn){if(n!=1)fun(n/2);printf(“%d”,n%2);}6.8变量的存储类别C语言中说明变量的类型,可以确定该变量占用内存空间的大小。在C语言中可以说明变量的存储类别,不同的存储类别可以确定一个变量的作用域和生存期。C语言中变量的存储类别自动变量(auto)、寄存器变量(register)、外部变量(extern)和静态变量(static)。用户存储空间程序区、静态存储区和动态存储区。自动变量和寄存器变量存放在动态存储区,外部变量和静态内部变量存放在静态存储区。6.8.1局部变量与全局变量局部变量在函数体内或分程序内定义,存储在动态存储区。在函数中定义的局部变量,只在该函数内有效;函数被调用时分配存储空间,调用结束就释放。在复合语句中定义的局部变量,只在该复合语句中有效;退出复合语句后,也不能再使用。定义而不初始化,则其值是不确定的。如果初始化,则赋初值操作是在调用时进行的,且每次调用都要重新赋一次初值。局部变量C语言中所有的变量都有自己的作用域。变量说明的位置不同,其作用域也不同,据此将C语言中的变量分为局部变量(内部变量)和全局变量(外部变量)。intf1(inta)/*a,b,c仅限于函数f1()*/{intb,c;……} intf2(intx)/*x,y,z仅限于函数f2()*/{inty,z;……} main()/*m,n仅限于函数main()*/{intm,n;……}6.8.1局部变量与全局变量全局变量在函数外定义,存储在静态存储区。全局变量从变量定义处开始到本程序文件的末尾有效。如果在定义点之前或其他源程序文件中要引用该变量,则应该在引用处之前用extern对变量加以声明。定义而不初始化,则其值为0。如果初始化,则赋初值操作是在编译时进行的,且只赋值一次。全局变量intp=1,q=5;floatf1(inta){intb,c;…………}charc1,c2;charf2(intx,inty){inti,j;…………}main(){intm,n;…………}a,b,c有效i,j,x,y有效m,n有效c1,c2有效p,q有效案例1.写出下列程序的运行结果。#includeinta=3,b=5;max(inta,intb){intc;c=a>b?a:b;return(c);}voidmain(){inta=8;printf("%d",max(a,b));}结果:8案例2.输入长方体的长(l)、宽(w)、高(h),求长方体体积及正、侧、顶三个面的面积。#includeints1,s2,s3;intvs(inta,intb,intc){intv;v=a*b*c;s1=a*b;s2=b*c;s3=a*c;returnv;}voidmain(){intv,l,w,h;clrscr();printf("\ninputlength,widthandheight");scanf("%d%d%d",&l,&w,&h);v=vs(l,w,h);printf("v=%ds1=%ds2=%ds3=%d\n",v,s1,s2,s3);}案例1.写出下列程序的运行结果。#includevoidmain(){intmax(intx,inty);externA,B;/*外部变量说明*/printf("%d",max(A,B));}intA=13,B=-8;intmax(intx,inty){intz;z=x>y?x:y;return(z);}结果:13案例2.求a×b和am的值。/*file1.c*/#includeintA;voidmain(){intpower(int);intb=3,c,d,m;scanf("%d,%d",&A,&m);c=A*b;printf("%d*%d=%d\n",A,b,c);d=poewr(m);printf("%d**%d=%d\n",A,m,d);}/*file2.c*/externA;power(intn){inti,y=1;for(i=1;i<=n;i++)y=A*y;return(y);}6.8.2静态变量静态变量可以分为内部静态变量和外部静态变量。静态变量函数调用结束后不释放内存单元,保留其值。定义格式内部静态变量在函数体或分程序内定义,且在本函数体或分程序内有效(即用static声明的局部变量)。外部静态变量在函数体外定义,且在本源程序文件内有效(即用static声明的全部变量)。定义而不初始化,则其值为0。如果初始化,则赋初值操作是在编译时进行的,且只赋值一次。static数据类型变量表;案例#includef(inta){autointb=0;staticintc=3;/*内部静态变量*/b++;c++;return(a+b+c);}voidmain(){inta=2,i;for(i=0;i<3;i++)printf("%d",f(a));}结果:7896.8.3寄存器变量一般情况下,变量的值存放在内存中,对于频繁使用的变量可以将其值存到CPU中的寄存器中,以提高执行的速度。定义格式寄存器变量的实现与硬件配置有关。只有很少的变量可以保存在寄存器中。register说明只适用于自动变量和函数的形参。register数据类型变量表;总结C语言中的每个变量和函数都有两个属性:数据类型数据的存储类别变量声明的一般格式[存储类别]类型说明符变量表;存储类别为auto、register、static和extern缺省值为auto案例#includeintfac(intn){registerinti,f=1;for(i=1;i<=n;i++)f=f*i;return(f);}voidmain(){inti;for(i=1;i<=5;i++)printf("%d!=%d\n",i,fac(i));}例如:求n!补充题1.以下程序的功能是计算函数的值,请选择填空。F(x,y)=(x+y)/(x-y)+(z+y)/(z-y)#includefloatf(float,float);voidmain(){floatx,y,z,sum;scanf("%f%f%f",&x,&y,&z);sum=f()+f();printf("sum=%f\n",sum);}结果:x+y,x-yz+y,z-yfloatf(floata,floatb){floatvalue;value=a/b;return(value);}#includesub(intk,intn){inta1,a2;a2=;a1=;if((k%3==0&&a2==5)||(k%3==0&&a1==5)){printf("%d",k);n++;returnn;elsereturn-1;}补充题2.以下程序是选出能被3整除且至少有一位是5的两位数,打印出所有这样的数,请填空。voidmain(){intn=0,k,m;for(k=10;k<100;k++){m=sub(k,n);if(m!=-1)n=m;}printf("\nn=%d",n);}结果:k/10k-a2*10补充题3.有以下程序,输出结果是什么?#includeintabc(intu,intv);voidmain(){inta=24,b=16,c;c=abc(a,b);printf("%d\n",c);}结果:8intabc(intu,intv){intw;while(v){w=u%v;u=v;v=w;}returnu;}补充题4.有以下程序,输出结果是什么?#includevoidfun(inta,intb,intc){a=456;b=567;c=678}voidmain(){intx=10,y=20,z=30;fun(x,y,z);printf("%d,%d,%d\n"z,y,x);}结果:30,20,10Theend
/
本文档为【《计算机C语言》PPT课件】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索