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的使用等等,感谢大家的观看,如果哪里有误,欢迎支持,谢谢大家。

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

10.【机器学习】十大算法之一决策树(Decision tree)算法原理讲解

【机器学习】十大算法之一决策树(Decision tree)算法原理讲解 一摘要二个人简介三什么是决策树四什么是树4.1 二叉树4.1.1 特殊的二叉树:4.1.2 举例说明 五决策树的优缺点5.1 优点5.2 缺点 六算法原理七信息熵八信息增益九信息增益率十基尼指…

2 - 寻找用户推荐人(高频 SQL 50 题基础版)

2.寻找用户推荐人 考点: sql里面的不等于,不包含null -- null 用数字判断筛选不出来 select name from Customer where referee_id !2 OR referee_id IS NULL;

uniapp中使用百度ocr识别引入项目

uniapp中使用百度ocr识别引入项目 官网申请地址 orcAPI文档地址 1.先获取token const getToken () > {uni.request({url: https://aip.baidubce.com/oauth/2.0/token,method: POST,data: {grant_type: client_credentials,client_id: **, apikeyclient_secret: **, skey…

实现开源可商用的 ChatPDF RAG:密集向量检索(R)+上下文学习(AG)

实现 ChatPDF & RAG:密集向量检索(R)上下文学习(AG) RAG 是啥?实现 ChatPDF怎么优化 RAG? RAG 是啥? RAG 是检索增强生成的缩写,是一种结合了信息检索技术与语言生成…

刷代码随想录有感(94):划分字母区间(怪!)

题干&#xff1a; 代码&#xff1a; class Solution { public:vector<int> partitionLabels(string s) {int hash[26] {0};for(int i 0; i < s.size(); i) hash[s[i] - a] i;vector<int> res;int left 0;int right 0;for(int i 0; i < s.size(); i){r…

算法2:滑动窗口(下)

文章目录 水果成篮找到字符串中所有字母异位词串联所有单词的子串*最小覆盖子串* 水果成篮 两元素排空操作 窗口中存在元素交错情况&#xff0c;所以出窗口一定要出干净&#xff01;&#xff01;&#xff01; class Solution { public:int totalFruit(vector<int>& …

AI图书推荐:《如何利用ChatGPT在线赚钱》

这本书《如何利用ChatGPT在线赚钱》&#xff08;$100m ChatGPT_ How To Make Money Online With ChatGPT -- Sharp, Biily -- 2023 &#xff09;主要阐述如何利用ChatGPT这一强大的语言模型工具在互联网上创造收入。 以下是各章节内容的概要&#xff1a; **引言** - 介绍了Chat…

机器学习——多层感知机

感知机 缺点&#xff1a;只能处理线性问题&#xff0c;感知机无法解决异或问题 在这里偏置就像线性模型的常数项&#xff0c;加入偏置模型的表达能力增强&#xff0c;而激活函数就像示性函数&#xff0c;可以模拟神经元的兴奋和抑制&#xff0c;当大于等于0就输出1。 多层感…

从军事角度理解“战略与战术”

战略与战术&#xff0c;均源于军事术语。 战略&#xff08;Strategy&#xff09;&#xff0c;源自希腊语词汇“strategos&#xff08;将军&#xff09;”和“strategia&#xff08;军事指挥部&#xff0c;即将军的办公室和技能&#xff09;”。指的是指挥全局性作战规划的谋略…

网络基础_02

1.ARP协议 地址解析协议&#xff08;Address Resolution Protocol&#xff09; 已知对方的三层ip地址&#xff0c;需要二层mac地址 当一台设备&#xff08;请求方&#xff09;需要知道某个 IP 地址对应的 MAC 地址时&#xff0c;会使用 ARP封装一个数据帧。这台设备的网络层以…

[职场] 为什么不能加薪? #学习方法#知识分享#微信

为什么不能加薪&#xff1f; 不能加薪的根本原因&#xff0c;终于被我找到了&#xff01; 朋友们&#xff01;职场这个地方是个很神奇的世界&#xff0c;有些规则并不是你想象的那样。我们都希望能在这个世界里施展自己的才华&#xff0c;获得升职加薪的荣耀。然而&#xff0c…

Blender 学习笔记(二)游标与原点

1. 游标 游标是界面中的红色圆圈&#xff1a; 1.1 移动游标 我们可以通过点击工具栏中的游标按钮&#xff0c;来移动游标&#xff0c;或者通过快捷键 shift右键 移动。若想要重置复游标位置&#xff0c;可以用 shiftc 恢复&#xff0c;或则通过 shifts 点击 游标->世界原…

Python中的Paramiko与FTP文件夹及文件检测技巧

哈喽&#xff0c;大家好&#xff0c;我是木头左&#xff01; Python代码的魅力与实用价值 在当今数字化时代&#xff0c;编程已成为一种不可或缺的技能。Python作为一种简洁、易读且功能强大的编程语言&#xff0c;受到了全球开发者的喜爱。它不仅适用于初学者入门&#xff0c…

Java 数据库连接(JDBC)的使用,包括连接数据库、执行SQL语句等

一、简介 Java Database Connectivity&#xff08;JDBC&#xff09;是Java应用程序与关系数据库进行交互的一种API。它提供了一组用于访问和操作数据库的标准接口&#xff0c;使开发人员能够使用Java代码执行数据库操作&#xff0c;如查询、插入、更新和删除等。 二、JDBC架构…

C++ AVL树 详细讲解

目录 一、AVL树的概念 二、AVL树的实现 1.AVL树节点的定义 2.AVL树的插入 3.AVL树的旋转 4.AVL树的验证 三、AVL树的性能 四、完结撒❀ 一、AVL树的概念 二叉搜索树虽可以缩短查找的效率&#xff0c;但 如果数据有序或接近有序二叉搜索树将退化为单支树&#xff0c;查 …

SQL进阶day11——窗口函数

目录 1专用窗口函数 1.1 每类试卷得分前3名 1.2第二快/慢用时之差大于试卷时长一半的试卷 1.3连续两次作答试卷的最大时间窗 1.4近三个月未完成试卷数为0的用户完成情况 1.5未完成率较高的50%用户近三个月答卷情况 2聚合窗口函数 2.1 对试卷得分做min-max归一化 2.2每份…

m3u8视频怎么打开?教你三招!

m3u8 是一种文本文件格式&#xff0c;用于创建媒体播放列表&#xff0c;现在大部分的视频流媒体都是m3u8格式。当我们从网上下载下来m3u8文件的时候会发现&#xff0c;它本身不是一段视频&#xff0c;而是一个索引纯文本文件。想要正常打开播放m3u8视频其实也很简单&#xff0c…

解码 LangChain | LangChain + GPTCache =兼具低成本与高性能的 LLM

LangChain 联合创始人 Harrison Chase 提到&#xff0c;多跳问题会给语义检索带来挑战&#xff0c;并提出可以试用 AI 代理工具解决。不过&#xff0c;频繁调用 LLM 会导致出现使用成本高昂的问题。 对此&#xff0c;Zilliz 软件工程师 Filip Haltmayer 指出&#xff0c;将 GP…

塑造财务规划团队的未来角色

随着企业不断改革&#xff0c;其财务规划团队的格局也在不断变化&#xff0c;领先行业的专业人士已经开始利用更创新的财务知识和思维来驾驭现代化财务规划角色的复杂性。财务团队需要不同的职能角色和技能组合来支持其发展&#xff0c;多学科团队和跨职能协作带来的挑战和机遇…

C语言详解(动态内存管理)1

Hi~&#xff01;这里是奋斗的小羊&#xff0c;很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~~ &#x1f4a5;&#x1f4a5;个人主页&#xff1a;奋斗的小羊 &#x1f4a5;&#x1f4a5;所属专栏&#xff1a;C语言 &#x1f680;本系列文章为个人学习…