C语言入门Day_19 初识函数

目录

1.函数的定义

2.函数的调用

3.易错点

4.思维导图


前言:

printf()我们已经很熟悉了,它有一个特定的功能,就是在屏幕上输出一行文字。之前的课程我们都称呼printf()为一个功能,实际上ta在编程中有个特定的名字——函数。

一个函数具有三个特征:输入,输出,函数的功能

之前我们频繁使用的printf()函数是一个“内置”的函数,也就是这个函数是编程语言自带的,或者提前定义好的.同时我们还可以根据自己的意愿自己编写函数,又叫自定义函数。

就像变量一样,函数也分为函数的定义和函数的使用,对于内置函数如printf()来说,我们可以直接使用。对于自定义函数来说,我们依旧需要先定义函数,然后再使用它。

1.函数的定义

1.1

下面我们来看看如何定义一个函数:

我们定义一个给任何输出的整数增加3,然后输出它的函数:

int AddThree(int nummber_a)
{number_a=number_a+3;return number_a;
}

1.函数输出的数据类  int

2.函数名  AddThree

3.函数的输入部分,这个输入的数据需要是整型int   int number_a

4.函数的具体代码,又称为函数体

5.函数的返回值,又称为函数的输出部分  return number_a;

第一部分是返回值的类型,就是使用这个函数的时候我们会返回一个什么数据类型的值,比如我们这里的函数就会返回一个int整型

int AddThree(int nummber_a)
{number_a=number_a+3;return number_a;
}

返回值类型里面我们可以看到除了之前学过的intfloat等等类型,

还有一个void,这个的意思是这个函数没有任何返回值

第二部分是函数的名字,又叫函数名,比如这里的函数名就是AddThree,函数名的命名规则和变量的命名规则一模一样

int AddThree(int nummber_a)
{number_a=number_a+3;return number_a;
}

第三部分是函数的输入部分,我们通过括号里的部分来给函数传入一些数据,比如这里的(int number_a)

int AddThree(int nummber_a)
{number_a=number_a+3;return number_a;
}

第四部分是函数的代码部分,又叫函数体,它用来实现函数的具体功能,比如这里的功能就是给一个数增加3:

int AddThree(int nummber_a)
{number_a=number_a+3;return number_a;
}

 函数体里面最需要注意的是返回值,它的关键字是return,返回的数据类型需要和函数一开始定义的的返回值数据类型保持一致

1.2

例如

int MultiTwo(int number_a)
{number_a=number_a*2;return number_a;  
}

2.函数的调用

2.1

调用函数的时候,我们需要使用函数名加括号内的参数的方式来使用它。

我们来调用上面定义的函数AddThree()

int a=10;
int b;
b=AddThree(a);
printf("%d\n",b);

1.定义变量a,并赋值10   

2.定义变量b   

3.调用函数AddThree(),并把返回值赋给b

int a=10;
int b;
b=AddThree(a);
printf("%d\n",b);

4.调用函数的过程,函数名AddThree(),以及输入的数据a

5.赋值符号,把函数调用的返回值赋值给变量b

6.打印变量b的值,这里会输出

2.2

函数调用就比函数的定义简单一些了,主要分为两部分,一部分是函数名,一部分是输入的数据

对于返回的数据,我们可以赋值给一个变量,也可以直接参与计算,还可以打印它,就像一个寻常的常量一样。

调用函数以后我们大多数时候会得到一个函数输出的内容,比如函数定义中的return number_a

但如果一个函数以void开头,这个函数就不会返回任何数值

所以返回值return关键字,并不是函数的必需部分,如果我们在函数中不写return,函数就不会返回任何值。

为什么编程中有函数这个机制呢?

因为函数可以降低代码的复杂度和代码的维护成本。
 

2.3

比如我们定义一个函数,它的功能是打印输入的整型数字五次。

Void PrintfFiveTimes(int number_a)
{printf("%d\n",int number_a);printf("%d\n",int number_a);printf("%d\n",int number_a);printf("%d\n",int number_a);printf("%d\n",int number_a);
}

