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.hqwc.cn/news/108198.html

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

相关文章

获取Windows 10中的照片(旧版)下载

Windows 10中的新版照片应用,目前发现无法直接打开部分iOS设备上存储的照片。需要使用照片(旧版)才行。 但目前应用商店中无法直接搜索到照片(旧版),因此笔者提供如下链接,可以直接访问并呼出W…

C++零碎记录(十三)

23. 多态 23.1 多态简介 ① 多态是C面向对象三大特性之一。 ② 多态分为两类: 1. 静态多态:函数重载和运算符重载属于静态多态,复用函数名。 2. 动态多态:派生类和 虚函数实现运行时多态。 ③ 静态多态和动态多态区别&#xff…

通过 chatgpt 协助完成网站数据破解

Chatgpt 的出现极大地提升了程序员的工作效率,常见的使用场景包括代码自动生成、代码静态检查等,那么 chatgpt 能否用于某些网站的数据破解工作呢? 问题 某天线上服务开始报警,原来是某个视频网站无法获取到其 cdn 地址导致的下…

K8s上安装gitlab-ce

文章目录 K8s上安装gitlab-ce操作如下gitlab-deployment.yml K8s上安装gitlab-ce 前言   使用pv-pvc来持久化gitlab的数据,配置,日志文件。   pod启动后需要需要修改external_url然后重启pod。 操作如下 mkdir -p /mnt/data01/gitlab ctr -n k8s.…

内外统一的边缘原生云基础设施架构——火山引擎边缘云

近日,火山引擎边缘云边缘计算架构师郭少巍在LiveVideoStack Con 2023上海站围绕火山引擎边缘云海量分布式节点和上百T带宽,结合边缘计算在云基础设施架构方面带来的挑战,分享了面对海量数据新的应用形态对低时延和分布式架构的需求&#xff0…

数据通信网络之IPv6以太网二层交换

文章及资源归档至【AIShareLab】,回复 通信系统与网络 可获取。 文章目录 一、目的二、环境及网络拓扑三、需求四、步骤 一、目的 掌握 VLAN、Trunk 的基础配置。掌握以太网链路聚合的基础配置。掌握路由器子接口的配置,以及通过子接口实现 VLAN 之间互…

4.1.8- Web 应用程序使用的组件进行指纹识别

Web 应用程序使用的组件进行指纹识别 IDWSTG-INFO-08 总结 毫不夸张地说,几乎所有可以想象的Web应用程序的想法都已经投入开发。随着全球大量自由和开源软件项目的积极开发和部署,应用程序安全测试很可能会遇到完全或部分依赖于这些知名应用程序或框架…

[uniapp]踩坑日记 unexpected character > 1或‘=’>1 报错

在红色报错文档里下滑&#xff0c;找到Show more 根据提示看是缺少标签&#xff0c;如果不是缺少标签&#xff0c;看看view标签内容是否含有<、>、>、<号,把以上符合都进行以<号为例做{{“<”}}处理

Java多线程并发面试题

文章目录 Java并发基础并行和并发有什么区别&#xff1f;说说什么是进程和线程&#xff1f;Java线程创建方式&#xff1f;Runnable和Callable接口的区别&#xff1f;为什么调用start()方法时会执行run()方法&#xff0c;不直接调用run()方法&#xff1f;sleep()和wait()的区别&…

5.11.Webrtc接口的设计原理

在上节课中呢&#xff0c;我向你介绍了web rtc的接口宏&#xff0c;那有很多同学会产生疑问啊&#xff0c;那觉得web rtc为什么要把接口设计的这么复杂&#xff1f;还非要通过宏来实现一个代理类&#xff0c;再通过代理类来调用到web rtc内部。 那为什么要这么设计呢&#xf…

【计算机视觉 | 目标检测】干货:目标检测常见算法介绍合集(四)

文章目录 四十六、Parallel Feature Pyramid Network四十七、ScanSSD四十七、RetinaMask四十八、CornerNet-Saccade四十九、CentripetalNet五十、Fast Focal Detection Network五十一、CornerNet-Squeeze五十二、Paddle Anchor Free Network五十三、Human Robot Interaction Pi…

王道数据结构C语言顺序表基本操作实现

#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdbool.h> #define MaxSize 50 typedef struct {//顺序表(静态实现)int data[MaxSize];//顺序表元素int length;//顺序表当前长度 }SqList;//类型定义#define InitSize 100; typedef struct {//动态实…