C语言基础——函数

d842cc1df1bd4e0e8487c2f1f3829b7b.gif  

             ʕ • ᴥ • ʔ             

づ♡ど

 🎉 欢迎点赞支持🎉

个人主页:励志不掉头发的内向程序员;

专栏主页:C语言基础;


文章目录

前言

一、函数的概念

二、库函数

2.1 库函数和头文件

2.2 库函数的使用/学习方法

三、自定义函数

3.1 函数的语法形式

3.2 函数的实现

3.3 形参和实参

总结

 


前言

大家好呀,快到端午节啦,这里提前对大家说声端午节快乐啊,在享受快乐的假期的同时也不要忘记学习呀,那么废话少说,我们就来进入本章正题函数。说到函数,我想大家可能感到不寒而栗,想到数学里被函数支配的恐怖,但是这里就不用担心,因为计算机里的函数不像数学里的那么困难,就让我们来了解一下函数是什么吧。


一、函数的概念

函数在数学中我想大家应该都不陌生,我们大家在数学方面学习和很多很多函数,比如y = kx+b,k和b都是常数,在C语言中也引入了函数的概念,也有翻译为“子程序”的,用子程序的说法更加准确一点,C语言中的函数和数学中的函数从逻辑和形式来讲都是极为相似的,它用来解决各种不同的特定任务的一小段代码,这段代码有着特殊的调用和使用方法。

C语言中函数的存在非常重要,C语言本身就是由很多个函数构成的,一个大的项目可以分解成很多个小的函数来解决,一个可以解决某种特定任务的函数是可以反复使用的,这样可以提升开发软件效率。

函数分为两类:

1、库函数:C语言自带的,可以直接使用的函数。

2、自定义函数:自己设定的,满足我们所需要的功能的函数。

 

二、库函数

 

2.1 库函数和头文件

在C语言中其实是没有所谓的库函数的,但是C语言的国际标准ANSI C规定了一些常用的函数标准,称为标准库,然后不同的厂家按照他们的风格习惯和标准库,创建出的不同的函数来实现标准库的内容,就叫库函数。

像我们所使用的scanf、printf等都是库函数都是库函数,是编译器自带的函数。

各种编译器所带的库函数都不相同,它们按照不同的功能,得用不同的头文件来声明。我们如果想要查看不同的头文件,可以去看看C语言官网:C 标准库头文件 - cppreference.com,有数学相关的、字符相关的、本地化等等,我们不要一口吃成胖子,我们可以一一学习,跟着我逐步击破。

 

2.2 库函数的使用/学习方法

库函数有很多的查看和学习的工具,例如:

1.C/C++官方库:C 标准库头文件 - cppreference.com;

2.cplusplus:C library - C++ Reference (cplusplus.com)

可能很多人在看的时候会看不懂,因为是2是全英文的,那我这里来解释一下库函数文档的一般格式

1.函数原型

2.函数功能介绍

3.参数和返回类型说明

4.代码举例

5.代码输出

6.相关知识链接

例如sqrt函数:

338d463a20cc4ecd88ab274d98471631.png

我们打开第二个链接如图,

我们可以找到sqrt函数,在网页上面有搜索,或者sqrt在math.h的头文件里自己找一些。

0b1665bcc5e847cab9355e61355fa2bf.png

183fbf2cd8a44cf4a70e2b8947fafefb.png

我们可以看到它分为6个部分,我们来看看6个部分分别是什么意思。

78c244341fed467793fbd78d1f982e98.png

这个部分就是函数原型,这各部分告诉了我们一个库函数应该这么使用。比如这里我们可以看到它括号里的就是要传入的内容,要传入一个浮点数,sqrt就是接收,要用一个浮点数接收。

520cf2ca2d8645f4bceca32c64a34cdf.png

这里就是功能介绍啦,翻译一下就是说返回x的平方根。

65ce07f4ee4749faaade1a7695387e9e.png

这里就是说我们的参数和返回类型,参数这里说了要传入一个想要平方根的x,如果x是负数就报错。返回类型也差不多,返回x的平方根,如果x是负数就报错。

d0d89c2885ce47cc931a7fbdfdf99e7f.png

f0aa5e57468b4c4291723ce6f81c001d.png

268f2d68e9674afdba4d8673ed0a161e.png

这里就是和sqrt类似的库函数啦。

我们已经看完了,那就来实际运用一下吧。

15a412cf1a894664b1a3aa5dec062c34.png

e8caf0f8f9e343a3bf303cb9b9fbae60.png

