当前位置: 首页 > news >正文

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

在这里插入图片描述

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;elseresult = factorial(n - 1) * n;return result;
}

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

相关文章:

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

1. 调用有参函数 有参函数是一种接受输入参数&#xff08;参数值&#xff09;并执行特定操作的函数。通过向函数传递参数&#xff0c;你可以将数据传递给函数&#xff0c;让函数处理这些数据并返回结果。 例1&#xff1a;编写一程序&#xff0c;要求用户输入4 个数字&#xf…...

340. 至多包含 K 个不同字符的最长子串

340. 至多包含 K 个不同字符的最长子串 vip...

【分布式计算】副本数据Replicated Data

作用&#xff1a;可靠性、高性能、容错性 问题&#xff1a;如何保持一致、如何更新 问题&#xff1a;存在读写/写写冲突 一个简单的方法就是每个操作都保持顺序&#xff0c;但是因为网络延迟会导致问题 Data-centric models: consistency model?? ??? 读取时&#xff0c…...

erlang练习题(二)

题目一 替换元组或列表中指定位置的元素&#xff0c;新元素作为参数和列表或元组一起传入函数内 解答 replaceIdx(List, Index, Val) ->replaceIdx(List, Index, Val, 1, []).replaceIdx([], _, _, _, Acc) ->lists:reverse(Acc);%% 到达替换位置的处理replaceIdx([_ …...

CRM软件系统价格不同的原因

很多人在了解CRM系统时&#xff0c;发现不同品牌的CRM价格有着很大的区别。一些CRM系统只需要几千块钱&#xff0c;一些CRM系统的报价却要上万&#xff0c;甚至十几万。为什么CRM系统价格不同&#xff1f;下面我们就来说说。 1、功能不同 从功能方面来说&#xff0c;一些CRM系…...

json数据解析

