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

【时时三省】(C语言基础)用函数实现模块化程序设计

山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省

为什么要用函数?

已经能够编写一些简单的C程序,但是如果程序的功能比较多,规模比较大,把所有的程序代码都写在一个主函数(main函数)中,就会使主函数变得庞杂、头绪不清,使阅读和维护程序变得困难。

此外,有时程序中要多次实现某一功能(例如打印每一页的页头),就需要多次重复编写实现此功能的程序代码,这使程序冗长、不精练。

因此,人们自然会想到采用“组装”的办法来简化程序设计的过程。

如同组装计算机一样,事先生产好各种部件(如电源、主板、光盘驱动器、风扇等),在最后组装计算机时,用到什么就从仓库里取出什么,直接装上就可以了。绝不会采用手工业方式,在用到电源时临时生产一个电源,用到主板时临时生产一个主板。这就是模块化程序设计的思路。

可以事先编好一批常用的函数来实现各种不同的功能,例如用sin函数实现求一个数的正弦值,用abs函数实现求一个数的绝对值,把它们保存在函数库中。需要用时,直接在程序中写上sin ( a )或abs ( a )就可以调用系统函数库中的函数代码,执行这些代码,就得到预期的结果。

“函数”是从英文function翻译过来的,其实,function在英文中的意思既是“函数”,也是“功能”。

从本质意义上来说,函数就是用来完成一定的功能的。这样,对函数的概念就很好理解了,所谓函数名就是给该功能起一个名字,如果该功能是用来实现求正弦运算的,就称为正弦函数。

注意:函数就是功能。每一个函数用来实现一个特定的功能。

函数的名字应反映其代表的功能。在设计一个较大的程序时,往往把它分为若干个程序模块,每一个模块包括一个或多个函数,每个函数实现一个特定的功能。一个C程序可由一个主函数和若干个其他函数构成。由主函数调用其他函数,其他函数也可以互相调用。同一main个函数可以被一个或多个函数调用任意多次。

除了可以使用库函数外,有的部门还编写一批本领域或本单位常用到的专用函数,供本领域或本单位的人员使用。在程de序设计中要善于利用函数,以减少重复编写程序段的工作量也更便于实现模块化的程序设计。

例题:

想输出以下的结果,用函数调用实现。

*********************

   How do you do !

*********************

解题思路:

在输出的文字上下分别有一行“*”号,显然不必重复写这段代码,用一个函数print star来实现输出一行“*”号的功能。用主函数调用这个函数即可。

编写程序:

运行结果: 

程序分析: 

print_star是用户定义的函数名,分别用来输出一排“*”号。print_star在定义这个函数时指定函数print_star的类型为void,意为函数无类型,即无函数值,也就是说,执行这个函数后不会把任何值带回main函数。

在程序中,定义print_star函数的位置是在main函数的后面,在这种情况下,应当在main函数之前或main函数中的开头部分,对以上函数进行“声明”。函数声明的作用是把有关函数的信息(函数名、函数类型、函数参数的个数与类型)通知编译系统,以便在编译系统对程序进行编译时,在进行到main函数调用print star ( )时知道它是函数而print_star不是变量或其他对象。此外,还对调用函数的正确性进行检查(如类型、函数名、参数个数、参数类型等是否正确)。

说明:

( 1 )一个C程序由一个或多个程序模块组成,每一个程序模块作为一个源程序文件对较大的程序,一般不希望把所有内容全放在一个文件中,而是将它们分别放在若干个源文件中,由若干个源程序文件组成一个C程序。这样便于分别编写和编译,提高调试效率。一个源程序文件可以为多个C程序共用。

( 2 )一个源程序文件由一个或多个函数以及其他有关内容(如指令、数据声明与定义等)组成。一个源程序文件是一个编译单位,在程序编译时是以源程序文件为单位进行编译的,而不是以函数为单位进行编译的。

( 3 )C程序的执行是从main函数开始的,如果在main函数中调用其他函数,在调用后流程返回到main函数,在main函数中结束整个程序的运行。

