C语言(18)------------>函数(1)

本文介绍C语言函数的定义、标准库和库函数、自定义函数、函数中形式参数和实际参数。通过举例子和画图的方式分解每一个知识点,并结合生活案例和已知知识来解释函数知识。从而使得读者对C语言的函数理解更加深入,学习到C语言开发软件的一些实用技巧

一、函数的定义

在初中的时候,我们学习过一次函数,它的定义是y=kx+b(其中,k与b是常数)。

例如,y=x+1是一次函数。

当x=1时,y=2;

当x=2时,y=3;

当x=3时,y=4;

........

给定一个自变量(此处指的是x)得到一个因变量(此处指的是y)。

上高中的时候,我们把这个函数写成了f(x)=x+1,高中数学老师通过映射更加深入讲解了函数。

上面指的是数学里面的。

那C语言的函数是什么呢?

函数的英文是function,函数用于实现某些功能,通常是一小段的代码块。在某些翻译中将function为子程序。子程序就是函数。

函数有什么作用呢?

之后我们会讲解一个贪吃蛇的项目。贪吃蛇游戏通常有游戏界面的显示、蛇的移动、果实的出现等功能。对于这个项目我们可以使用C语言中的函数将这几个功能封装起来,在主函数main中调用函数即可。

在C语言中,函数分为库函数和自定义函数。

二、标准库和库函数

C语言的语法中并没有提及到库函数。标准库是C语言的国际标准ANSI C所提出的。

C语言的编译器厂商根据这个标准,由开发人员设计并实现。

例如:

微软--------->MSVC(Visual Studio的编译器)---------->微软公司的开发人员开发库函数

苹果--------->Clang(Clion的编译器)---------->苹果公司的开发人员开发库函数

两种开发的库函数也许在底层的实现有所差别,但是实际的使用并不会有较大的影响

库函数其实我们一点都不陌生,在最开始学习C语言时,我们在屏幕上打印Hello World时使用到的printf函数就是一个库函数,它定义在stdio.h中。

库函数有非常多,如果要使用库函数我们可以在如下两个网站中查找即可。

1.C/C++的官网:https://zh.cppreference.com/w/c/header

2.cplusplus.com:https://legacy.cplusplus.com/reference/clibrary/

如何使用一个未知的库函数,如何阅读官网给的库函数有效信息?

以C/C++的官网为例:

(1)在浏览器中输入网址

(2)查找我们需要的库函数(以数学库math.h为例)

  (3)进入数学库的界面:

(4)下滑界面,找到函数部分:

(5)找需要的函数,点击进入

在电子信息专业课程中,通常会开设通信原理这一门课程。在通信原理中,介绍了补误差函数,现在我们以补误差函数为例。

(6)点击后进入的界面:

在这个界面中,我们可以查找它的使用方法。

我们通常关注的点如下:

1.参数

2.返回值

3.错误处理(若遇到不正确的返回时可以参考此处)

解释:NaN是指非数值,用来表示未定义或不可表示的数值结果。例如,0除以0就会返回NaN。 

4.示例(可以帮助我们快速上手使用)

在实例中学习东西是最快的。

看不懂代码时可以使用AI工具解释代码。

5.参阅

三、自定义函数

库函数提高了我们的开发效率,但是库函数毕竟有限。若要实现某些我们需要的特定功能,这时候就要使用到自定义函数。

自定义函数:根据开发者的需要设计。

它的语法如下:

返回类型 函数名(参数)
{}

 注意:

参数可以有也可以没有,根据实际需要即可。

返回类型指的是C语言内置的数据类型,例如 int float double char......

如何理解函数呢?我们可以和生活中的炒菜进行类比。

炒菜时我们要放入原料,把它放入锅中,经过处理之后就变成了一盘美味的佳肴。

函数就是放入我们的参数,经过函数体内部的处理后,实现我们需要的功能。

例如,我们要实现两个整数的乘法,我们放入两个整数到函数中,经过函数内部的处理,放回我们需要的结果。

那具体我们怎么做呢?

输入两个数字后,放入到处理这两个数字的乘法中

#include <stdio.h>int main()
{int a = 0;int b = 0;int re = 0;//re用于接收返回的结果//输入两个整数scanf("%d%d",&a,&b);re = Mul(a,b);return 0;
}

上面我们用到了Mul,Mul是我们自定义的实现乘法的函数。

乘法的实现:

//乘法函数
int Mul(int x, int y)
{int Mul_Re = 0;Mul_Re = x * y;return Mul_Re;
}

