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.mzph.cn/bicheng/24185.shtml

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

相关文章

出售iPhone前的必做步骤:完全擦除个人数据的方法

当您准备在闲鱼上转售旧 iPhone、将其捐赠、送给朋友或通过 Apple 回收之前,您可能会选择执行“恢复”操作来擦除您的数据。但请注意,这一操作并不能真正删除设备中的数据。被“删除”或“格式化”的数据实际上仍存在于 iPhone 中,只是被系统…

SpringBoot+Vue在线文档管理系统(前后端分离)

技术栈 JavaSpringBootMavenMySQLMyBatisVueShiroElement-UI 系统角色对应功能 员工管理员 系统功能截图

《精通ChatGPT:从入门到大师的Prompt指南》第1章:认识ChatGPT

第1章:认识ChatGPT 1.1 ChatGPT是什么 ChatGPT,全称为Chat Generative Pre-trained Transformer,是由OpenAI开发的一种先进的自然语言处理模型。它利用了深度学习中的一种技术——Transformer架构,来生成类人文本。ChatGPT通过对…

贪心算法-数组跳跃游戏(mid)

目录 一、问题描述 二、解题思路 1.回溯法 2.贪心算法 三、代码实现 1.回溯法实现 2.贪心算法实现 四、刷题链接 一、问题描述 二、解题思路 1.回溯法 使用递归的方式,找到所有可能的走步方式,并记录递归深度(也就是走步次数&#x…

玩转ChatGPT:最全学术论文提示词分享【上】

学境思源,一键生成论文初稿: AcademicIdeas - 学境思源AI论文写作 在当今数字时代,人工智能(AI)技术正迅速改变各行各业的运作方式。特别是,OpenAI的ChatGPT等语言模型以其强大的文本生成能力,…

【CTF MISC】XCTF GFSJ0170 János-the-Ripper Writeup(文件提取+ZIP压缩包+暴力破解)

Jnos-the-Ripper 暂无 解法 用 winhex 打开,提到了 flag.txt。 用 binwalk 扫描,找到一些 zip 压缩包。 binwalk misc100用 foremost 提取文件。 foremost misc100 -o 100flag.txt 在压缩包里。 但是压缩包需要解压密码。 用 Ziperello 暴力破解。 不…

mac安装nigix且配置 vue/springboot项目(本地/服务器)

一、mac安装Nigix 1. 查看是否存在 nginx 执行brew search nginx 命令查询要安装的软件是否存在 brew search nginx 2. 安装nginx brew install nginx 3. 查看版本 nginx -v 4. 查看信息 查看ngxin下载的位置以及nginx配置文件存放路径等信息 brew info nginx 下载的存…

Angular 由一个bug说起之六:字体预加载

浏览器在加载一个页面时,会解析网页中的html和css,并开始加载字体文件。字体文件可以通过css中的font-face规则指定,并使用url()函数指定字体文件的路径。 比如下面这样: css font-face {font-family: MyFont;src: url(path/to/font.woff2…

IDEA 中设置 jdk 的版本

本文介绍一下 IDEA 中设置 jdk 版本的步骤。 一共有三处需要配置。 第一处 File --> Project Structure Project 和 Modules 下都需要指定一下。 第二处 File --> Settings 第三处 运行时的配置

Linux基础2-基本指令4(cp,mv,cat,tac)

上篇文章我们说到了rmdir,rm,man,echo.重定向等知识。 Linux基础1-基本指令3-CSDN博客 本文继续梳理其他基础指令 1.本章重点 1.使用cp命令拷贝文件 2.使用mv命令移动文件 3.使用cat,tac查看小文本文件 2.cp命令 在linux中使用cp命令来拷贝粘贴文件 cp src(原文…

解决Nginx出现An error occurred问题

每个人遇到Nginx的An error occurred情况可能都不一样(见图1),Nginx造成该错误的原因: 1. 我在配置域名解析成IP时,没有把所有解析配置都修改,见图2:解析 *.hanxiaozhang.xyz 配置的是新IP地…

Nvidia Jetson/Orin/算能 +FPGA+AI大算力边缘计算盒子:潍柴雷沃智慧农业无人驾驶

潍柴雷沃智慧农业科技股份有限公司,是潍柴集团重要的战略业务单元,旗下收获机械、拖拉机等业务连续多年保持行业领先,是国内少数可以为现代农业提供全程机械化整体解决方案的品牌之一。潍柴集团完成对潍柴雷沃智慧农业战略重组后,…

轻松解决问题!教你文件怎么解除只读模式!

在日常使用电脑时,我们有时会遇到文件或文件夹被设定为只读模式的情况,这可能会限制我们对文件的修改和编辑。然而,解除只读模式并获得文件的完全控制是一个相对简单的过程,只需要掌握一些基本的技巧和方法。在本文中,…

java版spring cloud 知识付费平台的功能模块与子模块划分

随着互联网技术的飞速发展,知识付费平台已经成为了我国在线教育领域的一颗新星。这些平台以用户需求为出发点,围绕高质量的内容打造,利用互联网技术为用户提供了一个便捷、高效的学习环境。它们汇聚了丰富的专业知识,覆盖了职业技…

打造精美电子画册,提升企业形象的方法

在当今数字化时代,企业形象的表达方式正在发生深刻变革。精美电子画册作为一种新兴的传播媒介,不仅能够展现企业风采、提升品牌价值,还能够吸引潜在客户、增强市场竞争力。 接下来告诉大家一些简单的制作方法,可以收藏起来哦 1.首…

【免费】2021年数学建模国赛C题问题一--基于熵权法和TOPSIS法详细版附Word加代码

各位大佬好 ,这里是阿川的博客,祝您变得更强 个人主页:在线OJ的阿川 大佬的支持和鼓励,将是我成长路上最大的动力 阿川水平有限,如有错误,欢迎大佬指正 Python 初阶 Python–语言基础与由来介绍 Python–…

刷代码随想录有感(95):合并区间

题干&#xff1a; 代码&#xff1a; class Solution { public:static bool cmp(vector<int>& a, vector<int>& b){return a[0] < b[0];}vector<vector<int>> merge(vector<vector<int>>& intervals) {sort(intervals.begi…

AO|天鹰优化算法原理及代码实现(MATLAB/Python)

文章来源于我的个人公众号&#xff1a;KAU的云实验台&#xff0c;主要更新智能优化算法的原理、应用、改进 天鹰优化算法(Aquila Optimizer&#xff0c;AO)是Abualigah等[1]于2021年发表在SCI二区Computers & Industrial Engineering的元启发式优化算法。该算法通过模拟天鹰…

从零开始手把手Vue3+TypeScript+ElementPlus管理后台项目实战五(引入vue-router,并给注册功能加上美丽的外衣el-form)

安装vue-router pnpm install vue-router创建router src下新增router目录&#xff0c;ruoter目录中新增index.ts import { createRouter, createWebHashHistory } from "vue-router"; const routes [{path: "/",name: "Home",component: () …

【机器学习】训练GNN图神经网络模型进行节点分类

1. 引言 1.1 图神经网络GNN概述 图神经网络&#xff08;Graph Neural Network&#xff0c;GNN&#xff09;是一种专门用于处理图结构数据的神经网络方法。它起源于2005年&#xff0c;当时Gori等人首次提出了GNN的概念&#xff0c;用于学习图中的节点特征以及它们之间的关系。…