你是真的“C”——详解C语言函数模块知识(上篇)

news2024/11/23 8:17:22

详解C语言函数模块知识(上篇)😎

  • 前言🙌
    • 1. 函数是什么⁉️
    • 2、C语言中函数的分类🙌
      • 库函数:😃
      • 自定义函数😃
        • **这里通过几个例子来辅助大家更好的理解函数如何用** ⁉️
          • 1、实现一个函数来交换两个整数的内容。🙌
          • 2、写一个函数可以找出两个整数中的最大值。🙌
    • 3、函数的参数🙌
      • 实际参数(实参)💞
    • 形式参数(形参)💞
    • 4、函数的调用:🙌
      • 传值调用💞
      • 传址调用💞
  • 综合练习:💞
    • 1、 写一个函数可以判断一个数是不是素数。🙌
    • 2、 写一个函数判断一年是不是闰年。🙌
    • 3、 写一个函数,实现一个整形有序数组的二分查找。🙌
    • 4、 写一个函数,每调用一次这个函数,就会将 num 的值增加1。🙌
  • 总结撒花💞

   哈喽!😄各位CSDN的uu们,我是你的博客好友小梦,希望我的文章可以给您带来一定的帮助,话不多说,文章推上!欢迎大家在评论区唠嗑指正,觉得好的话别忘了一键三连哦!😘

前言🙌

    哈喽各位友友们😊,我今天又学到了很多有趣的知识现在迫不及待的想和大家分享一下!😘我仅已此文,手把手带领大家学习C语言中函数模块的相关知识!都是精华内容,可不要错过哟!!!😍😍😍

1. 函数是什么⁉️

  • 在计算机科学中,子程序(英语:Subroutine, procedure, function, routine, method,
    subprogram, callable unit),是一个大型程序中的某部分代码, 由一个或多个语句块组
    成。它负责完成某项特定任务,而且相较于其他代 码,具备相对的独立性
  • 一般会有输入参数并有返回值,提供对过程的封装和细节的隐藏 。这些代码通常被集成为软
    件库。

2、C语言中函数的分类🙌

  1. 库函数;
  2. 自定义函数

库函数:😃

库函数存在的原因:
1、 我们知道在我们学习C语言编程的时候,总是在一个代码编写完成之后迫不及待的想知道结果,想
把这个结果打印到我们的屏幕上看看。这个时候我们会频繁的使用一个功能:将信息按照一定的格
式打印到屏幕上(printf)。
2、 在编程的过程中我们会频繁的做一些字符串的拷贝工作(strcpy)。
3、在编程是我们也计算,总是会计算n的k次方这样的运算(pow)。
像上面我们描述的基础功能,它们不是业务性的代码。我们在开发的过程中每个程序员都可能用的到,
为了支持可移植性和提高程序的效率,所以C语言的基础库中提供了一系列类似的库函数,方便程序员进行软件开发。

简单的总结,C语言常用的库函数都有:

  • IO函数
  • 字符串操作函数
  • 字符操作函数
  • 内存操作函数
  • 时间/日期函数
  • 数学函数
  • 其他库函数
    注意⁉️:但是库函数必须知道的一个秘密就是:使用库函数,必须包含 #include 对应的头文件。

自定义函数😃

如果库函数能干所有的事情,那还要程序员干什么?所以更加重要的是自定义函数。自定义函数和库函数一样,有函数名,返回值类型和函数参数。但是不一样的是这些都是我们自己来设计。这给程序员一个很大的发挥空间。

这里通过几个例子来辅助大家更好的理解函数如何用 ⁉️

1、实现一个函数来交换两个整数的内容。🙌

解题代码: 😍

void Swap(int * px,int * py)
{
    int temp = *px;
    *px = *py;
    *py = temp;
}
int main()
{
    int x = 0;
    int y = 0;
    scanf("%d%d", &x, &y);
    printf("交换前x = %d, y = %d\n", x, y);
    Swap(&x, &y);
    printf("交换后x = %d, y = %d\n", x, y);
    return 0;
}
2、写一个函数可以找出两个整数中的最大值。🙌

解题代码: 😍

int get_max(int x, int y)
{
	return (x > y) ? (x) : (y);
}
int main()
{
	int num1 = 10;
	int num2 = 20;
	int max = get_max(num1, num2);
	printf("max = %d\n", max);
	return 0;
}

