版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、从第7章函数和模块化编程基础、7.1函数的定义、7.2函数的调用、7.3变量的范围和存储特性、7.4模块和函数(可选)、7.1函数的定义以及函数的使用角度来看,C语言中的函数可以分为两类:标准库函数和自定义函数。I .标准库函数和头文件,1 .turbo C系统提供了400多个标准库函数,可分为(1)类型转换函数。(2)字符判别和转换函数;(3)字符串处理函数;(4)标准I/O函数;(五)文件管理功能;(6)数学运算函数等。执行效率高,用户需要时可以直接从程序中调用。c语言库函数使用的常量、外部变量、函数类型和参数说明在相应的头文件(.h扩展名)中声明,通常存储在系统目录tcinclude中。
2、例如:2 .头文件,(1) stdio.h文件:标准输入输出函数使用的常量、结构、宏定义、函数类型、参数数和类型的说明。(2) math.h文件:与数学函数相关的常量、结构、相应函数类型和参数说明。(3) string.h文件:与字符串操作函数相关的常量、结构、相应函数类型和参数说明。(4) stdlib.h文件:与存储分配、转换、随机数生成等相关的常数、结构及其函数的类型和参数说明。(5) ctype.h文件:与文字函数相关的常量、宏定义、该函数的类型和参数说明。定义格式2:函数值类型名称函数名称(格式参数类型和参数说明)数据说明部分语句,定义格式1:函数值类型名称函数名称(格式参数列表)格
3、式参数类型说明数据说明部分语句,1 .函数定义格式,建议的范例: intmax (a,例如: int max(int a,int b),2 .使用者定义的函数,2 .函数由函数说明和函数体组成。(1)函数说明、函数说明(也称为函数第一):包含函数值类型、函数名称、参数类型和参数说明。a .函数值类型指定定义的函数返回值的类型(简单类型、void类型或构造函数类型等)。函数值类型为void时,表示函数没有返回值,这是与其他语言相对应的过程。如果函数值类型为int,则可以省略该类型的说明。建议不要使用默认格式类型说明。b .函数名是函数的标识符,并根据c语言标识符的命名约定(只能由字母、数字和下划
4、线组成,且可以以字母或下划线开头)区分大小写。c .格式参数缩写为函数名后面的一对括号的格式参数。特别是,无论函数是否具有格式参数,函数名称后面的括号都不能节省,括号后面的括号后面的“;”要注意不能贴.d .格式参数属于已放置函数的局部变量,存储类型可以是auto或register格式,默认值为auto类型。函数体在“”括号内结束。(2)函数主体,函数说明后面的花括号部分是函数主体。函数正文数据说明部分在前面,执行语句部分在后面。函数主体中介绍的变量是调用函数时有效的局部变量,执行语句实际上是生成命令代码的部分。函数的功能由函数体中每个语句的执行来实现。范例:定义符号函数sign。sign(x
5、) /*函数返回值类型未说明。默认值为int。函数类型描述*/,int x;/*格式参数说明*/,int y;/*函数主体本端变数*/,y=x0?1:(x=0)?0:-1);return y;if x0 return 1;If x=0 return 0return 1;等价体、(3) return语句表示为:return表达式;或return(表达式);符号函数的另一种定义格式:int sign(int x) /*格式参数类型说明参数列表和函数名说明*/,return y=x0?1: (x=0)?0:-1);/*返回复杂表达式的值*/,2。如果函数类型为float,并且return语句设置为默
6、认值,则会发生调用错误。注意:1。如果函数类型为int,并且return语句的表达式默认值或return语句设置为默认值,则返回不确定值(TC2的返回值为零)(例如,程序执行结果)。Max() /*函数类型默认值,int,return语句默认值*/min() /*函数类型默认值,return语句默认表达式*/return;Main() printf(%d、%dn、max()、min(););程序运行结果:0,0/*返回值不确定;在TC2开发环境中,返回值为0 */;如果函数max和函数min的类型为float,则返回值为floatingpointerror3360domain。abnn。无参数
7、函数、参数函数、定义函数时无参数说明、无调用参数函数通常用于执行指定的任务集。主调用函数不将数据传递给曹征函数。定义、函数时,可以将主函数main放在最前面,以便于阅读。为了避免过多的函数声明,通常将基本函数放在所有函数的后面。无论主函数的位置如何,当程序启动时,总是从主函数开始,最终在主函数中结束整个程序的执行。c语言程序中包含一个或多个函数的3。main函数,必须有一个名为main的函数(主函数),并且只能有一个函数。在包含多个函数的程序中,除了基本函数外,调用的函数也可以调用其他函数,但是没有函数可以调用基本函数。基本函数的类型通常定义为void(TC2可以省略函数main的类型说明)。
8、可以包含7.2函数调用、C语言中的通用函数体、对其他函数的调用、对函数的嵌套调用,甚至对自己的调用(对函数的递归调用)。定义函数后,可以在程序中的其他函数中使用该函数。此过程称为函数调用。1 .函数的一般呼叫和宣告、函数名称(实际参数清单)、1。函数调用格式,函数调用的常规格式:实际参数也称为实际参数,简称为实际参数,实际参数以“,”分隔。函数调用时,实际参与形式参数必须保持数量、顺序和类型的一致性,以确保实际参与形式参数之间的数据正确传递。实际参数通常是表达式,可以是常量、变量(必须具有调用时确定的值或确定的地址)。格式参数必须是变量。如果实际参数的数量、顺序和类型与相应类型参数的数量、顺序
9、和类型不匹配,则不询问错误,但结果很难预测。c语言中函数调用的三种形式:函数语句调用、函数表达式调用、函数参数调用、函数调用后面的“;”添加,以配置语句。调用函数的目的可能是执行操作或完成特定功能。大部分函数调用的形式,调用的函数执行结果为调用函数提供值,除非函数类型用void类型描述。调用函数以通过表达式接收值。曹征为函数参数的函数。示例:调用函数语句和调用函数表达式。# include void main()printf(nk1=% d,printf(nk2););程序运行结果如下:K2K1=3,intprintf (constchar * format,);void main() /*从
10、主函数调用函数参数,函数max2*/int x、y、z、m;Scanf(%d,%d,%d,I=n);I)r=r * I;return r;# includemain()长fac(int);/*在主函数中,声明后面定义的函数fac*/int m1,m2,Long result;Scanf(%d,%d,else f=0);return f;Float root(float a,float b,float c,int flag) float d,x : D=dict(a,b,c);/*调用函数dict*/if(d) x=flag?(-b sqrt (dt (a,b,c)/(2 * a) : (-b-
11、sqrt (dt (a,b,c)/(reres);float dt(float a,float b,float c)return b* B- 4 * a* c;4 .在c语言中的函数调用过程中,函数直接或间接调用函数本身时,函数的迭代调用,称为函数的迭代调用。1 .直接和间接递归、直接递归、函数体直接调用函数本身、间接递归、函数调用其他函数、其他函数调用函数本身、(1)直接递归、void fun()、fun(););(2)间接递归,voidfun1(),fun 2();voidfun2()、fun 1();、为了避免这种情况发生,递归解决的问题必须满足两个基本条件:(1)问题的转换。有些问题不
12、能直接解决或难以解决,但可能会转换为比原来的问题更简单或更接近解决方法的新问题。这个新问题的解决和原来的问题一样,可以转换为下一个新问题。(2)过渡的终止条件。从原来的问题到新问题的转换是有条件的,次数有限,不能无限制地转换。此终止条件,也称为边界条件,等于重复关系的初始条件。示例:编程mn(m,n都是整数,n0)。分析:(1)mn可通过累积乘法方法实现。(2)mn可以用递归公式重写。也就是说,Mn问题可以理解直接计算Mn时没有相应的运算符,但可以将Mn转换为mmn-1格式。也就是说,可以将Mn转换为乘法问题。但是,乘法的mn-1和mn是同类问题,因此必须继续转换,直到问题到达边界为止。#in
13、clude void main() int m,n;长功率(int,int);/*函数声明*/scanf(%d,%d,a*=t);b/=t;Void main() int a,b;printf(“enter a,b :”);Scanf (%d,%d ,编译器将提示您输入错误:未定义的symbol a和未定义的symbol b。为什么?1 .变量特定范围:由全局变量和局部变量分隔2。差异:范例2: #include int a,b;/*a,b是全局变量*/void f1() int t1,T2;t1=a* 2;T2=b* 3;B=100;printf(“t1=% d,T2=% dn”,t1,T2
14、);void main()a=2;b=4;f1();Printf (a=% d,b=% d ,a,b);程序输出结果为: t1=4,t2=12 a=2,b=100,示例: # include int a=2,b=4;/*a,b是全局变量*/void f1() int t1,T2;t1=a* 2;T2=b* 3;B=100;printf(“t1=% d,T2=% dn”,t1,T2);void main()int b=4;f1();Printf (a=% d,b=% d ,a,b);程序输出结果: t1=4,t2=12 a=2,b=4,结论:如果全局变量与局部变量同名,则局部变量的范围将遮罩全局
15、变量,2 .变量的存储特性、变量的存储特性、变量的寿命、变量的存储类型、变量存储介质(例如内存、外部内存和CPU的通用寄存器)、变量(特定于存在)、静态存储变量、动态存储变量、程序在其生命周期内执行的整个过程也称为永久储存。在一段时间内,函数形式参数、函数主体或子程序中定义的变量仅在程序进入函数或子程序时分配存储空间,在函数/子程序运行后重新释放变量的存储空间。变量属性、数据类型、存储特性和c语言变量的存储特性可分为四类:“自动”(auto)、“静态”(static)、“外部”(extern)和“寄存器”(register),完整变数定义:储存性质资料类型变数名称,1 .自动变量,自动类型标识
16、符变量列表;通常,您可以将auto设定为预设。函数内定义的本地变量、函数的格式参数和函数体子程序的本地变量。与函数调用一起存在,函数返回后消失,在一个调用的结束和下一个调用的开始之间不再占用存储空间。范围仅限于定义的函数,生存时间是函数的生存时间,从一个函数引用另一个函数的自动变量的值无效。2 .静态变量,即编译时分配存储空间的变量。静态类型标识符变量列表;局部静态变量、全局静态变量、函数内部定义的静态变量和范围与自动变量相同。函数运行后,静态变量占用的内存单元不会释放。值保持不变,而在函数外部定义的静态变量是程序中未指定存储类型的全局静态变量,范围是相应的源程序文件、等b;c;Printf (,a,b,c);返回(a b c);Void main() int a=2,k;for(k=0);k3;K) printf ( n ,f(a);1 4 7 2 5 8 2 6 9,3。外部变量,“外部变量”,与函数“内部”中所述的变量相比,是在函数外部定义的。外部变量也称为全局变量,在编译时分配存储设备。如果变量的定义和引用分别位于不同的源文件中(即,将变量的范围扩展到不同的源文件),则必
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 采购长效机制制度
- 采购项目安全管理制度
- 采购领用登记制度
- 重大设备采购规章制度
- 钢企耐材采购制度
- 食堂采购管理制度
- 2025年前台沟通专项模拟卷
- 七年级下学期数学第一次月考卷01(参考答案)-人教版(2024)七下
- 第19章 二次根式(章节复习检测提高卷)解析版-人教版(2024)八下
- 2026年重庆担保公司合同(1篇)
- 部编版三年级下册语文课课练全册(附答案)
- 军用靶场设计方案
- 管理会计学 第10版 课件 第3章 本-量-利分析
- Unit 3 Zhong Nanshan- Part B(小学英语教学)闽教版英语五年级下册
- 消防维保方案(消防维保服务)(技术标)
- 车辆交通危险点分析预控措施
- QC成果提高SBS防水卷材铺贴质量一次合格率
- 大舜号海难事故案例分析
- TGRM 057.1-2023 非煤岩岩爆倾向性评价规范 第1部分:室内指标测定及等级分类
- 2023年安徽新闻出版职业技术学院单招考试职业技能考试模拟试题及答案解析
- LY/T 2271-2014造林树种与造林模式数据库结构规范
评论
0/150
提交评论