( 4 )所有函数都是平行的,即在定义函数时是分别进行的,是互相独立的。一个函数并不从属于另一个函数,即函数不能嵌套定义。函数间可以互相调用,但不能调用main函数。main函数是被操作系统调用的。

( 5 )从用户使用的角度看,函数有两种。

①库函数,它是由系统提供的,用户不必自己定义,可直接使用它们。应该说明,不同的C语言编译系统提供的库函数的数量和功能会有一些不同,当然许多基本的函数是共同的。

②用户自己定义的函数。它是用以解决用户专门需要的函数。

( 6 )从函数的形式看,函数分两类。

①无参函数。如上例中的print_star就是无参函数。在调用无参函数时,主调函数不向被调用函数传递数据。无参函数一般用来执行指定的一组操作。例如上例中的print_star函数的作用是输出18个星号。无参函数可以带回或不带回函数值,但一般以不带回函数值的居多。

②有参函数。在调用函数时,主调函数在调用被调用函数时,通过参数向被调用函数传递数据,一般情况下,执行被调用函数时会得到一个函数值,供主调函数使用。

 

 

 

 

相关文章:

【时时三省】(C语言基础)用函数实现模块化程序设计

山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省 为什么要用函数? 已经能够编写一些简单的C程序,但是如果程序的功能比较多,规模比较大,把所有的程序代码都写在一个主函数(main函数)中&#x…...

基于CATIA参数化圆锥建模的自动化插件开发实践——NX建模之圆锥体命令的参考与移植(一)

引言​​ 在CATIA二次开发领域,Python因其灵活性和丰富的库支持逐渐成为高效工具开发的首选语言。本文将以笔者开发的​​CATIA锥体自动化建模工具​​为例,参考NX软件中高效锥体创建命令,深度解析基于PySide6 GUI框架与pycatia接口库的集成…...

天才简史——Paolo Fiorini与他的速度障碍法

一、背景 第一次“认识”Paolo Fiorini教授是看了DMP的体积避障论文《Dynamic Movement Primitives: Volumetric Obstacle Avoidance》,而且他的学生Michele Ginesi将相关代码开源了,后来查阅了Paolo Fiorini相关资料才发现他竟然是速度障碍法的作者&am…...

第五天的尝试

目录 一、每日一言 二、练习题 三、效果展示 四、下次题目 五、总结 一、每日一言 毅力是永久的享受。 没有人是一座孤岛,每个人都是这块大陆的一部分。 二、练习题 import numpy as np import matplotlib.pyplot as plt array np.array([1,2,3,4,5]) plt.plot…...

大小端模式和消息的加密解密

大小端模式 知识点一 什么是大小端模式 // 大端模式 // 是指数据的高字节保存在内存的低地址中 // 而数据的低字节保存在内存的高地址中 // 这样的存储模式有点儿类似于把数据当作字符串顺序处理 // 地址由小向大增加,数据从高位往低位放 …...

(1) 查看端口状态

1. lsof 和 netstat 命令的区别 1.1 lsof 概念:只有在 root 的命令下才能执行,否则无内容显示;root 命令下显示完全 lsof -i: 8080 1.2 netstat 普通用户下显示不完全,root 命令下显示完全 netstat -tunlp | grep 8080 1.3…...

【C++]string模拟实现

#pragma once #define _CRT_SECURE_NO_WARNINGS 1 #include<iostream> #include<assert.h> using namespace std; namespace liu {class string{public:using iterator char*;using const_iterator const char*;//string();//无参构造 string(const string&…...

Linux动静态库制作与原理

什么是库 库是写好的现有的&#xff0c;成熟的&#xff0c;可以复用的代码。现实中每个程序都要依赖很多基础的底层库&#xff0c;不可能每个人的代码都从零开始&#xff0c;因此库的存在意义非同寻常。 本质上来说库是一种可执行代码的二进制形式&#xff0c;可以被操作系统…...

ArkUI Tab组件开发深度解析与应用指南

ArkUI Tab组件开发深度解析与应用指南 一、组件架构与核心能力 ArkUI的Tabs组件采用分层设计结构&#xff0c;由TabBar&#xff08;导航栏&#xff09;和TabContent&#xff08;内容区&#xff09;构成&#xff0c;支持底部、顶部、侧边三种导航布局模式。组件具备以下核心特…...

