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

news2025/4/15 3:14:39

在这里插入图片描述

1. 调用有参函数

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

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

#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 函数求这两个小组的平均分。

#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. 调用无参函数

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

1:请编程输出以下内容:
123456
小翟是大帅逼
654321
小翟是大帅逼
654321
小翟是大帅逼
#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 个数由小到大排序。

#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 个整数,并找出其中最大的数。

#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个学生的年龄。

#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!(注意取值范围)

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1028092.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue路由和Node.js环境搭建

文章目录 一、vue路由1.1 简介1.2 SPA1.3 实例 二、Node.js环境搭建2.1 Node.js简介2.2 npm2.3 环境搭建2.3.1 下载解压2.3.2 配置环境变量2.3.3 配置npm全局模块路径和cache默认安装位置2.3.4 修改npm镜像提高下载速度 2.4 运行项目 一、vue路由 1.1 简介 Vue 路由是 Vue.js…

C++核心基础教程之STL容器详解 list

set/multiset 插入只有insert&#xff0c;没有push_back, push_front, 因为会自动排序 set是用二叉树去管理的&#xff0c;稍微修改树的结构就会改变&#xff0c;所以他不允许修改&#xff0c;迭代器是只读迭代器。 因为形参名和实参名相同&#xff0c;所以要用this 把下…

分布式共识算法

一、共识算法的目标 为了保证集群中各个无服务器节点的一致性&#xff0c;达到不会应为服务器的故障导致数据丢失&#xff0c;大概有以下三种&#xff1a;Paxos、Raft、ZAB 二、Raft 2.1、Raft算法概述 不同于Paxos算法直接从分布式一致性问题出发推导出来&#xff0c;Raft…

若依(RuoYi-Vue)+Flowable工作流前后端整合教程

此教程适合若依前后端分离项目&#xff0c;其他项目可以在扩展列表中进行查找。 近期公司里需要对很久以前的RuoYi-Vue前后端分离项目扩展出flowable的功能&#xff0c;当然这个重任也是落在了我的身上&#xff08;不然也不会有这篇文章&#xff09;&#xff0c;然后我在官网看…

MySQL---优化日志

目录 一、MySQL优化 3、mysql server上的优化 3.1、MySQL查询缓存 3.2、索引和数据缓存 3.2、线程缓存 二、MySQL日志 2.1、redo log 重做日志 2.2、undo log 回滚日志 2.3、错误日志 2.4、查询日志 2.5、二进制日志 2.5.1、基于binlog数据恢复实践操作 六、慢查…

苹果删除的照片如何恢复?无法拒绝的3个方法!

热爱摄影的人通常很热爱生活&#xff0c;照片是捕捉事物、人物、风景以及情绪的最佳方式。通过拍照&#xff0c;我们可以留住生活中路过的美好瞬间&#xff0c;所以照片对我们来说是非常有纪念意义的。 但有时候可能会因为误操作而删除了一些非常重要的照片。那么苹果手机删除…

【Python从入门到进阶】36、Selenium 动作交互

接上篇《35、selenium基本语法学习》 上一篇我们介绍了selenium的基本语法&#xff0c;包括元素定位以及访问元素信息的操作。本篇我们来学习selenium操作网页的动作内容。 一、什么是selenium动作操作 动作操作是指使用Selenium调用WebDriver执行与用户交互相关的动作&#…

可视化大屏报表的设计与制作 | 附成果图

大屏可视化报表是一种以大屏幕为展示媒介&#xff0c;通过图形、图表、文字等多种方式将数据信息呈现出来的报表形式。它具有视觉冲击力强、信息量大、交互性高等特点&#xff0c;能够帮助企业快速获取数据背后的价值和洞见&#xff0c;提高决策效率。因此近年来&#xff0c;大…

软件设计模式系列之十一——装饰模式

