C语言 函数概述

好 接下来 我们来讲函数

构建C程序的最佳方式 就是模块化程序设计
C语言中 最基本的程序模块被称为 函数

所以 这个知识点的重要性不言而喻

这里 我们讲个故事
诸葛亮六出祁山时 为了逼司马懿出战 派人送给力司马懿一件女人衣服
司马懿只是为使者 诸葛亮的饮食起居
使者感叹丞相 吃的很少 每天睡不了多久 责罚都要亲自监工
在这里插入图片描述
看着好像诸葛丞相什么都做 但这也是压垮他的根本原因 在任何工作 特别是我们程序设计中 这种工作集中化都是非常被排除的
推广分工流程

读多少行的程序能让你不头疼?
假如系统提供的函数printf0)由10行代码替换:那么你编过的程序会成什么样子?
实际上一个 printf0 有上千行代码
main()中能放多少行代码?
如果所有代码都在main0)中,怎么团队合作?
如果代码都在一个文件中。怎么团队合作?

什么是模块化程序设计?

将解决一个复杂问题的抽象任务,分解成了若干个能够实现的简单问题的具体任务。这种方式被称为模块化程序设计

模块分解的基本原则 包含三个方面
1 分而治之
从组成上看 一个系统由许多功能组成,各个功能模块彼此有一定的联系,功能各自独立
从开发过程上看,不同的模块 可能由不同的人开发

2 自顶向下,逐步求精
我们模块化开发 顶部都只是一些粗糙的问题提案 负责提出问题 逐渐向下分成多个详细的解决方案,是一个越来越精细描绘怎么做的过程
简单说 将一个大问题 逐步分解成多个小的解决方案 逐步解决问题
在这里插入图片描述
3 信息隐藏
模块对不需要使用该模块信息的不允许访问,模块之间只交换必要信息

模块化程序的特点:

1 程序变得简短且结构清晰,可读性好。
2 程序模块相对独立,简化设计,有助于控制程序设计的复杂性。
3 各模块功能单一并且相互独立,能够限制错误的范围,提高程序的可靠性。
4 程序采用积木式组装模块,模块可以共享,减少重复代码,提高程序开发的效率。
5 模块的裁剪、移植和扩充非常方便,能够提高程序的可维护性。
6 有利于集体开发,分工合作,缩短程序的开发周期。

C语言的模块化程序结构

1 C语言是通过函数来实现模块化程序设计的。
2 一个C程序由一个或多个源程序文件组成。
3 一个源程序文件由一个或多个函数组成,有且只有一个main()主函数。
4 主函数可以放在任何一个源文件中,maimO)主函数与程序中其他函数按任意顺序排列。

C程序各函数之间的关系 如下图
由主函数调用其他函数
在这里插入图片描述
在这里插入图片描述
函数的分类
按用户使用的角度划分
1 标准库函数 包括:
ANSIC定义的标准库函数
1.1 符合 ANSIC 标准的C 语言编译系统提供这些函数
1.2 函数分为输入/输出函数、数学函数、字符函数、字符串处理函数、格式转换函数、文件存取函数等几类。
第三方库函数
1.1 由其他厂商开发的C语言函数库
1.2 可以用来扩充C语言在图形、网格、数据库等方面的功能。
2 用户自定义函数
经过包装之后,也能形成函数库,供其他用户使用

自定义函数是需要开发人员根据集体情况 自行编写的 编写C程序某种意义上说 就是编写若干个自定义函数

按函数形式 函数可分为
有参函数和无惨函数
有参函数 就是 无论函数的定义与调用 都要写明参数 主调函数通过参数向被调函数传递信息
无惨函数 则表示 定义和调用不需要传递参数 主调与被调函数之间不需要传递信息

按函数的作用范围划分
分为 外部函数和内部函数
外部函数可以在整个程序中被调用
而内部函数只能在本文件中被调用

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

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

相关文章

AI绘图神器!InstantStyle保留风格进行文本到图像生成

在今天的数字化时代,我们可以看到AI技术的应用已经渗透到生活的各个角落,尤其是在视觉艺术领域。最近,一个名为InstantStyle的全新框架引起了广泛关注,它是一个创新的文本到图像生成框架,其核心功能在于能够有效地分离…

【NumPy数组】:深入解析numpy.array()函数

NumPy数组:深入解析numpy.array()函数 引言 在Python的数据科学世界中,NumPy库无疑扮演着举足轻重的角色。NumPy(Numerical Python的简称)是一个开源的Python库,用于进行大规模数值和矩阵计算,同时提供了…

Python实现3D建模工具(下)

#Python实现3D建模工具 ###用户接口 我们希望与场景实现两种交互,一种是你可以操纵场景从而能够从不同的角度观察模型,一种是你拥有添加与操作修改模型对象的能力。为了实现交互,我们需要得到键盘与鼠标的输入,GLUT允许我们在键盘…

IoTDB 入门教程 基础篇⑥——数据库SQL操作 | 数据库管理和数据读写

文章目录 一、前文二、数据库管理2.1 创建数据库2.2 查询数据库2.3 删除数据库 三、数据读写3.1 查询数据3.2 新增数据3.3 修改数据3.4 删除数据 四、参考 一、前文 IoTDB入门教程——导读 本博文主要讲述数据库管理和数据读写 二、数据库管理 2.1 创建数据库 CREATE DATABASE…

【JVM】类加载机制及双亲委派模型

目录 一、类加载过程 1. 加载 2. 连接 a. 验证 b. 准备 c. 解析 3. 初始化 二、双亲委派模型 类加载器 双亲委派模型的工作过程 双亲委派模型的优点 一、类加载过程 JVM的类加载机制是JVM在运行时,将 .class 文件加载到内存中并转换为Java类的过程。它…