这就是一个库函数的使用和学习过程,我们一定要学会看上面的字典,还有1这个链接是中文的,里面的库函数的格式也和2链接的很相同,所以小伙伴们就自己尝试一下吧,我们接下来学习自定义函数,把自定义函数弄懂了可以很有助于我们去学习库函数,我们接下来好好看看吧。

 

三、自定义函数

自定义函数比库函数更加重要,它是我们可以自己创造的,给了程序员更多的创造性,库函数本质上也是自定义函数,只是被收录到编译器里可以直接使用罢了,但本质上也是人创造的。

 

3.1 函数的语法形式

其实自定义函数和库函数的结构是一样的。

ret_type  fun_name(形式参数)

{

 

}

ret_type:是函数的返回类型,表示函数计算结果的类型的,有的时候返回类型是void,表示什么都不返回

fun_name:是函数的名字,为了方便函数的使用而取的函数名,要尽量让函数名起的有意义

():小括号里的是函数的形式参数,就相当于加工厂的原料,函数的参数可以是void,明确表示该函数没有参数。如果有参数,那就要写清楚参数的类型和名字、以及参数的个数。

{}:大括号里的是函数体,就是函数完成计算的过程

我想小伙伴们看到这里可能就会疑惑了,函数到底是什么,该这么用,我们该如何创建,我们这里来类比一下,我们就把函数当作一个加工厂。

b8e55caff2f143d0b67d9d27ac200865.png

这是我们的函数一个基本原理,它和加工厂是很像的,

cf02f1201b694567b1c815958ea8167d.png

我们可以看到,我们想要把一个产品加工出来,我们首先得要原材料,然后要用一定的办法加工,最后就会变成我们想要的产品啦,函数也是一样的,我们如果想要创建一个函数用来完成一个功能,我们就要先明白原材料是什么,也就是参数,然后再用原材料去写入我们的加工方式,最后我们便写出了一个函数啦。文字看起来比较枯燥,我们来写写看看吧。

 

3.2 函数的实现

我们接下来来写一个能完成两个变量之间的加法的函数。

int main()
{int a = 0;int b = 0;scanf("%d %d", &a, &b);int c = Add(a, b);printf("%d", c);return 0;
}

我们先创建两个变量a、b,然后再输入自己想要的值,然后我们就创建一个Add的函数,来满足我们项目的实现,很显然,我们的这个函数肯定是要有返回值的,而且是int返回值,所以我们这里就用int c来接收,当然这一步我们可以在写完函数时再来写是最好的。接下来我们来看看函数怎么写。

int Add(int a, int b)
{int c = a + b;return c;
}

这个函数写起来蛮简单的,首先我们要知道我们的返回值是什么,肯定是int型。

7b5acf2e25f7432b844d3779a524b388.png

所以这里写的就是返回变量的类型,如果没有返回类型,那就写void,有返回类型就写返回类型就好啦,这里就写int,我们的原材料,也就是参数是a和b,所以我们这里就在()里填入a和b就行啦,要记住要在前面写上a和b的类型,其实这里的a和b不是传过来的a和b,这里可能你们听上去很奇怪,但它们之间其实只是名字一样而已,不是一个东西,如果这里把函数的a和b改成m和n也没有问题,只要类型不错就行,像这样

int Add(int m, int n)
{int c = m + n;return c;
}

这个和上面的结果都是一样的,这涉及到形式参数和实际参数的问题,我下面会讲,这里就先不管这么多。然后我们就来实现功能啦,{}里的就是函数实现的功能我们要实现两个变量的相加,我们就可以用我们的先相加,然后再讲相加的结果传输回去,当然也可以这样写

int Add(int a, int b)
{return a + b;
}

这样我们就实现了一个函数的创建。来看看结果吧。

fd367fbfbcb34fa7b02547003d02c775.png

当然,我们刚刚说了,不是所有的函数都有需要返回值的,所以我们这里就再来实现一个输出函数的实现。

例如,我想实现一个可以打印呵呵的函数这么实现。

这里很显然我们不需要任何的返回值,所以返回值的地方我们就写void

5e7e8c92b5014a1c8214a17a07da61ad.png

在这里我们也不需要任何的参数,所以我们可以就放个(),里面什么都不写,当然也可以在()里写void明确表明这里不需要参数,

4730fcbd22d940979f7aecae63eebe1a.png

然后我们在{}里实现我们的函数

void Print(void)
{printf("呵呵\n");
}

这就是我们最终的结果啦,我们来用一下这个函数看看,像这样使用。

int main()
{Print();return 0;
}

7cb373e980b948559880c8fa3fc07b70.png

这就是我们最终的实现效果。

 