当谈到设计软件系统时&#xff0c;经常需要考虑如何使系统更加灵活、可扩展和易维护。设计模式是一种被广泛采用的方法&#xff0c;用于解决常见的设计问题&#xff0c;并提供了一套可重用的解决方案。装饰模式&#xff08;Decorator Pattern&#xff09;是一种结构型设计模式&…

iOS应用上线需要注意的问题

将iOS应用上线到App Store需要仔细注意一系列问题&#xff0c;以确保应用的质量、安全性和用户体验。以下是一些在iOS应用上线过程中需要注意的关键问题&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。…

教你快速使用springboot整合图形验证码的两种方式

前言 今天给大家展示的是springboot使用图形验证码的两种方式&#xff0c;第一种基于hutool来实现&#xff0c;第二种方式基于axet实现。现在我们来谈一谈为什么要学习验证码 防止恶意攻击&#xff1a;验证码是一种常用的安全措施&#xff0c;它可以有效地防止恶意攻击&#x…

C++学习笔记——类与对象(六个默认成员函数)

1、构造函数 在一个类中&#xff0c;编译器会自动生成默认的成员函数&#xff0c;当对象进行初始化时&#xff0c;会默认调用这个函数来初始化。 构造函数是一个特殊的成员函数&#xff0c;名字与类名相同,创建类类型对象时由编译器自动调用&#xff0c;以保证 每个数据成员都有…

HTTPS的工作过程

HTTPS就是对HTTP进行了加密&#xff0c;因为要保证数据安全&#xff0c;就需要进行加密&#xff0c;网络中不再直接传输明文了&#xff0c;而是加密之后的密文&#xff0c;加密的方法有很多&#xff0c;但是整体可以分为两大类:对称加密和非对称加密 对称加密 对称加密其实就是…

Vue中的深度监听(Deep Watch):详细解析与实际示例

Vue中的深度监听&#xff08;Deep Watch&#xff09;&#xff1a;详细解析与实际示例 Vue.js 是一款流行的前端 JavaScript 框架&#xff0c;其响应式系统是其核心特性之一。通过响应式系统&#xff0c;Vue允许开发者轻松地监听数据的变化并对其做出响应。在某些情况下&#x…

零基础学前端(七)将项目发布成网站

我们学习了HTML和CSS&#xff0c;已经可以做出精美的静态网页。我们不慌学习JavaScript&#xff0c;因为Javascript的作用是为网页增加动作和数据交换&#xff0c;只能让网页更完美而已&#xff0c;现在网页的基础我们已经可以搭建&#xff0c;我们不妨先将网站发布出去&#x…

uniapp选择地址弹窗组件

1.效果 2.子组件在components里面创建组件AddreessWindow <template><view style"position: relative;z-index: 999999 !important;"><view class"address-window" :class"value true ? on : "><view class"title…

Controller统一异常处理和yaml配置

目录 Controller统一异常处理 url解析 static下静态资源文件的访问 配置类 如何访问static下的资源文件 yaml基础语法 注解赋值 批量注入 单个注入 Controller统一异常处理 Controller统一异常处理ControllerAdvice&#xff1a;统一为Controller进行"增强" …

聊聊Spring中循环依赖与三级缓存

先看几个问题 什么事循环依赖&#xff1f;什么情况下循环依赖可以被处理&#xff1f;spring是如何解决循环依赖的&#xff1f; 什么是循环依赖&#xff1f; 简单理解就是实例 A 依赖实例 B 的同时 B 也依赖了 A Component public class A {// A 中依赖 BAutowiredprivate B b…

【表格插入小计行】el-table表格,数组对象中根据某字段插入小计行计算数据

前言 功能解释&#xff1a;遇到的一个需求&#xff0c;是表格的tabledata数组。里面有科室医生还有很多消费指标等数据。然后需要我排序后把科室放在一起。然后在每个科室下面添加一行数据&#xff0c;是小计行。用于计算上面相同科室的所有数据汇总。然后最下面再来个合计行&…