• 七天学会C语言-第五天(函数)


    在这里插入图片描述

    1. 调用有参函数

    有参函数是一种接受输入参数(参数值)并执行特定操作的函数。通过向函数传递参数,你可以将数据传递给函数,让函数处理这些数据并返回结果。

    例1:编写一程序,要求用户输入4 个数字,输出前两个数中的最大数、后两个数中的最大数以及四个数中的最大数。

    #include 
    
    double max(double x, double y);
    
    int main() {
        double a[4];
        int i;
    
        for (i = 0; i < 4; i++) {
            if (scanf("%lf", &a[i]) != 1) {
                printf("输入不合法,请输入一个有效的数字。\n");
                return 1;  // 退出程序,返回错误代码
            }
        }
    
        double t = max(a[0], a[1]);
        double u = max(a[2], a[3]);
        double v = max(t, u);
    
        printf("前两个数中的最大数为%.2lf\n", t);
        printf("后两个数中的最大数为%.2lf\n", u);
        printf("四个数中的最大数为%.2lf\n", v);
    
        return 0;
    }
    
    double max(double x, double y) {
        return (x > y ? x : y);
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    运行结果:
    在这里插入图片描述

    例 2:有两个小组,分别有5名学生和10名学生。请编程输入这些学生的成绩,并调用一个 average 函数求这两个小组的平均分。

    #include 
    
    float average(float a[], int n);
    
    int main() {
        float zu1[5], zu2[10];
        int i;
    
       
        for (i = 0; i < 5; i++) {
            if (scanf("%f", &zu1[i]) != 1) {
                printf("输入不合法,请输入一个有效的数字。\n");
                return 1;  // 退出程序,返回错误代码
            }
        }
    
        
        for (i = 0; i < 10; i++) {
            if (scanf("%f", &zu2[i]) != 1) {
                printf("输入不合法,请输入一个有效的数字。\n");
                return 1;  // 退出程序,返回错误代码
            }
        }
    
        printf("第 1 组平均分是%.2f\n", average(zu1, 5));
        printf("第 2 组平均分是%.2f\n", average(zu2, 10));
    
        return 0;
    }
    
    float average(float a[], int n) {
        float sum = 0.0, average;
        int i;
        for (i = 0; i < n; i++) {
            sum += a[i];
        }
        average = sum / n;
        return average;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40

    运行结果:
    在这里插入图片描述

    2. 调用无参函数

    无参函数是一种不需要接受任何输入参数的函数。它们通常用于执行一些固定的任务或打印消息,而不依赖于外部数据。

    1:请编程输出以下内容:
    123456
    小翟是大帅逼
    654321
    小翟是大帅逼
    654321
    小翟是大帅逼
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    #include
    
    void a();
    void b();
    void c();
    
    int main() {
        a();
        b();
        c();
        b();
        c();
        b();
        return 0;
    }
    void a() {
        printf("123456\n");
    }
    void b() {
        printf("小翟是大帅逼\n");
    }
    void c() {
        printf("654321\n");
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    运行结果:在这里插入图片描述

    例 2:请编程输入 10 个整数,并将这 10 个数由小到大排序。

    #include
    
    void paixu(int a[], int n); // 修正参数列表
    
    int main() {
        int a[10], i;
        printf("请输入 10 个整数:\n");
        for (i = 0; i < 10; i++)
            scanf("%d", &a[i]);
        
        paixu(a, 10);
        
        printf("排序后的整数依次是:\n");
        for (i = 0; i < 10; i++)
            printf("%d\t", a[i]);
        printf("\n");
        
        return 0;
    }
    
    void paixu(int a[], int n) {
        int i, j, t;
        for (i = 0; i < n - 1; i++)
            for (j = i + 1; j < n; j++)
                if (a[i] > a[j]) {
                    t = a[i];
                    a[i] = a[j];
                    a[j] = t;
                }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    运行结果:
    在这里插入图片描述

    3. 函数的嵌套

    函数的嵌套是指在一个函数内部调用另一个函数。这允许你将程序分解成更小的、可管理的部分。嵌套函数通常有助于提高代码的可读性和可维护性。

    例 1:请编程输入 4 个整数,并找出其中最大的数。

    #include 
    
    int max4(int a, int b, int c, int d);
    int max2(int a, int b);
    
    int main()
    {
        int a, b, c, d, zuidashu;
        scanf("%d %d %d %d", &a, &b, &c, &d);
    
        zuidashu = max4(a, b, c, d);
        printf("最大数为%d\n", zuidashu);
        return 0;
    }
    
    int max4(int a, int b, int c, int d)
    {
        int max2(int a, int b);
        return (max2(max2(max2(a, b), c), d));
    }
    
    int max2(int a, int b)
    {
        return (a > b ? a : b);
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    运行结果:
    在这里插入图片描述

    4. 函数的递归

    递归是一种函数调用自身的过程。递归函数通常包括两个部分:基本情况和递归情况。基本情况是一个停止条件,它指定何时结束递归。递归情况则定义了函数如何继续调用自身以解决更小的子问题。递归在解决需要重复分解的问题时非常有用,如计算阶乘或斐波那契数列等。

    例1:有5个学生,第5个学生比第4个学生大2岁,第4个学生比第3个学生大2岁,第3个学生比第2个学生大2岁,第2个学生比第1个学生大2岁,第1个学生是10岁。请编程计算出第5个学生的年龄。

    #include 
    
    int calculateAge(int studentNumber);
    
    int main() {
        int ageOfFifthStudent = calculateAge(5);
        printf("第5个学生的年龄:%d岁\n", ageOfFifthStudent);
        return 0;
    }
    
    int calculateAge(int studentNumber) {
        if (studentNumber == 1) {
            return 10; // 第1个学生是10岁
        } else {
            // 递归计算年龄,每个学生比前一个学生大2岁
            return calculateAge(studentNumber - 1) + 2;
        }
    }
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    运行结果:
    在这里插入图片描述

    例 2:用递归方法求 n!(注意取值范围)

    #include 
    
    int factorial(int n);
    
    int main()
    {
        int num;
        printf("Please enter an integer: ");
        scanf("%d", &num);
    
        printf("%d! = %d\n", num, factorial(num));
        return 0;
    }
    
    int factorial(int n)
    {
        int result;
        if (n < 0)
            printf("n < 0, incorrect input!\n");
        else if (n == 0 || n == 1)
            result = 1;
        else
            result = factorial(n - 1) * n;
    
        return result;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    运行结果:
    在这里插入图片描述

  • 相关阅读:
    沉睡者 - 现在的人为什么不好好工作,都想着「搞点副业」?
    Rancher2.6全新Monitoring快速入门
    为什么有的测试员路越走越窄?原因在这里
    蒙特卡洛法批量计算期权希腊值
    锂热电池检测设备 你一定没见过这种检测方式!
    第十章、python字符串操作与with语句及上下文管理器------with语句与上下文管理器(Context Manager)
    opencv c++ 高斯模糊,高斯双边模糊(28)
    Maven发布自己项目到maven中央仓库
    美国指控著名安全厂商Avast 向广告商出售用户浏览数据
    4款值得推荐的AI辅助编程工具(支持C#语言)
  • 原文地址:https://blog.csdn.net/m0_53918860/article/details/133091584