『C语言初阶』第四章-函数

这篇具有很好参考价值的文章主要介绍了『C语言初阶』第四章-函数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

『C语言初阶』第四章-函数,C语言初阶知识,c语言,算法
🔥博客主页 小羊失眠啦.
🔖系列专栏 C语言
🌥️每日语录世上无难事,只怕有心人。
❤️感谢大家点赞👍收藏⭐评论✍️


『C语言初阶』第四章-函数,C语言初阶知识,c语言,算法

前言

各位小伙伴们,时隔多日,小羊今天又来和大家一起学习C语言新的知识:函数,好的,废话不多说,咱们直接进入主题!


函数的定义

通常大家第一眼看到函数,都会想到数学中的各种函数,但是小羊今天分享的是C语言中的函数。我们知道往往一个大的问题需要分解成很多小的问题来逐个解决,在C语言中也是如此,一个大型程序中的某部分代码,由一个或多个语句块组成,而这某部分代码是为了“完成某种特定的功能”而设计的,且较于其他代码,具有一定的独立性,故被称作“子程序(函数)


函数的分类

库函数

首先我们得先了解库函数是什么?库函数怎么使用?
在我们学习C语言以来,有很多功能我们频繁地使用了很多次:

  1. 在屏幕上打印某种信息(printf函数)
  2. 计算n的k次方(pow函数)
  3. 计算一段字符串的长度(strlen函数)

上面这些库函数都是每个程序员开发过程中都能用得到,为了提高程序的可移植性,和提高程序的效率,所以C语言在他的基础库中提供了一系列类似的库函数,方便程序员进行软件开发。

由于库函数数量很多,无法全部列举,只能对其简单分类:

  • IO函数
  • 字符串操作函数
  • 字符操作函数
  • 内存操作函数
  • 时间/日期函数
  • 数学函数
  • 其他库函数

分享网站

了解了库函数,那么当我们想去查询库函数时候,该使用什么工具呢?这里小羊给大家安利个查询库函数的网站:
cplusplus
『C语言初阶』第四章-函数,C语言初阶知识,c语言,算法

用法示例

#include<stdio.h>//printf函数需要的头文件
#include<math.h>//pow函数需要的头文件
int main()
{
	int a1 = 1, b1 = 2, c1 = 0;
	c1 = a1 + b1;
	printf("%d\n", c1);
	double a2 = 2.0, b2 = 4.0, c2 = 0.0;
	c2 = pow(a2, b2);//计算a2的b2次方
	printf("%lf", c2);
	return 0;
}

『C语言初阶』第四章-函数,C语言初阶知识,c语言,算法
注意:
使用库函数必须包含#include对应的头文件。


自定义函数

库函数并不是万能的,还有很多功能需要我们自己来完成,不然还需要程序员干什么?这时候我们可以设计一些更符合需求的函数来帮助我们写程序,这就是自定义函数
自定义函数和库函数一样,有函数名返回值函数参数

函数的构成

函数返回值类型 函数名 (参数1,参数2,参数3……)
{
	//...函数体
}

用法示例

找到两个数中的较大值

#include<stdio.h>
int Max(int x, int y)
{
	int z = 0;
	z = x > y ? x : y;
	return z;
}
int main()
{
	int a = 0, b = 0, max = 0;
	scanf("%d%d", &a, &b);
	max = Max(a, b);
	printf("这两个数中较大值是%d", max);
	return 0;
}

注意
上述函数max中,max表示函数名,a和b是实参(实际参数)
起函数名要有意义,否则写完自己回头看都不知道是什么意思。


函数的参数

C语言中函数的参数一般分为两种:

  • 实参(实际参数)
    真实传给函数的参数,叫实参
    实参可以是:常量,变量,表达式,函数等
    无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。
  • 形参(形式参数)
    形式参数是指函数名后括号中的变量,因为形式参数只有在函数被调用的过程中才实例化(分配内存单元),所以叫形式参数形式参数当函数调用完成之后就自动销毁了
    因此形式参数只有在函数中有效。

