函数的概念

  在一个程序中,如果在不同地点多次执行某项操作,就可以把完成这项操作的程序段从程序中独立出来,定义成函数,而原来程序中凡需要进行这个操作的程序段可以只用“函数调用”来替代,从而达到简化程序清单的目的。建立函数成为“函数的定义”,使用函数称为“函数的调用”。

  通常把调用其它函数的函数称为“主调函数”,而别调用的函数称为“被调函数”。在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自考学习)的更多相关文章

  1. C语言(函数)学习之strstr strcasestr

    C语言(函数)学习之[strstr]&[strcasestr]一.strstr函数使用[1]函数原型char*strstr(constchar*haystack,constchar*needl ...

  2. IOS学习笔记07---C语言函数-printf函数

    IOS学习笔记07---C语言函数-printf函数 0 7.C语言5-printf函数 ------------------------- ----------------------------- ...

  3. IOS学习笔记06---C语言函数

    IOS学习笔记06---C语言函数 --------------------------------------------  qq交流群:创梦技术交流群:251572072              ...

  4. 学习LoadRunner之C语言函数

    学习LoadRunner之C语言函数 Action() { /*strchr和strrchr的区别*/ /* char *strTest1="citms citms"; char ...

  5. R语言函数化学习笔记6

    R语言函数化学习笔记 1.apply函数 可以让list或者vector的元素依次执行一遍调用的函数,输出的结果是list格式 2.sapply函数 原理和list一样,但是输出的结果是一个向量的形式 ...

  6. R语言函数化学习笔记3

    R语言函数化学习笔记3 R语言常用的一些命令函数 1.getwd()查看当前R的工作目录 2.setwd()修改当前工作目录 3.str()可以输出指定对象的结构(类型,位置等),同理还有class( ...

  7. 【C语言学习笔记】C语言函数执行成功时,返回1和返回0,究竟哪个好?

    基本上,没有人会将大段的C语言代码全部塞入 main() 函数,更好的做法是按照复用率高,耦合性低的原则,尽可能的将代码拆分不同的功能模块,并封装成函数.C语言代码的组合千变万化,因此函数的功能可能会 ...

  8. GO语言学习(十二)Go 语言函数

    Go 语言函数 函数是基本的代码块,用于执行一个任务. Go 语言最少有个 main() 函数. 你可以通过函数来划分不同功能,逻辑上每个函数执行的是指定的任务. 函数声明告诉了编译器函数的名称,返回 ...

  9. C#委托与C语言函数指针及函数指针数组

    C#委托与C语言函数指针及函数指针数组 在使用C#时总会为委托而感到疑惑,但现在总新温习了一遍C语言后,才真正理解的委托. 其实委托就类似于C/C++里的函数指针,在函数传参时传递的是函数指针,在调用 ...

  10. C语言函数声明什么时候可以省略,什么时候不能省?

    在学习C语言函数的时候,老师总会告诉我们函数要写声明,然后再定义.这是个稳健的做法.等我自己学习了其他高级语言以后,回头再来写C,突然就觉得函数要写声明有点麻烦.无意间发现有一次函数没写声明居然编译( ...

随机推荐

  1. Echarts数据可视化grid直角坐标系(xAxis、yAxis),开发全解+完美注释

    全栈工程师开发手册 (作者:栾鹏) Echarts数据可视化开发代码注释全解 Echarts数据可视化开发参数配置全解 6大公共组件详解(点击进入): title详解. tooltip详解.toolb ...

  2. 51nod 1595 回文度 | 马拉车Manacher DP

    51nod 1595 回文度 题目描述 如果长度为n的字符串是一个回文串,同时它的长度为floor(n/2)的前缀和后缀是K-1度回文串,则这个字符串被称为K度回文串.根据定义,任何字符串(即使是空字 ...

  3. ActiveMQ——activemq的详细说明,queue、topic的区别(精选)

    JMS中定义了两种消息模型:点对点(point to point, queue)和发布/订阅(publish/subscribe,topic).主要区别就是是否能重复消费. 点对点:Queue,不可重 ...

  4. DevOps之服务-监控工具

    唠叨话 关于德语噢屁事的知识点,仅提供精华汇总,具体知识点细节,参考教程网址,如需帮助,请留言. <DevOps教程> <DevOps之服务-监控工具> 注:关于监控工具的具体 ...

  5. 【特效】手机端仿美团下拉菜单带遮罩层html+css+jquery

    写了一个手机端的下拉菜单,类似美团,用相对单位rem写的. 效果截图: 代码很简单,原理有点类似嵌套的选项卡,其中的难点在于弹出下拉菜单后,出现黑色半透明遮罩层,而且下层列表页面禁止滚动了.关键就是给 ...

  6. 微信小程序倒计时

    今天做程序要做个限时抢购的功能如图: 先上代码: 源码 index.wxml    可根据自己实际需求改改 <view class="div-content-warp"> ...

  7. Linux文件系统的层级结构

    Linux文件系统的层级结构   文件结构 倒置的树状结构 :Linux的哲学思想是一切皆文件,把几乎所有资源统统抽象为文件形式:包括硬件设备,甚至通信接口等 根目录 :linux的文件起始均从唯一的 ...

  8. 【ASP.NET MVC 学习笔记】- 01 理解MVC模式

    本文参考:http://www.cnblogs.com/willick/p/3195560.html 1.MVC模式是软件系统的一种架构模式,它将软件分为三大模块: 模型(Model):封装业务逻辑以 ...

  9. IDEA-最简单的struts2项目 关于lib项目的默认位置

    文件结构 struts.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts ...

  10. C11 constant expressions 常量表达式

    一图流总结hhh