实验6总结

1.函数概述:

  • 函数→function→功能,函数就是能完成一定功能的程序段。
  • 如果程序规模不大,只需一个主函数和基本的库函数即可。
  • 否则,用户需要编写能实现一定功能的子函数。

2.函数的功能:

  • 主函数就像一个控制面板,子函数就像控制面板上的按钮。
  • 每个子函数可以实现功能。
  • 子函数可以减少重复编写程序段的工作量。
  • 同一个子函数可以被一个或多个函数多次调用。

3.函数使用说明:

  • C程序是由一个或多个函数组成。
  • C程序总是从main函数开始执行,而不管将其写在前面、中间或最后。在调用完其它函数后返回到main函数。
  • 子函数相互独立,可以互相调用,但是子函数不可调用主函数。

4.函数分类:

  • 从用户角度看,C语言函数分为两类:

  (1)库函数(标准函数):是系统提供定义,用户编程时可直接调用。printf(),scanf()。

  (2)用户定义函数:是用户自己编写的用来解决具体问题的函数。cylinder(),max(),PrintStar()。

  • 从函数的形式看,函数分为两类:

  (1)无参函数:不需要向函数传递参数。PrintStar()。

  (2)有参函数:需要向函数传递必要的参数。cylinder(r,h),max(a,b)

  • 从函数有无返回值看,函数分为两类:

  (1)有返回值函数:函数经过运算,得到一个明确的结果,并需要回送该结果。cylinder(r,h),max(a,b)。

  (2)无返回值函数:函数只是完成一系列操作步骤,不需要回送任何运算结果。PrintStar(),PrintMessage()。

5.函数定义:

  1.函数定义的一般形式:

类型标识符 函数名(形式参数说明表)→函数首部

{

  函数实现过程;                       →函数体

}

  2.函数定义说明:

  (1)类型标识符:

  • 函数的类型,与return语句返回值的类型相同。可以理解为函数最终的结果类型。
  • 可以是任何一种有效的类型,缺省时默认为整型。
  • 若函数无返回值,类型标识符为void。

  (2)函数名:

  • 它的命名要符合C语言的标识符命名规则:由字母、数字和下划线组成,其中第一个字符必须是字母或下划线。
  • 函数名必须唯一,不能与函数体内变量或形参名相同。

  (3)形参表:

  • 形式参数(形参):在定义函数时,函数名后面括号中的变量名。形参是变量,必须指定类型。例如:double cylinder(double r,double h)。
  • 形参主要是用于接受主调函数传递过来的数值。形参类型必须与传递过来的数据类型一致。例如:v=cylinder(radius,height)。
  • 形参的命名只要符合变量的命名规则即可,无需和主调函数中的变量名一致。
  • 每个形参必须单独说明类型,形参间用逗号间隔。
  • 可以不带形参:如果函数无需从主调函数处接收数据,可以不带形参,但是圆括号不能省略。  

6.函数的调用:

  • 定义完一个函数后,就可以在程序中调用这个函数。
  • 调用标准库函数时,在程序的最前面用#include命令包含相应的头文件。
  • 调用自定义函数时,程序中必须有与调用函数相对应的函数定义。

  1.函数调用的一般格式:

   函数名(实参表)→常量、变量、表达式

  • 实际参数(实参):调用函数时函数名后面括号中的内容。
  • 实参列表中可以含有多个参数,每个参数间用逗号隔开。
  • 实参表中变量和表达式要有确定的值。
  • 实参也可没有,但括号不能省略,如PrintStar()。

  2.函数调用的一般过程:

  • 主函数开始;
  • 遇到主函数调用某个子函数时,主函数被暂停执行;
  • 子函数执行;
  • 执行完后返回主函数;
  • 再从主函数暂停位置处继续执行,直到结束。

  3.函数调用的方式:

  • 函数语句:即把函数调用作为一个语句。如:
     PrintStar();
     printf(“***********”); 
     这时不要求函数带返回值,只要求完成一定的操作,通常将函数定义为“void”类型。
  • 函数表达式:函数出现在可以写表达式的地
          方,此时需要的是函数的值。如:
    c=2*max(a,b);
    printf(“%d”,max(a,b));

  4.函数参数传递说明:

  • 实参可以是常量,变量,表达式,但必须有确定的值
  • 形参是变量,必须指定类型
  • 在参数传递过程中,实参把值复制给形参。
  • C语言中,参数的传递是“值传递”,即单向传递。数据只能由实参传送给形参,而不由形参传回给实参。 
  • 形参和实参一一对应:数量一致,类型一致,顺序一致。
  • 形参在函数被调用前不占内存;函数调用时为形参分配内存;调用结束,内存释放。

  5.函数返回值:

  • 在调用函数时,有时需要将运算结果返回主调函数,此时函数返回值就需要使用return语句实现。
  • return语句形式:
         return   表达式;或者
         return  (表达式);

           例如:    return result; 
                        return 0; 
                        return(x>y?x:y)

  • 若函数无返回值时,函数类型说明为void,且不能略。                                                 如:void PrintStar()
         {printf("******\n");}
    return语句只返回一个值。
  • return语句具有两个功能:
      ①结束函数的运行;
      ②带着运算结果(表达式的值)返回主调函数。
        如果return语句为:return ;
      则表示仅返回到调用函数的调用点,不带返回值。
  • 在一个函数中,return语句可以出现多次,但每次执行只能有一条return语句被执行。

  6.函数声明:

  函数类型 函数名(参数表);
  double cylinder (double r, double h);
  void pyramid (int n);

  • 只写函数定义中的第1行(函数首部),并以分号结束。
  • 函数声明:说明函数的类型和参数的情况,以保证程序编译时能判断对该函数的调用是否正确。
  • 如果是库函数,应在文件开头引用头文件;
  • 如果被调用函数定义在调用它的函数后面
    应在主调函数中对被调函数作声明;
    在所有函数之前对被调函数作声明,此时在主调函数中就不必再作声明了。
  • 如果被调函数定义在调用它的函数的前面,在主调函数之前可以不加声明。

7.变量与函数:

  1.局部变量和全局

  (1)局部变量

  • 在函数内定义的变量(包括形参)
    作用范围:本函数内部
  • 定义在复合语句内的变量
    作用范围:复合语句内部

  (2)全局变量

  • 在函数以外定义的变量,不从属于任一函数。
    作用范围:从定义处到源文件结束(包括各函数)

  2.变量生命周期和静态局部变量

  (1)自动变量(auto):  普通的局部变量
  int x, y;    auto int x, y;
  char c1;   auto char c1;

  • 函数调用时,定义变量,分配存储单元。
  • 函数调用结束,收回存储单元。

    (2)全局变量:从程序执行开始,到程序的结束,存储单元始终保持。

   (3)变量生命周期:变量从定义开始分配存储单元,到运行结束存储单元被回收的整个过程。

三、实验心得体会:

经过这次的实验作业,我发现自己在函数部分掌握的还是比较好的,思路也很清晰。

posted @ 2016-12-24 06:23  刘悦  阅读(144)  评论(0编辑  收藏  举报