如果我们没有这个函数,每次想要打印一个数字五次的时候,我们都需要调用五次printf(),这样代码就会很复杂。

有了PrintFiveTimes()函数以后,我们每次需要使用“打印五次”这个功能的时候,只需要调用这个函数就可以了,这样我们就降低了代码的复杂度

同时,如果我们忽然有一天想要把打印五次的数量,改成打印三次的话,没有函数的时候,我们需要把代码中所有“打印五次”的地方都进行修改

假设我们的代码中,如果有十个地方都使用了“打印五次”这个功能,我们就需要修改十处代码!

但我们使用函数的话,就可以只修改函数本身就可以了。也就是只修改一处代码。

这就是函数的第二个特点——降低代码维护成本

3.易错点

返回类型为void的函数没有返回值

对于函数,我们“先定义后使用”,函数的定义应该在main函数之前。

4.思维导图

最后我想说的是:

 在撰写这篇文章时,我参考了《白纸编程》这个app的观点和思想,我要感谢他们对我的启发和帮助。

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

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

相关文章

嵌入式学习笔记(28)按键和CPU的中断系统

按键的物理特性 (1)、平时没人按的时候,弹簧把按键按钮弹开。此时内部断开的。 (2)、有人按下的时候,手的力量克服弹簧的弹力,将按钮按下,此时内部保持接通(闭合)状态;如果手拿开,…

VSCode 安装使用教程 环境安装配置 保姆级教程

一个好用的 IDE 不仅能提升我们的开发效率,还能让我们保持愉悦的心情,这样才是非常 Nice 的状态 ^_^ 那么,什么是 IDE 呢 ? what IDE(Integrated Development Environment,集成开发环境)是含代码…

线性代数的本质(十)——矩阵分解

文章目录 矩阵分解LU分解QR分解特征值分解奇异值分解奇异值分解矩阵的基本子空间奇异值分解的性质矩阵的外积展开式 矩阵分解 矩阵的因式分解是把矩阵表示为多个矩阵的乘积,这种结构更便于理解和计算。 LU分解 设 A A A 是 m n m\times n mn 矩阵,…

论文阅读 - Outlier detection in social networks leveraging community structure

目录 摘要 1. Introduction 2. Related works 3. Preliminaries 3.1. 模块化度量 3.2. Classes of outliers 3.2.1. 点异常 3.2.2. Contextual anomalies 3.2.3. Collective anomalies 3.3. Problem definition 3.4. Outliers score 4. Methodology 4.1. Proposed appr…

86 # express 基本实现