3、函数的参数🙌

实际参数(实参)💞

真实传给函数的参数,叫实参。实参可以是:常量、变量、表达式、函数等。无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。

形式参数(形参)💞

形式参数是指函数名后括号中的变量因为形式参数只有在函数被调用的过程中才实例化(分配内存单元),所以叫形式参数形式参数当函数调用完成之后就自动销毁。因此形式参数只在函数中有效。

通过概念性的讲解,可能大家对于函数形参和实参之间的关系还是不够理解,这里举个例子来帮助大家理解形参和实参的关系
例子源码:😍

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>

void Swap(int px,int py)
{
	int temp = px;
	px = py;
	py = temp;
}
int main()
{
	int x = 0;
	int y = 0;
	scanf("%d%d", &x, &y);
	printf("交换前x = %d, y = %d\n", x, y);
	Swap(x, y);
	printf("交换后x = %d, y = %d\n", x, y);
	return 0;
}

画图分析: 😍
在这里插入图片描述

程序运行结果图: 😍
在这里插入图片描述
总结一下: Swap函数在调用的时候, px , py 拥有自己的空间,同时拥有了和实参一模一样的内容。所以我们可以简单的认为:形参实例化之后其实相当于实参的一份临时拷贝

4、函数的调用:🙌

传值调用💞

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

传址调用💞

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

综合练习:💞

通过前面知识点的讲解,大家再做做以下几道练习题。可以先参考我的代码,然后尝试自己写出来。

1、 写一个函数可以判断一个数是不是素数。🙌

#define _CRT_SECURE_NO_WARNINGS 1//使用的是VS编译器才需要用到此句代码
#include<stdio.h>
#include<math.h>
int IsPrime(int i)
{
	for (int j = 2; j <= sqrt(i); j++)
	{
		if (i % j == 0)
		{
			return 0;
		}
	}
	return i;
}
int main()
{
	//是素数返回1,不是素数返回0;
	int num = 0;
	for (int i = 101; i < 200; i += 2)
	{
		if (num = IsPrime(i))
		{
			printf("%d ", num);
		}
	}
	return 0;
}

2、 写一个函数判断一年是不是闰年。🙌

#define _CRT_SECURE_NO_WARNINGS 1//使用的是VS编译器才需要用到此句代码
#include<stdio.h>
int  is_leap_year(int y)
{
	return ((y % 4 == 0) &&( y % 100 != 0 )) || (y % 400 == 0);
}
int main()
{
	int y = 0;
	for (y = 1000; y <= 2000; y++)
	{
		//判断y是否为闰年
		//如果是闰年返回1
		//不是闰年返回0
		if (is_leap_year(y))
		{
			printf("%d ", y);
		}
	}
	return 0;
}

3、 写一个函数,实现一个整形有序数组的二分查找。🙌

#define _CRT_SECURE_NO_WARNINGS 1//使用的是VS编译器才需要用到此句代码
#include<stdio.h>
int binary_search(int arr[], int k , int sz)
{
	int left = 0;
	int right = sz - 1;

	while (left<=right)
	{
		int mid = left + (right - left) / 2;
		if (arr[mid] < k)
		{
			left = mid + 1;
		}
		else if (arr[mid] > k)
		{
			right = mid - 1;
		}
		else
		{
			return mid;
		}
	}

	return -1;
}

int main()
{
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	int k = 0;
	scanf("%d", &k);
	int sz = sizeof(arr) / sizeof(arr[0]);
	//找到了就返回下标,找不到就返回-1
	int ret = binary_search(arr, k, sz);
	if (ret == -1)
		printf("找不到\n");
	else
		printf("找到了,下标是:%d\n", ret);

	return 0;
}

4、 写一个函数,每调用一次这个函数,就会将 num 的值增加1。🙌

#define _CRT_SECURE_NO_WARNINGS 1//使用的是VS编译器才需要用到此句代码
#include<stdio.h>
void Add(int* p)
{
	(*p)++;
}

int main()
{
	int num = 0;
	Add(&num);
	printf("%d\n", num);
	Add(&num);
	printf("%d\n", num);
	Add(&num);
	printf("%d\n", num);
	return 0;
}

