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.mfbz.cn/a/889411.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

springboot kafka多数据源,通过配置动态加载发送者和消费者

前言 最近做项目&#xff0c;需要支持kafka多数据源&#xff0c;实际上我们也可以通过代码固定写死多套kafka集群逻辑&#xff0c;但是如果需要不修改代码扩展呢&#xff0c;因为kafka本身不处理额外逻辑&#xff0c;只是起到削峰&#xff0c;和数据的传递&#xff0c;那么就需…

FastAPI框架使用枚举来型来限定参数、FastApi框架隐藏没多大意义的Schemes模型部分内容以及常见的WSGI服务器Gunicorn、uWSGI了解

一、FastAPI框架使用枚举来型来限定参数 FastAPI框架验证时&#xff0c;有时需要通过枚举的方式来限定参数只能为某几个值中的一个&#xff0c;这时就可以使用FastAPI框架的枚举类型Enum了。publish:December 23, 2020 -Wednesday 代码如下&#xff1a; #引入Enum模块 from fa…

Python常用的函数大全!

对Python的内置函数进行了非常详细且有条理的分组和描述。 第一组 print()&#xff1a;用于输出信息到控制台。input()&#xff1a;用于从用户那里接收输入。len()&#xff1a;返回对象&#xff08;如字符串、列表、元组等&#xff09;的长度。类型转换函数&#xff08;int()…

YOLOv11改进策略【损失函数篇】| 利用MPDIoU,加强边界框回归的准确性

一、背景 目标检测和实例分割中的关键问题&#xff1a; 现有的大多数边界框回归损失函数在不同的预测结果下可能具有相同的值&#xff0c;这降低了边界框回归的收敛速度和准确性。 现有损失函数的不足&#xff1a; 现有的基于 ℓ n \ell_n ℓn​范数的损失函数简单但对各种尺度…

vSAN06:ESA与OSA对比、ESA安装、新架构、工作方式、自动策略管理、原生快照、数据压缩、故障处理

目录 vSAN ESAvSAN ESA 安装ESA新架构ESA工作方式ESA自动策略管理自适应RAID5策略 原生快照支持数据压缩的改进ESA故障处理 vSAN ESA vSAN ESA 安装 流程和OSA完全一致&#xff0c;但要注意要勾选启用vSAN ESA ESA和OSA的底层架构不一样&#xff0c;但是UI上是一致的。 生产环…

使用Python编写你的第一个算法交易程序

背景 Background ​ 最近想学习一下量化金融&#xff0c;总算在盈透投资者教育&#xff08;IBKRCampus&#xff09;板块找到一篇比较好的算法交易入门教程。我在记录实践过程后&#xff0c;翻译成中文写成此csdn博客&#xff0c;分享给大家。 ​ 如果你的英语好可以直接看原文…

2024百度云智大会|百度大模型内容安全合规探索与实践

9月25日&#xff0c;2024百度云智大会在北京举办。会上&#xff0c;百度智能云分别针对算力、模型、AI 应用&#xff0c;全面升级百舸 AI 异构计算平台 4.0、千帆大模型平台 3.0 两大 AI 基础设施&#xff0c;并升级代码助手、智能客服、数字人三大 AI 原生应用产品。 在大模型…

[uni-app]小兔鲜-08云开发

uniCloud可以通过JS开发服务端,包含云数据库, 云函数, 云存储等功能, uniCloud可结合 uni-ui 组件库使用 效果展示: <picker>城市选择组件不支持h5端和APP端, 所以我们使用 <uni-data-picker>组件进行兼容处理 <uni-data-picker>的数据使用云数据库的数据 云…

K8s中pod的管理和优化

一、k8s中的资源 1.1 资源管理介绍 在kubernetes中&#xff0c;所有的内容都抽象 资源&#xff0c;用户需要通过操作资源来管理kubernetes。kubernetes的本质上就是一个集群系统&#xff0c;用户可以在集群中部署各种服务所谓的部署服务&#xff0c;其实就是在kubernetes集群中…

【D3.js in Action 3 精译_030】3.5 给 D3 条形图加注图表标签(下):Krisztina Szűcs 人物专访 + 3.6 本章小结

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第一部分 D3.js 基础知识 第一章 D3.js 简介&#xff08;已完结&#xff09; 1.1 何为 D3.js&#xff1f;1.2 D3 生态系统——入门须知1.3 数据可视化最佳实践&#xff08;上&#xff09;1.3 数据可…