koa 和 express 的区别 koa 内部原理使用 es6 来编写的(promise async await),express 是使用 es5 来编写的,内部是基于回调函数来实现express 内置了很多中间件(功能会比 koa 强大一些,内部集成了路由&a…

OPENCV--实现meanshift图像分割

Meanshift原理 效果图 API # -*- coding:utf-8 -*- """ 作者:794919561 日期:2023/9/13 """ import cv2 import numpy as npimg = cv2.imread("F:\\learnOpenCV\\openCVLearning\\pictures\\Lena.jpg

过拟合、欠拟合、泛化误差、训练误差

模型容量的影响: 泛化误差: 当训练的模型的容量过了最优点时,泛化误差反而升高,这是由于模型过于关注细节导致,模型也同时记住噪声;当拿来一个真的数据时,模型会被一些无关紧要的细节所干扰。 …

ASP.NET dotnet 3.5 实验室信息管理系统LIMS源码

技术架构:ASP.NET dotnet 3.5 LIMS作为一个信息管理系统,它有着和ERP、MIS之类管理软件的共性,如它是通过现代管理模式与计算机管理信息系统支持企业或单位合理、系统地管理经营与生产,最大限度地发挥现有设备、资源、人、技术的…

27.EI文章复现《高比例清洁能源接入下计及需求响应的配电网重构》

下载地址:高比例清洁能源接入下计及需求响应的配电网重构 1主要内容 该程序复现《高比例清洁能源接入下计及需求响应的配电网重构》,以考虑网损成本、弃风弃光成本和开关操作惩罚成本的综合成本最小为目标,针对配电网重构模型的非凸性&…

PyTorch实战-实现神经网络图像分类基础Tensor最全操作详解(一)

目录 前言 一、PyTorch数据结构-Tensor 1.什么是Tensor 2.数据Tensor使用场景 3.张量形态 标量(0D 张量) 向量(1D 张量) 矩阵(2D张量) 3D 张量与高维张量 二、Tensor的创建 1. 从列表或NumPy数组创建 2. 使用特定的初始…

5.10.WebRTC接口宏

那今天呢?我给大家介绍一下web rtc的接口宏,那之所以在现成的章节中要介绍接口宏。是由于接口在调用的过程中啊,会发生线程的切换,所以把接口宏这部分知识我们放在线程这一章还算比较合适的。 那另外呢,我们对于接口…

分库分表---理论

目录 一、垂直切分 1、垂直分库 2、垂直分表 3、垂直切分优缺点 二、水平切分 1、水平分库 2、水平分表 3、水平切分优缺点 三、数据分片规则 1、Hash取模分表 2、数值Range分表 3、一致性Hash算法 四、分库分表带来的问题 1、分布式事务问题 2、跨节点关联查询…

IT运维:利用数据分析平台采集Windows event log数据

概述 本文将介绍如何借助Winlogbeat和Vector在鸿鹄里采集Windows event log数据,使技术人员能够在鸿鹄里更便捷和高效地分析Windows event log数据。 操作步骤 Winlogbeat是一个开源的日志数据采集器,专门用于采集Windows操作系统中的event log数据。它可…

C语言之指针进阶篇(3)

目录 思维导图 回调函数 案例1—计算器 案例2—qsort函数 关于qsort函数 演示qsort函数的使用 案例3—冒泡排序 整型数据冒泡排序 回调函数搞定各类型冒泡排序 cmp_int比较大小 cmp传参数 NO1. NO2. 解决方案 交换swap 总代码 今天我们学习指针难点之回调函数…

支付宝小程序排名优化,一个小白的成长手记

那是一个风和日丽的周末早上,阳光透过窗帘洒进屋内,温暖了我的双脚。这是我加入新公司的第一个周末,我坐在桌前,满怀激情地准备开发我的第一个支付宝小程序。【名即薇】 经过两天两夜的奋战,我终于完成了一个初版的支付宝小程序。是一个集美食资讯、餐厅点评、外卖订餐于一体的…

连nil切片和空切片一不一样都不清楚?那BAT面试官只好让你回去等通知了。

连nil切片和空切片一不一样都不清楚?那BAT面试官只好让你回去等通知了。 问题 package mainimport ("fmt""reflect""unsafe" )func main() {var s1 []ints2 : make([]int,0)s4 : make([]int,0)fmt.Printf("s1 pointer:%v, s2 p…

两种方法教你在postman设置请求里带动态token

问题描述 在使用postman调试接口时,遇到一些需要在请求里加上token的接口,若token出现变化,需要手动修改接口的token值,带来重复的工作量,翻看postman使用手册后,我发现了两种方法可以解决这个问题。 01 …

MySQL之数据类型

目录 一、MySQL数据类型分类 二、数值类型 1、整数类型 2、bit类型 3、小数类型 三、字符串类型 1、char 2、varchar 3、char和varchar比较 四、日期和时间类型 五、enum和set 一、MySQL数据类型分类 MySQL 数据类型可以大致分为以下三类: 数值类型:用于…

git快速查看某个文件修改的所有commit

1. git blame file git blame 可以显示历史修改的每一行记录,有时候我们只想了解某个文件一共提交几次commit,只显示commit列表,这种方式显然不满足要求。 2.git log常规使用 (1)显示整个project的所有commit (2)显示某个文件的所有commit 这是git log不添加参数的常规…

.Net MVC 使用Areas后存在相同Controller时报错的解决办法; 从上下文获取请求的Area名及Controller名

先来说个额外的问题:如何在请求上下文(比如过滤器的中)获取请求对应的Area和Controller 名字?(假设请求上下文对象为 filterContext ): 1. 获取Area名: (string)filterContext.RouteData.DataTo…