整体代码:

#include <stdio.h>//乘法函数
int Mul(int x, int y)
{int Mul_Re = 0;Mul_Re = x * y;return Mul_Re;
}int main()
{int a = 0;int b = 0;int re = 0;//re用于接收返回的结果//输入两个整数scanf("%d%d",&a,&b);re = Mul(a,b);return 0;
}
在这里面涉及到了函数的定义和函数的调用:

 

使用自定义函数,解释三点:

1.函数名是自定义的,根据实际需要取名字

2.函数参数的个数也是根据实际需要确定的,可能是0个也可能是多个。

3.函数可以有返回也可以没有返回,但是没有返回的时候我们的返回类型要写成void。

四、形式参数和实际参数

函数的参数分为形式参数和实际参数。

实际参数指的是真实传递给函数的参数,例如:

 形式参数:

未调用时,只是形式上存在,不会向内存中申请空间;调用时,用于存放实参传递的值才申请空间。

实参传递给形参时,形参是实参的一块临时拷贝。

形式参数和实际参数的关系验证:

(1)启用调试,监视窗口中查看信息

 

 (2)a与b的地址编号

申请的内存中存放的是各自的内容

a的内存中存放的是10

b的内存中存放的是20

 

(3)进入Mul函数内部 

 

(5)监视x和y的内容

 

(6)(5)的一些说明

 

(7)最终的结果:

 

 

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

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

相关文章

apload-lab打靶场

1.提示显示所以关闭js 上传<?php phpinfo(); ?>的png形式 抓包&#xff0c;将png改为php 然后放包上传成功 2.提示说检查数据类型 抓包 将数据类型改成 image/jpeg 上传成功 3.提示 可以用phtml&#xff0c;php5&#xff0c;php3 4.先上传.htaccess文件&#xff0…

【Linux】TCP协议

文章目录 &#x1f449;TCP协议&#x1f448;TCP协议段格式确认应答机制窗口大小六个标记位连接管理机制三次握手四次挥手超时重传流量控制滑动窗口拥塞控制延迟应答捎带应答面向字节流粘包问题TCP异常情况TCP小结基于TCP应用层协议TCP与UDP的对比用UDP实现可靠传输 &#x1f4…

《HelloGitHub》第 107 期

兴趣是最好的老师&#xff0c;HelloGitHub 让你对编程感兴趣&#xff01; 简介 HelloGitHub 分享 GitHub 上有趣、入门级的开源项目。 github.com/521xueweihan/HelloGitHub 这里有实战项目、入门教程、黑科技、开源书籍、大厂开源项目等&#xff0c;涵盖多种编程语言 Python、…

商城系统单商户开源版源码

环境配置 1.软件安装 宝塔安装系统软件:Nginx、MySQL5.6、PHP( PHP用7.1-7.4版本)、phpMyAdmin(Web端MySQL管理工具)。 2.配置mysql 设置mysql&#xff0c;在已安装的软件里面找到 mysql点击进行设置 3.修改sql-mode 选择左侧配置修改&#xff0c;找到里面的sql-mode&…

DeepSeek 与云原生后端:AI 赋能现代应用架构

&#x1f4dd;个人主页&#x1f339;&#xff1a;一ge科研小菜鸡-CSDN博客 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; 1. 引言 在当今快速发展的互联网时代&#xff0c;云原生&#xff08;Cloud Native&#xff09;架构已成为后端开发的主流趋势。云…

Kafka面试题及原理

1. 消息可靠性&#xff08;不丢失&#xff09; 使用Kafka在消息的收发过程都会出现消息丢失&#xff0c;Kafka分别给出了解决方案 生产者发送消息到Brocker丢失消息在Brocker中存储丢失消费者从Brocker 幂等方案&#xff1a;【分布式锁、数据库锁&#xff08;悲观锁、乐观锁…

Python学习第十八天之深度学习之Tensorboard

Tensorboard 1.TensorBoard详解2.安装3.使用4.图像数据格式的一些理解 后续会陆续在词博客上更新Tensorboard相关知识 1.TensorBoard详解 TensorBoard是一个可视化的模块&#xff0c;该模块功能强大&#xff0c;可用于深度学习网络模型训练查看模型结构和训练效果&#xff08;…

idea生成自定义Maven原型(archetype)项目工程模板

一、什么是Maven原型&#xff08;Maven archetype&#xff09; 引自官网的介绍如下&#xff1a; Maven原型插件官网地址 这里采用DeepSeek助手翻译如下&#xff1a; Maven 原型 什么是原型&#xff1f; 简而言之&#xff0c;原型是一个 Maven 项目模板工具包。原型被定义为一…

