由浅到深认识C语言(5):函数

news2024/11/17 12:37:49

该文章Github地址:https://github.com/AntonyCheng/c-notes

在此介绍一下作者开源的SpringBoot项目初始化模板(Github仓库地址:https://github.com/AntonyCheng/spring-boot-init-template & CSDN文章地址:https://blog.csdn.net/AntonyCheng/article/details/136555245),该模板集成了最常见的开发组件,同时基于修改配置文件实现组件的装载,除了这些,模板中还有非常丰富的整合示例,同时单体架构也非常适合SpringBoot框架入门,如果觉得有意义或者有帮助,欢迎Star & Issues & PR!

上一章:由浅到深认识C语言(4):数组

4.函数

4.1.示例的概述

//函数的声明:告诉编译器该函数存在
void my_fun();
int main(int argc, char* argv[]) {
	//函数的调用:函数名 +()
	my_fun();
	return 0;
}
//函数的定义,如果将函数定义放在函数调用上方,就可以省略函数的声明,但是不建议这样做
void my_fun() {
	printf("my fun\n");
	return;//return可以返回函数结果,也可以结束函数
}
  • 函数的概述

    C语言是由函数组成,函数是程序的基本模块,通过对函数模块得调用实现特定的功能;

  • 函数的分类
    { 库 函 数 : 编 译 器 提 供 的 可 在 C 源 程 序 中 调 用 的 函 数 { C 语 言 标 准 库 规 定 的 库 函 数 编 译 器 提 供 的 库 函 数 用 户 自 定 义 函 数 : 用 户 把 自 己 的 算 法 编 成 相 对 独 立 的 函 数 模 块 , 通 过 调 用 的 方 法 来 使 用 \begin{cases} \bf{库函数:编译器提供的可在C源程序中调用的函数}\begin{cases} \bf{C语言标准库规定的库函数}\\\bf{编译器提供的库函数} \end{cases} \\\bf{用户自定义函数:用户把自己的算法编成相对独立的函数模块,通过调用的方法来使用} \end{cases} C{C使

  • 函数的定义

    实现函数功能,确定函数体、返回值、形参,让函数存在;

    返回值类型 函数名(形参类型 形参){
    	函数体;
    }
    
    1. 返回值类型:函数将来返回值的类型;
    2. 函数名:函数的入口地址;
    3. 形参:函数外部数据传递到函数内部的桥梁;
    4. 函数体:函数的具体功能;
  • 函数的声明

    不是实现函数功能,仅仅是说明该函数有声明返回值类型,形参类型,函数名;

    返回值类型 函数名(形参类型 形参);
    
  • 函数的调用

    函数的执行;

    函数名(实参);
    

    实参:函数外部的实际数据

4.2.函数的参数

  1. 如果函数没有参数,请将形参写成 void

    void my_fun(void);
    int main(int argc, char* argv[]) {
        //下方就不要传参
    	my_fun();
    	return 0;
    }
    //如果函数没写形参,在调用的时候可以传实参,只是实参得不到使用
    void my_fun(void) {
    	printf("my fun\n");
    	return;
    }
    
  2. 函数参数的传递;

    int my_fun(int x,int y);
    int main(int argc, char* argv[]) {
    	int data1 = 10;
    	int data2 = 20;
    	int ret = my_fun(data1,data2);
    	printf("ret = %d", ret);
    	return 0;
    }
    int my_fun(int x,int y) {
    	return x + y;
    }
    

    图示如下:

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  3. 注意

    • 函数的形参的本质是函数的局部变量;

      int my_fun(int x,int y) {
      	return x + y;
      }
      

      xy 是函数的形式参数;

    • 形参在函数定义的时候不会开辟空间;

      这是为了防止函数不调用时占电脑内存,但是当函数调用的时候就会开辟空间;

    • 形参在函数结束的时候才会被释放;

    • 函数名代表的是函数的入口地址;

    • 函数的返回值小于等于4B,那么存放到寄存器中,否则存放在栈区;

4.3.案例

案例一:用函数的方式求取数组的最大值和最小值;

void arr_brith(int arr[5], int n);
void arr_print(int arr[5], int n);
int arr_max(int arr[5],int n);
int arr_min(int arr[5],int n);

int main(int argc, char* argv[]) {
	int arr[5] = { 0 };
	int max = 0, min = 0;
	int n = sizeof(arr) / sizeof(arr[0]);
	printf("这是一个从%d个数字中挑选出最大值最小值的程序\n",n);
	//键盘输入数组
	arr_brith(arr,n);
	//确认并遍历
	arr_print(arr, n);
	//计算数组的最大值
	arr_max(arr, n);
	//计算数组的最小值
	arr_min(arr, n);
}

void arr_brith(int arr[5], int n) {
	int i = 0;
	printf(" 请输入需要比较的%d个整数:\n",n);
	for (i = 0; i < n; i++) {
		scanf_s("%d", &arr[i]);
	}
}
void arr_print(int arr[5], int n) {
	int i = 0;
	printf(" 您输入的整数是: \n");
	for (i = 0; i < n; i++) {
		printf(" %d ", arr[i]);
	}
	printf("\n");
}
int arr_max(int arr[5],int n) {
	int tmp_max = arr[0]; //假设第 0 个元素是最大的
	int i = 0;
	for (i = 0; i < n; i++) {
		if (tmp_max <= arr[i]) {
			tmp_max = arr[i];
		}
	}
	printf(" 该数组最大值为%d\n", tmp_max);
	return 0;
}
int arr_min(int arr[5],int n) {
	int tmp_min = arr[0]; //假设第 0 个元素是最小的
	int i = 0;
	for (i = 0; i < n; i++) {
		if (tmp_min >= arr[i]) {
			tmp_min = arr[i];
		}
	}
	printf(" 该数组最小值为%d\n", tmp_min);
	return 0;
}

打印效果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

案例二:键盘输入 5 个int数值,对其从小到大排序,用函数封装;

void input(int arr[5],int n);
void compare(int arr[5], int n);
void print(int arr[5]);

int main(int argc, char* argv[]) {
	int arr[5] = { 0 };
	int n = sizeof(arr) / sizeof(arr[0]);
	input(arr,n);
	compare(arr, n);
	print(arr);
}

void input(int arr[5],int n) {
	int i = 0;
	for (i = 0; i < n; i++) {
		printf("请输入第 %d 个数:", i + 1);
		scanf_s("%d", &arr[i]);
	}
}
void compare(int arr[5],int n) {
	int i = 0;
	int j = 0;
	int count = 0;
	for (i = 0; i < n; i++) {
		for (j = i; j < n; j++) {
			if (arr[i] <= arr[j + 1]) {
				count = arr[i];
				arr[i] = arr[j + 1];
				arr[j + 1] = count;
			}
		}
	}
}
void print(int arr[5]) {
	int i = 0;
	printf("\n排序之后得:\n");
	for (i = 4; i >= 0; i--) {
		printf(" %d ", arr[i]);
	}
}

打印效果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

案例三:键盘输入一个字符串 "abcdef" 进行前后的颠倒 ----> "fedcba",用函数封装;

void my_input(char str[100]);
void my_print(char str[100], int n);
void my_print(char str[100], int n);
void my_fun(char str[100], int n);


int main(int argc, char* argv) {
	char str[100] = { "" };
	int n = sizeof(str) / sizeof(str[0]);
	my_input(str);
	my_print(str, n);
	printf("\n");
	my_fun(str, n);
	return 0;
}

void my_input(char str[100]) {
	printf("请输入少于100个字符的英文:");
	scanf_s("%s", str, 100);
	return;
}
void my_print(char str[100],int n) {
	int i = 0;
	printf("你输入的字符串如下:\n");
	for (i = 0; i < n; i++) {
		printf("%c", str[i]);
	}
	return;
}
void my_fun(char str[100], int n) {
	printf("这串字符颠倒之后得:\n");
	int i = 0;
	for (i = n - 1; i >= 0; i--) {
		if (str[i] == -2) {
			continue;
		}
		printf("%c", str[i]);
	}
    return;
}

打印效果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

下一章:由浅到深认识C语言(6):变量的存储类型

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

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

相关文章

Fork - 将 GitHub 的某个特定仓库复制到自己的账户下

Fork - 将 GitHub 的某个特定仓库复制到自己的账户下 1. ForeverStrongCheng/OpenCV-tutorials2. Fork -> ForeverStrongCheng/R2CNN_Faster-RCNN_TensorflowReferences 访问仓库页面&#xff0c;点击 Fork 按钮创建自己的仓库。 Fork 是将 GitHub 的某个特定仓库复制到自己…

python二级备考(3)-综合应用

1 《命运》是著名科幻作家倪匡的作品。这里给出《命运》的一个网络版本文件&#xff0c;文件名为“命运. txt”。 问题1 (5分) :在PY301-1. py文件中修改代码&#xff0c;对“命运. txt”文件进行字符频次统计&#xff0c;输出频次最高的中文字符(不包含标点符号)及其频次&…

图像去噪--(1)

系列文章目录 文章目录 系列文章目录前言一、图像噪声1.1 噪声定义1.2 基本特征 二、按照噪声概率分布分类1.高斯噪声2.泊松噪声 三、去噪算法3.1 线性滤波3.1.1 高斯滤波3.1.2 均值滤波 3.2 非线性滤波3.2.1 中值滤波3.2.2 双边滤波 四、深度学习总结 前言 一、图像噪声 1.1 …

【模糊集合】示例

【模糊集合】隶属函数、关系与运算 例1 设&#xff0c; 分别进行交、并、补运算&#xff0c;有&#xff1a; 由上模糊集合的全体组成的集合称为的模糊幂集&#xff0c;记为&#xff0c;fuzzy 上述为模糊集合的Zadeh记法&#xff0c;其中的“”号不表示分式求和&#xff0c;仅作…

深度强化学习(七)策略梯度

深度强化学习(七)策略梯度 策略学习的目的是通过求解一个优化问题&#xff0c;学出最优策略函数或它的近似函数&#xff08;比如策略网络&#xff09; 一.策略网络 假设动作空间是离散的,&#xff0c;比如 A { 左 , 右 , 上 } \cal A\{左,右,上\} A{左,右,上}&#xff0c;策…

Linux 进程控制进程终止

目录 一、fork函数 1、概念 2、父子进程的共享 3、 为什么父子进程会从fork()调用之后的位置继续执行代码 4、写时拷贝 5、为什么需要写时拷贝 6、写时拷贝的好处 7、fork常规用法 8、fork调用失败的原因 9、查看系统最大进程数 二、进程终止 1、进程退出场景 2、…

redis 入门01

1.安装与配置 在官网下压缩包并传送给自己的虚拟机或者使用wget直接下载都可以 注意:redis是运行在linux下的基于内存的kv键值对数据库 安装与配置参考 2.经典Hello World 注意设置redis在后台运行,默认是前台进行的 我们配置完成之后首先启动服务器 redis-server 配置文件 这里…

MyBatis3源码深度解析(十二)MyBatis的核心组件(一)Configuration

文章目录 第四章 MyBatis的核心组件4.1 使用MyBatis操作数据库4.2 MyBatis核心组件4.3 Configuration组件4.3.1 属性4.3.2 设置4.3.3 类型别名4.3.3 类型处理器4.3.5 对象工厂4.3.6 插件4.3.7 配置环境4.3.8 映射器 第四章 MyBatis的核心组件 4.1 使用MyBatis操作数据库 在研…

Boyer Moore 算法介绍

1. Boyer Moore 算法介绍 Boyer Moore 算法&#xff1a;简称为 BM 算法&#xff0c;是由它的两位发明者 Robert S. Boyer 和 J Strother Moore 的名字来命名的。BM 算法是他们在 1977 年提出的高效字符串搜索算法。在实际应用中&#xff0c;比 KMP 算法要快 3~5 倍。 BM 算法思…

【Machine Learning】Suitable Learning Rate in Machine Learning

一、The cases of different learning rates: In the gradient descent algorithm model: is the learning rate of the demand, how to determine the learning rate, and what impact does it have if it is too large or too small? We will analyze it through the follow…

【安全类书籍-1】asp代码审计.pdf

目录 内容简介 作用 下载地址 内容简介 这个文档摘录片段主要讨论了ASP编程中的安全性审计,包括SQL注入漏洞、Cookie注入防范措施及文件上传安全问题,并给出了相关示例代码。 SQL注入漏洞与防范 - ASP代码中展示了如何通过`Request.QueryString`和`Request.Form`获取用户…

SpringBoot打造企业级进销存储系统 第五讲

package com.java1234.repository;import com.java1234.entity.Menu; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query;import java.util.List;/*** 菜单Repository接口*/ public interface MenuReposit…

spacy进行简单的自然语言处理的学习

自然语言处理基本概念 概念&#xff1a;自然语言处理&#xff0c;是让机器理解人的语言的过程。 作用&#xff1a;通过使用自然语言处理&#xff0c;机器可以理解人的语言&#xff0c;从而进行语义分析&#xff0c;例如&#xff1a;从一句话中判断喜怒哀乐&#xff1b;从一段文…

电大搜题:开启学习新时代

身处信息化时代&#xff0c;学习的方式已经发生了巨大的变革。在这个多元化的学习环境中&#xff0c;传统的学习模式已经无法满足现代学习者的需求。然而&#xff0c;电大搜题应运而生&#xff0c;为学习者提供了一个高效、便捷的学习途径。 电大搜题&#xff0c;作为黑龙江开…

阅读 - 二维码扫码登录原理

在日常生活中&#xff0c;二维码出现在很多场景&#xff0c;比如超市支付、系统登录、应用下载等等。了解二维码的原理&#xff0c;可以为技术人员在技术选型时提供新的思路。对于非技术人员呢&#xff0c;除了解惑&#xff0c;还可以引导他更好地辨别生活中遇到的各种二维码&a…

铁路订票平台小程序|基于微信小程序的铁路订票平台小程序设计与实现(源码+数据库+文档)

铁路订票平台小程序目录 目录 基于微信小程序的铁路订票平台小程序设计与实现 一、前言 二、系统设计 三、系统功能设计 1、用户信息管理 2、车次信息管理 3、公告信息管理 4、论坛信息管理 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐…

Transformer学习笔记(二)

一、文本嵌入层Embedding 1、作用&#xff1a; 无论是源文本嵌入还是目标文本嵌入&#xff0c;都是为了将文本中词汇的数字表示转变为向量表示&#xff0c;希望在这样的高维空间捕捉词汇间的关系。 二、位置编码器Positional Encoding 1、作用&#xff1a; 因为在Transformer…

冲动是魔鬼,工作不顺心时不要把坏脾气带给家人

今天与一个跟踪了很久的客户准备签合同了&#xff0c;客户突然反悔&#xff0c;为此与他周旋了一整天&#xff0c;忙碌得一口水都没有喝。回到小区坐在车里抽着烟&#xff0c;久久不愿回家&#xff0c;只想一个人坐着&#xff0c;疲惫、无奈。这个月的奖金似乎又将成为泡影。 …

Microsoft SQL Server2019占用大量磁盘空间的解决办法(占了我C盘120G的空间!!!)附SQL数据库定时清理代理作业

一、问题 安装Microsoft SQL Server2019后我的C盘在几天后少了100G&#xff0c;如图所示&#xff1a; 解决后&#xff1a; 出现这种情况&#xff0c;我在各种清理C盘后&#xff0c;空间还是没有太大变化 &#xff0c;且几乎每天都要少2个G&#xff0c;后来终于找见原因了&…

Postman接口测试:API 测试的必备技巧

在现代软件开发生命周期中&#xff0c;接口测试是一个至关重要的部分。使用 Postman 这一工具&#xff0c;可以轻松地进行 接口测试。以下是一份简单的使用教程&#xff0c;帮助你快速上手。 安装 Postman 首先&#xff0c;你需要在电脑上安装 Postman。你可以从官网上下载并…