总结撒花💞

   本篇文章旨在带领大家学习C语言函数模块的相关知识这里讲解的只是函数模块的上半部分知识点,关于下半部分的知识讲解我明天整理好再通过博客的形式分享给大家欲知后事如何,请听下回讲解!如果我写的有什么的不好之处,请在文章下方给出你宝贵的意见😊。如果觉得我写的好的话请点个赞赞和关注哦~😘

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

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

相关文章

C语言实现静态通讯录

专栏&#xff1a;C语言 每日一句&#xff1a;这几年可能会有点累&#xff0c;但要相信你的人生不可能就止于此地了&#xff0c;你要有你的梦想&#xff0c;所以你要努力&#xff0c;只有坚持这阵子&#xff0c;才不会辛苦一辈子&#xff0c;努力会让自己过得很好&#xff0c; 静…

Qt扫盲-QAction理论总结

QAction理论总结一、概述二、使用一、概述 在应用程序中&#xff0c;许多常用命令可以通过 菜单、工具栏按钮 和 键盘快捷键 调用。由于用户希望以相同的方式执行每个命令&#xff0c;而不管使用什么用户界面&#xff0c;因此将每个命令表示为一个Action操作是有效的。可以将A…

23年 车辆检测+车距检测+行人检测+车辆识别+车距预测(附yolo v5最新版源码)

我们先看一下效果2023年最新版 yolo车距行人识别yolov5和v7对比yolo车距其他步骤参考另外一篇文章&#xff1a; yolo 车辆测距车辆识别单目测距&#xff08;双目测距&#xff09;_SYBH.的博客-CSDN博客_yolo测距基于yolo目标检测算法实现的车前道路中的车辆和行人检测&#xf…

opener 值得注意的安全问题

前言 最近在学习浏览器知识的时候&#xff0c;讲到了浏览器之间的渲染进程共用的问题。其中 opener 能被引用到的两个页面&#xff0c;会在同一个渲染进程中。而这两个页面&#xff0c;可以称为&#xff1a;浏览上下文组。但在测试的时候&#xff0c;反倒是发现了一个opener 注…

JavaEE进阶第一课:Spring核心与设计思想

目录1.Spring是什么1.1什么是容器1.2什么是IoC1.3什么是DISpring的核心功能1.Spring是什么 用官方的话来说&#xff1a;Spring是包含众多工具方法的IoC容器 但是仅仅这样一句话&#xff0c;就会让大家有许多不解&#xff1f;什么是IoC&#xff1f;什么是容器&#xff1f;接下来…

python基础篇之字符串类型

大家好&#xff0c;我是csdn的博主&#xff1a;lqj_本人 这是我的个人博客主页&#xff1a;lqj_本人的博客_CSDN博客-微信小程序,前端,vue领域博主lqj_本人擅长微信小程序,前端,vue,等方面的知识https://blog.csdn.net/lbcyllqj?spm1000.2115.3001.5343 哔哩哔哩欢迎关注&…

Java字节流基础详解(InputStream/OutputStream)

文章目录概念InputStream字节输入流FileInputStream文件字节输入流FileOutputStream字节输出流相关的方法&#xff08;write&#xff09;和构造器构造器注意事项文件拷贝概念 在Java中&#xff0c;字节流一般适用于处理字节数据&#xff08;诸如图片、视频&#xff09;&#x…

Netty入门笔记(一)BIO、NIO、AIO

一.Netty简介 Netty是由JBOSS提供的一个java开源框架Netty是一个异步的&#xff0c;基于事件驱动的网络应用框架&#xff0c;用以快速开发高性能&#xff0c;高可靠性的网络IO程序Netty主要针对在TCP协议下&#xff0c;面向Client端的高并发应用&#xff0c;或者peer-to-peer场…

裁剪图片原理

FileReader HTML5定义了FileReader作为文件API的重要成员用于读取文件&#xff0c;根据W3C的定义&#xff0c;FileReader接口提供了读取文件的方法和包含读取结果的事件模型。 创建实例 const reader new FileReader(); 方法 事件 Blod Blob是用来支持文件操作的。简单的…

牛客每日一题(1/12)

233的字符串题目描述 读入一个正整数n&#xff0c;代表将字符串"abc"重复n次&#xff0c;形成一个长度为3n的字符串。例如n3时&#xff0c;形成的字符串为"abcabcabc"。请你计算该字符串中有多少个"acb"子序列。答案对10^97取模。输入描述:一个正…