winrar 工具测试 下载 与安装

https://zhuanlan.zhihu.com/p/680852417 https://www.angusj.com/resourcehacker/#download 点击String Table&#xff0c;在展开列表中找到80:2052展开&#xff0c;删除1277行。点击右上方编译按钮&#xff0c;并保存。...

代码随想录算法训练营第四十四天

卡码网题目: 99. 岛屿数量100. 岛屿的最大面积 其他: 今日总结 往期打卡 99. 岛屿数量 跳转: 99. 岛屿数量 学习: 代码随想录公开讲解 问题: 给定一个由 1&#xff08;陆地&#xff09;和 0&#xff08;水&#xff09;组成的矩阵&#xff0c;你需要计算岛屿的数量。岛屿由水…...

每日Prompt:自拍生成摇头娃娃

提示词 将这张照片变成一个摇头娃娃&#xff1a;头部稍微放大&#xff0c;保持面部准确&#xff0c;身体卡通化。[把它放在书架上]。...

制作我的计算器

1. 界面布局 新建项目 MyCalculator&#xff0c;开始布局。 2. 静态布局 代码如下&#xff1a; // etc/pages/Index.ets Entry Component struct Index {build() {Column() {/*** 运算区*/Column() {TextInput({ text: 12x13 }).height(100%).fontSize(32).enabled(false).f…...

如何查看 Ubuntu开机是否需要密码

要查看 Ubuntu 开机是否需要密码&#xff0c;可以通过以下方法进行判断&#xff1a; 1. 检查自动登录设置 图形界面操作&#xff1a; 进入系统设置&#xff08;Settings&#xff09;→ 用户账户&#xff08;User Accounts&#xff09;→ 解锁设置&#xff08;输入当前用户密码…...

今日行情明日机会——20250519

上证指数缩量收十字星&#xff0c;个股涨多跌少&#xff0c;这周反弹的概率比较大。 深证指数缩量调整&#xff0c;临近反弹&#xff0c;个股表现更好。 2025年5月19日涨停股主要行业方向分析 并购重组&#xff08;政策驱动资产整合&#xff09; • 涨停家数&#xff1a;16…...

【CodeBuddy 】从0到1,让网页导航栏变为摸鱼神器

【CodeBuddy 】从0到1&#xff0c;让网页导航栏变为摸鱼神器 我正在参加CodeBuddy「首席试玩官」内容创作大赛&#xff0c;本文所使用的 CodeBuddy 免费下载链接&#xff1a;腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴 &#x1f31f;嗨&#xff0c;我是LucianaiB&#…...

PCL点云库点云数据处理入门系列教材目录(2025年5月更新....)

PCL点云库点云数据处理入门系列教材目录 基础阶段 第 1 讲&#xff1a;PCL库简介和安装&#xff08;Win10/11VS2019PCL 1.12.0&#xff09;第 2 讲&#xff1a;PCL库中点云基本知识和数据类型结构第 3 讲&#xff1a;PCL库中点云数据格式PCD和PLY及其输入输出&#xff08;IO&…...

同一颗太阳:Australia、Austria、Arab、Africa、Augustus、August、Aurora、Athena

我们来看一下下面这一堆单词&#xff1a; Australia n.澳大利亚&#xff1b;澳洲 Australian n.澳大利亚人 a.澳大利亚的 Austria n.奥地利 Austrian n.奥地利人 a.奥地利(人)的 Africa n.非洲 African n.非洲人* Arab a.阿拉伯的&#xff1b;阿拉伯人的 n.阿拉伯人(pl.Arabs)…...

用户账号及权限管理:企业安全的基石与艺术

在当今数字化时代,用户账号及权限管理已成为企业IT安全体系中不可或缺的核心组件。它不仅是保护敏感数据的第一道防线,更是确保业务运营效率和合规性的关键。本文将深入探讨用户账号及权限管理的重要性、最佳实践以及实施策略,助您构建一个安全、高效且灵活的访问控制体系。…...

存储系统03——数据缓冲evBuffer