目录 一、读数据 1、简单对象读取 2、数组读取 3、对象读取 二、写数据 1、简单生成JSON 2、对象数组JSON 3、嵌套对象 三、一个综合例子 1、读JSON 2、写JSON 一、读数据 1、简单对象读取 {"app": "xnwVideo","src": "C:\\buil…...

Verilog零基础入门(边看边练与测试仿真)-状态机-笔记(7-10讲)

文章目录 第七讲第八讲第九讲第十讲 第七讲 1、最简单的状态机-三角波发生器 1、两种状态的代码&#xff1a; //最简单的状态机&#xff0c;三角波发生器&#xff1b; timescale 1ns/10ps module tri_gen(clk,res,d_out); input clk; input res; o…...

【Hadoop】HDFS API 操作大全

&#x1f341; 博主 "开着拖拉机回家"带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——&#x1f390;开着拖拉机回家_Linux,大数据运维-CSDN博客 &#x1f390;✨&#x1f341; &#x1fa81;&#x1f341; 希望本文能够给您带来一定的帮助&#x1…...

Webpack打包图片

一、在js文件中引入图片 二、在package.config.js中配置加载器 module.exports {mode: "production", // 设置打包的模式&#xff1a;production生产模式 development开发模式module: {rules: [// 配置img加载器{test: /\.(jpg|png|gif)$/i,type:"asset/resou…...

DipC 构建基因组 3D 结构(学习笔记)

背景 本文主要记录了 DipC 数据的复现过程、学习笔记及注意事项。 目录 下载 SRA 数据使用 SRA Toolkit 转换 SRA 数据为 Fastq 格式使用 bwa 比对测序数据使用 Hickit 计算样本的基因组 3D 结构使用散点图展示 3D 结构计算 3D 结构重复模拟的稳定性其他 步骤 1. 下载 SRA…...

Qt中音频的使用

对于音频我们在使用的过程中一般是录制音频、播放音频。针对这两个需求介绍Qt中音频的使用。 Qt中音频的录制 步骤&#xff1a; 1、获取系统中的音频设备。 2、创建QAudioRecorder对象&#xff0c;指定使用的音频设备&#xff0c;通过QAudioRecorder的setAudioInput函数设置…...

[centos]centos7源码编译cmake报错Could NOT find OpenSSL

测试环境&#xff1a; centos7.9 cmake3.25.0 ./bootstrap以后报错如下&#xff1a; Could NOT find OpenSSL, try to set the path to OpenSSL root folder in the system variable OPENSSL_ROOT_DIR (missing: OPENSSL_CRYPTO_LIBRARY OPENSSL_INCLUDE_DIR) CMake Error …...

vue若依前端项目搭建

1.项目搭建 首先进入到你需要创建的项目目录下面&#xff0c;然后输入命令vue create .创建项目 接下来选择手动搭建&#xff0c;然后把下面图片中的内容选上 再然后继续配置一些参数信息 接下来运行npm run serve项目就启动起来了 2.配置登录界面文件 首先修改src/router…...

基于win32实现TB登陆滑动验证

这里写目录标题 滑动验证触发条件&#xff1a;失败条件&#xff1a;解决方法:清除cooKie 滑动验证方式一&#xff1a;win32 api获取窗口句柄&#xff0c;选择固定位置 成功率高方式二&#xff1a; 原自动化滑动&#xff0c;成功率中 案例 先谈理论&#xff0c;淘宝 taobao.com …...

vue学习-07todoList案例与浏览器本地存储

TodoList Todo List&#xff08;任务列表&#xff09;是一个简单的Web应用程序示例&#xff0c;用于管理任务、代办事项或清单。Vue.js 是一个非常适合构建这种类型应用程序的框架&#xff0c;因为它提供了数据绑定、组件化、响应式和轻松管理用户界面的能力。 以下是一个基本…...

探索智能应用的基石:多模态大模型赋能文档图像处理

目录 0 写在前面1 文档图像分析新重点2 token荒&#xff1a;电子文档助力大模型3 大模型赋能智能文档分析4 文档图像大模型应用可能性4.1 专有大模型4.2 多模态模型4.3 设计思路 总结 0 写在前面 中国智能产业高峰论坛(CIIS2023)旨在为政企研学各界学者专家提供同台交流的机会…...

自动化发布npm包小记

1.注册npm账号 打开npm官网&#xff0c;并注册自己的npm账号 2.申请AccessToken 1.登录npm官网&#xff0c;登录成功后&#xff0c;点开右上角头像&#xff0c;并点击Access Tokens选项 2.点开Generate New Token下拉框&#xff0c;点击Classic Token(和Granular Access To…...

详解机器视觉性能指标相关概念——混淆矩阵、IoU、ROC曲线、mAP等

目录 0. 前言 1. 图像分类性能指标 1.1 混淆矩阵(Confusion Matrix) 1.2 准确率(Precision) 1.3 召回率(Recall) 1.4 F1值(F1 score) 1.5 ROC曲线(接收者工作特征曲线&#xff0c;Receiver Operating Characteristic curve) 1.6 mAP(mean Average Precision) 2. 图像分…...

想要精通算法和SQL的成长之路 - 预测赢家

想要精通算法和SQL的成长之路 - 预测赢家 前言一. 预测赢家二. 石子游戏&#xff08;预测赢家的进阶版&#xff09;2.1 博弈论 前言 想要精通算法和SQL的成长之路 - 系列导航 一. 预测赢家 原题链接 主要思路&#xff1a; 我们定义dp[i][j]&#xff1a;在区间 [i, j] 之间先…...

高精度PWM脉宽调制信号转模拟信号隔离变送器1Hz~10KHz转0-5V/0-10V/1-5V/0-10mA/0-20mA/4-20mA

主要特性: >>精度等级&#xff1a;0.1级。产品出厂前已检验校正&#xff0c;用户可以直接使用 >>辅助电源&#xff1a;8-32V 宽范围供电 >>PWM脉宽调制信号输入: 1Hz~10KHz >>输出标准信号&#xff1a;0-5V/0-10V/1-5V,0-10mA/0-20mA/4-20mA等&…...

JavaSec-RCE

简介 RCE(Remote Code Execution)&#xff0c;可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景&#xff1a;Groovy代码注入 Groovy是一种基于JVM的动态语言&#xff0c;语法简洁&#xff0c;支持闭包、动态类型和Java互操作性&#xff0c…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)

CSI-2 协议详细解析 (一&#xff09; 1. CSI-2层定义&#xff08;CSI-2 Layer Definitions&#xff09; 分层结构 &#xff1a;CSI-2协议分为6层&#xff1a; 物理层&#xff08;PHY Layer&#xff09; &#xff1a; 定义电气特性、时钟机制和传输介质&#xff08;导线&#…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

基于数字孪生的水厂可视化平台建设:架构与实践

分享大纲&#xff1a; 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年&#xff0c;数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段&#xff0c;基于数字孪生的水厂可视化平台的…...

sqlserver 根据指定字符 解析拼接字符串

DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...

Device Mapper 机制

Device Mapper 机制详解 Device Mapper&#xff08;简称 DM&#xff09;是 Linux 内核中的一套通用块设备映射框架&#xff0c;为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程&#xff0c;并配以详细的…...

Linux --进程控制

本文从以下五个方面来初步认识进程控制&#xff1a; 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程&#xff0c;创建出来的进程就是子进程&#xff0c;原来的进程为父进程。…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”

2025年#高考 将在近日拉开帷幕&#xff0c;#AI 监考一度冲上热搜。当AI深度融入高考&#xff0c;#时间同步 不再是辅助功能&#xff0c;而是决定AI监考系统成败的“生命线”。 AI亮相2025高考&#xff0c;40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕&#xff0c;江西、…...

安卓基础(aar)

重新设置java21的环境&#xff0c;临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的&#xff1a; MyApp/ ├── app/ …...

初探Service服务发现机制

1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能&#xff1a;服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源&#xf…...