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

news2024/10/8 14:32:57

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

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

  • 为什么要有函数?
  • 函数有哪些?
  • 怎么自定义函数以及获得函数的使用权?
  • 怎么对函数进行传参?
  • 函数中变量的作用域与生命周期
  • 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.coloradmin.cn/o/2196553.html

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

相关文章

[嵌入式Linux]—STM32MP1启动流程

STM32MP1启动流程 1.启动模式 STM32MP1等SOC支持从多种设备中启动&#xff0c;如EMMC、SD、NAND、NOR、USB、UART等。其中USB、UART是作为烧录进行启动的。 STM32MP1内部ROM中存储有一段出厂代码来进行判断从哪种设备中启动&#xff0c;上电后这段代码会被执行&#xff0c;这…

使用java函数逆序一个单链表

代码功能 定义了一个ListNode类&#xff0c;用于表示单链表的节点&#xff0c;每个节点包含一个整数值和一个指向下一个节点的引用。 在ReverseLinkedList类的main方法中&#xff0c;创建了一个包含从1到10的整数的单链表。 定义了一个printList方法&#xff0c;用于打印链表的…

基于JavaWeb开发的java springmvc+mybatis酒水商城管理系统设计和实现

基于JavaWeb开发的java springmvcmybatis酒水商城管理系统设计和实现 &#x1f345; 作者主页 网顺技术团队 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; &#x1f345; 文末获取源码联系方式 &#x1f4dd; &#x1f345; 查看下方微信号获取联系方式 承…

【JAVA基础】集合类之HashSet的原理及应用

近期几期内容都是围绕该体系进行知识讲解&#xff0c;以便于同学们学习Java集合篇知识能够系统化而不零散。 本文将介绍HashSet的基本概念&#xff0c;功能特点&#xff0c;使用方法&#xff0c;以及优缺点分析和应用场景案例。 一、概念 HashSet是 Java 集合框架中的一个重…

Spring Boot实现License生成与校验详解

​ 博客主页: 南来_北往 系列专栏&#xff1a;Spring Boot实战 在软件开发领域&#xff0c;License&#xff08;许可证&#xff09;机制是保护软件版权、控制软件使用范围的重要手段。通过为软件生成唯一的License&#xff0c;开发者可以确保只有合法用户才能使用软件&…

右键菜单添加 Open Tabby here

如果安装了Tabby&#xff0c;为了提高效率在鼠标右键菜单中添加Open Tabby here&#xff0c;可以通过按 win R&#xff0c;并输入regedit 回车打开注册表编辑器 计算机\HKEY_CLASSES_ROOT\Directory\Background\shell 然后在Shell下面新建项&#xff0c;名称为Tabby&#xf…

企业架构理论TOGAF从理论到实践:引领企业数字化转型的实践指南

在现代企业面临的数字化转型浪潮中&#xff0c;如何从战略层面实现技术与业务的全面融合&#xff0c;成为了众多企业的核心挑战。TOGAF&#xff08;The Open Group Architecture Framework&#xff09;不仅为企业提供了强大的理论框架&#xff0c;还通过实践验证了其在推动企业…

力扣 中等 39.组合总和