Hive3.x版本调优总结

文章目录 第 1 章 Explain 查看执行计划&#xff08;重点&#xff09;1.1 创建测试用表1&#xff09;建大表、小表和 JOIN 后表的语句2&#xff09;分别向大表和小表中导入数据 1.2 基本语法1.3 案例实操 第 2 章 Hive 建表优化2.1 分区表2.1.1 分区表基本操作2.1.2 二级分区2.…

WMS系统拣货管理的优化与创新

一、WMS系统拣货管理的重要性 随着电子商务的快速发展&#xff0c;物流仓储行业面临着巨大的挑战。订单量的激增导致传统的手工拣货方式难以满足需求&#xff0c;而WMS系统的引入则解决了这一问题。通过WMS系统&#xff0c;仓库可以实现自动化、智能化的拣货管理&#xff0c;大…

小米路由器R3Gv2安装openwrt记录

前言 小米路由器R3Gv2的硬件配置与小米路由器4A千兆版一致&#xff0c;但bootloader有所不同&#xff0c;因此openwrt的固件不要互刷。另外&#xff0c;R3Gv2和R3G、4A百兆版是不同的设备&#xff0c;切勿混淆。 硬件信息 OpenWrt参数页-Xiaomi MiWiFi 3G v2 CPU&#xff1a…

小猿口算APP脚本(协议版)

小猿口算是一款专注于数学学习的教育应用,主要面向小学阶段的学生。它提供多种数学练习和测试,包括口算、速算、应用题等。通过智能化的题目生成和实时批改功能,帮助学生提高数学计算能力。此外,它还提供详细的学习报告和分析,帮助家长和教师了解学生的学习进度和薄弱环节…

[含文档+PPT+源码等]精品大数据项目-基于python爬虫实现的大数据岗位的挖掘与分析

大数据项目——基于Python爬虫实现的大数据岗位的挖掘与分析&#xff0c;其背景主要源于以下几个方面&#xff1a; 一、大数据时代的来临 随着互联网、物联网、云计算等技术的快速发展&#xff0c;数据呈现出爆炸式增长。根据国际数据公司&#xff08;IDC&#xff09;的预测&…

新电脑 Windows 系统初始配置

文章目录 前言1 前置配置2 安装软件2.1 通讯工具2.2 后端开发工具2.3 硬件开发工具2.4 前端开发工具2.4 其它工具 3 Windows 11 优化4 写在最后 前言 分区&#xff08;个人习惯&#xff09;&#xff1a;1TB SSD 分为 2 个分区&#xff0c;一个 256GB 分区为系统盘&#xff0c;剩…

003 Springboot操作RabbitMQ

Springboot整合RabbitMQ 文章目录 Springboot整合RabbitMQ1.pom依赖2.yml配置3.配置队列、交换机方式一&#xff1a;直接通过配置类配置bean方式二&#xff1a;消息监听通过注解配置 4.编写消息监听发送测试5.其他类型交换机配置1.FanoutExchange2.TopicExchange3.HeadersExcha…

【AIGC】寻找ChatGPT最佳推理步骤:CoT思维链技术的探索与应用

博客主页&#xff1a; [小ᶻZ࿆] 本文专栏: AIGC | ChatGPT 文章目录 &#x1f4af;前言&#x1f4af;CoT思维链概述&#x1f4af;CoT思维链在大型语言模型中的应用&#x1f4af;CoT思维链改变对模型推理能力的理解和改进方式多样化应用场景挑战与未来发展总结 &#x1f4a…

力扣 前缀和

找子数组的个数了解前缀和的基础。 前缀和大致理解为到达某个位置&#xff0c;前面几个数的总和&#xff0c;即s[i1]s[i]a[i1]&#xff0c;可以通过一次循环获得。然后几个前缀和作差&#xff0c;即可得到某个位置到某个位置的和&#xff0c;根据map的键值对进行更新次数。 题…

【JavaEE】——回显服务器的实现

阿华代码&#xff0c;不是逆风&#xff0c;就是我疯 你们的点赞收藏是我前进最大的动力&#xff01;&#xff01; 希望本文内容能够帮助到你&#xff01;&#xff01; 目录 一&#xff1a;引入 1&#xff1a;基本概念 二&#xff1a;UDP socket API使用 1&#xff1a;socke…