注意:

  1. 形式参数(形参)和实际参数(实参)使用的不是同一个空间。(地址不一样)
  2. 形参实例化以后相当于实参的一份临时拷贝。

函数的调用

函数的调用分为两种:

  • 传值调用:
    函数的形参和实参分别占有不同的内存块,对形参的修改不会影响实参。
  • 传址调用:
    传址调用是把函数外部创建变量的内存地址传递给函数参数的一种调用函数的方式。这种传参方式可以让函数和函数外边的变量建立起真正的联系,也就是函数的内部可以直接操作函数外部的变量。

用法示例:

#include<stdio.h>
void Swap1(int x, int y)
{
	int tmp = 0;
	tmp = x;
	x = y;
	y = tmp;
}

void Swap2(int* x, int* y)
{
	int tmp = 0;
	tmp = *x;
	*x = *y;
	*y = tmp;
}
int main()
{
	int a = 1, b = 2;
	Swap1(a, b);
	printf("a=%d,b=%d\n", a, b);
	Swap2(&a, &b);
	printf("a=%d,b=%d", a, b);
	return 0;
}

『C语言初阶』第四章-函数,C语言初阶知识,c语言,算法
注意:
传值调用对形参的修改不会影响实参!


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

嵌套调用

定义:在一个函数中调用了另外一个函数

用法示例

#include<stdio.h>
int Max(int x, int y)//函数1
{
	return (x > y) ? x : y;
}
void Print(int x, int y)//函数2
{
	int i = 0;
	int c = Max(x, y);
	for (i = 0; i < c; i++)
		printf("努力学习+1\n");
}
int main()
{
	int a = 0, b = 0;
	scanf("%d%d", &a, &b);
	Print(a, b);
	return 0;
}

链式访问

把一个函数的返回值作为另外一个函数的参数

用法示例

#include<stdio.h>
int main()
{
	printf("%d", printf("%d", printf("%d", 43)));
	return 0;
}

