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

1. 调用有参函数

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

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

c 复制代码
#include <stdio.h>

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);
}

运行结果:

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

c 复制代码
#include <stdio.h>

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;
}

运行结果:

2. 调用无参函数

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

bash 复制代码
例 1:请编程输出以下内容:
123456
小翟是大帅逼
654321
小翟是大帅逼
654321
小翟是大帅逼
c 复制代码
#include<stdio.h>

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");
}

运行结果:

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

c 复制代码
#include<stdio.h>

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;
            }
}

运行结果:

3. 函数的嵌套

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

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

c 复制代码
#include <stdio.h>

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);
}

运行结果:

4. 函数的递归

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

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

c 复制代码
#include <stdio.h>

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;
    }
}

运行结果:

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

c 复制代码
#include <stdio.h>

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 小时前
QT-简单视觉框架代码
开发语言·qt
威桑1 小时前
Qt SizePolicy详解:minimum 与 minimumExpanding 的区别
开发语言·qt·扩张策略
飞飞-躺着更舒服1 小时前
【QT】实现电子飞行显示器(简易版)
开发语言·qt
明月看潮生1 小时前
青少年编程与数学 02-004 Go语言Web编程 16课题、并发编程
开发语言·青少年编程·并发编程·编程与数学·goweb
明月看潮生1 小时前
青少年编程与数学 02-004 Go语言Web编程 17课题、静态文件
开发语言·青少年编程·编程与数学·goweb
Java Fans1 小时前
C# 中串口读取问题及解决方案
开发语言·c#
盛派网络小助手1 小时前
微信 SDK 更新 Sample,NCF 文档和模板更新,更多更新日志,欢迎解锁
开发语言·人工智能·后端·架构·c#
Chinese Red Guest2 小时前
python
开发语言·python·pygame
一棵星2 小时前
Java模拟Mqtt客户端连接Mqtt Broker
java·开发语言
xiaoshiguang33 小时前
LeetCode:222.完全二叉树节点的数量
算法·leetcode