函数

来源:互联网 发布:平成废物知乎 编辑:程序博客网 时间:2024/05/16 03:06

函数:

定义:

Double average (double a,double b)

{

Return (a+b)/2;}

一开始的double为函数的返回类型(每次调用函数时的返回类型)a,b为函数的形式参数表示正在调用的函数 average需要提供的两个数每个形式参数必须有类型;形式参数本身是变量,其初值在调用函数式后才提供。

为了调用函数,需要写函数名及跟随后边的实际参数:

     返回函数类型 函数名(形式参数)

           {

                 声明

                 语句

            };

函数不能返回数组,

如果指定为void类型,则没有返回值类型;

·判定素数的函数:

#Include《stdio.h》

Bool is prime(int n)

{

      Int dicisor;

      If (n<=1)

      Rerurn false;

For (dicisior=2;divisor*divisor <=n;dicisor++)

If (n%divisior==0)

Return false;

Else 

Return true;

}

 

函数的声明:

如果定义的函数在主函数前,则不需要声明;但是朱函数要在定义的函数之前,则必须声明。

#include《stdio.h》

Double  average (double  a ,double b)/*声明*/

所以说       调用函数式必须对函数进行定义或声明。

 

 

实际参数:

形式参数是出现在函数的定义中,实际参数是出现在函数的调用中c语言中,实际参数是通过值传递(调用函数时,计算出每个实际 参数的值,并且把它符给相应的形式参数)

 

 

Int  sum _array(int a[],int n)

{
      int ,sum=0;

For (i=0;i<n;i++)

Sum+=a[i];

Return sum;

}

其中数组的长度是n,sum_array需要知道数组的长度,所有必须把a的长度提出来

如果是int sum_arraty(int[],int n)

参数就是两个,分别是数组的名字和数组的长度

如下:

#ddefine LEN 100

Int main(void)

{

Int b[LEN],total;

Total=sum_array(b,LEN)

}

在把数组名传递给函数时,不要在数组名后面加方括号:

Total=sum_array(b[],LEN)是错误的!!!!

 

 

如果是形式参数是多维数组,声明参数时只能省略第一维的长度,如下:如果修改函数是的a是一个二维数组,我们可以不指出行的数量,但是必须指出列的数量:

#define LEN 10

Int sum_array(int a[][LEN],int n)

{

    Int i , j ,sum;

    For (i=0;i<n;i++)

      For(j=0;j<LEN;j++)

          Sum+=a[i][j];

    Return sum;

 

 

 

定义变长数组可以使用如下方法:

 

(1)    :Int sum_array(int  n  ,inta  a[n]  )

    }

(2)    :Int sum_array(int  n  ,int  a[*]  )

用* 的理由是形式参数的名字是可选的,如果第一个参数的定义被省略了,那么就没有办法定义数组a的长度是n,*说明数组的长度与形式参数列表中的参数相关

(3)    :Int sum_array(int  n  ,int  [*]  )

 

 

 

变长数组是多维的则更加实用:

Int sum_array(int n, int m, int a[n][m])

{

   Int  i , j , sum;

   For (i=0;i<n;i++)

     For (j=0;j<m;j++)

        Sum + =a[n][m]

Return sum;

}

 

函数的原型也可以是这样:

 

Int sum_array(int n, int m, int a[n][m])

Int sum_array(int n, int m, int a[*][*])

Int sum_array(int n, int m, int a[][m])

Int sum_array(int n, int m, int a[n][*])

 

如果参数的多维的,Static仅可用于第一维的

Int sum_arrray(int a [static3],int n)

复合字面量:

Int  b[]={3,0,3,4,1};

Total=sum_array(b,5);

这样做的唯一问题就是需要把b作为一个变量来声明,并在调用前初始化,如果不对b作用,有点浪费;

这样可以用符合字面量来避免该问题:

复合字面量就是通过制定其包含的元素而创建的没有名字的数组,

第一个参数就是复合字面量:

Total=sum_array((int[]){3,4,3,4,1},5);

在这个例子中,复合字面量创建了一个由5个整数(3,4,3,4,1)组成的数组,这里没有对数组的长度进行特别的说明,由复合字面量的元素个数进行决定,当然也可以做准确的说明,如(int [4]){3,4,3,4,}   和上边的等同

复合字面量的格式为:

现在一队圆括号内给定类型,随后在以后的花括号内设定包括元素的值,复合字面量类似于初始化的强制转化:

当然也可以是coust类型的。

 

          

Return语句:

非void的函数必须使用return语句指定将要返回的值,return语句的格式如下

Return+表达式

表达式的形式可以是常量或者是变量,也可以是表达式;

Return 0;

Return status;

Return n>=0?N:0

如果如return语句中表达式的类型和函数的返回类型不匹配,那么系统将会把表达式的类型转换成返回类型