补充知识:
printf函数的返回值是打印在屏幕上字符的个数。
分析:

  1. printf(“%d”, 43)首先打印43,然后由于打印在屏幕上字符的个数是2,所以返回值是2.
  2. printf(“%d”, printf(“%d”, 43)相当于printf(“%d”, 2)→打印2之后,由于打印在屏幕上字符的个数是1,所以返回值是1;
  3. printf(“%d”, printf(“%d”, printf(“%d”, 43)))所以最终结果是打印4321;

函数的声明和定义

函数声明

  1. 在没有见到函数的定义之前,要提前告诉编译器有一个函数叫什么,参数是什么,返回类型是什么。声明函数只是说有这个函数,但是具体有没有构造无法知道
  2. 函数的声明一般出现在函数的使用之前,要满足先声明后使用
  3. 函数的声明一般要放在头文件

函数定义

函数的定义是指函数的具体实现,交代函数的功能实现


函数递归

程序调用自身的编程技巧称为递归

必要条件

  • 存在限制条件,当满足这个限制条件时候,递归不再继续
  • 每次递归调用之后越来越接近这个限制条件

用法示例

接受一个整型值(无符号),按照顺序打印它的每一位(例如:输入:1234,输出1 2 3 4)。

#include<stdio.h>
void Print(int x)
{
	if (x > 9)
		Print(x / 10);
	printf("%d ", x % 10);
}
int main()
{
	int a = 1234;
	Print(a);
	return 0;
}

点击下方个人名片,可添加博主的个人微信,交流会更方便哦~文章来源地址https://www.toymoban.com/news/detail-632971.html

到了这里,关于『C语言初阶』第四章-函数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 第四章 云原生架构之Kubernetes基础知识

    ​ Kubernetes是一个可移植、可扩展的开源平台,用于管理容器化的工作负载和服务,简称 K8S。 K8S的本质是一组服务器集群,可以在对应服务器集群的每个节点上运行程序,来对节点中的容器进行管理 。类似Master-Work方式,每个服务器上安装特定的k8s组件,就可以形成集群,然

    2024年02月17日
    浏览(46)
  • GO语言圣经 第四章习题

    编写一个函数,计算两个SHA256哈希码中不同bit的数目。(参考2.6.2节的PopCount函数。) 编写一个程序,默认情况下打印标准输入的SHA256编码,并支持通过命令行flag定制,输出SHA384或SHA512哈希算法。 重写reverse函数,使用数组指针代替slice。 编写一个rotate函数,通过一次循环完成

    2024年02月11日
    浏览(35)
  • Nenu算法复习第四章

    目录 1122: 4101 统计字符数 1123: 4102 气球升起来 1124: 4103 All in All 1125: 4104 Soundex编码 1126: 4111 浮点数格式 1127: 4112 487-3279 1128: 4113 粗心的打字员 1129: 4114 单词逆序 题目描述 判断一个由a~z这26个字符组成的字符串中哪个字符出现的次数最多。 输入 第1行是测试数据的组数n,每组测

    2024年02月07日
    浏览(31)
  • MySQL学习记录:第四章 TCL语言

    /* TCL语言 :transaction control language 事务控制语言 事务 : 一个或一组语句组成的一个执行单元,该执行单元要么全执行,要么全不执行 事务由单独单元的一个或多个SQL语句组成,在这个单元中,每个MySQL语句是相互依赖的。而整个单独单元作为一个不可分割的整体,如果单元

    2024年02月14日
    浏览(45)
  • 【概率论与数理统计】第四章知识点复习与习题

    定义 数学期望其实很好理解,就是均值,当然这里并不是直接计算样本的均值,而是考虑到样本对应的概率。我们分离散和连续两类来讨论数学期望。 离散型 对随机变量X的分布律为 若级数 绝对收敛,则称该级数为X的数学期望,记为E(X)。即 连续型 当我们把上面的求和换成

    2024年02月09日
    浏览(49)
  • 算法详解+代码(无人驾驶车辆模型预测控制第四章)

    首先对汽车运动学模型进行建模: ​ 设后轴速度为,前轴行速度为考虑后轴轴心的速度约束,得到和后轴速度的关系如下:                                             考虑到前后轴速度约束的运动学方程为:       设后轴行驶中心为,前轴行驶中心为,根据前后轴之

    2024年02月03日
    浏览(41)
  • C++算法之旅、06 基础篇 | 第四章 动态规划 详解

    状态表示 集合 满足一定条件的所有方案 属性 集合(所有方案)的某种属性(Max、Min、Count等) 状态计算(集合划分) 如何将当前集合划分成多个子集合 状态计算相当于集合的划分 :把当前集合划分成若干个子集,使得每个子集的状态可以先算出来,从而推导当前集合状态

    2024年02月09日
    浏览(36)
  • 自然语言处理: 第四章Seq2Seq

    开始之前,首先提出一个问题,电脑是怎么识别人类的命令的,首先人们通过输入代码(编码) ,带入输入给计算机然后再经过处理(解码)得到最终的命令。所以可以看到这其实是一个编码 + 解码的过程。可以看到首先我们将初始的信息通过编码,得到涵盖全局的信息的特征然

    2024年02月12日
    浏览(53)
  • 【计组考点】:第四章 存储系统(下)主存-cache块替换算法

    根据学校课件总结的计组考点,用过的都说好! 目录 14.高速缓冲存储器cache 15.主存-cache地址映射 15.1例一 15.2例二 16.cache块替换算 最后🍨     加油!!!

    2024年01月19日
    浏览(42)
  • 第四章 应用SysML基本特性集的汽车示例 P1|系统建模语言SysML实用指南学习

    仅供个人学习记录 主要就是应用练习建模了 Automobile Domain包 将模型组织入包的包图 汽车规范中包含系统需求的需求图 汽车域块定义图 描述车辆主要功能的用例图

    2024年02月06日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包