存储系统03——数据缓冲evBuffer 数据缓冲evBuffer分段存储零拷贝线程安全 evbuffer 实例——存储系统事件触发 数据缓冲evBuffer evbuffer 是 Libevent 提供的一个高效内存缓冲区管理工具&#xff0c;用于存储和操作数据。它类似于一个动态增长的字节缓冲区&#xff0c;支持多…...

留给王小川的时间不多了

王小川&#xff0c;这位头顶“天才少年”光环的清华学霸、搜狗输入法创始人、中国互联网初代技术偶像&#xff0c;正迎来人生中最难啃的硬骨头。 他在2023年创立的百川智能&#xff0c;被称为“大模型六小虎”之一。今年4月&#xff0c;王小川在全员信中罕见地反思过去两年工作…...

Python海龟绘图-斗地主

#导入库 import random as r import turtle as t #数据 pk[红心A,红心2,红心3,红心4,红心5,红心6,红心7,红心8, 红心9,红心10,红心J,红心Q,红心K,黑桃A,黑桃2,黑桃3,黑桃4,黑桃5,黑桃6,黑桃7,黑桃8, 黑桃9,黑桃10,黑桃J, 黑桃Q,黑桃K,方块A,方块2,方块3,方块4,方块5,方块6,方块…...

一、内存调优

一、内存调优 什么是内存泄漏 监控Java内存的常用工具 内存泄露的常见场景 内存泄露的解决方案 内存泄露与内存溢出的区别 内存泄露&#xff1a;在Java中如果不再使用一个对象&#xff0c;但是该对象依然在GC ROOT的引用链上&#xff0c;这个对象就不会被垃圾回收器回收&…...

机器学习--特征工程具体案例

一、数据集介绍 sklearn库中的玩具数据集&#xff0c;葡萄酒数据集。在前两次发布的内容《机器学习基础中》有介绍。 1.1葡萄酒列标签名&#xff1a; wine.feature_names 结果&#xff1a; [alcohol, malic_acid, ash, alcalinity_of_ash, magnesium, total_phenols, flavanoi…...

Java-List集合类全面解析

Java-List集合类全面解析 前言一、List接口概述与核心特性1.1 List在集合框架中的位置1.2 List的核心特性1.3 常见实现类对比 二、ArrayList源码剖析与应用场景2.1 内部结构与初始化2.2 动态扩容机制2.3 性能特点与最佳实践 三、LinkedList 源码剖析与应用场景3.1 内部结构与节…...

在Cursor中启用WebStorm/IntelliJ风格快捷键

在Cursor中启用WebStorm/IntelliJ风格快捷键 方法一&#xff1a;使用预置快捷键方案 打开快捷键设置 Windows/Linux: Ctrl K → Ctrl SmacOS: ⌘ K → ⌘ S 搜索预设方案 在搜索框中输入keyboard shortcuts&#xff0c;选择Preferences: Open Keyboard Shortcuts (JSON) …...

32、跨平台咒语—— React Native初探

一、时空晶体架构&#xff08;核心原理&#xff09; 1. 量子组件桥接协议 // 原生组件映射 <View> → iOS UIView / Android ViewGroup <Text> → UILabel / TextView 魔法特性&#xff1a; • JavaScriptCore引擎&#xff1a;通过V8/Hermes引擎执行JS逻辑…...

无源探头衰减比与带宽特性的关联性研究

引言 在电子测量领域&#xff0c;无源探头作为示波器的重要附件&#xff0c;其性能参数直接影响测量结果的准确性。本文将从电路设计原理出发&#xff0c;深入分析衰减比与带宽这两个关键参数的相互关系&#xff0c;帮助工程师正确理解并选择适合的测量探头。 技术原理分析 …...

虚拟机的三个核心类加载器

虚拟机的三个核心类加载器 在Java虚拟机(JVM)中,类加载器(ClassLoader)负责将类的字节码加载到内存中,并生成对应的Class对象。以下是三个核心类加载器的详细说明: 1. 启动类加载器(Bootstrap ClassLoader) 职责: 加载Java核心类库(如java.lang、java.util等),位…...

