C语言第八课-----函数定义和使用的延续

news2024/11/26 2:07:40

作者前言
                                

                 个人主页::小小页面

                 gitee页面:秦大大

                一个爱分享的小博主 欢迎小可爱们前来借鉴

__________________________________________________________

  目录

        1.复习

                库函数

                自定义函数

                函数参数

                函数调用

                函数的嵌套调用和链式访问

        2. 函数的声明和定义

        3. 函数递归

_____________________________________________________

插播小知识

1.在前面中我简单的画出C语言的内存大概分布

2. 函数具有外部链接属性


在上一篇博客中我们简单的介绍了函数的定义 ,分类 ,调用,下面我们简单的复习一下

  库函数

简单的说就是c语言编译厂商提供的常用的函数,支持可移植性和提高程序的效率方便程序员 进行软件开发

http://www.cplusplus.com

  自定义函数

ret_type fun_name(para1, * )
{
 statement;//语句项
}
ret_type 返回类型
fun_name 函数名
para1    函数参数

按照C语言的标准进行创建的具有某些功能的代码块

  函数参数

        1.实际参数(实参)

               调用函数传入的变量或者其他数值

          2.形式参数(形参)

                自定义函数时定义的变量

  函数调用

        函数使用之前要先声明再使用

        1.传值调用

                函数的形参和实参分别占有不同内存块,对形参的修改不会影响实参。

        2.传址调用

                传址调用是把函数外部创建变量的内存地址传递给函数参数的一种调用函数的方式。这种方式会影响外部变量,可以让函数和函数外边的变量建立起真正的联系,也就是函数内部可以直接操 作函数外部的变量。

   函数的嵌套调用和链式访问

        嵌套调用

                简单的说就是再函数里面调用函数,注意一下函数里面不能定义函数

        链式访问
                 把一个函数的返回值作为另外一个函数的参数。
下面我们进入函数的最后一点内容,

函数的声明和定义

函数声明:
1. 告诉编译器有一个函数叫什么,参数是什么,返回类型是什么。但是具体是不是存在,函数
声明决定不了。
2. 函数的声明一般出现在函数的使用之前。要满足 先声明后使用
3. 函数的声明一般要放在头文件中的

函数定义

一般函数的定义在c文件,声明在头文件

vs2022的集成开发环境文件的链接的实现

 把代码拆成.c .h文件的好处

1.多人协作

2.代码保护

函数递归(递推加回归)

程序调用自身的编程技巧称为递归,把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,

递归策略

只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。 递归的主要思考方式在于:把大事化小

简单递归1:

#include<stdio.h>
int main()
{
	printf("1\n");
	main();
	return 0;
}
递归的两个必要条件
1. 存在限制条件,当满足这个限制条件的时候,递归便不再继续。
2.每次递归调用之后越来越接近这个限制条件。
练习1
输入: 1234 ,输出 1 2 3 4
#include<stdio.h>
void Print(int a)
{
	printf("%d", a % 10);
	if (a / 10)
	{
		Print(a / 10);
	}
	
}
int main()
{
	int n = 0;
	scanf("%d", &n);
	Print(n);
}

函数之所以能实现递归,是因为函数调用的时候会创建了一个函数栈帧(内存上的一块区域),函数调用开始,函数栈帧创建,函数调用结束,栈帧销毁

 这就是n = 1234 创建栈帧的简单过程 

编写函数不允许创建临时变量,求字符串的长度。
#include <stdio.h>
//int  strlen(char arr[])
//{
//	if (arr[0] != '\0')
//	{
//		return 1 + strlen(arr + 1);
//	}
//	return 0;
//}
int main()
{
	//递归和非递归分别实现strlen
	
	char arr[30];
	printf("输入字符串:>");
	scanf("%s", &arr);
	//int sum = strlen(arr);
	
	int sum = 0;
	
	int i = 0;
	for (i = 0; ; i++)
	{
		if (arr[i] != '\0')
		{
			sum++;
			continue;
		}
		break;
	}

	printf("%d", sum);
	return 0;
}

递归与迭代

当我们在使用递归无法解决的时候,可以想想使用迭代,下面我们写一下n的阶乘

#include <stdio.h>
int  fac(a)
{
	if (a == 1)
	{
		return 1;
	}
	return a * fac(a - 1);
}
int main()
{
	int a = 0;
	printf("输入数字:>");
	scanf("%d", &a);
	int num = fac(a);
	printf("%d", num);
	return 0;
}

