版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第六讲函数本讲主要内容函数的定义与声明标准库函数强制类型转换函数的定义与声明函数定义的一般形式:functiondefinition返回值数据类型函数名(数据类型形参1,数据类型形参2
,…,数据类型形参n)
{
变量声明,如有变量;
其他语句;
return(表达式
);
}形参可缺省,缺省时为无参函数。也可用void表明形参缺省。可为void,表明无返回数据,此时函数体不应包含return语句。缺省时,表明返回值为int。函数头函数体return
表达式;传递函数的返回值函数的定义与声明
--函数的定义floatadd(floatnum1,
floatnum2){
floatsum; sum=num1+num2;
returnsum;}函数的定义与声明
--函数的定义include<math.h>doublePi(void){
return2*asin(1.0);}函数的定义与声明
--函数的定义include<stdio.h>voiddisplayChars(char
s,unsigned
int
qty){
unsigned
inti; printf(“\n”); for(i=0,i<qty,++i) printf(“%c”,s);
printf(“\n”);}函数原形的一般形式:functionprototype返回值数据类型函数名(数据类型参数1,数据类型参数2
,…,数据类型参数n);返回值数据类型函数名(数据类型,数据类型,…,数据类型);函数原形中的参数列表必需与函数定义中的形参列表保持一致:个数、顺序及各参数数据类型。常用函数的定义与声明
--函数的声明函数的定义与声明
--函数的声明floatadd(floatnum1,
floatnum2){
floatsum; sum=num1+num2;
returnsum;}floatadd(floatnum1,
floatnum2);函数原形:函数的定义与声明
--函数的调用函数必需先定义或声明后方可使用。#include<stdio.h>
float
findMax(float,float);
int
main()
{
float
firstnum,secnum,maxnum;printf("Enteranumber:");scanf("%f",&firstnum);printf("\nGreat!Pleaseenterasecondnumber:");scanf("%f",&secnum);maxnum=findMax(firstnum,
secnum);
printf("\nThemaximumofthetwonumbersenteredis%f.\n",maxnum);
return0;
}函数原形函数调用主调函数被调函数实参列表
/*thefollowingisthefunctionfindMax*/float
findMax
(floatx,floaty)/*functionheader*/{/*startoffunctionbody*/
floatmaxnum;/*variabledeclaration*/if(x>=y)/*findthemaximumnumber*/ maxnum=x;else maxnum=y;
return(maxnum);/*returnthevalue*/}函数的定义与声明
--函数的调用函数定义返回值形参列表函数的定义与声明
--函数的调用Storingvaluesintoparameters函数的传值调用:实参向形参进行单向的数值传递。函数的定义与声明
--函数的调用函数调用的执行:
/*thefollowingisthefunctionfindMax*/float
findMax
(floatx,floaty)
{
floatmaxnum;if(x>=y) maxnum=x;else maxnum=y;
return(maxnum);}#include<stdio.h>
float
findMax(float,float);
int
main()
{
float
firstnum,secnum,maxnum;printf("Enteranumber:");scanf("%f",&firstnum);printf("\nGreat!Pleaseenterasecondnumber:");scanf("%f",&secnum);maxnum=findMax(firstnum,
secnum);
printf("\nThemaximumofthetwonumbersenteredis%f.\n",maxnum);
return0;
}函数的定义与声明
--函数的调用函数的定义与声明
--函数的调用按照函数在程序中出现的位置来分;作为表达式出现在任何允许表达式出现的地方,参与运算。
如:a=sqrt(b);作为一条独立的语句完成特定的操作。
如:gets(string1);作为函数的参数被其他函数调用。
如:h=sqrt(abs(theta));函数调用的三种方式:函数的传址调用include<stdio.h>voiddisplayChars(char
s,unsigned
int
qty){
unsigned
inti; printf(“\n”); for(i=0,i<qty,++i) printf(“%c”,s);
printf(“\n”);}传值调用函数的传址调用#include<stdio.h>voidsortnum(double*,double*);intmain(){doublefirstnum,secnum;printf("Entertwonumbers:");scanf("%lf%lf",&firstnum,&secnum);
sortnum(&firstnum,&secnum);printf("Thesmallernumberis%6.2f",firstnum);printf("\nThelargernumberis%6.2f\n",secnum);return0;}voidsortnum(double*nm1Addr,double*nm2Addr){doubletemp;if(*nm1Addr>*nm2Addr){temp=*nm1Addr;/*savefirstnum'svalue*/
*nm1Addr=*nm2Addr;
*nm2Addr=temp;/*changesecnum'svalue*/}return;}函数的传址调用Storingaddressesinparameters函数的传址调用Indirectlystoringfirstnum’svalue函数的传址调用Indirectlychangingfirstnum’svalue函数的传址调用Indirectlychangingsecnum’svalue#include
预处理说明#define
符号常量名表达式函数原形intmain(){
变量定义语句;
其他语句;
return0;}函数定义C程序语句的排列:回顾#include
预处理说明#define
符号常量名表达式函数原形intmain(){
变量定义语句;
其他语句;
return0;}函数定义C程序语句的排列:回顾函数定义的一般形式:functiondefinition返回值数据类型函数名(数据类型形参1,数据类型形参2
,…,数据类型形参n)
{
变量声明,如有变量;
其他语句;
return(表达式
);
}void回顾函数原形的一般形式:functionprototype返回值数据类型函数名(数据类型参数1,数据类型参数2
,…,数据类型参数n);返回值数据类型函数名(数据类型,数据类型,…,数据类型);函数原形中的参数列表必需与函数定义中的形参列表保持一致:个数、顺序及各参数数据类型。回顾按照函数在程序中出现的位置来分;作为表达式出现在任何允许表达式出现的地方,参与运算。
如:a=sqrt(b);作为一条独立的语句完成特定的操作。
如:gets(string1);作为函数的参数被其他函数调用。
如:h=sqrt(abs(theta));函数调用的三种方式:编程的基本知识
—编程任一模块所完成的功能在C语言中,使用函数来实现模块化。编程的基本知识
—编程向printf()
传递信息printf()是一种标准输出函数,由C编译系统的系统函数库提供。编程的基本知识
—编程在C语言程序中,函数main()标志着程序的开始点与结束点。回顾强制类型转换运算符:单目、2、右向左
(类型)表达式floatx=5.8,y=10.3(int)x+y
(int)(x+y)变量的作用域变量的生命期函数的传址调用变量的作用域变量的作用域:在变量占用存储空间的时间内是否能够被引用,即变量作用的有效范围。局部变量/内部变量全局变量/外部变量变量的作用域局部变量在一个函数内部定义的变量(内部变量),它只在此函数范围内有效,在此函数以外不能被使用。局部变量的有效范围:从定义变量的位置开始直到该函数结束。形参也是局部变量。在一个函数内部,可以在复合语句中定义变量,这些变量只在该复合语句中有效。这种复合语句称为“分程序”或“程序块”。不同函数中使用同名变量?变量的作用域设置全局变量的作用是增加函数间数据联系的渠道。全局变量在函数外部定义的变量(外部变量)。全局变量的有效范围:从定义变量的位置开始直到本源文件结束。函数执行时若需要使用一个变量值,将首先查找局部变量区;找不到时,再到全局变量区查找。变量的作用域#include<stdio.h>intfirstnum;voidvalfun();intmain(){intsecnum;firstnum=10;secnum=20;printf("\nFrommain():firstnum=%d",firstnum);printf("\nFrommain():secnum=%d\n",secnum);
valfun();printf("\nFrommain()again:firstnum=%d",firstnum);printf("\nFrommain()again:secnum=%d\n",secnum);return0;}voidvalfun(){intsecnum;secnum=30;printf("\nFromvalfun():firstnum=%d",firstnum);printf("\nFromvalfun():secnum=%d\n",secnum);
firstnum=40;return;}变量的作用域Thethreestorageareascreatedbytheprogram变量的作用域#include<stdio.h>intfirstnum=10;voiddisplay();intmain(){intfirstnum=20;display();printf("\nFrommain():firstnum=%d\n",firstnum);
return0;}voiddisplay(){printf("\nFromdisplay():firstnum=%d\n",firstnum);}变量的作用域在程序设计中,应尽量避免使用全局变量。全局变量在程序的全部执行过程中都占用存储单元,而不是仅在需要时才开辟单元。使函数的可靠性和通用性降低。使用全局变量过多,会降低程序的清晰性。变量的生命期变量的生命期:变量占用存储空间的时限,由变量的存储类型决定。C语言中,变量的存储类型符有四种:autostaticexternregisterC语言规定:存贮类型符放在变量定义的最前面。例:staticinta,b;变量的生命期缺省时为auto。例:autointa,b;局部变量的存储类型只允许有三种:autostaticregisterinta,b;auto自动局部变量的生命期:在变量定义时获取存储空间(alive);函数返回后,释放存储空间(die)。变量的生命期#include<stdio.h>voidtestauto();/*functionprototype*/intmain(){intcount;/*createtheautovariablecount*/for(count=1;count<=3;++count)
testauto();return0;}voidtestauto(){intnum=0;
printf("Thevalueoftheautomaticvariablenumis%d\n",num);++num;return;}staticintnum=0;变量的生命期static静态局部变量的生命期:在变量定义时获取存储空间(alive);程序执行结束时,释放存储空间(die)。(变量定义只做一次。)Static静态局部变量:在变量定义时,赋初值;若缺省,初值为0。初值只允许为常量或常量表达式。#include<stdio.h>voidtestauto();/*functionprototype*/intmain(){intcount;/*createtheautovariablecount*/for(count=1;count<=3;++count)
testauto();return0;}voidtestauto(){staticintnum=0;
printf("Thevalueoftheautomaticvariablenumis%d\n",num);++num;return;}变量的生命期num=1;变量的生命期register寄存器局部变量的生命期:和自动局部变量相同。只是存储的位置,不在内存,而在CPU的寄存器中。(不常用)可以把使用频率高的变量定义为register,提高程序执行的速度。寄存器变量只能用于整型和字符型。变量的个数受CPU寄存器数目的限制。超限时,编译器将其转换为自动局部变量。变量的生命期全局变量的存储类型只允许有两种:staticextern比较大型的程序,通常由多个文件组成。变量的生命期比较大型的程序,通常由多个源文件组成。变量的生命期比较大型的程序,通常由多个源文件组成。变量的生命期全局变量的存储类型只允许有两种:使用extern对全局变量做扩展声明:若在函数体外,有效范围为:从声明时致该文件结束。若在函数体内,有效范围为:从声明时致该函数结束。static静态全局变量:不可以被其他文件使用。试图extern一个静态全局变量,将导致编译错误。在定义时,若无赋值说明,将赋其初值为0。函数的传址调用include<stdio.h>voiddisplayChars(char
s,unsigned
int
qty){
unsigned
inti; printf(“\n”); for(i=0,i<qty,++i) printf(“%c”,s);
printf(“\n”);}传值调用函数的传址调用#include<stdio.h>voidsortnum(double*,double*);intmain(){doublefirstnum,secnum;printf("Entertwonumbers:");scanf("%lf%lf",&firstnum,&secnum);
sortnum(&firstnum,&secnum);printf("Thesmallernumberis%6.2f",firstnum);printf("\nThelargernumberis%6.2f\n",secnum);return0;}voidsortnum(double*nm1Addr,double*nm2Addr){doubletemp;if(*nm1Addr>*nm2Addr){temp=*nm1Addr;/*savefirstnum'svalue*/
*nm1Addr=*nm2Addr;
*nm2Addr=temp;/*changesecnum'svalue*/}return;}函数的传址调用Storingaddressesinparameters函数的传址调用Indirectlystoringfirstnum’svalue函数的传址调用Indirectlychangingfirstnum’svalue函数的传址调用Indirectlychangingsecnum’svalue回顾#include
预处理说明#define
符号常量名表达式函数原形全局变量定义语句;intmain(){
局部变量定义语句;
其他语句;
return0;}函数定义C程序语句的排列:回顾变量的作用域:在变量占用存储空间的时间内是否能够被引用,即变量作用的有效范围。局部变量/内部变量:在一个函数内部定义的变量(内部变量)。有效范围:从定义变量的位置开始直到该函数结束。全局变量/外部变量:在函数外部定义的变量(外部变量)。有效范围:从定义变量的位置开始直到本源文件结束。回顾变量的生命期:变量占用存储空间的时限,由变量的存储类型决定。C语言规定:存贮类型符放在变量定义的最前面。例:staticinta,b;局部变量的存储类型只允许有三种:autostaticregister回顾全局变量的存储类型允许有两种:使用extern对全局变量做扩展声明:若在函数体外,有效范围为:从声明时致该文件结束。若在函数体内,有效范围为:从声明时致该函数结束。static静态全局变量:不可以被其他文件使用。试图extern一个静态全局变量,将导致编译错误。在定义时,若无赋值说明,将赋其初值为0。本讲主要内容变量的作用域变量的生命期函数的传址调用变量的作用域变量的作用域:在变量占用存储空间的时间内是否能够被引用,即变量作用的有效范围。局部变量/内部变量全局变量/外部变量变量的作用域局部变量在一个函数内部定义的变量(内部变量),它只在此函数范围内有效,在此函数以外不能被使用。局部变量的有效范围:从定义变量的位置开始直到该函数结束。形参也是局部变量。在一个函数内部,可以在复合语句中定义变量,这些变量只在该复合语句中有效。这种复合语句称为“分程序”或“程序块”。不同函数中使用同名变量?变量的作用域设置全局变量的作用是增加函数间数据联系的渠道。全局变量在函数外部定义的变量(外部变量)。全局变量的有效范围:从定义变量的位置开始直到本源文件结束。函数执行时若需要使用一个变量值,将首先查找局部变量区;找不到时,再到全局变量区查找。变量的作用域#include<stdio.h>intfirstnum;voidvalfun();intmain(){intsecnum;firstnum=10;secnum=20;printf("\nFrommain():firstnum=%d",firstnum);printf("\nFrommain():secnum=%d\n",secnum);
valfun();printf("\nFrommain()again:firstnum=%d",firstnum);printf("\nFrommain()again:secnum=%d\n",secnum);return0;}voidvalfun(){intsecnum;secnum=30;printf("\nFromvalfun():firstnum=%d",firstnum);printf("\nFromvalfun():secnum=%d\n",secnum);
firstnum=40;return;}变量的作用域Thethreestorageareascreatedbytheprogram变量的作用域#include<stdio.h>intfirstnum=10;voiddisplay();intmain(){intfirstnum=20;display();printf("\nFrommain():firstnum=%d\n",firstnum);
return0;}voiddisplay(){printf("\nFromdisplay():firstnum=%d\n",firstnum);}变量的作用域在程序设计中,应尽量避免使用全局变量。全局变量在程序的全部执行过程中都占用存储单元,而不是仅在需要时才开辟单元。使函数的可靠性和通用性降低。使用全局变量过多,会降低程序的清晰性。变量的生命期变量的生命期:变量占用存储空间的时限,由变量的存储类型决定。C语言中,变量的存储类型符有四种:autostaticexternregisterC语言规定:存贮类型符放在变量定义的最前面。例:staticinta,b;变量的生命期缺省时为auto。例:autointa,b;局部变量的存储类型只允许有三种:autostaticregisterinta,b;auto自动局部变量的生命期:在变量定义时获取存储空间(alive);函数返回后,释放存储空间(die)。变量的生命期#include<stdio.h>voidtestauto();/*functionprototype*/intmain(){intcount;/*createtheautovariablecount*/for(count=1;count<=3;++count)
testauto();return0;}voidtestauto(){intnum=0;
printf("Thevalueoftheautomaticvariablenumis%d\n",num);++num;return;}staticintnum=0;变量的生命期static静态局部变量的生命期:在变量定义时获取存储空间(alive);程序执行结束时,释放存储空间(die)。(变量定义只做一次。)Static静态局部变量:在变量定义时,赋初值;若缺省,初值为0。初值只允许为常量或常量表达式。#include<stdio.h>voidtestauto();/*functionprototype*/intmain(){intcount;/*createtheautovariablecount*/for(count=1;count<=3;++count)
testauto();return
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年注册会计师考试审计真题及答案
- 2025年CATTI三级口译考前模拟训练附答案3-口译
- 布吉海轩城市广场物业发展建议
- 2026-2030证券经营机构产业规划专项研究报告
- 2026-2030中国花卉交易市场行业市场发展分析及发展趋势与投资前景研究报告
- 人教版四年级数学下册第二单元《观察物体(二)》课件
- 四川省广安市广安区加德学校领航班2025-2026学年高一(上)期末数学模拟试卷(1月份)(含答案)
- 2026年中国手用钢锯条数据监测研究报告
- 4-3 婴幼儿记忆的发展
- 呼伦贝尔市2025内蒙古呼伦贝尔市交通运输局所属事业单位引进人才5人笔试历年参考题库典型考点附带答案详解
- 企业信息资产评估方案
- 包子店吧台施工方案
- DBJT 13-508-2025 城市道路项目安全性评价标准
- 卵巢黄体破裂课件
- 纪检办案安全知识培训课件
- DB46-T 667-2025 公路工程机制砂混凝土应用技术规程
- 健身房防汛应急预案管理方案范文
- DBJ51T 189-2022 四川省建设工程施工现场安全资料管理标准
- 步进电机课件教学课件
- 医院培训课件:《静脉中等长度导管临床应用专家共识》
- 危险废物事故预防及处理机制管理制度
评论
0/150
提交评论