文章目录 题目介绍解法 题目介绍 解法 是216组合总和III链接的扩展 class Solution {List<List<Integer>> res new ArrayList<>();List<Integer> path new ArrayList<>();public List<List<Integer>> combinationSum(int[] can…

Windows 下安装mamba_ssm 记录,包括causal-conv1d和mamba-ssm

Windows 下安装mamba_ssm 记录 1 重要参考文献2 具体安装步骤3 一些提醒事项4 安装causal-conv1d5 安装mamba-ssm6 结果展示 1 重要参考文献 Window 下Mamba 环境安装踩坑问题汇总及解决方法 2 具体安装步骤 重点看的是这篇 Window 下Mamba 环境安装踩坑问题汇总及解决方法 …

【Redis】持久化(下)-- AOF

文章目录 AOF概念如何使用AOFAOF工作流程命令写入演示文件同步策略 AOF的重写机制概念触发重写机制AOF重写流程 启动时数据恢复混合持久化总结 AOF 概念 AOF持久化:以独立日志的方式记录每次的写命令,重启时再重新执行AOF文件中的命令达到恢复数据的目的.AOF的主要作用是解决…

工行企业网银U盾展期后有两个证书问题的解决方法

工行企业网银U盾证书快到期后&#xff0c;可以自助展期&#xff0c;流程可以根据企业网银提示页面操作。操作后&#xff0c;可能存在两个新旧两个证书并存的情况&#xff0c;致使网银转账等操作失败&#xff0c;如图&#xff1a; 其原因是新证书生成后&#xff0c;旧证书没有删…

wsl配置图形显示环境 no $display environment variable

wsl运行fsl&#xff0c;安装好之后&#xff0c;可以使用bet&#xff0c;等命令行进行操作&#xff0c;但是不能使用fsl呼出窗口。 因为 wsl并不像原生linux具有destop桌面&#xff0c;它只有命令行。所以当运行fsl的时候会报错&#xff0c; application-specific initializat…

裁掉数千人、把工作外包给 AI!一年多后,这家巨头的 CEO恳求无人搭理

“对&#xff0c;裁掉几千名员工。” “好的&#xff0c;头儿。” “很好&#xff0c;那么这个人工智能可以做那些前雇员能做的一切事情&#xff1f;” “不&#xff0c;不全是。” “等等&#xff0c;什么&#xff1f;” “你刚刚裁掉的几百人都是硬件工程师&#xff0c;…

k8s的pod的管理和优化

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

Kubernetes--深入理解Pod资源管理

文章目录 kubectl --helpapi-resourcesapi-versionskubectl explain ... API资源资源规范PodServiceConfigMapSecret 显示资源删除资源详细描述RESTful API Pod资源管理Pod的核心概念Pod资源配置了解Pod运行状况Kubectl get pods xxxxkubectl describe pods xxxkubectl logs -f…

如何彻底掌握 JavaScript 23种设计模式

设计模式是解决特定问题的常用解决方案&#xff0c;它们可以帮助开发者编写更清晰、可维护、可扩展的代码。在 JavaScript 中&#xff0c;常见的设计模式可以分为三大类&#xff1a;创建型模式、结构型模式 和 行为型模式。本文将全面介绍 JavaScript 中常见的设计模式&#xf…

性能剖析利器-Conan|得物技术

作者 / 得物技术 - 仁慈的狮子 目录 一、背景 1. 局限性 2. 向前一步 二、原理剖析 1. 系统架构 2. 工作模式 3. reporter 三、稳定性验证 四、案例分析 五、写在最后 一、背景 线上问题的定位与优化是程序员进阶的必经之路&#xff0c;常见的问题定位手段有日志排查、分布式链…

脑机接口技术的未来与现状:Neuralink、机械手臂与视觉假体的突破

近年来&#xff0c;脑机接口&#xff08;BCI&#xff09;技术发展迅速&#xff0c;不仅限于科幻小说和电影&#xff0c;已经逐步进入现实应用。特别是马斯克的Neuralink公司推出的“盲视&#xff08;Blindsight&#xff09;”设备&#xff0c;最近获得了FDA的突破性设备认定&am…

IEC104规约的秘密之八----应用任务优先级

所谓应用任务优先级&#xff0c;就是同时出现不同的应用任务时&#xff0c;优先发哪个报文。这里有一个表格&#xff0c;可以做为参考&#xff0c;一般是在子站来实现&#xff0c;子站是数据提供方&#xff0c;需要对各种任务的优先级进行排序&#xff0c;以满足应用的实际需要…

为什么Linux系统下的程序无法在Windows下运行

两个系统的格式不同&#xff0c;格式就是协议&#xff0c;是在固定位置有意义的数据。Linux下可执行文件格式是elf&#xff0c;可使用readelf查看elf文件头 而Windows下的可执行程序是PE格式&#xff0c;是一种可执行文件。 还有一点是Linux下和Win下系统API不同&#xff0c;这…