国家互联网信息办公室关于发布第十一批深度合成服务算法备案信息的公告

wenz 根据《互联网信息服务深度合成管理规定》&#xff0c;现公开发布第十一批境内深度合成服务算法备案信息&#xff0c;具体信息可通过互联网信息服务算法备案系统&#xff08;https://beian.cac.gov.cn&#xff09;进行查询。任何单位或个人如有疑议&#xff0c;请发送邮件…...

深入理解动态规划:从斐波那契数列到最优子结构

引言 动态规划(Dynamic Programming, DP)是算法设计中一种非常重要的思想&#xff0c;广泛应用于解决各类优化问题。许多看似复杂的问题&#xff0c;通过动态规划的视角分析&#xff0c;往往能找到高效的解决方案。本文将系统介绍动态规划的核心概念&#xff0c;通过经典案例展…...

AT 指令详解:基于 MCU 的通信控制实战指南AT 指令详解

在 MCU&#xff08;单片机&#xff09;项目中&#xff0c;我们经常需要与各种通信模组&#xff08;GSM、Wi-Fi、蓝牙等&#xff09;交互。而这类模组通常都通过串口&#xff08;UART&#xff09;与 MCU 通信&#xff0c;控制它们的“语言”就是——AT 指令。 一、什么是 AT 指…...

初学c语言16(内存函数)

1.memcpy 形式&#xff1a; 功能&#xff1a;完成内存块拷贝&#xff08;所以可拷贝任何类型的数据&#xff09; 过程&#xff1a;从source开始拷贝num个字节的数据到destination指向的空间里 返回值&#xff1a;返回目标空间的起始地址 应用&#xff1a; 模拟实现&#xf…...

【git进阶】git rebase(变基)

文章目录 合并分支提交信息修改合并提交记录时间问题1时间问题2时间问题3git rebase有很多用武之地,我一一道来 合并分支 当多人协作同一个分支时,在提交我们自己版本之前,我们会先用git pull获取远端最新的版本。但是 git pull = git fetch + git mergegit merge是一个非…...

Pytorch---view()函数

在PyTorch中&#xff0c;view函数是一个极为重要的张量操作函数&#xff0c;其主要功能是对张量的形状进行重塑&#xff0c;与此同时会尽力维持张量中元素的总数不变。 1. 基本功能与语法 view函数的主要作用是改变张量的维度和大小&#xff0c;不过要保证重塑前后张量的元素…...

AI Agent开发第71课-一个完善的可落地企业AI Agent全架构

开篇 在之前的若干篇章里我们大量叙述了DIFY AI工作流、重排序、提示词重写、文档chunk、AI翻页、各种高级RAG应用以及AI Agent案例甚至全代码的输出。 目的,就是为了帮助大家认识到这么一件事,那就是: 当前AI主要还是在被叫好却不卖座,很多人(包括我身边的太多大厂)去…...

Prompt、Agent、MCP关系

AI基础概念概述 链接: https://www.bilibili.com/video/BV1aeLqzUE6L?t419.4 Agent&#xff08;智能体&#xff09;&#xff1a;智能体是能够执行特定任务的程序或实体&#xff0c;它可以根据环境变化调整自身行为。 MCP&#xff08;多通道协议&#xff09;&#xff1a;MCP是…...

人工智能100问☞第27问:神经网络与贝叶斯网络的关系?

神经网络与贝叶斯网络是两种互补的智能模型:神经网络通过多层非线性变换从数据中学习复杂模式,擅长大规模特征提取和预测,而贝叶斯网络基于概率推理建模变量间的条件依赖关系,擅长处理不确定性和因果推断。两者的融合(如贝叶斯神经网络)结合了深度学习的表征能力与概率建…...

Vue-样式绑定-style

样式绑定-style 对象写法数组写法 对象写法 :style"{fontSize: x}", x是动态值 &#xff08;{fontSize: x}是样式对象&#xff09; 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><title>…...

Python60日基础学习打卡D30

回顾&#xff1a; 导入官方库的三种手段导入自定义库/模块的方式导入库/模块的核心逻辑&#xff1a;找到根目录&#xff08;python解释器的目录和终端的目录不一致&#xff09; # 直接导入 from random import randint print(randint(1, 10)) # 导入自定义库 import module m…...

