C(十五)函数综合(一)--- 开公司吗?

在这篇文章中,杰哥将带大家 “开公司”。

主干内容部分(你将收获):👉

  • 为什么要有函数?
  • 函数有哪些?
  • 怎么自定义函数以及获得函数的使用权?
  • 怎么对函数进行传参?
  • 函数中变量的作用域与生命周期
  • return 的作用
  • 开公司 ---- 猜数字股份有限公司(总公司、菜单分工厂、游戏运营分工厂)

附加认知内容(穿插在主干内容中):👉

  • .c 文件(源文件)和.h文件(头文件)各自的作用是什么?
  • #include <>和#include “”的区别是什么?
  • 小小地认识一下指针

一、 为什么要有函数?

函数 --- “模块化工厂”!!!

当你的手机公司越做越大时,你希望有个工厂车间专门给公司生产手机的某些零件。

进行功能的分组与专门化,来提高效率、使得便于管理。

同理,当你设计成千上万行代码时,实现功能的分区(加、交换数值······)尤其重要。

二、函数有那些?

  • 库函数(C语言标准库提供)

如:scanf 、printf  ---- 使用时需要包含头文件(头文件中有函数的声明)

  • 自定义函数 

提示1: 

  • #include <>和#include “”的区别是什么?

include < >:用于包含标准库头文件。编译器会在系统预设的标准库头文件路径中查找。

如:C语言标准库的头文件优先查找。
include "":用于包含自定义头文件。编译器先在当前源文件所在目录查找,若找不到才会去系统预设路径查找。 

如:自定义的add.h等等优先

提示2:

  • .c 文件(源文件)和.h文件(头文件)各自的作用是什么?

 源文件 --- 函数的定义

头文件 ---- 函数的声明 、变量的创建······

这样的优点:大家可以分工写代码,如小王写add.c,小李写swap.c,而不是都在test.c中写

三、怎么自定义函数以及获得函数的使用权? 

1、怎么自定义函数?

返回值类型  函数名(形参1,形参2,······)
{函数体
}

1.1 返回值类型

返回值类型 就是你希望你的 “工厂 ”所生产的产品的型号 、尺码类型 ,如:int 、char 、int*(整型的地址)······ 如果没有返回值 ,就写void

1.2函数名

可以取有意义的名字!!!!!

比如:add、swap 、pai_xu 

意思分别是加、交换、排序

2、怎么获得函数的使用权?(定义 + 声明 + 调用)

声明 --- 告诉电脑函数的存在

调用 --- 格式如下

  • 无返回值

如:swap(实参1,实参2,······);

  • 有返回值

如:int sum = add(实参1,实参2,······);

如果函数放在main函数(main为程序的入口)前面👉 --- 定义函数的同时就是在声明

 #include <stdio.h>int sum(int a, int b) //在main前面定义函数,默认已经电脑函数的存在,相当于同时也声明了{return a + b;}int main(){int c = sum(1, 4); // 调用return 0;}

如果函数放在main函数(main为程序的入口)后面👉 --- 需要单独声明

