基础课件严冬梅1-第5章函数初步_第1页
基础课件严冬梅1-第5章函数初步_第2页
基础课件严冬梅1-第5章函数初步_第3页
基础课件严冬梅1-第5章函数初步_第4页
基础课件严冬梅1-第5章函数初步_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

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

文档简介

程序设计基础(TheFoundationof第5数(Function第5数教学要了解模块化程序设计思想掌握C程序的结构熟练掌握函数的定义、说明和调用格式掌握变量的作用域和生命期掌握函数间简单的数据传递掌握编译预处理语句第5数重函数的定义、说明和调用;变量的作用域和生命期;函数间数据传递的方法;宏定义。难函数的定义、说明和调用;变量的生命期;条件编译。第5数5.1模块化软件与5.2函数的定义、说明和调5.3作用域和生命5.4函数间的数据5.5编译预处5.1.1模块化软件及其基本思把软件设计成相对独立、功能单一的若干模块组成,又称结构化程序设计。优越逻辑清自顶向5.1.2C语言程序的模块结一个完整的语言程序由一个或多个源文件组成,每个源文件又由一或个称为“数”的程序模块组成,而且每个函数又都具有相对独立的单 能(有时还具有明显的界面)——模块化结构通过函数,可以把一个复杂任务分解成为若干个易计思想。5.1.3C程序的函主函数(有且仅有一个主函数main()是程序执行的函数,但不可以被调用。而其他一般函数既可以调用也可以被调用。5.1.3C程序的函库函库函数或标准函数,是由编译系统预定义的,库函数都按功能分类,集中说明在不同的头文就可直接使用该文件中定义的函数。5.1.3C程序的函自定义函用户根据需要将某个具有相对独立功能的程序块定义为函数,称自定义函数。{

{}}}}}{}}}}{}}}{}{ 5.2.1函数定格式 类型数据类数名([形式参数说明表 执行语句}说明

void{╳void╳{……}数据类型为返回值的类型,void为表示无返回值缺省时voidfunc(intx,inty){……函数定义不能嵌5.2.2函数说如果调用一个函数其定义出现在该函数的调用之后,则在调用前必须说明。函数的说明也叫作函数原型,库函数的函数原型格式 类型数据类型函数名([形参列表说明函数说明的返回值类型、形参均与函数定义相同;形参只需写明数据类型即可,编译系统自动进行参数的类型检查,例如:void5.2.3函数的调格式:函数名(实参表调用函数的形式函数无返回函数调用以语句函数有返回出现在表达式中(变量应出现的位置n=作为函数实printf(“%d\n”,m=5.2.3函数的调说明实参为常形参和实参的数据类型要匹有返值时,返回值的类型与其出现位置的类型一函数的调用可以嵌5.2.3函数的调return语格函数无返回无返回语句或函数有返回return(返回值);或return返回值5.2.3函数的调return语说返回值最好与函数返回类型一致,出现返回值可以为任意值,当类型为指针时,#include<stdio.h>intmain(){intn;floatr,scanf("%d",&n);r=printf("%d!=%f\n",n,r);returnfloatfloatfac(int{floatvalue=1;for(;i>1;i--)value*=i;returnvalue;}floatfac(int{floatvalue=1;inti;for(i=1;i<=n;i++)value*=i;return}【例5.1】求#include#include<stdio.h>intmain(){intfloatr,r=fac(n);return0;}floatfac(int{floatintfor(i=1;i<=n;i++)value*=i;return}作用域和生命5.3.1变量的作用变量的作用域(可见性)

void{int该变量参加各种数据处理 }变量的作用域由变量定义的位置变量(局部变量定义位置:在某个函数或分程作用域:定义它的函外部变量(全局变量定义位置:在所有函数之作用域:所有函数(全局

intvoid{}作用域和生命全局变量作用域的特殊{}intvoid}作用域和生命5.3.2变量的生命变量的生命期(存在性)--也称变量 ,即量在程序运行期间存在的时限,也就是变量占有其空间的时限。变量的生命期由变 的位置决程序(代码)区:目标代静态(全局)数据、静态数整个程序(全局堆栈:自动变所在函数或分程序(局部堆:动态申请的分配到释放(或程序运行结束作用域和生命自动型(堆栈型)变量定义:只能在函数 或分程序 :堆栈区分配释放由编译作用域:局生命期:局初始化:可进行多次,未初始化注意:auto可以缺省,不同函

后进先出进 出堆作用域和生命寄存器 定义:必须 变:CPU的通用寄存器并非定义register即存入寄存器通用寄存器字作用域:局生命期:局初始化:可进行多次,未初始化则为随机以提高运行速度作用域和生命静态型变定义 静态、外部静/*1.c:静 作用域静态:局外部静态:全生命期:均为全

staticinti;*外部静态*/intj;voidf1(){i+=10……/*2.cvoidf2(){i+=10;j+=10;√……初始化:只进行一次,未初始化则为0注意:静态数据的作用域与生命期不一致,其值不因从函数中退出而,表现在多次调用该作用域和生命【5.2 int{intfor(i=0;i<3;i++)f();return0;}voidf{staticinti;静态}intj=0;i+=10;j+=10;printf("i=%d,j=%d\n",i,作用域和生命外部参照型定义及说明:分定义某一编译单位的缺 类型的外部/*1.cexternintvoidf1(){……}intn;

其他源文件定/*1.cintvoidf1(){……储作用域:全生命期:全

/*2.c*/externintn;voidf2(){……初始化:只进行一次,未初始化则为0优点:增加各函之数联系的 形参个数,也可以解决源程序的多个文件分开编译时可能带来的互不协调问题。5.3作用域和生命【例5.3】写出运行结#include<stdio.h>intn;voidfunc(int{intstaticintb*=2;c*=2;n++;}int{inta=0;a++;n++;printf("(%d)MAIN:a=%d\n",n,a);func(a);a++;n++;printf("(%d)MAIN:a=%d\n",n,a);func(a);return0;}5.3作用域和生命5.3.3函数的作用函数的作用域(可见性),即在什么范围内可以用该函数函数的作用域由函数定义的位置决定,可以说所有函数均为外部函数数生命/*1.cvoidf1(){……/*2.cexternvoidf1();voidf2(){f1();……}

/*1.cstaticvoidf1(){……}voidf2(){f1();……}staticextern5.45.4.1使用返回值传递数单向传递被调用函数->调用函return(表达式)只能返回一个返回类型与接收变量一致,若不一致则以函数返回类型为准5.4【例5.4】将大写字符变为小写字#include<stdio.h>intmain() charch,while((ch=getchar())!='\n')return}charlower(char{if(c>='A'&&c=c-return}5.4.2使用全局变量传递双向传递被调用函数<->调用函多个值的传尽量少用,增加函数间通讯,不利于封【5.5】全#include<stdio.h>intmax,min;int{intnvoidmami(int);max=-32768;min=32767;printf("输入整数个数:");scanf("%d",&n);}voidmami(int{intim;printf("输入%d个整数:");for(i=0;i<n;i++){if(max<m)max=if(min>m)min=}}5.4.3使用参数传递数注意形参是数据——在未出现函数调用时并不占内存,每次调用时分配空间,接收实参值函数结束形参与实参的类型相同或赋值兼容(以形参为准形参必须为变传递方式C语言规定:实参对形参变量的数据传递是“值传递”,即单向传递。#include<stdio.h>intmain() intvoiddisplay(int,int);scanf("%d%d",&l,&n);display(l,n);return0;}voiddisplay(inta,int intfor(i=1;i<=a;{for(j=1;j<=a-i;j++)printf("for(j=1;j<=b;j++)printf("*");}}数值传形参为变量被调用函数不能改变主调函数的内存【例5.7】交换两个变量的5#include5int {intvoidswap(int,int);return0;}voidswap(intx,int{intt=x;x=y;}编译预处理是编译前做的处理,包括宏定文件包条件编编译预处理语句的特点以#开编译预处理语句不是C语句,没有分编译预处理语句必须一句一宏定格式:#define替例如#defineYES0宏定宏定义的嵌W4L#defineW4#defineL(W+2)s=L*W;s=(4+2)*4;宏定带参数的#definemax(x,y)#defineisodd(x((x%2==1)?1:0)判断奇数#definePOW(x)((x)*(x))c=POW(3+4);c=((3+4)*(3+4))#definePOW(x)c=POW(3+4);c=(3+4*3+4)宏定带参数的宏与函数的区别在程序控制上,函数的调用需进行程序控制作用的转移,而宏仅是表达式的计算宏没有固定的数据类宏不存在传递数据,只是字符串的简单替宏执行速度快,但编译时花费时间长,无需分配内存。功能:把一个指定文件包括到源文格式#include文件名<>中不包括路径,是在指定路径下寻#include"文件名""中可包含指定路径,是先在指定(当前)路 #i

温馨提示

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

评论

0/150

提交评论