el-upload图片设置了url不显示问题

引用&#xff1a;可以使用Image组件测试url是否可以用 此时不显示图片&#xff0c;因为打印后提示图片加载失败 此时图片显示 使用的base64的格式。但要注意在生成的base64码前要加上data:image/png;base64的内容才可以赋值给url...

学习黑客PowerShell的历史、架构与工作原理深度解析

PowerShell的历史、架构与工作原理深度解析 &#x1f50d; 作者: 海尔辛 | 发布时间: 2025-05-19 12:28:44 UTC 1. PowerShell的历史演变 &#x1f4dc; &#x1f539; 诞生背景与起源 PowerShell的诞生源于微软解决Windows管理工具碎片化问题的需求。在PowerShell出现之前…...

视觉-和-语言导航的综述:任务、方法和未来方向

22年6月来自UC Santa Cruz、澳大利亚的阿德莱德大学和 USC 的论文“Vision-and-Language Navigation: A Survey of Tasks, Methods, and Future Directions”。 人工智能研究的一个长期目标是构建能够用自然语言与人类交流、感知环境并执行现实世界任务的智体。视觉与语言导航…...

JUC入门(四)

ReadWriteLock 代码示例&#xff1a; package com.yw.rw;import java.util.HashMap; import java.util.Map; import java.util.concurrent.locks.ReentrantReadWriteLock;public class ReadWriteDemo {public static void main(String[] args) {MyCache myCache new MyCache…...

day 21 常见降维算法

一、无监督降维 定义&#xff1a;这类算法在降维过程中不使用任何关于数据样本的标签信息&#xff08;比如类别标签、目标值等&#xff09;。它们仅仅根据数据点本身的分布、方差、相关性、局部结构等特性来寻找低维表示。 输入&#xff1a;只有特征矩阵 X。 目标&#xff1a…...

代理IP高可用性与稳定性方案:负载均衡、节点健康监测与智能切换策略

一、负载均衡策略&#xff1a;动态分配与场景适配 多算法协同调度 轮询与加权轮询&#xff1a;适用于定时数据采集等低频任务&#xff0c;通过静态IP池按顺序分配请求&#xff0c;避免单一节点过载。例如&#xff0c;静态IP池可支持电商商品价格监控&#xff0c;按固定周期切换…...

C语言:在操作系统中,链表有什么应用?

在操作系统中&#xff0c;链表是一种重要的数据结构&#xff0c;凭借其灵活的内存管理和高效的插入/删除特性&#xff0c;被广泛应用于多个核心模块。以下是其主要应用场景及详细说明&#xff1a; 1. 内存管理&#xff1a;空闲内存块管理 应用场景&#xff1a;操作系统需要管…...

RocketMQ

一、引言 Message Queue&#xff08;消息 队列&#xff09;&#xff0c;从字⾯上理解&#xff1a;⾸先它是⼀个队列。FIFO先进先出的数据结构——队列。消息队列就是所谓的存放消息的队列。 消息队列解决的不是存放消息的队列的⽬的&#xff0c;解决的是通信问题。 …...

学习BI---QuickBI介绍

BI是什么 BI 数据仓库&#xff08;存数据&#xff09; OLAP&#xff08;多维分析&#xff09; 数据挖掘&#xff08;找规律&#xff09; 可视化&#xff08;图表/看板&#xff09; 人话解释就是把企业里乱七八糟的数据变成老板能看懂的报告&#xff0c;帮他们做更聪明的决…...

【数据结构】AVL树的实现

文章目录 1. AVL 的概念2. AVL 树的实现2.1 AVL 树的结构2.2 AVL 树的插入2.2.1 AVL 树插入一个值的大致过程2.2.2 平衡因子更新 2.3 旋转2.3.1 旋转的原则2.3.2 右单旋2.3.3 左单旋2.3.4 左右双旋2.3.5 右左双选 2.4 AVL 树的查找2.5 AVL 树平衡检测 1. AVL 的概念 AVL树是最…...