七天学会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;
}

运行结果:

相关推荐
喵叔哟4 分钟前
重构代码中引入外部方法和引入本地扩展的区别
java·开发语言·重构
尘浮生10 分钟前
Java项目实战II基于微信小程序的电影院买票选座系统(开发文档+数据库+源码)
java·开发语言·数据库·微信小程序·小程序·maven·intellij-idea
hopetomorrow24 分钟前
学习路之PHP--使用GROUP BY 发生错误 SELECT list is not in GROUP BY clause .......... 解决
开发语言·学习·php
小牛itbull34 分钟前
ReactPress vs VuePress vs WordPress
开发语言·javascript·reactpress
怀澈12236 分钟前
高性能服务器模型之Reactor(单线程版本)
linux·服务器·网络·c++
请叫我欧皇i42 分钟前
html本地离线引入vant和vue2(详细步骤)
开发语言·前端·javascript
闲暇部落1 小时前
‌Kotlin中的?.和!!主要区别
android·开发语言·kotlin
GIS瞧葩菜1 小时前
局部修改3dtiles子模型的位置。
开发语言·javascript·ecmascript
chnming19871 小时前
STL关联式容器之set
开发语言·c++
带多刺的玫瑰1 小时前
Leecode刷题C语言之统计不是特殊数字的数字数量
java·c语言·算法