zoukankan      html  css  js  c++  java
  • C语言基础--函数

    函数概念:

      1. C语言程序是由函数组成

      2. 什么是函数? 函数就是一段具备特定功能的程序段

    定义函数的目的:

      定义函数的目的: 将一个功能封装以来方便复用

    不使用函数的弊端:

         1.重复代码太多, 又臭又长

         2.当需求变更, 很多地方都需要修改代码

    使用函数的好处:

         1.提高了代码的复用性, 代码更简洁

         2.当需求变更, 不用修改很多地方

    函数的定义:

      应该有4个确定:

         1.确定函数名称(给函数起一个有意义的名称, 让调用者一看到名称就知道这个函数是干什么的)

            1.1函数是标示符的一种 , 遵守规则 : 26个字母 , 数字 , _组成, 遵守规范: 驼峰命名

         2.确定形参列表

            2.1形参列表的格式 (数据类型 变量名称, ...)

            2.2如何确定形参列表? 就看看以后调用函数时, 是否需要传递一些辅助的数据给函数

         3.确定返回值

         4.确定返回值类型

            4.1return的是什么类型, 那么返回值类型就写什么类型

    格式:

    返回值类型 函数名称(形参列表)
     {
        函数体; // 语句; ...
     } 

    示例:

    int getMax(int v1, int v2)
    {
        int max = v1 > v2 ? v1 : v2;
        /*
         return有两个作用:
             1.返回数据给函数调用者
             2.结束函数
         */
        return max;
    } 

    函数的调用:

    #include <stdio.h>
    
    // 注意: 形参列表中的变量只有当函数被调用时才会分配存储空间
    
    // 形参列表中的每一个变量我们称之为, 形式参数, 简称形参
    
    int average(int v1, int v2)
    {
        int average = (v1 + v2) / 2;
        return average;
    }
    
    int main(int argc, const char * argv[]) {
        // 需求: 求两个数的平均值
        int a = 10;
        int b = 20;
        // 调用函数时传入的参数, 我们称之为实际参数, 简称实参
        int result = average(a, b);
        printf("result = %i
    ", result);
        return 0;
    } 

    函数注意点:

    // 1.如果"基本数据类型"(char int double float)作为函数的参数, 在函数中修改形参的值, 不会影响到外面实参的值
    // 2.实参的个数, 必须和形参的个数相同
    int getMin(int v1, int v2)
    {
        // 注意: 在函数中修改形参的值, 不会影响到外面实参的值(当然也有一定的前提)
        v1 = 50;
        int min = v1 < v2 ? v1 : v2;
        return min;
    }
    // 3.返回值可以和返回值类型不一样,但是如果返回值和返回值类型不一样的时候 
    系统会对返回值进行自动类型转换(隐式类型转换), 将返回值转换为返回值类型
    // 注意: 在企业级开发中千万不要这样写
    // 4.函数可以有形参也可以没有形参
    int getHeight()
    {
        return 1.75;
    }
    // 5.函数名称不能相同
    // 5.1形参列表不同也不可以
    // 5.2返回值类型不同也不可以
    void test()
    {   
    
    }
    void test()
    {   
    
    }
    void test(int a)
    {   
    
    }
    int test()
    {    
    
    }
    // 6.函数不能嵌套定义
    void test()
    {
        void demo()
        {        
    
        }
    }
    // 7.C语言是弱语言
    //  7.1函数可以没有返回值类型
    // 如果函数没有写返回值类型, 那么默认就是int类型
    test()
    {
        return 1.75;
    } 

    函数的声明:

    //C语言规定: 一般情况下, 如果想要调用一个函数, 该函数必须在调用之前出现
    //函数的声明的作用: 在调用函数之前, 告诉系统有这个函数  并且告诉系统, 该函数叫什么名字, 接收什么参数, 返回什么类型的值
    int sum(int v1, int v2);
    //也可以写成:
    int sum(int, int);
    //    函数的声明, 只需要在函数被使用之前告知系统就可以了, 它可以写在函数的外面也可以写在函数的里面 

    函数的实现:

    // 完整的实现了函数的功能的代码, 称之为函数的定义(函数的实现)
    int sum(int v1, int v2)
    {
        return v1 + v2;
    }
    /*
     C语言中是不允许重复定义(实现)同名称的函数
    int sum(int v1, int v2)
    {
        return v1 + v2;
    }
    */ 

    函数递归:

    // 需求: 要求用户输入一个大于0的数, 如果用户输入的数不大于0  那么就一直重复的提醒输入重新输入, 直到用户输入的值大于0为止
    #include <stdio.h>
    void scanfNumber(); 
    
    int main(int argc, const char * argv[]) {
        /*
         循环实现:
        int number = -1;
        while (number < 0) {
            printf("请输入一个大于0的整数, 以回车结束
    ");
            scanf("%i", &number);
        }
        printf("number = %i
    ", number);
        */    
    
        // 一般情况下, 能用循环做得事情, 用递归函数都能做
        // 但是要注意: 不是什么时候都使用递归, 递归要慎用(性能问题)
        // 什么是递归函数: 函数自己搞自己
        scanfNumber(); 
        // 注意: 递归一定要由一个明确的结束条件, 否则会造成死循环(无限循环)
        return 0;
    } 
    
    void scanfNumber()
    {
        // 1.接收用户输入的值
        int number = -1;
        printf("请输入一个大于0的整数, 以回车结束
    ");
        scanf("%i", &number);   
        // 2.判断用户输入的值是否合法
        if (number < 0) {
            // 不合法, 需要重新输入
            // 函数可以自己调用自己
            scanfNumber();
        }
        else
        {
            printf("number = %i
    ", number);
        }
    } 

    递归格式:

     /*
         有5个人坐在一起,问第5个人多少岁?他说比第4个人大两岁。问 第4个人岁数,他说比第3个人大两岁。问第3个人,又说比第2个 人大两岁。问第2个人,说比第1个人大两岁。最后问第1个人, 他说是10岁。请问第5个人多大? 
         第一个人得岁数 == 10                        结束条件
         第二个人得岁数 == 第一个人 + 2  // 12
         第三个人得岁数 == 第二个人 + 2  // 14
         第四个人得岁数 == 第三个人 + 2  // 16
         第五个人得岁数 == 第四个人 + 2  // 18    
         一致第一个人得年龄, 和每个人之间的年龄差, 求第n个人的年龄
         age(1) == 10
         age(2) == age(1) + 2;
         age(3) == age(2) + 2;
         age(4) == age(3) + 2;
         age(5) == age(4) + 2;    
    
         age(n) = age(n - 1) + 2;                  计算公式
         */   
    #include <stdio.h> 
    
    int main(int argc, const char * argv[]) {   
        int result = age(3);
        printf("result = %i
    ", result);
        return 0;
    }
     
    int age(int n)
    {
       // 定义结束条件
        if (n == 1) {
            return 10;
        }
        else{
            return age(n - 1) + 2;
        }
    } 
    
    /*
         递归:  确定结束条件    找规律确定公式
        if(结束条件){
            reutrn ..;
        }
        else{
            return 公式;
        }
    */

     

  • 相关阅读:
    前端分页功能的实现以及原理
    Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结
    Jquery实现的几款漂亮的时间轴
    jQuery点击弹出层,弹出模态框,点击模态框消失
    如何用CSS快速布局(一)—— 布局元素详细
    验证控件jQuery Validation Engine调用外部函数验证
    Javascript实现页面跳转的几种方式
    最详细win7下手动搭建PHP环境:apache2.4.23+php7.0.11
    spark调优——JVM调优
    spark调优——Shuffle调优
  • 原文地址:https://www.cnblogs.com/dx-230/p/4755949.html
Copyright © 2011-2022 走看看