Hadoop架构详解

Hadoop 是一个开源的分布式计算系统&#xff0c;用于存储和处理大规模数据集。Hadoop 主要由HDFS&#xff08;Hadoop Distributed File System&#xff09;、MapReduce、Yarn&#xff08;Jobtracker&#xff0c;TaskTracker&#xff09;三大核心组件组成。其中HDFS是分布式文件…

计算机毕设JAVA——某高校宿舍管理系统(基于SpringBoot+Vue前后端分离的项目)

文章目录 概要项目演示图片系统架构技术运行环境系统功能简介 概要 网络上许多计算机毕设项目开发前端界面设计复杂、不美观&#xff0c;而且功能结构十分单一&#xff0c;存在很多雷同的项目&#xff1a;不同的项目基本上就是套用固定模板&#xff0c;换个颜色、改个文字&…

利用 LangChain 和一个大语言模型(LLM)构建一个链条,自动从用户输入的问题中提取相关的 SQL 表信息,再生成对应的 SQL 查询

示例代码&#xff1a; from langchain_core.runnables import RunnablePassthrough from langchain.chains import create_sql_query_chain from operator import itemgetter from langchain.chains.openai_tools import create_extraction_chain_pydantic# 系统消息&#xff…

DeepSeek 助力 Vue 开发:打造丝滑的表单验证(Form Validation)

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 Deep…

云服务培训五-数据库服务

如上图所圈&#xff0c;这次主要学习云数据库RDS for MySQL、GaussDB和GeminiDB相关内容。 一、结构化数据、非结构化数据 选择数据库时&#xff0c;首先从模型上分析&#xff0c;是否涉及事务处理、复杂的查询关联&#xff0c;还是数据量大、有并发访问需求。同理&#xff0c;…

【愚公系列】《Python网络爬虫从入门到精通》036-DataFrame日期数据处理

标题详情作者简介愚公搬代码头衔华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。近期荣誉2022年度…

类和对象进一步了解c++

初始化列表 虽然构造函数能帮助我们完成初始化&#xff0c;但其实也就是构造函数赋值而已&#xff0c;根本不算真正的初始化。 所以&#xff0c;祖师爷就提出了一个初始化列表&#xff0c;用来初始化成员变量。 注意 每个成员变量在初始化列表中最多出现一次(初始化只能初始…

rust学习笔记9-结构体与206.反转链表

结构体 rust不是面向对象语言&#xff0c;没有类&#xff08;class&#xff09;&#xff0c;主要采用结构体&#xff08;struct&#xff09;来处理结构化数据&#xff0c;这点与go语言相似。 基本使用 struct Person {name: String,age: u32,height: f64, }fn main() {let p…

DDD该怎么去落地实现(4)多对多关系

多对多关系的设计实现 如题&#xff0c;DDD该如何落地呢&#xff1f;前面我通过三期的内容&#xff0c;讲解了DDD落地的关键在于“关系”&#xff0c;也就是通过前面我们对业务的理解先形成领域模型&#xff0c;然后将领域模型的原貌&#xff0c;形成程序代码中的服务、实体、…

论文阅读:CAN GENERATIVE LARGE LANGUAGE MODELS PERFORM ASR ERROR CORRECTION?

CAN GENERATIVE LARGE LANGUAGE MODELS PERFORM ASR ERROR CORRECTION? 生成式大语言模型能否进行自动语音识别&#xff08;ASR&#xff09;纠错&#xff1f; https://arxiv.org/pdf/2307.04172 文章目录 速览常规总结通俗版 摘要&#xff08;Abstract&#xff09;2. 引言&a…

python面向对象

目录 初识对象 类的成员方法 类和对象 构造方法 魔术方法 __str__ __lt__ __le__ __eq__ 封装 私有成员 继承 单继承 多继承 pass 复写 类型注解 1 变量的类型注解 方法1 使用: 方法2 注释 应用场景 2 函数(方法)的类型注解 3 混合类型注解 多态 初识对象 #设计…

C++的类型转换

C语言中的类型转换 在C语言中&#xff0c;如果赋值运算符左右两侧类型不同&#xff0c;或者形参与实参类型不匹配&#xff0c;或者返回值类型与 接收返回值类型不一致时&#xff0c;就需要发生类型转化&#xff0c;C语言中总共有两种形式的类型转换&#xff1a;隐式类型 转换和…