5)C语言函数(C自考学习)
函数的概念
在一个程序中,如果在不同地点多次执行某项操作,就可以把完成这项操作的程序段从程序中独立出来,定义成函数,而原来程序中凡需要进行这个操作的程序段可以只用“函数调用”来替代,从而达到简化程序清单的目的。建立函数成为“函数的定义”,使用函数称为“函数的调用”。
通常把调用其它函数的函数称为“主调函数”,而别调用的函数称为“被调函数”。在C语言中,任何函数都可以是被调函数,也可以是主调函数。而主函数只能是主调函数,不能是被调函数,因为任何函数都不能调用主函数。
每一个函数都能完成特定的任务,称为“函数的功能”;每次调用函数时的某些待处理的数据和函数运行后获得的某些结果统称为“函数的参数”;把主调函数中加工对象带入函数,称为“函数参数的输入”;吧函数运行的某些结果带回主调函数,称为“函数参数的输出”;函数参数的输入和输出统称为“函数间数据的传递”。
函数的定义
格式为:存储类型符 数据类型符 函数名(形式参数表)
数据定义语句序列;
执行语句序列;
通常把一堆花括号括住的部分称为“函数体”,函数体前面的部分称为“函数头”。
1)函数头
存储类型符 可以是extern或static两种
选取extern,则定义的函数叫做外部函数,它可以被其它编译单位中的函数调用;选取static的函数叫做内部函数,它只能被本编译单位中的函数调用。存储类型说明符可以省略,省略时,默认为外部函数。
数据类型符 规定返回值的类型,可以是指针形,数组型,集合型,字符串型,整数型,void型等。
函数名 是一个标识符,在同一个编译单位中函数是是不能重名的。如果参数不一样,函数名是是可以相同的。
2)函数体
数据定义语句序列 若干条数据定义语句组成,用来定义本函数中使用的变狼、数组、指针变量等。
执行语句序列 本函数中完成函数功能的程序段组成。如果有返回值,则在序列中至少有一条返回语句return
各类函数的定义模式(static或extern或空)
1。有参函数: public static String test(int a)
2。无参函数: public static String test()
3。有返回值函数: public String test(){return "asdf"};
4。无返回值函数:public void test(){};
5。内部函数: public static String test()
6。外部函数: public extern String test()
注意:内部函数与外部函数的主要区别是“存储类型符”。内部函数的存储类型是“static”,而外部函数的存储类型符石“extern”或 空;
3)函数调用的过程
1.首先暂停函数调用所在语句的执行,转向被调用的函数继续执行。
2.为函数的所有形式参数分配内存;再将所有实际参数的值计算出来,依次赋予对应的形式参数(如果形参是数组则不给形参分配内存。)如果是无参函数,则本项操作不执行。
3.进入函数体,先执行数据定义语句,为函数体中定义的变量、数组等分配内存。
4.在执行函数体中的可执行语句。
如果是“无返回值函数”,则执行到“返回语句”。若返回语句被省略,则执行到函数体的右花括号。
如果有返回值函数,则执行到返回语句时,计算表达式值作为函数的返回值。
5.收回分配给本函数体中定义的变量、数组、形式参数的内存单元。
6.返回主调函数继续执行。
变量存储类型与作用域
1)变量的存储类型。
存储类型符及其含义如下。
1.自动型
自动型又称堆栈型。自动型变量是分配在内存的堆栈区,堆栈区内存在程序运行中是重复使用的。假定某个函数中定义了自动型变量,函数被调用时,C语言就在堆栈区给该变量分配内存用于存放变量的值。当函数调用结束时,C语言就释放该变量,即从堆栈区中收回分配给该变量的内存,以便重新分配给其他自动型变量。这样做的目的是节省内存。
2.寄存器型
寄存器型变量是分配在CPU的通用寄存器中。由于CPU具有的通用寄存器数量有限,C程序中允许定义的寄存器型变量一般以2个左右为宜。如果定义为寄存器型变量的数目超过所能提供的寄存器数目,编译系统自动将超出的变量设为自动型变量。对于占用字节数多的变量,如:long,float,double类型的变量一般不能定义为寄存器型变量。
3.静态型。
静态型变量是分配在内存的数据区中,它们在程序开始运行时就分配了固定的内存,在程序运行过程中不释放。只有程序运行结束后,才释放所占用的内存。
4外部参照型
外部参照型变量是专用于多个便宜单位之间传递数据用的。
变量初始化和变量存储类型有很大关系,进行初始化时要注意下列几点:
#外部参照型(extern)变量不允许初始化。自动型(auto)变量、寄存器(register)变量和静态型(static)变量都可以初始化。
#自动型变量和寄存器变量如果进行初始化,则每次进入所定义的函数或复合语句都随着重新定义而重新初始化。自动型变量和寄存器型变量如果不进行初始化,变量值将不确定。因此,必须用其他赋值方式为其赋值后方能参与运算。
#景泰兴变量如果进行初始化,只有第一次执行定义语句时随着分配内存赋予初值,当退出所定义的函数或复合语句时,将保留分配给它的内存和其中的值。再次进入定义的函数或复合语句时,不在重新分配内存,也不进行初始化。
2)变量的生命周期
由于变量必须分配内存单元(或寄存器),所以变量就有存货时间的问题。通俗的说,当某个变量占用内存单元(或寄存器)时,我们就说他“活着”;当变量占用的内存单元(或寄存器)被收回了,我们就说他死了。我们把变量从开始i分配内存单元(或寄存器)到分配的内存单元(或寄存器)被收回的期间称为“变量的生存期”。
3)变量的作用域
在变量的生存期中,我们把变量可以使用的程序区域称为变量的作用域。任何变量只能在其作用域内使用,不能再其作用域外使用,否则程序就会出错。例如:局部变量就只能在局部使用。
指针型函数及其调用
指针型函数是指该函数的返回值是指针行,也就是说,这类函数的返回值必须是地址值,调用该类函数时,接受返回值的必须是指针变量、指针数组元素等能存放地址值的对象。
例如:char *max_char(int n){char *p; p=a; return(p);}
1)指针型函数的调用
指针型函数的调用和一般函数的调用方法完全相同,唯一需要注意的是只能用指针变量或指针型数组元素来接受指针型函数的返回值,不能使用数组名来接受指针型函数的返回值,因为数组名是地址常量,不是地址型变量,不能接受地址型数据。
例如:char *max_char(int n){........}
void main(){
int n=2;
char *p;
p=max_char(n);
}
文件包含命令与多文件程序的处理
1)文件包含命令
格式1:#include<文件名> //则系统仅按规定的路径搜索文件。
格式2:#include "文件名" //系统先在本程序清单文件所在的磁盘和路径下寻找文件;若找不到,在按系统规定的路径搜索文件。
常用系统函数
1)常数的数学处理函数
1.求整形绝对值函数
函数头 int abs(int x)
例如:abs(-10) 结果为10
abs(-32768) 结果为-32768.
说明:本函数返回值在0-32767.如果x的值为-32768,则返回值为-32768
2.求长整形绝对值函数
函数头 long labs(long x)
例如:labs(-10L) 结果为10.
3.求实型绝对值函数
函数头 double fabs(double x)
例如:fabs(-10.2) 结果为10.2.
4.求小于或等于x的最大整数函数
函数头 double floor(double x)
例如:floor(-10.5) 结果为-11.0.
floor(10.0) 结果为10.0.
5.求大于或等于x的最小整数函数
函数头 double ceil(double x)
例如:ceil(-10.5) 结果为-10.0.
ceil(10.9) 结果为11.0.
6。求正平方根函数
函数头 double sqrt(double x)
说明 x的值应>=0
7.求常用对数函数
函数头 double log10(double x)
说明 x的值应>0
8.求自然对数函数
函数头 double log(double x)
说明 x的值应>0
9.求指数函数
函数头 double exp(double x)
返回值 参数x的指数e的x平方。
10.求10的x次方函数
函数头 double pow10(int x)
例如:pow10(-1) 结果为0.100000
11.求x的y次方函数
函数头 double pow(double x,double y)
例如:pow(2,-2) 结果为0.250000
pow(0.2,2) 结果为0.040000.
12.求正弦函数
函数头 double sin(double x)
例如:sin(90*3.14159/180) 结果为1.000000
13.求余弦函数
函数头 double cos(double x)
例如:cos(90*3.14159/180) 结果为0.0
14.求正切函数
函数头 double tan(double x)
例如:tan(45*3.14159/180) 结果为1.0
2)常用的类型转换函数
1.将字符串转换成浮点数函数
函数头 double atof(char *x)
例如:12.3、0123e2,转换结果将是:12.3、12.3.如果不是正确的实数形式,转换结果将取前面若干个能组成实数的字符。例如:1A2.345、0.1b23e2,转换的结果将为1.0、0.1。
2.将字符串转换成整数函数
函数头 int atoi(char *x)
例如:12、1200等,转换的结果将是:12、1200等。如果不是正确的整数形式,转换结果将取前面若干个能组成整数的字符对应的证书。例如:1A2、12B00,转换的结果将为1、12.
3)常用的字符处理函数
1.判断是否英文字母函数
函数头 int isalpha(int x)
例如:isalpha(49) 结果为0(49对应的字符是‘1’)(假)
isalpha('a') 结果为非0(真)
2.判断是否英文小写字母函数
函数头 int islower(int x)
例如:islower(97) 结果为非0(真)
islower('A') 结果为0(假)
3.判断是否英文大写字母函数
函数头 int isupper(int x)
例如:isupper(97) 结果为0(97对应的字符是‘a’)(假)
isupper('A') 结果为非0(真)
4.判断是否数字字符函数
函数头 int isdigit(int x)
例如:isdigit(49) 结果为非0(49对应的字符是‘1’)(真)
isdigit('a') 结果为0(假)
5.将大写字母转换为小写字母函数
函数头 int tolower(int x)
例如:tolower(49) 结果为‘1’(49对应的字符是‘1’)
tolower('A') 结果为‘a’
说明:若参数x中存放室大写字母,则返回值是对应的小写字母。如果参数x中存放的字符不是大写字母,则返回值等于x的原来值。
6.将小写字母转换为大写字母函数
函数头 int toupper(int x)
例如:toupper(49) 结果为‘1’(49对应的字符是‘1’)
toupper('a') 结果为‘A’
7.将字符转换成ASCII代码值函数
函数头 int toascii(int x)
例如:toascii(129) 结果为1
toascii('a') 结果为97(97对应的字符是‘a’)
说明:返回值在0-127之间。
4)其他常用函数
1.能发出鸣笛声的函数
函数头 void sound(int x)
功能:按照参数x赫兹的频率连续发出鸣笛声。
2.中指鸣笛声的函数
函数头 void nosound()
功能 中止由sound()函数发出的鸣笛声。
3.延时函数
函数头 void delay(int x)
功能 延时参数x毫秒。
4.随机数发生器初始化函数
函数头 void randomize()
功能 对随机数发生器进行初始化
5.随机数发生函数
函数头 int randoom(int num)
功能 产生一个从0到num-1之间的随机整数。
5)C语言函数(C自考学习)的更多相关文章
- C语言(函数)学习之strstr strcasestr
C语言(函数)学习之[strstr]&[strcasestr]一.strstr函数使用[1]函数原型char*strstr(constchar*haystack,constchar*needl ...
- IOS学习笔记07---C语言函数-printf函数
IOS学习笔记07---C语言函数-printf函数 0 7.C语言5-printf函数 ------------------------- ----------------------------- ...
- IOS学习笔记06---C语言函数
IOS学习笔记06---C语言函数 -------------------------------------------- qq交流群:创梦技术交流群:251572072 ...
- 学习LoadRunner之C语言函数
学习LoadRunner之C语言函数 Action() { /*strchr和strrchr的区别*/ /* char *strTest1="citms citms"; char ...
- R语言函数化学习笔记6
R语言函数化学习笔记 1.apply函数 可以让list或者vector的元素依次执行一遍调用的函数,输出的结果是list格式 2.sapply函数 原理和list一样,但是输出的结果是一个向量的形式 ...
- R语言函数化学习笔记3
R语言函数化学习笔记3 R语言常用的一些命令函数 1.getwd()查看当前R的工作目录 2.setwd()修改当前工作目录 3.str()可以输出指定对象的结构(类型,位置等),同理还有class( ...
- 【C语言学习笔记】C语言函数执行成功时,返回1和返回0,究竟哪个好?
基本上,没有人会将大段的C语言代码全部塞入 main() 函数,更好的做法是按照复用率高,耦合性低的原则,尽可能的将代码拆分不同的功能模块,并封装成函数.C语言代码的组合千变万化,因此函数的功能可能会 ...
- GO语言学习(十二)Go 语言函数
Go 语言函数 函数是基本的代码块,用于执行一个任务. Go 语言最少有个 main() 函数. 你可以通过函数来划分不同功能,逻辑上每个函数执行的是指定的任务. 函数声明告诉了编译器函数的名称,返回 ...
- C#委托与C语言函数指针及函数指针数组
C#委托与C语言函数指针及函数指针数组 在使用C#时总会为委托而感到疑惑,但现在总新温习了一遍C语言后,才真正理解的委托. 其实委托就类似于C/C++里的函数指针,在函数传参时传递的是函数指针,在调用 ...
- C语言函数声明什么时候可以省略,什么时候不能省?
在学习C语言函数的时候,老师总会告诉我们函数要写声明,然后再定义.这是个稳健的做法.等我自己学习了其他高级语言以后,回头再来写C,突然就觉得函数要写声明有点麻烦.无意间发现有一次函数没写声明居然编译( ...
随机推荐
- UWP 手绘视频创作工具技术分享系列 - 位图的绘制
前面我们针对 SVG 的解析和绘制做了介绍,SVG 是图片的一种形式,而另一种很重要的图片是:位图,包括 png.jpeg.bmp 等格式.位图的基本规则是,组成的基本元素是像素点,由宽度 * 高度个 ...
- Rythm.js 使用教程详解
转载自 http://blog.csdn.net/qq_26536483/article/details/78261515 简介 rythm.js是一款让页面元素跳动起来的插件,并且带音乐,共7种用法 ...
- java 集合之实现类ArrayList 和 LinkedList
List 的方法列表 方法名 功能说明 ArrayList() 构造方法,用于创建一个空的数组列表 add(E e) 将指定的元素添加到此列表的尾部 get(int index) 返回此列表中指定位置 ...
- WPF DataGrid自动生成序号
需求和效果 应用WPF技术进行开发的时候,大多都会遇到给DataGrid添加序号的问题,今天分享一下查阅了很多stackoverflow的文章后,总结和改进过来的方法,先看一下效果图,文末附Demo下 ...
- 真正从0开始用Unity3D制作类战地2玩法的类龙之谷、王者荣耀的手游(暨全平台游戏)
如题,(从2017年10月18日开始)正在利用业余时间研发一款神泣Shaiya2手游,引擎用Unity3D. 原因主要有2点: 对神泣太多感情,希望能做点什么来纪念乃至留下神泣这款网游: 时机已到,是 ...
- 基于FFMPEG的跨平台播放器实现
基于FFMPEG的跨平台播放器实现 一.背景介绍 FFmpeg是一款超级强大的开源多媒体编解码框架,提供了录制.转换以及流化音视频的完整解决方案,包含了libavcodec.libavformat等多 ...
- vue-cli中如何引入jquery
前言 虽然vue不推荐直接操作DOM,而且也提供了操作DOM的方式.但是在某些时候还是要用到jquery(囧),那么如何在使用vue-cli的时候引入jquery呢? 安装 国内镜像 cnpm 安装 ...
- 在CUDA8.0下编译安装OpenCV3.1.0来实现GPU加速(Compiling OpenCV3.1.0 with CUDA8.0 support)
在CUDA8.0下编译安装OpenCV3.1.0 一.本人电脑配置:ubuntu 14.04, NVIDIA GTX1060. 二.编译OpenCV3.1.0前,读者需要成功安装CUDA8.0(网上有 ...
- PHP获取文件扩展名的五种方式
这是我应聘实习时遇到的一道笔试题: 使用五种以上方式获取一个文件的扩展名. 要求:dir/upload.image.jpg,找出 .jpg 或者 jpg , 必须使用PHP自带的处理函数进行处理,方法 ...
- Install a Jenkins on Ubuntu system
================================================================================ Jenkins Environment ...