上述方法在运算较大数值就很费时间了,主要还有栈溢出的情况,

 

所以我们要考虑迭代

#include<stdio.h>
int main()
{
	int a = 0;
	scanf("%d", &a);
	int i = 0;
	int sum = 0;
	int num = 1; 
	for (i = 1; i <= a; i++)
	{
		sum = i * num;
		num = sum;
	}
	printf("%d", sum);

	return 0;
}

迭代就不会有栈溢出的情况

求第 n 个斐波那契数。

 

#include<stdio.h>
int main()
{
	int a = 0;
	scanf("%d", &a);
	int i = 1;
	int j = 1;
	int sum = 0;
	if (a <= 2)
	{
		printf("%d", i);
		return 0;
	}
	while (a >= 3)
	{
		sum = i + j;
		i = j;
		j = sum;
		a--;	
	}
	printf("%d", sum);
	return 0;
}

总结:

这里函数的介绍就到这里结束了,有不懂的小可爱可以来私聊我

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

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

相关文章

SQL-每日一题【601.体育馆的人流量】

题目 表&#xff1a;Stadium 编写一个 SQL 查询以找出每行的人数大于或等于 100 且 id 连续的三行或更多行记录。 返回按 visit_date 升序排列 的结果表。 查询结果格式如下所示。 示例 1: 解题思路 前置知识 自然连接 自连接可以理解为自己连接自己&#xff0c;在一张表上…

【JAVASE】初识JAVA语言

⭐ 作者&#xff1a;小胡_不糊涂 &#x1f331; 作者主页&#xff1a;小胡_不糊涂的个人主页 &#x1f4c0; 收录专栏&#xff1a;浅谈Java &#x1f496; 持续更文&#xff0c;关注博主少走弯路&#xff0c;谢谢大家支持 &#x1f496; 初识JAVA 1. Java语言概述1.1 Java是什么…

5月PMP成绩开始公布,你收到邮件了吗?

出&#xff01;成&#xff01;绩&#xff01;啦&#xff01; 分数公布啦&#xff01; 你&#xff01; 收到通过邮件了吗&#xff01; 等了好久终于等到今天&#xff01;心心念念的PMP考试成绩今天终于公布了&#xff01;凌晨五点开始就陆续听到了不少学员通过认证考试的消息…

模型构建——使用逻辑回归构建模型,lightGBM进行特征筛选

1、模型构建流程 1.1 实验设计 新的模型要跟原有方案对比&#xff0c;而且是通过实验证明&#xff0c;特别注意模型和策略不能同时调整。一般实验设计包含以下流程&#xff1a; 问题&#xff1a;业务稳定后&#xff0c;可以去掉人工审核吗&#xff1f; 答&#xff1a;不可以…

PHP百度小程序rtc-room组件token获取经历

【前言】 目前就职盘古网络集团&#xff0c;一名PHPer程序员。我们的主营业务是百度产品相关&#xff0c;所以最近有了一个百度小程序项目&#xff0c;涉及其音视频组件做直播。 开发文档 百度智能小程序文档 鉴权token 百度智能小程序文档 嗯&#xff0c;很好的功能。结果测…

Keil系列教程06_工程目标选项配置(二)

1写在前面 本文接着上一篇文章《Keil系列教程05_工程目标选项配置&#xff08;一&#xff09;》讲述的工程目标选项的后五项配置&#xff1a;C/C编译、 Asm汇编、 Linker链接、 Debug调试、 Utilities公共。 2 C/C编译 这里“C/C选项”和“Asm选项”类似&#xff0c;主要是与…

数学建模-因子分析模型

导入数据的路径不能有英文 这边的框框自己放的

iOS-持久化

目的 1.快速展示&#xff0c;提升体验 已经加载过的数据&#xff0c;用户下次查看时&#xff0c;不需要再次从网络&#xff08;磁盘&#xff09;加载&#xff0c;直接展示给用户 2.节省用户流量&#xff08;节省服务器资源&#xff09; 对于较大的资源数据进行缓存&#xf…

探索容器镜像安全管理之道