【计算机网络-数据链路层】局域网(LAN)

文章目录1 局域网的概念1.1 局域网的拓扑结构1.2 局域网的传输介质1.3 局域网的介质访问控制方式&#xff08;MAC&#xff09;1.4 局域网的分类2 以太网&#xff08;Ethernet&#xff0c;IEEE 802.3 标准&#xff09;2.1 以太网的传输介质2.2 以太网的网卡2.3 以太网的 MAC 地址…

flutter apk 加固引发的问题

背景&#xff1a;Apk 加固&#xff0c;防止动态调试啥的&#xff0c;用的是 腾讯家的加固方案:应用加固&#xff0c;这个加固完之后 因为破壳了&#xff0c;所以需要重写签名&#xff1b;今天发现一个这样的问题&#xff1a;最早加固完毕安装不了提示&#xff1a;Failure IINST…

C语言从入门到放弃——静态通讯录实现

目录 一.功能实现 1.打印开始菜单 2.实现选择 3.初始化通讯录 4.添加、删除等功能实现 &#xff08;1&#xff09;添加联系人 &#xff08;2&#xff09;删除联系人 &#xff08;3&#xff09;查找联系人 &#xff08;4&#xff09;修改联系人 &#xff08;5&#xff…

【C++】基于EasyX库的2048小游戏

文章目录0 前言1 先看一下最终的效果图2 2048核心2 EasyX库2.1 配色2.2 文字2.3 填充3 总结0 前言 最近比较迷2048小游戏&#xff0c;于是想自己写代码实现出来&#xff0c;恰好也在网上找到一个现成的2048的VS工程&#xff0c;但是界面做得很难看&#xff0c;且运行逻辑存在一…

研究发现,大多数长期 COVID 影响在感染后一年内消退

英国医学杂志今天发表的一项来自以色列的大型研究发现&#xff0c;轻度 COVID-19 感染后出现的大多数症状或病症会持续数月&#xff0c;但在一年内恢复正常。 特别是接种过疫苗的人&#xff0c;呼吸困难的风险较低。这通常也是轻度感染后最常见的影响。相比之下&#xff0c;比未…

【Day2】977有序数组的平方、209长度最小的子数组、59螺旋矩阵Ⅱ

【Day2】977有序数组的平方、209长度最小的子数组、59螺旋矩阵Ⅱ977有序数组的平方暴力排序双指针法209长度最小的子数组暴力解法滑动窗口法59螺旋矩阵Ⅱ977有序数组的平方 题目链接&#xff1a;977 题目&#xff1a;给你一个按 非递减顺序 排序的整数数组 nums&#xff0c;返…

Linux常用命令——xargs命令

在线Linux命令查询工具(http://www.lzltool.com/LinuxCommand) xargs 给其他命令传递参数的一个过滤器 补充说明 xargs 命令是给其他命令传递参数的一个过滤器&#xff0c;也是组合多个命令的一个工具。它擅长将标准输入数据转换成命令行参数&#xff0c;xargs 能够处理管道…

python--城堡保卫战

实现功能&#xff1a; 1&#xff1a;敌人的绵绵不断的前进&#xff0c;拿着各种各样的武器&#xff08;叉子&#xff0c;斧头&#xff0c;宝剑&#xff09;&#xff0c;挥动武器攻击我方城堡&#xff0c;对我方城堡造成伤害&#xff01; 2&#xff1a;我方城堡发现敌人可手动…

Linux-文件系统

Windows文件系统 在Windows下&#xff0c;打开“计算机”&#xff0c;我们看到的是一个个驱动盘符。 注意&#xff1a;盘符与硬件不是对应的&#xff0c;比如说电脑有有一块硬盘&#xff0c;到Windows下可以将其切成C、D、E盘&#xff0c;也就是一个硬盘可以放多个盘符。 Lin…

maple-example简单操作示例

好久都没写博客了&#xff0c;今天学习到一点新知识&#xff0c;在这里小编和大家分享&#xff0c;欢迎大家指点&#xff0c;这篇文章是关于 maple-example的简单操作示例&#xff0c;具体软件下载不做讲解&#xff0c;谢谢&#xff01;