3.3 形参和实参

实参就是指实际参数,我们在设计函数时,把要传入给函数的变量叫做实际参数。

2a6136d6224945b9a391d5ceee3956f7.png

形参就是指形式参数,我们设计的函数名后面的参数就是形参。

4701d73c204f4f38a868fa8d04ac01a2.png

形参是形式参数的原因是因为我们程序在运行的时候在函数调用的时候,形参是没有被创建的,也就说在函数没有被调用之前形参是不存在的。

形参和实参有什么区别?它们是两个不同的个体,只是值刚好相同而已,就好比我们上面的实参a和形参a,它们就完全不是一个a,可能在日常生活中会有两个同名的人,而且岁数也一样大,但是你不能说它们是一样的,我们可以来看看它们在内存中的地址。

f75224d2c5114221b097a828b7e53b13.png

99ae9143a21f4dc2857f78de5c421479.png

我们可以看到,当a和b在主程序时是一个地址,但是当它们到子程序时又是另外一个地址啦,所以说它们之间没有关系,只是值相同而已。


总结

以上便是我们C语言中的函数部分知识,下一章我们将更加详细的说明函数的各项功能以及return的使用等等,感谢大家的观看,如果哪里有误,欢迎支持,谢谢大家。

 

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

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

相关文章

【react】react项目支持鼠标拖拽的边框改变元素宽度的组件

目录 安装使用方法示例Props 属性方法示例代码调整兄弟div的宽度 re-resizable github地址 安装 $ npm install --save re-resizable这将安装re-resizable库并将其保存为项目的依赖项。 使用方法 re-resizable 提供了一个 <Resizable> 组件&#xff0c;它可以包裹任何…

Java——方法详细介绍

一、方法调用机制 1、方法调用机制详细介绍 下面对方法调用在内存中的情况进行分析&#xff0c;以下面的代码为例&#xff1a; public class Test {public static void main(String[] args) {Person person new Person();person.name "张三";person.age 18;int…

“双一流名校”苏州大学计算机专业好考吗?苏州大学计算机考研考情分析

苏州大学&#xff08;Soochow University&#xff09;&#xff0c;简称“苏大”&#xff0c;坐落于历史文化名城苏州&#xff0c;国家“211工程”重点建设高校&#xff0c;国家国防科技工业局和江苏省人民政府共建高校&#xff0c;国家“双一流”世界一流学科建设高校&#xff…

【爬虫实战项目一】Python爬取豆瓣电影榜单数据

目录 一、环境准备 二、编写代码 2.1 分页分析 2.2 编码 一、环境准备 安装requests和lxml pip install requests pip install lxml 二、编写代码 2.1 分页分析 编写代码前我们先看看榜单的url 我们假如要爬取五页的数据&#xff0c;那么五个url分别是&#xff1a; htt…

vue3-使用富文本编辑器-wangEditor-文章发表1

最近在搞项目:我们组内几位成员正在搞一个网站搭建,以后更新会比较缓慢 引言:如果要网站要用的富文本编辑器的话,这边推荐用wangEditor 官网地址传送 : wangEditorhttps://www.wangeditor.com/ 我现在还在扩展我的写文章用的富文本编辑器 现在我将简单介绍一下其基本使用方…

基于STM32开发的智能农业监控系统

目录 引言环境准备智能农业监控系统基础代码实现&#xff1a;实现智能农业监控系统 4.1 土壤湿度传感器数据读取4.2 温湿度传感器数据读取4.3 水泵与风扇控制4.4 用户界面与数据可视化应用场景&#xff1a;农业环境监测与管理问题解决方案与优化收尾与总结 1. 引言 随着智能…

Apache ShardingSphere实战与核心源码剖析

Apache ShardingSphere实战与核心源码剖析 1.数据库架构演变与分库分表介绍 1.1 海量数据存储问题及解决方案 如今随着互联网的发展,数据的量级也是成指数的增长,从GB到TB到PB。对数据的各种操作也是愈加的困难,传统的关系性数据库已经无法满足快速查询与插入数据的需求。…

msvcp140_CODECVT_IDS.dll的解决方法是什么?有多少种解决方法

msvcp140_CODECVT_IDS.dll 是一个动态链接库&#xff08;DLL&#xff09;文件&#xff0c;属于微软Visual C 2015运行时库的一部分。这个文件主要负责字符编码转换&#xff0c;支持Unicode与其他字符集之间的转换&#xff0c;如UTF-8与UTF-16。它对于运行时库的多语言支持至关重…

Golang | Leetcode Golang题解之第133题克隆图