邓宇星&#xff0c;Rancher 中国软件架构师&#xff0c;7 年云原生领域经验&#xff0c;参与 Rancher 1.x 到 Rancher 2.x 版本迭代变化&#xff0c;目前负责 Rancher for openEuler(RFO)项目开发。 最近 Rancher v2.7.4 发布了&#xff0c;作为一个安全更新版本&#xff0c;也…

(二)安装部署InfluxDB

以下内容来自 尚硅谷&#xff0c;写这一系列的文章&#xff0c;主要是为了方便后续自己的查看&#xff0c;不用带着个PDF找来找去的&#xff0c;太麻烦&#xff01; 第 2 章 安装部署InfluxDB 1、linux 安装方式如下 通过包管理工具安装&#xff0c;比如apt 和yum直接下载可执…

PHP注册、登陆、6套主页-带Thinkphp目录解析-【强撸项目】

强撸项目系列总目录在000集 PHP要怎么学–【思维导图知识范围】 文章目录 本系列校训本项目使用技术 上效果图主页注册&#xff0c;登陆 phpStudy 设置导数据库项目目录如图&#xff1a;代码部分&#xff1a;控制器前台的首页 其它配套页面展示直接给第二套方案的页面吧第三套…

不会编程也能做数据分析?奥威BI系统就这么任性

BI系统有强大的大数据计算分析能力&#xff0c;能在短时间内完成海量数据智能可视化分析&#xff0c;满足大数据时代企业精细化数据分析要求。早期BI系统要求使用者具备一定IT基础&#xff0c;导致业务无法自主分析&#xff0c;而随着零编程BI系统的出现&#xff0c;业务部门也…

vue中实现列表自由拖拽排序

元素的 dragable 属性设置 为 true &#xff08;文本 图片 链接 的draggable 属性默认为 true&#xff09;则元素可拖放 <template><transition-group class"list"><uldragstart"dragstart(index)"dragenter"dragenter($event, index)…

代码-【3 队列判断是否相同】

前提条件&#xff1a; int QueueEmpty(Queue Q); //判断队列空否&#xff0c;1为空&#xff0c;0为不空 int GetHead(Queue Q,ElemTypes &x); //通过x返回队头元素的值 void EnQueue(Queue &Q.ElemType x); //将新元…

网络—零拷贝

一、前言 磁盘可以说是计算机系统最慢的硬件之一&#xff0c;读写速度相差内存 10 倍以上。所以为了提高系统吞吐量&#xff0c;减少磁盘访问次数&#xff0c;有很多优化措施&#xff0c;比如直接IO、异步IO&#xff0c;但其实还有一种优化策略&#xff0c;那就是——零拷贝&am…

脉冲频率、转速计算(信捷PLC C语言FC编程应用)

转速、线速度、角速度转换和计算关系请查看下面文章链接: 转速/线速度/角速度计算FC_RXXW_Dor的博客-CSDN博客里工业控制张力控制无处不在,也衍生出很多张力控制专用控制器,磁粉制动器等,本篇博客主要讨论PLC的张力控制相关应用和算法,关于绕线机的绕线算法,大家可以参看…

Python学习笔记-Django框架基础,APP,数据模型,后台管理,路由

一、Django框架简介 Django框架是Python的常用web框架&#xff0c;遵循 MVC 设计模式的框架&#xff0c;采用了MTV的框架模式&#xff0c;即模型M&#xff0c;视图V和模版T。它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的&#xff0c;即是CMS&…

趋动科技携手星辰天合,推出针对人工智能领域的两款联合解决方案

近日&#xff0c;趋动科技与 XSKY星辰天合联合宣布&#xff0c;结合双方优势能力和产品&#xff0c;携手推出高性能数据湖一站式方案及全协议存算一体化方案&#xff0c;帮助客户简化 AI 工作的 IT 基础设施部署&#xff0c;实现 AI 相关工作更加灵活和便捷。 全协议存算一体化…

银河麒麟服务器安装wireshark

安装 yum install -y wireshark 界面展示 双击打开即可 上图为抓包工作界面

kubernetes持久化存储卷

kubernetes持久化存储卷 kubernetes持久化存储卷一、存储卷介绍二、存储卷的分类三、存储卷的选择四、本地存储卷之emptyDir五、本地存储卷之 hostPath六、网络存储卷之nfs七、PV(持久存储卷)与PVC(持久存储卷声明)7.1 认识pv与pvc7.2 pv与pvc之间的关系7.3 实现nfs类型pv与pvc…