




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第六章函数1/47函数概念C程序基本单位是什么?--函数。函数:完成一个特定功效独立程序模块.C程序由一个或者多个函数组成。必须有一个main()函数。程序从main函数开始执行,其它函数经过调用得以执行。2/47主调函数和被调函数main()是max()、scanf()、printf()主调函数。max()、scanf()、printf()是main()被调函数。#include
"stdio.h"
intmax(intx,inty){return(x>y?x:y);}voidmain(){intn1,n2,m;scanf("%d,%d",&n1,&n2);m=max(n1,n2);printf("max=%d\n",m);}main()自定义函数max()库函数printf()库函数scanf()3/47主调函数和被调函数#include"stdio.h"
voidf(){printf(“#####\n");}voidmain(){f();f();f();printf(“end\n”);}main()和f()是主调函数和被调函数关系。main()和printf()是主调函数和被调函数关系。f()和printf()是主调函数和被调函数关系。main()自定义函数f()库函数printf()库函数printf()4/47函数组织结构:main()函数1函数2……函数n函数1_1函数1_2函数n_1函数n_m……5/47模块化程序设计基本思想:将大程序按功效分成小模块。使用‘函数’好处:各模块相对独立、功效单一、结构清楚控制了程序设计复杂性防止程序开发重复劳动缩短开发周期易于维护和功效扩充6/47函数分类从用户角度分类标准函数(库函数):由系统提供用户自定义函数从函数形式有参函数无参函数:本章学习重点7/476.6库函数使用库函数应注意:函数功效函数参数数目和次序,各个参数意义和类型函数返回值意义和类型需要使用包含文件8/476.6库函数—标准输入输出函数#include"stdio.h"voidmain(){intm,n;
charch;ch=getchar();putchar(ch);putchar('\n');scanf("%d,%d",&m,&n);printf("%d,%d\n",m,n);}程序功效:输入1个字符输出这个字符输入2个整数输出这2个整数9/476.6库函数—数学函数#include"stdio.h"
#include"math.h"voidmain(){
printf("%f\n",5.2+fabs(-2.1));printf("%f\n",sqrt(16.0));}7.3000004.000000运行结果:10/476.6库函数—字符串处理函数#include"stdio.h"
#include"string.h"voidmain(){chars[80],str[]="hello";strcpy(s,str);strcat(s,"\tstudent!");puts(s);printf("%d\n",strlen(s));}hellostudent!14运行结果:11/47第六章函数6.1函数概念6.2函数定义6.3函数调用6.4递归6.5变量作用域及存放类型6.6库函数12/476.2函数定义主调函数被调函数参数返回值主调函数和被调函数信息交流(数据传递)13/476.2函数定义函数定义普通格式:返回值类型函数名(形式参数类型列表){ 申明部分 功效实现过程return表示式;}返回结果值类型正当标识符执行该函数若干条件值类型将表示式值返回给主调函数函数体14/47函数参数无参函数定义:函数功效:打印一排*有参函数定义:函数功效:打印n个*printstar(){printf(“**********\n”);}或printstar(void){printf(“**********\n”);}print_n_star(intn){inti;
for(i=1;i<=n;i++)printf(“*”);}15/47函数返回值无返回值函数定义:void空类型这类函数普通只用于屏幕输出有返回值函数定义:voidprintstar(intn){inti;
for(i=1;i<=n;i++)printf(“*”);}intmax(intx,inty){intz;z=x>y?x:y;
return(z);}由return语句实现16/47函数返回值---return语句return语句形式return(表示式);return表示式;return功效:控制程序流程,从被调函数返回到主调函数。将一个值带回到主调函数。说明:函数体中能够有多个return,但只有一个执行。return后面表示式类型和函数定义返回值类型不一致,以定义类型为准。intmax(floatx,floaty){if(x>=y)returnx;
else
return(y);}//返回x或y值整数部分17/47函数申明调用标准库函数时,在程序最前面用#include命令包含对应头文件。在调用自定义函数前,要告诉编译系统该函数参数个数和类型,返回值类型,方便检验。函数申明格式:返回值类型函数名(形式参数类型列表);18/47函数定义和函数申明区分函数定义:函数功效实现,有函数体部分。函数申明:对函数调用格式说明,是一条语句。voidmain(){floata,b;
floatmax(float,float);scanf(“%f%f”,&a,&b);
printf(“%f”,max(a,b));}floatmax(floatx,floaty){if(x>=y)returnx;
else
return(y);}函数定义函数申明19/47函数申明被调函数定义在主调函数定义之前,可无须申明。voidmain(){floata,b;
floatmax(float,float);scanf(“%f%f”,&a,&b);
printf(“%f”,max(a,b));}floatmax(floatx,floaty){if(x>=y)returnx;
else
return(y);}20/476.3函数调用调用方式:1.函数语句 printf(“GoodMorning!\n”);2.函数表示式 c=5+max(a,b)*10;3.函数参数
printf(“%f”,max(a,b));21/47函数参数形式参数:函数定义时,函数名后面括号中变量名。实际参数:调用函数时,函数名后面括号中表示式。max(a,b);intmax(intx,inty){if(x>=y)returnx;elsereturn(y);}voidmain(){inta,b;
intmax(int,int);scanf(“%f%f”,&a,&b);
printf(“%f”,max(a,b));}intmax(intx,inty){if(x>=y)returnx;
else
return(y);}形式参数实际参数22/47函数参数及其传递方式单向值传递:(主调函数)实参(被调函数)形参实参和形参要求个数相等,类型相同,次序一致。函数调用时,为形参变量分配内存空间,将实参值拷贝到形参变量中。函数调用结束时,释放形参变量空间。23/47函数参数及其传递方式—单向‘值’传递分析下面程序执行结果711x:y:main函数voidmain(){intx=7,y=11;printf("x=%d,y=%d\n",x,y);swap(x,y);printf("x=%d,y=%d\n",x,y);}swap(inta,intb){inttemp;temp=a;a=b;b=temp;}swap函数
a:b:temp7711x=7,y=11swap函数执行结束,释放swap中变量空间,返回到main函数x=7,y=11711.24/47函数调用过程voidmain(){intx=7,y=11;printf("x=%d,y=%d\n",x,y);swap(x,y);printf("x=%d,y=%d\n",x,y);}swap(inta,intb){inttemp;temp=a;a=b;b=temp;}main()调用函数swap输出结束swap函数25/47函数嵌套调用intf1(inta,intb);intf2(inta,intb);voidmain(){intx=1,y=9;printf("%d\n",f1(x,y));}intf1(inta,intb){intc;a++;b++;c=f2(a,b);returnc*c;}intf2(inta,intb){intc;c=a*b%3;return(c);}main()调用函数f1输出结束f1函数f2函数调用函数f2函数定义不可嵌套能够嵌套调用函数4①⑨②③④⑤⑥⑦⑧运行结果:191921021022426/476.4函数递归调用--求第5个人年纪已知第5人比第4人年纪大2,第4人比第3人年纪大2,第3人比第2人年纪大2,第2人比第1人年纪大2,第1人年纪为10。问第5人年纪?age(5)=age(4)+2age(4)=age(3)+2age(3)=age(2)+2age(2)=age(1)+2age(1)=10age(2)=12age(3)=14age(4)=16age(5)=1827/47函数递归调用问题形式分解问题时能够得到同类型子问题。递归规则问题分解规律,即递归公式。age(n)=age(n-1)+2(n>1)终止条件递归结束条件。age(n)=10(n=1)28/47函数递归调用--求第5个人年纪#include"stdio.h"intage(intn){intc;
if()c=10;
else;
return();}
voidmain(){ printf("%d",age(5));}age(n)=10n=1age(n)=age(n-1)+2n>1cn==1c=age(n-1)+2main()age(5)输出结束age(5)age(4)age(4)age(3)age(3)age(2)age(2)age(1)age(1)29/47函数递归调用—求n!递归公式fac(n)=n*fac(n-1)(n>1)终止条件fac(n)=1(n=0,1)#include"stdio.h"intfac(intn){intf;
if(n<0)printf("n<0,dataerror!");
elseif()f=1;
else
;
return();}fn==0||n==1f=fac(n-1)*n30/476.5变量作用域及存放类型变量:是对程序中数据存放空间抽象。学习内容:变量作用域变量存放类型31/47变量作用域变量作用域:变量能够被使用范围。f1(){intx,y;x=1;y=2; …….}main(){inta,b;a=100;b=200;……}intnumber;变量x,y作用域变量a,b作用域变量number作用域依据变量定义位置不一样分为:1.局部变量(内部变量)2.全局变量(外部变量)32/47变量作用域---1.局部变量局部变量(内部变量):定义在函数内部。voidf(inta){a=a+1;printf(“%d\n”,a);}voidmain(){inta=5;f(a);printf(“%d\n”,a);}f函数中变量a作用域main函数中变量a作用域形式参数也是局部变量局部变量作用域仅在定义它函数体内。不一样函数中能够使用同名变量,代表不一样空间,互不影响。65运行结果:f:a5main:a5633/47变量作用域---2.全局变量全局变量(外部变量):定义在函数外部。inta=5;voidf(){printf(“%d\n”,a);}intb=10;voidmain(){printf(“%d\n”,a);printf(“%d\n”,b);}全局变量a作用域全局变量b作用域全局变量作用域从定义位置起到根源文件结束。34/47变量作用域---2.全局变量floatf1(inta){intb,c;…….}charf2(intx,inty){inti,j;……}charc1,c2;voidmain(){intm,n;…….}全局变量c1,c2作用域扩展后c1,c2作用域用关键字extern申明扩展全局变量作用域申明语句能够写在函数内或外申明语句能够有多个externcharc1,c2;externcharc1,c2;扩展后c1,c2作用域35/47变量作用域---2.全局变量inta=3,b=5;max(inta,intb){intc;c=a>b?a:b;return(c);}main(){inta=8;printf("max=%d",max(a,b));}main:a作用域max:a,max:b作用域同一个源文件中,局部变量和全局变量同名,作用域重合,屏蔽全局变量,使用局部变量。外部变量a,b作用域85max=8运行结果:8536/47变量存放类型变量存放方式有2种:静态存放、动态存放。决定变量生存期(变量存在时间)。程序代码区静态存放区动态存放区在程序编译期间分配好内存空间;并在整个程序运行期间都保持存在。内存用户区程序运行期间依据需要分配存放空间;在变量定义函数执行结束后释放该空间。37/47变量存放类型完整变量定义格式: 存放类型数据类型变量名;存放类型定义符有:auto、static、extern、register比如:autointa,b,c;staticfloatx,y;局部变量分为:全局变量分为:autostaticexternstatic38/47变量存放类型---auto局部自动型auto局部自动型变量:局部(内部)变量默认为auto型。含有局部作用域,本函数执行结束就释放。动态存放区内存用户区main:xvoidmain(){intx=1;voidfun(void);printf(“main:x=%d\n”,x);fun();printf(“main:x=%d\n”,x);fun();}voidfun(void){intx=5;x=x+1;printf(“fun:x=%d\n”,x);}main:x=1fun:x=6main:x=1fun:x=6运行结果1fun:x56fun:x5639/47变量存放类型---局部static静态型局部static静态型变量:用static定义局部变量。含有局部作用域,程序整个运行期间都存在。编译时分配内存空间,初始化只有一次。静态存放区内存用户区xvoidfun(void){staticintx=1;x=x+1;printf(“x=%d\n”,x);}voidmain(){fun();fun();fun();}x=2x=3x=4运行结果123440/47变量存放类型---局部static静态型编译时分配内存空间,如不赋初值,初始值为0.voidfun(void){staticintx;x=x+1;printf(“x=%d\n”,x);}voidmain(){fun();fun();fun();}x=1x=2x=3运行结果41/47变量存放类型---全局extern型全局extern型变量:用extern申明全局变量。申明能够屡次,定义只能有一次。externintx;void f(){
externintx;…….}intx=8;voidmain(){……}这是定义这是申明这是
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 企业连带担保借款合同模板
- 道路拓宽及改造工程合同
- 办公用房租赁合同英文范本
- 厨师服务合同样本
- 夫妻共同购房合同条款
- 女方净身出户离婚法律合同模板
- 跨境融资合同(一)
- 职业技术学院大学生创新创业项目合同
- 新能源汽车电机技术演进与产业链创新考核试卷
- 文化产业与体育赛事结合考核试卷
- 提高教育教学质量深化教学改革措施
- 招标代理机构遴选投标方案(技术标)
- 证件使用协议书(2篇)
- KTV商务礼仪培训
- 三级安全教育试题(公司级、部门级、班组级)
- 2024年《论教育》全文课件
- 贫血医学教学课件
- 计算机网络与信息安全(2024年版)课件 李全龙 第1-4章计算机网络与信息安全概述-网络层服务与协议
- 肺栓塞患者护理查房课件
- 人工智能教育背景下中小学教师智能教育素养提升路径研究
- 委托书之工程结算审计委托合同
评论
0/150
提交评论