可靠性与系统工程学院生专业课课件-c语言程序设计cpro function函数参数和函数值_第1页
可靠性与系统工程学院生专业课课件-c语言程序设计cpro function函数参数和函数值_第2页
可靠性与系统工程学院生专业课课件-c语言程序设计cpro function函数参数和函数值_第3页
可靠性与系统工程学院生专业课课件-c语言程序设计cpro function函数参数和函数值_第4页
可靠性与系统工程学院生专业课课件-c语言程序设计cpro function函数参数和函数值_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

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

文档简介

主要内函数的函数参函数的调用(嵌套、递归变量的作用域及变量 类函数和外部函/*不/*不需返回数据return表达式;/*需要返回数据intsum(inta,intb{intc=a+return}voidprintstar({voidmain({n=sum(5,10);//表达式中调printstar//单语句调}函数定义时未说明类型,默认为int值型). 行.#include<math#include<stdio#include<math#include<stdiovoid{floatx,scanf(“%f”,y=sin(x*3.1415926/180);printf(“sin(%f)=%f”,x,y);}floatffloat//floatffloat//参数名可省略voidmain(){floatscanf(“%f”,printf(“y=%f\n”,}floatf(float{return //在所有函数外部进行说inta(//在所有函数外部进行说inta();intb(void{k=a();//调用…}intb()//定义m=a();//调用…}函int //定义//在某一函数内说明的函数,仅可在说明它的 被调 函inta 函数,仅在main()中进行说…k=a();//调用函…}intb()//不能在函数b()中调用函数{…int //函数a()的定义在函数b()之intintmax(inta,intbvoid{floatintn=max //错误!参数个数不m=maxxy//错误!参数类型不…}intmax(inta,intbvoid{printf(“%d”,max(a,m=max(a,max(b,…}intintintb();main({…n=b(…}intb({…a(return…}a({…}intf(intx inty,zintf(intx inty,zz=f(y)}intf1(intxintf2(intt inty,z intu,v z=f2(y) v=f1(u 条件成条件成立:进行用if语句控条件不成立:结束递给出终止条件递归:在函数调用自身时,要给出结束递例1计算阶乘n!(n≥0 的条①循环求 ,即从1开始,乘2,乘一直到

n·(n- fac(intfloatfac(int{floatf=1;intiffor(i=2;i<=n;i++)f=f*i;elseif(n==0||n==1)f=1;elsef=-1;return运行运行结果

{floatIf(n>1)f=n*fac(n-elseif(n==0||n==1)递归函数的出口递归函数的出口递归结束条return}voidmain({intn;floatprintf(“inputaintegernumber:”);scanf(%d”,&n);if(y<0)printf(“Error:%d<0”,n);elseprintf(“%d!=%.0f\n”,n,y);}例2:有个人坐在一起,问第个人多少岁?答,比第个岁。第个人说他比第个岁,第3个人比第个岁,第个人比第个岁,问计算公age(n) (n=1age(n-1)+ (n>1递归函数短小精悍,便于递归调用速度慢,内存开销大所有的递归函数都可以转化为非递归函数求解过age(5 age(5=age(4)+

=age(4=age(3)+age(3=age(2)+age(2=age(1)+age(1=

age(4=age(3=age(2=结束递归过程的条件:g(1)10#includeintage(intn intcif(n==1)c=10

elsec=age(n-1)+returnc}voidmain( printf("%d",age(5

函数的调用过void

n=

n=age(3

n=age(2

n=age(1

n=age(4cage(4c=age(5

c=

c=

c= 目标:将所有的盘子从A移到C每次只能移动始终保持大盘在下,小盘voidmovecharxchary//输出移盘{printf("%c-->%c\n",x,//将n个盘从one座借助two座移到three

算法将n-1个盘子从AB(借助将第n个盘子从A移到voidhanoi(intn,charone,chartwo,char{if(n==1)move(one,else{hanoi(n-1,one,three,move(one,hanoi(n-1,two,one,}}

将n-1个盘子从B移到(借助重复以上步voidmain({intprintf("inputthenumberofscanfprintf("thesteptomoving%3ddiskes:\n",hanoi}数组用作函数组元素(又称下标变量)实参使数组名作为函数的形数组元素作为函数组元素就是下标变量,它与普通变量并无区别。数组素只能用作函数实参,其用法与普通变函数调用时,把数组元素的值传送给形参,实现单向值传。intisalp(char写一函数,统计字符串中字母intisalp(charvoid{intcharprintf("Inputastring:");if(isalp(str[i])) }

intisalp(char{if(c>='a'&&c<='z'||c>='A'&&c<='Z')else}说明只要数组类型和函数的形参即可,并不要求函数的形参也是下标变量在普通变量或下标变量作函数参数数组名作为函数的形1用数组名作函数参数,应该在调用函数和被调用函数中分别定义数组,且数据类必须一致,否则结果将出错。如例中a[]与sco[],数据类型相同2C编译系统对形参数组大小不作检查,只是将实参数组首元素地址传给形式参数所以形参数组可以不指定大小,如a[]。注两个数组共占同一段内存单元/*求平均/*求平均值函数floataver(floata[ ints+=a[i];return} floatintprintf("\ninput5scores:\n");/*调用函数,实参为一数组名printf("averagescoreis} inta,b,c;main(){;

全局全局变量—定义在所有函数之外的变增加函数间数据联系在一个函数内变 的改变,将影响他函数中该变量的值,慎在程序全部执行过程中一直占 单使函数通用性降低,全局变量过多降程序清同一源文件中,外部变量与局部变量同

按作用域不同,分为全局变量和局部局部变量—在函定义的变只在定义它的作用域内有退出作用域时自动释放所分配储空printf(”a=%d,b=%d,c=%d”,a,b,c);func(}func({printf(”a=%d,b=%d,c=%d”,a,b,c);}例:变量的作用inta,b,c;voidmain(){

a=1;b=2;printf(”a=%d,b=%d,c=%d\n”,a,b,c);func();a=1,a=1,b=2,a=4,b=5,

运行结果func({inta,b,a=4;b=5;

printf(”a=%d,b=%d,c=%d\n”,a,b,c}

变量 类对一个变量不仅应说明其数据类型,还应说明 类型从变量值的存在时间即生存期可分为静 方式:即程序运行期间为其分配 单元是固定 类型说明P212了 外部变量extern、静态变量 ——静 方 静区动静区动区形参、局部动态、函数调用时现场保护和返回值函数调用时分调用结外部、局部静态外部、局部静态程序运行开始到结束一直编译、连接后生成的指令代数据main( sub1( 动态变量堆、变量 类main(a=1a=1{func(a=1a=1func(

main(a=1a=2{func(a=1a=2func(func(}func(}

func({

1.单元,使用完毕立即赋初值操作是在调用时进行的,且每次调1.单元,使用完毕立即赋初值操作是在调用时进行的,且每次调都要重新赋一次初如果只定义动态变量而不进行初始化,则值是不{int 动态变printf}

staticintprintf变量定变量定义时分 单元并保留储空间直至程序静态变量退出它的作用域变量依存在,保留上次调用结束时的值如果定义时不进行初始化,系统自动赋予0

变量 类寄存main({intregisterinti;printf}

了register数据类型变量名 只有局部动态变量、形式参数可作为寄器变CUP的寄存器数目有限,不能定义过多寄存器变量,一般2、3对寄存器变量的处理随系统而注注系统能识别频繁使变量,能自动放入寄存器中, 变量不必要花费时间变量 类外部变量:在函数外部定义的变量(全局变量 externint 扩展的全局变 E:\C编程——全局变量已经在某个文件中定,但可以在本件中使用。注在整个程序中只能文各文都用tn加以 。为确保某全局变量只在本文件中使用,而不被其它文 ,需要在定外部变量加一个 staticinta;//a为静态外部变——规定变量a只是本文件中的全局变量。可被本文件中的任一个数使用,但其它文件中不能使用。以免被其他文件误注意:全局变量都是静程序模块结 abcabcdefghhidefghhieg程eg程序运行轨迹mainadaeamainbffbgbhbmainchhcic#include{}运行结{}运行结_____How_do_you_do!___***********************二、多文件举例:E:\C编程文件"H.h文件#includep1(){printf("***********************\n");}p2(){printf(" 文件“#includevoid{p1(p2(p1(}类别小在C中,定义数据 数据类型 类别作用域:变量在某个文件或函数范围内是有效的,则该文件或函数是该变量的自动(动态局部)变量:离开函数局部变

静态局部变量:离开函数,值仍寄存器变量:离开函数,形式参数:可定义为自动或寄存器变全局

静态外部变量:只限本外部(非静态)变量:允许其它文变量在某一时刻是存在的,认为这一时刻属于该变期自动变量(本函数内有效动 寄存器变量(本函数内有效形式参静态局部变量(函数内有效静 静态外部变量(本文件内有效外部变量(其它文件 从变量存在的位置来分静态局部内存中静

静态外部变量(函数外部静态变量外部变量(可为其它文 内存中动 自动变量和形式参 寄存器变(4)关于作用域和生成期用图例说明变量的作用域和生成文件intmain(f2(┆f1(┆

a作用

bc生存

生存期:变量在某个时mainf2mainf1生存期:变量在某个时}f1(

b作用

变 类

{autoint ┆f2(

×

× c作用}

静态局部变 静态外部变

√(文 内 f2({staticint┆

√(所有文件根据函数能否被其他源文件调用,函数 函数和外部函大型软件 多个文件组,为现不文件能调用一数ex外函)externfunction(intx,int——如果定义函数时省略extern,则隐含为外部函注意:在整个程序中只能有一个文件真正定义该函数,其它各文件都extern加 为确保某函数只在本文件中使用,需要用static关键字staticfunction(intxint 函数规定函数function文件中不能注意:函数没文件1:externfloatfunc1(floatx1,floatx2);externintfunc2(intx1,floatx2);externvoidfunc3(charc,intnum);externintfunc4(doublex1,floatx2);externcharfunc5(charc1);voidmain({

文件1A: externfloatfunc1(floatx1,floatx2);externintfunc2(intx1,floatx2);externvoidfunc3(charc,intnum);externintfunc4(doublex1,floatx2);externcharfunc5(charc1);文件main({}}文文件2floatfunc1(floatx1,floatx2文件6externcharfunc5charc1.猴子,当即吃了瘾天早上又将子 个。以后每天一零。到第天想剩。求第一天利实现) 15、题目

void输入两个正整数m和求其最大公约数和小公倍数程序分析:利辗除法程序源代改写程序用函数

inta,b,num1,num2,temp;printf(“pleaseinput

温馨提示

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

评论

0/150

提交评论