#include <stdio.h>
int sum(int a, int b) ;//声明
int main(){int c = sum(1, 4); // 调用return 0;}
//定义int sum(int a, int b) {return a + b;}

四、怎么对函数进行传参?

 1、传值

代码示例: 👉

 #include <stdio.h>int sum(int a, int b) {return a + b;}int main(){int c = sum(1, 4); return 0;}

注意事项:👉

传值方式

将实参的值拷贝给函数或方法,在函数内对形参进行操作,操作的对象是实参的拷贝对实参本身没有影响,在函数结束返回后,形参被丢弃释放,实参的内容不会被改变。

示例如下:

得不到预期结果!!!!!!!!!那么,接下来我们要用”传地址“来解决这个问题。

2、传地址 

传址方式:将实参的地址传递给函数,在函数内对形参进行操作等同于对实参进行相同的操作,在函数调用结束返回后,形参被释放,实参的内容是对形参进行操作后的结果。

改进后的代码示例:👉

其中,x,y为指针变量,先简单知道说x,y可以用来存放地址即可。

*为解引用操作符 --- 用来取出存放在该地址的数值。

五、函数中变量的作用域与生命周期

以下图片来自(详情👉链接)

https://blog.csdn.net/2401_87025655/article/details/142599960

说明生命周期的又一个例子

*p的值为任意值,如:-837298272``````

至于原理👉

B站-->黑马程序员 -->视频(如下)-->P116 指针-03-第一个作用的细节

六、return的作用 

tip:return 后面可以是数、变量,也可以 3 + 5 ,a + b ,(a > b ? a : b)······

 1、作用一:(类似与if - else的作用)

#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>
int max(int x, int y)
{if (x > y)return x;return y;
}
int main()
{int a = 10;int b = 20;int c = max(a,b);printf("%d", c);return 0;
}

如果return x执行,那么return y没有机会执行。(每次调用函数只能由一个return被执行)

2、作用二:“ return;”可以起提前终止函数的作用

如:

自定义一个函数判断一个正数与5的大小关系,而如果输入0、-3等等不符合要求的数据,可以提前终止函数。

代码示例👉

#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>
void judge(int x)
{if (x <= 0)return;else{if (x > 5)printf("比5大\n");if (x < 5)printf("比5小\n");if (x == 5)printf("等于5\n");}
}
int main()
{int a = 0;scanf("%d", &a);judge(a);return 0;
}

七、开公司 ---- 猜数字股份有限公司(总公司、菜单分工厂、游戏运营分工厂) 

#include<stdio.h>
#include<stdlib.h>
#include<time.h>void menu()  //1、菜单分工厂
{printf("******************\n");printf("**** 1.play ******\n");printf("**** 0.exit ******\n");printf("******************\n");
}void game() //2、游戏运营分工厂
{int r = rand() % 100 + 1; int guess = 0;int count = 5;while (count) {printf("你还有%d次机会\n", count);printf("请猜数字:");scanf("%d", &guess);if (guess < r){printf("猜小了");}else if (guess > r){printf("猜大了");}else{printf("恭喜你,猜对了!!!\n");break;}count--;}if (count == 0){printf("你失败了,正确答案是%d", r);}}int main() //3、总公司
{int input = 0;srand((unsigned)time(NULL));do{menu();printf("请选择");scanf("%d", &input);switch (input){case 1:game();break;case 0:printf("游戏结束");break;default:printf("选择错误,请重新选择!!!!\n");break;}} while (input);return 0;
}

游戏的底层原理(另一位作者写的,他写的很好,我就不赘述了。)👉

https://blog.csdn.net/cz382487322/article/details/134166634?ops_request_misc=%257B%2522request%255Fid%2522%253A%25229CFCBA20-F1C4-4B8A-BF5F-D3F7ABA1AFA8%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=9CFCBA20-F1C4-4B8A-BF5F-D3F7ABA1AFA8&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-134166634-null-null.142^v100^pc_search_result_base9&utm_term=%E7%8C%9C%E6%95%B0%E5%AD%97&spm=1018.2226.3001.4187

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

C语言 | Leetcode C语言题解之第462题最小操作次数使数组元素相等II

题目&#xff1a; 题解&#xff1a; static inline void swap(int *a, int *b) {int c *a;*a *b;*b c; }static inline int partition(int *nums, int left, int right) {int x nums[right], i left - 1;for (int j left; j < right; j) {if (nums[j] < x) {swap(…

Linux 外设驱动 应用 1 IO口输出

从这里开始外设驱动介绍&#xff0c;这里使用的IMX8的芯片作为驱动介绍 开发流程&#xff1a; 修改设备树&#xff0c;配置 GPIO1_IO07 为 GPIO 输出。使用 sysfs 接口或编写驱动程序控制 GPIO 引脚。编译并测试。 这里假设设备树&#xff0c;已经配置好了。不在论述这个问题…

【英语】5. 考研英语语法体系

文章目录 前言句字的成分一、常规句型简单句&#xff08;5 种&#xff09;1. 定义&#xff1a;句子中只包含 *一套主谓结构* 的句子。&#xff08;一个句子只能有一个谓语动词&#xff09;2. 分类 并列句&#xff08;由关联词组成&#xff09;&#xff08;3 种&#xff09;基本…

二分图算法总结 C++实现

总体概念 染色法 基本思路步骤 将所有的边及其相接的边用邻接表存储起来&#xff1b;遍历所有的点&#xff0c;找到未上色的点&#xff1b;用BFS将该点及其相接的点迭代上色&#xff1b;在上述染色步骤中&#xff0c;如果相邻点的颜色相同则无法形成二分图&#xff1b; 题目…

继电保护之电压重动、电压并列和电压切换

实践&#xff1a;以某开关室10kV母联隔离柜为例&#xff1a; ZYQ-824为PT并列装置&#xff0c;装置内包含一系列继电器&#xff0c;用于PT重动及并列。按照装置编号原则&#xff0c;交流电压切换箱一般命名为7n。 ​下图为装置内继电器线圈部分接线&#xff1a; 下图为装置内…

销售秘籍:故事+观点+结论

在销售的浩瀚宇宙中&#xff0c;隐藏着一个不朽的秘诀——利用人类共有的“错失恐惧”&#xff0c;激发客户内心的渴望与行动。正如村上春树所言&#xff0c;每个故事都深深植根于灵魂&#xff0c;而大仲马则揭示&#xff0c;灵魂之眼所见&#xff0c;比肉眼更为长久铭记。 错…

如何将数据从 AWS S3 导入到 Elastic Cloud - 第 1 部分:Elastic Serverless Forwarder

作者&#xff1a;来自 Elastic Hemendra Singh Lodhi 这是多部分博客系列的第一部分&#xff0c;探讨了将数据从 AWS S3 导入 Elastic Cloud 的不同选项。 Elasticsearch 提供了多种从 AWS S3 存储桶导入数据的选项&#xff0c;允许客户根据其特定需求和架构策略选择最合适的方…

Mysql锁机制解读(敲详细)

目录 锁的概念 全局锁 表级锁 表锁 元数据锁 意向锁 锁的概念 全局锁 表级锁 表锁 元数据锁 主要是对未提交事务&#xff0c;修改表结构造成表结构混乱&#xff0c;进行控制。 在不涉及表结构变化的情况下,元素锁可以忽略。 意向锁 避免有行级锁影响加表级锁&#xff0…

YoloV9改进策略:BackBone改进|CAFormer在YoloV9中的创新应用,显著提升目标检测性能

摘要 在目标检测领域,模型性能的提升一直是研究者和开发者们关注的重点。近期,我们尝试将CAFormer模块引入YoloV9模型中,以替换其原有的主干网络,这一创新性的改进带来了显著的性能提升。 CAFormer,作为MetaFormer框架下的一个变体,结合了深度可分离卷积和普通自注意力…

​.NET一款反序列化执行命令的白名单工具

01阅读须知 此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等&#xff08;包括但不限于&#xff09;进行检测或维护参考&#xff0c;未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失&#xf…

Unity_Obfuscator Pro代码混淆工具_学习日志

Unity_Obfuscator Pro代码混淆工具_学习日志 切勿将密码或 API 密钥存储在您附带的应用程序内。 混淆后的热更新暂时没有想到怎么办 Obfuscator 文档 https://docs.guardingpearsoftware.com/manual/Obfuscator/Description.html商店链接Obfuscator Pro&#xff08;大约$70&a…

sqli-labs靶场第三关less-3

sqli-labs靶场第三关less-3 1、确定注入点 http://192.168.128.3/sq/Less-3/?id1 http://192.168.128.3/sq/Less-3/?id2 有不同回显&#xff0c;判断可能存在注入&#xff0c; 2、判断注入类型 输入 http://192.168.128.3/sq/Less-3/?id1 and 11 http://192.168.128.3/sq/L…

Nginx07-静态资源访问

零、文章目录 Nginx07-静态资源访问 1、Nginx解决跨域问题 &#xff08;1&#xff09;同源策略 同源策略&#xff08;Same-Origin Policy&#xff09;是一个关键的网络安全概念&#xff0c;由Netscape公司在1995年引入&#xff0c;现在被所有现代浏览器所采用。它限制了从一…

每日一题|871. 最低加油次数|动态规划、内层逆序遍历

题目分析&#xff1a;找到第一个能够实现当前油量能够行驶的最大距离大于等于目标距离&#xff0c;且加油次数最小的加油站和加油次数。 每次加油之后能够行驶的最大距离都是由上一次加油的距离决定的&#xff0c;因此使用dp。 1、dp数组定义 dp[i]是一个一维数组&#xff0…

毕业设计项目 深度学习安全帽佩戴检测(源码+论文)

文章目录 0 前言1 项目运行效果2 设计概要3 最后 0 前言 &#x1f525;这两年开始毕业设计和毕业答辩的要求和难度不断提升&#xff0c;传统的毕设题目缺少创新和亮点&#xff0c;往往达不到毕业答辩的要求&#xff0c;这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师…

keras yolo8目标检测

是从coco数据集提取其中的veh_ids[3,6,8,10] labels[car,bus,truck,traffic light]来做目标检测,分别表示汽车,公交车&#xff0c;卡车&#xff0c;交通灯,用的backbone keras_cv.models.YOLOV8Backbone.from_preset( "yolo_v8_m_backbone_coco" ),不用预训练…

JVM 内存区域 堆

堆是JVM中相当核心的内容&#xff0c;因为堆是JVM中管理的最大一块内存区域&#xff0c;大部分的GC也发生在堆区&#xff0c;那接下来就让深入地探究一下JVM中的堆结构。 需要明确&#xff0c;一个JVM实例只存在一个堆内存&#xff0c;堆区在JVM启动的时候就被创建&#xff0c…

(贪心) 反悔贪心之反悔堆

文章目录 ⭐例题&#x1f6a9;题意与思路 ⭐返回贪心&#x1f6a9;原理&#xff08;反悔池&#xff09;&#x1f6a9;落实到题&#x1f6a9;AC code ⭐练习题⭐END&#x1f31f;交流方式 ⭐例题 经典例题&#xff1a; 871. 最低加油次数 &#x1f6a9;题意与思路 题意&#xf…

MATLAB与R语言在建模中的合作与应用(下篇)

目录 目录 模型训练的协同使用 1. 使用 R 语言进行统计建模 2. 使用 MATLAB 进行机器学习建模 模型评估与调优 1. 在 R 中评估模型性能 2. 在 MATLAB 中进行模型优化 实战示例&#xff1a;MATLAB 与 R 的协同建模 总结 在上篇文章中&#xff0c;我们介绍了 MATLAB 和 R…

2024兴国专转本长期集训产品发布!

9月13日&#xff0c;兴国教育2024长期集训产品发布会在江苏南京顺利召开。 成立于2002年的兴国品牌&#xff0c;时至今日&#xff0c;已经走过了二十二年。兴国新媒体发言人祁老师在发布会上&#xff0c;为大家介绍了兴国这二十年来的变化。 截至2024年8月&#xff0c;兴国在全…