题目&#xff1a; 题解&#xff1a; func cloneGraph(node *Node) *Node {if node nil {return node}visited : map[*Node]*Node{}// 将题目给定的节点添加到队列queue : []*Node{node}// 克隆第一个节点并存储到哈希表中visited[node] &Node{node.Val, []*Node{}}// 广…

算法题目学习汇总

1、二叉树前中后序遍历:https://blog.csdn.net/cm15835106905/article/details/124699173 2、输入一棵二叉搜索树&#xff0c;将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点&#xff0c;只能调整树中结点指针的指向。 public class Solution {private Tr…

网络学习(二)DNS域名解析原理、DNS记录

目录 一、为什么要使用DNS&#xff1f;二、因特网的域名结构三、DNS域名解析原理【含详细图解】四、DNS记录&#xff08;A记录、AAAA记录、CNAME记录等&#xff09; 一、为什么要使用DNS&#xff1f; 我们知道&#xff0c;TCP/IP 协议中是使用 IP 地址和端口号来确定网络上的某…

优质免费的 5 款翻译 API 接口推荐

当谈到翻译API时&#xff0c;我们通常指的是一种编程接口&#xff0c;它允许开发者将文本从一种语言翻译成另一种语言。这些API通常由专业的翻译服务提供商提供&#xff0c;如谷歌翻译 API、实时翻译API、腾讯翻译API、DeepL翻译API、Azure翻译API等。 这些API通常提供多种语言…

day31贪心算法part01| 理论基础 455.分发饼干 376. 摆动序列 53. 最大子序和

**455.分发饼干 ** 视频讲解 | 力扣链接刚开始想到的&#xff0c;但是这样太暴力了&#xff0c;太笨了 class Solution { public:int findContentChildren(vector<int>& g, vector<int>& s) {// 胃口g 饼干尺寸sint result 0;sort(s.begin(), s.end());…

[数据集][目标检测]厨房积水检测数据集VOC+YOLO格式88张2类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;88 标注数量(xml文件个数)&#xff1a;88 标注数量(txt文件个数)&#xff1a;88 标注类别数…

冯喜运:6.11#现货黄金#美原油#行情趋势分析及操作建议

【黄金消息面分析】&#xff1a;随着全球经济的波动&#xff0c;黄金作为传统的避险资产&#xff0c;其价格走势一直备受投资者关注。上周五&#xff0c;美国非农就业报告的强劲表现给美联储降息预期泼了冷水&#xff0c;同时&#xff0c;中国5月份未增持黄金&#xff0c;结束了…

免费,C++蓝桥杯等级考试真题--第11级(含答案解析和代码)

C蓝桥杯等级考试真题--第11级 答案&#xff1a;D 解析&#xff1a; A. a b; b a; 这种方式会导致a和b最终都等于b原来的值&#xff0c;因为a的原始值在被b覆盖前没有保存。 B. swap(a&#xff0c;b); 如果没有自定义swap函数或者没有包含相应的库&#xff0c;这个选项会编…

技术前沿 |【大模型InstructBLIP进行指令微调】

大模型InstructBLIP进行指令微调 一、引言二、InstructBLIP模型介绍三、指令微调训练通用视觉语言模型的应用潜力四、InstructBLIP的指令微调训练步骤五、实验结果与讨论六、结论与展望 一、引言 随着人工智能技术的快速发展&#xff0c;视觉语言模型&#xff08;Vision-Langu…

SpringMVC[从零开始]

SpringMVC SpringMVC简介 1.1什么是MVC MVC是一种软件架构的思想&#xff0c;将软件按照模型、视图、控制器来划分 M:Model&#xff0c;模型层&#xff0c;指工程中的JavaBean&#xff0c;作用是处理数据 JavaBean分为两类&#xff1a; 一类称为实体类Bean&#xff1a;专…

Python数据分析II

目录 1.HS-排序返回前n行 2.HS-相关性 3.缺失值处理 4.时间 5.时间索引 6.分组聚合 7.离散分箱 8.Concat关联(索引关联) 9.Merge关联(字段关联) 10.join合并(左字段,右索引) 11.行列转置及透视表 12.数据可视化-面向过程 13.数据可视化-面向对象 14.快速生成柱状…

设计模式 —— 观察者模式

设计模式 —— 观察者模式 什么是观察者模式观察者模式定义观察者模式的角色观察者模式的使用场景观察者模式的实现 被观察者&#xff08;Subject&#xff09;观察者&#xff08;Observer&#xff09;通知&#xff08;notify&#xff09;更新显示&#xff08;update&#xff09…