设为首页 加入收藏

TOP

C语言函数的秘密(一)
2016-12-06 20:24:06 】 浏览:502
Tags:语言 函数 秘密

C语言提供了大量的库函数
自定义函数的一般形式:

[数据类型]函数名称([参数])
{
    执行代码块;
    return(表达式);
}

注意:
[]包含的内容可以省略,数据类型说明省略,默认的是int类型函数;参数省略表示该数是无参数的函数,参数不省略表示该函数是有参函数;
2、函数名称遵循标识符命名规范
3、自定义函数尽量放在main()函数之前,如果要放在main()函数后面的话,需要在main()函数之前先声明自定义函数,声明格式为:[数据类型说明]函数名称([参数]);

#include 
  
   

int sayhello()
{
    printf("%s\n","慕课网的小伙伴,大家好");
    return 0;
}
int main()
{
    return 0;
}
  

函数的调用

C语言中,函数调用的一般形式:

函数名([参数])

注意:
1、对无参数的调用的时候可以将[]包含的省略
2、[]中可以是常数,变量或其他构造类型数据及表达式,各个参数之间用逗号分开。

#include 
  
   
//自定义函数,sayhello()
int sayhello()
{
    printf("%s\n","慕课网的小伙伴们,大家好");
    return 0;
}
//主函数
int main()
{
    sayhello();
    return 0;
}
  

有参与无参数

在函数中不需要函数参数的称之为无参数函数
在函数中需要参数的称之为有参函数
有参函数的一般形式

[数据类型]函数名称(参数列表)
{
    执行代码块;
    return 表达式;
}
[数据类型]函数名称()
{
    执行代码块;
    return 0;
}

有参函数与无参函数的唯一的区别是:函数()中多了一个参数列表。

无参数函数
#include 
  
   

int Matrix()
{
    int i, j;
    for (i = 1; i <= 3; i++)
    {
        for (j = 1; j <= 3; j++)
        {
            printf(" * ");
        }
        printf("\n");
    }
    return 0;
}
int main()
{
    Matrix();
    return 0;
}
  
#include 
  
   

int Matrix(int n)
{
    int i, j;
    for (i = 1; i <= n; i++)
    {
        for (j = 1; j <= n; j++)
        {
            printf("* ");
        }
        printf("\n");
    }
    return 0;
}
int main()
{
    Matrix(5);
    return 0;
}
  

对比两个例子,不难发现有参函数更为灵活,输出的图形可以随着n 的改变而随意改变,只要在main()函数中传递一个参数就可以了;而在无参函数中输出的相对就比较固定,当需要改动的时候还需要到自定义的方法内改变循环变量的值。

形参与实参

函数的参数分为形参和实参两种。

形参是在 定义函数名的时候使用的参数。目的是用来接收调用该函数时传入的参数。

实参是在调用时传递该函数的参数。

(一)函数的形参和实参具有以下的特点:

形参 只有在被调用时分配 内存单元,在调用结束时,即刻释放所分配的内存单元。 因此形参只有在函数的内部有效。函数调用结束返回 主调用函数名后则不能再使用该形参变量 实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值, 在参数传递时,实参和行参在数量上,类型上,顺序上应严格一致,否则会发生类型不匹配的错位
#include 
  
   

int MultiDouble(int x)//这里的x是形参
{
    return x * 2;
}

int main()
{
    int x = 10;
    //下面的x是实参,他其实就是main()函数中定义的变量x
    printf("%d\n",MultiDouble(x));
    return 0;
}
  

求三角形的周长

#include 
  
   

int getGirth(int a, int b, int c)
{
    if ((a + b) <= c || (a + c) <= b || ((b + c) <= a))
    {
        printf("不构成三角形\n");
        return 0;
    }
    else
    {
        int cirf = a + b + c;
        return cirf;
    }
}
int main()
{
    int a, b, c;
    a = 3;
    b = 4;
    c = 5;
    printf("三角形的周长是:%d\n",getGirth(a,b,c));
}
  

函数的返回值

函数的返回值是指函数被调用之后,执行函数体中的程序段所取得的并返回给主调函数的值。
1、函数的值只能通过return语句返回主调函数。return语句的一般形式为:

return 表达式               return (表达式);

2、函数值的类型和函数定中函数的类型应保持一致。如果两者不一致,则以函数返回类型为准,自动进行类型转换。

int number()
{
    return 100;
}
void noResult()
{

}

注意:
void函数中可以有执行代码块,但是不能有返回值,令void函数中如果有return语句,该语句只能有起到结束函数运行的功能。

其格式为: return ;

没有答案的

#include 
  
   
/* Jone算出结果应该怎么写函数? */
 ?  joneResult(int x, int y, int z)
{
   int sum = x+y+z;
   ?          //这里是不是应该将sum返回呢?
}
/* Jack没有算出结果只说了一句话是不是应该用无返回值函数? */
 ? jackResult(int x, int y, int z)
{
    printf("我算不出来\n");
}
int main()
{
    int a, b, c;
    a = 10;
    b = 20;
    c = 30;
    //Jone的返回值类型是什么?
         jR = joneResult(a, b, c); 
    printf("Jone运算结果是:%d\n", jR);
    printf("Jack运算结果是:");
    //Jack没有算出结果只说了句话,是不是直接调用函数就可以了?
    ?
    return 0;
}
  

递归

#include 
  
   
/* Jone算出结果应该怎么写函数? */
 ?  joneResult(int x, int y, int z)
{
   int sum = x+y+z;
   ?          //这里是不是应该将sum返回呢?
}
/* Jack没有算出结果只说了一句话是不是应该用无返回值函数? */
 ? jackResult(int x, int y, int z)
{
    printf("我算不出来\n");
}
int main()
{
    int a, b, c;
    a = 10;
    b = 20;
    c = 30;
    //Jone的返回值类型是什么?
         jR = joneResult(a, b, c); 
    printf("Jone运算结果是:%d\n", jR);
    printf("Jack运算结果是:");
    //Jack没有算出结果只说了句话,是不是直接调用函数就可以了?
    ?
    return 0;
}
  

计算n的阶乘可以使用以下代码

#include 
  
   
int factorial(int n)
{
    int result;
    if (n < 0)
    {
        printf("输入错误!\n");
        return 0;
    }
    else if (n == 0 || n == 1)
    {
        result = 1;
    }
    else
    {
        result = factorial(n - 1)*n;
    }
    return result;
}

int main()
{ 
    int n = 5;
    printf("%d的阶乘=%d",n,factorial(n));
    return 0;
}
  

递归就是一个函数在它的函数体内调用它自身

#include 
  
   

int getwordNumber(int n)
{
    if (n == 1)
    {
        return 1; 
    }
    else
    {
        return getwordNumber (n - 1) + n;
    }
}

int main()
{
    int num = getwordNumber(10);
    printf("小明第10天记了:%d个单词。",num);
}
  

递归函数的特点:

每一级函数调用都有自己的变量,但是函数代码并不会得到复制, 每次调用都会有一次返回 递归函数中,位于递归调用前的语句和各级被调用函数具有相同的执行顺序, 递归函数中,位于递归调用钱的语句和各级被调用函数具有相同的执行顺序; 递归函数中,位于递归调用的后的语句的执行顺序和各
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇C++ 标准库 下一篇C语言编程开发之C语言Bit位定义

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目