全面升级企业网络安全 迈入SASE新时代

随着数字化业务、云计算、物联网和人工智能等技术的飞速发展,企业的业务部署环境日渐多样化,企业数据的存储由传统的数据中心向云端和SaaS迁移。远程移动设备办公模式的普及,企业多分支机构的加速设立,也使得企业业务系统的用户范…

第IV章-Ⅱ Vue3中的插槽使用

第IV章-Ⅱ Vue3中的插槽使用 基本插槽默认内容 具名插槽作用域插槽 在 Vue 3 中,插槽(slots)是一种强大的模式,用于将模板代码从父组件注入到子组件中,使得子组件的内容可以在使用时被自定义。Vue 3 中的插槽用法包括基…

# 代码随想录算法训练营Day31 | 理论基础 455.分发饼干 376. 摆动序列 53. 最大子序和

代码随想录算法训练营Day31 | 理论基础 455.分发饼干 376. 摆动序列 53. 最大子序和 LeetCode 455.分发饼干 题目链接:LeetCode 455.分发饼干 思路: 分别排序,最大的饼干给胃口最大的孩子,充分利用。 注意索引需要大于0 class…

神器:jQuery一键转换为纯净JavaScript代码

我的新书《Android App开发入门与实战》已于2020年8月由人民邮电出版社出版,欢迎购买。点击进入详情 该工具将 jQuery 代码转换为现代、高效的 JavaScript。它允许您用纯 JavaScript 替换 jQuery,同时保持原始代码不变。 虽然 jQuery 一直是 Web 开发中…

【自动驾驶|毫米波雷达】初识毫米波雷达射频前端硬件

第一次更新:2024/5/4 目录 整体概述 混频器(MIXER) 低通滤波器(LPF:Low-Pass filter) 数模转换器(ADC:Analog to Digital Converter) 毫米波雷达功能框图 整体概述 完…

ctfshow web入门 sql注入 web224--web233

web224 扫描后台&#xff0c;发现robots.txt&#xff0c;访问发现/pwdreset.php &#xff0c;再访问可以重置密码 &#xff0c;登录之后发现上传文件 检查发现没有限制诶 上传txt,png,zip发现文件错误了 后面知道群里有个文件能上传 <? _$GET[1]_?>就是0x3c3f3d60245…

echars 的一些运用

基础图形 // 支架压力数据量统计 let splitLine { // 网格线设置show:true,lineStyle:{color:#E2E7EC,width:1,}, } let itemStyle { // 柱形图颜色color:#5B9BD5, } let axisLine { // 轴线样式lineStyle:{color:#E2E7EC,}, } let axisLabel { // 轴刻度字-样式fontSize:…

代码随想录leetcode200题之数组

目录 1 介绍2 训练3 参考 1 介绍 本博客用来记录代码随想录leetcode200题中数组部分的题目。 2 训练 题目1&#xff1a;704二分查找 C代码如下&#xff0c; class Solution { public:int search(vector<int>& nums, int target) {int res -1;int l 0, r nums…

STM32快速入门(串口传输之USART)

STM32快速入门&#xff08;串口传输之USART&#xff09; 前言 USART串口传输能实现信息在设备之间的点对点传输&#xff0c;支持单工、半双工、全全双工&#xff0c;一般是有三个引脚&#xff1a;TX、RX、SW_RX&#xff08;共地&#xff09;。不需要一根线来同步时钟。最大优…

停车场收费管理系统winfrom

停车场收费管理系统winfrom 管理员登陆后可以费用设置 修改密码 开户 充值 注销 入库 出库 退出 本项目通过dat文件格式存储数据 public static void Load() { string path Application.StartupPath "\data\data2.dat"; if (File.Exists(path)) …

4diacIDE同时编译不同版本踩坑记录

4diac不同版本依赖插件版本及jdk版本是不同的&#xff0c;当你需要搭建不同版本4diacIDE开发环境时&#xff0c;就会出现各种问题。最近一个月github上项目提交记录比较多&#xff0c;出现了不少坑。以下记录下此背景下的解决方法&#xff1a; 1、首先由于.target依赖的eclipse…

探索大语言模型在信息提取中的应用与前景

随着人工智能技术的快速发展&#xff0c;大语言模型&#xff08;LLMs&#xff09;在自然语言处理&#xff08;NLP&#xff09;领域取得了显著的进展。特别是在信息提取&#xff08;IE&#xff09;任务中&#xff0c;LLMs展现出了前所未有的潜力和优势。信息提取是从非结构化文本…

【Linux】网络接口绑定和组合的操作实例

网络接口绑定和组合的操作实例 &#xff08;一&#xff09;网卡1. 增2. 查3. 激活——设置网络接口 &#xff08;二&#xff09;网络接口绑定1. 概述2. 实验操作3. 删除绑定 &#xff08;三&#xff09;网络接口组合1. 概述2. 实验操作 &#xff08;一&#xff09;网卡 1. 增 …

Java_从入门到JavaEE_10

一、继承 概念&#xff1a;子类继承父类所有的属性和方法应用场景&#xff1a;多个类似的类&#xff0c;有相同的属性和方法&#xff0c;就可以把相同属性和方法抽取到父类继承优缺点&#xff1a; 优点&#xff1a;解决了代码的冗余缺点&#xff1a;增加了类与类之间的关联性、…

122. Kafka问题与解决实践

文章目录 前言顺序问题1. 为什么要保证消息的顺序&#xff1f;2.如何保证消息顺序&#xff1f;3.出现意外4.解决过程 消息积压1. 消息体过大2. 路由规则不合理3. 批量操作引起的连锁反应4. 表过大 主键冲突数据库主从延迟重复消费多环境消费问题后记 前言 假如有家公司是做餐饮…