C语言---函数介绍详解

news2024/11/13 11:12:53

生活的全部意义在于无穷地探索尚未知道的东西,在于不断地增加更多的知识——左拉

文章目录

  • 前言
  • 函数
    • 模块化程序设计方法
    • 函数的定义
    • 函数的分类
      • 函数定义角度
        • 库函数
        • 自定义函数
      • 函数形式角度
        • 无参函数
        • 有参函数
      • 函数兼有其他语言中的函数和过程两种功能的角度
        • 有返回值函数
        • 无返回值函数
  • 总结

前言

C语言笔记的相关内容也快要完结了,这个学期我也在学C++和数据结构等,接下了我也会陆续更新一些有关的博客,当然对于我现在C语言水平仍然是不够的,未来我也会更新更深层的C语言内容,希望能帮助大家。如果你喜欢这个系列,希望可以点点关注,你的支持是我最大的动力

函数

C语言中往往将程序需要实现的一些功能分别编写为若干个函数,然后把它们组合成一个完整的程序。函数是C语言程序的基本单位,一个c语言程序可由一个主函数和若干个其他函数组成。其中,每个函数是一个独立的程序段,可以赋予它完成特定的操作或计算任务。C语言可通过函数来实现模块化程序设计的功能。

模块化程序设计方法

人们在求解某个复杂问题时,通常采用逐步分解、分而治之的方法, 也就是将一个大问题分解成若干个比较容易求解的小问题,然后分别求解。程序员在设计一个复杂的应用程序时,往往也是把整个程序划分成若干个功能较为单一的程序模块, 然后分别予以实现,最后再把所有的程序模块像搭积木一样装配起来。这种在程序设计中分而治之的策略
被称为模块化程序设计方法

函数的定义

C语言源程序是由函数组成的。所谓函数,就是一段可以重复调用的、功能相对独立完整的程序段。程序中一般只有一个主函数main,但实用程序往往由多个函数组成。函数是C语言源程序的基本模块,通过对函数的调用实现特定的功能。C语言中的函数相当于其他高级语言的子程序。
注:C语言不仅提供了极为丰富的标准库函数,还允许用户建立自己定义的函数。用户可把自己的算法用C语言编写成一个个相对独立的函数模块,然后用调用的方法来使用函教。可以说,C语言程序的全部工作都是由各式各样的函数完成的,所以C语言也被称为的数式语言。由于采用了函数模块式的结构,C语言易于实现结构化程序设计,使程序的层次结构清晰,便于程序的编写、调试。

函数的分类

函数定义角度

从函数定义的角度来看,函数可分为标准函数(即库函数)和用户自定义函数两种。

库函数

库函数由C语言系统提供,用户无需定义,可直接使用,是一些常用功能模块的集合。如printf、scanf、 getchar、 putchar、 gets、puts 等函数均属此类函数。
注:不同的C语言编译系统提供的库函数的功能和数量不尽相同。

自定义函数

自定义函数是用户自定义函数是由用户按需要编写的函数。因为C语言所提供的标准库函数不一定包含了用户所需要的所有功能,为了编制完成特定功能的程序,用户必须通过定义自己编写的函数来实现。

#include<stdio.h>
void main()
{
	void printstar();
	/*对printstar函数进行声明*/
	void print_message();
	/*对print_message函数进行声明*/
	printstar();
	/*调用printstar函数*/
	print_message();
	/*调用print message函数*/ 
	printstar();
	/*调用printstar函数*/
}
void printstar()
{
	/*定义printstar函数*/
printf("**************\n");
}
void print_message()
{
/*定义print message 函数*/
printf("How do you do!\n");
}

在这里插入图片描述
注:printstar 和print_message都是用户定义的函数名,分别用于实现输出一排“”和一行信息。在定义这两个函数时指定函数的类型为void,意为函数为空类型(即无函数值),也就是执行这两个函数后不会把任何值带回main函数。*

函数形式角度

从函数的形式来看,函数可分为无参函数和有参函数两种。

无参函数

无参函数在函数定义、函数说明及函数调用中均不带参数。主调函数和被调函数之间不进行参数传送。此类函数通常用于完成一组指定的功能,可以返回或不返回函数值。

有参函数

有参函数也称为带参函数。有参函数在函数定义及函数说明时都有参数,称为形式参数(简称形参)。在函数调用时也必须给出参数,称为实际参数(简称实参)。进行函数调用时,主调函数将把实参的值传送给形多,供被调函数使用。

函数兼有其他语言中的函数和过程两种功能的角度

从这个角度看,又可把函数分为有返回值函数和无返回值函数两种。

有返回值函数

有返回值函数被调用执行完后向主调函数返回一个执行结果,称为函数返回值。数学函数即属于此类函数。

无返回值函数

无返回值函数用于完成某项特定的任务,执行完成后不向主调函数返回函数值。由于函数无返回值,用户在定义此类函数时应当用void定义函数为“空类型”或“无类型”。

#include<stdio.h>
float area(float x)
{
	float y;
	y = 3.14 * x * x;
	return(y);
}
int  main()
{
	float r, s;
	printf("请输入半径值:");
	scanf("%f", &r);
	s = area(r);
/*调用area函数*/
	printf("面积是%fn", s);
     return 0;
}

在这里插入图片描述

总结

-一个C语言程序(称作源文件)是由一个函数或多个函数组成的。
- 一个C语言程序由一个或多个源程序文件组成。对较大的程序,一般不希望全放在一个文件中,而将函数和其他内容(如宏定义)分别放在若干个源文件中,再由若干源件组成一个C语言程序。这样可以分别编写,分别编译,从而提高调试效率。一个源文件可以为多个C语言程序公用。请添加图片描述
-一个C语言源程序有且仅有一个主函数main,而且无论主函数main位于程序中的什么位置,程序都必须从main函数开始执行,在主函数中完成对其他函数的调用;每一个函数也可以调用其他函数,或被其他函数调用(除主函数外,因为主函数不可以被任何函数调用);当函数调用结束后,控制总是从被调用的函数返回到原来的调用处,最后在主函数中结束整个程序的运行。

在这里插入图片描述

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

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

相关文章

ENVI 国产高分2号(GF-2)卫星数据辐射定标 大气校正 影像融合

1.数据 高分2号卫星数据&#xff0c;包含&#xff1a; MSS-1\2多光谱数据&#xff0c;4m分辨率&#xff1b; Pan-1\2全色波段数据&#xff0c;0.8m分辨率。 2.处理软件 ENVI5.3 国产插件下载地址&#xff1a;ENVI App Store (geoscene.cn) 首先下载插件文件&#xff1b; …

Spring的事务传播行为

事务传播行为 多个声明的事务的方法在相互调用的时候&#xff0c;这个是事务应该如何去传递。 比如说methodA()调用methodB(), 那么这两个方法都显示了开启了事务&#xff0c;那么methodB()是开启一个新的事务还是继续在methodA()这个事务里面去执行就取决于所谓的事务传播的…

多兴趣推荐召回模型:ComiRec

前言 多兴趣向量召回系列&#xff1a; 通过Youtube DNN推荐模型来理解推荐流程 多兴趣召回模型&#xff1a;MIND 推荐系统可以表达为序列推荐问题的形式&#xff0c;序列推荐任务是通过用户的历史行为来预测用户下一个感兴趣的item&#xff0c;这也与真实场景的推荐场景是符…

Linux 通过Chrony实现NTP

Linux实现NTP服务器时间同步&#xff0c;可以通过ntp服务实现&#xff0c;也可以通过chrony服务实现 两者区别主要有 Chrony运行于UDP的323端口&#xff0c;NTP运行于UDP的123端口 Chrony相比于NTP可以更快同步&#xff0c;能够最大同步的减少时间和频率的误差 Chrony能够更好…

linux安装harbor ,搭建镜像私服

linux安装harbor &#xff0c;搭建镜像私服 前提 环境中要有 docker 和 docker-compose 2、下载 harbor 的 .tgz 安装包 官网地址&#xff1a; Releases goharbor/harbor GitHub 第一个是离线安装包&#xff0c;第二个是在线安装包&#xff1b;带asc后缀的文件就是校验…

ROS学习第三十二节——xacro构建激光雷达小车

https://download.csdn.net/download/qq_45685327/87718396 在前面小车底盘基础之上&#xff0c;添加摄像头和雷达传感器。 0.底盘实现 deamo02_base.xacro <!--使用 xacro 优化 URDF 版的小车底盘实现&#xff1a;实现思路:1.将一些常量、变量封装为 xacro:property比如…

【Spring】Spring AOP

目录 一、Spring AOP简介1.什么是AOP2.AOP术语 二、AspectJ开发1.基于XML的声明式AspectJ1.1 配置切面1.2 配置切入点1.3 配置通知 2.基于注解的声明式AspectJ 一、Spring AOP简介 1.什么是AOP AOP的全称是Aspect-Oriented Programming&#xff0c;即面向切面编程&#xff08;…

一种引入过渡阶段和高斯变异的改进算术优化算法(TGAOA)-附代码

一种引入过渡阶段和高斯变异的改进算术优化算法(TGAOA) 文章目录 一种引入过渡阶段和高斯变异的改进算术优化算法(TGAOA)1.算术优化算法2. 改进算术优化算法2.1 重构数学加速优化器 MOA2.2 新策略的引入2.3 具有一致性的高斯变异策略2.4具有一致性的高斯变异策略 3.实验结果4.参…

YOLOv8 应用轻量级通用上采样算子CARAFE

特征上采样是现代卷积神经网络架构中的关键操作,例如特征金字塔。其设计对于密集预测任务,如目标检测和语义/实例分割至关重要。在本研究中,我们提出了一种称为内容感知特征重组(CARAFE)的通用、轻量级且高效的操作符,以实现这一目标。CARAFE具有以下几个优点:(1)大的…

模型评估与选择

一、问题 在现实任务中&#xff0c;我们往往有多种学习算沾了供选择&#xff0c;甚至对同 -个学习算法&#xff0c;当使用不同的参数配置时也会产生不 同的模型 . 那么&#xff0c;我们该选用 哪一个学习算法、使用哪一种参数配置呢? 理想的解决方案当然是对候选模型的泛化误…

Java线程详解

线程是CPU调度和分配的基本单位&#xff0c;是操作系统可以识别的最小执行和调度单位&#xff0c;每个线程都有自己特定的独立的内存区域&#xff0c;当然也与其他线程共享堆内存&#xff0c;文件队列以及其他内核资源&#xff0c;Java虚拟机允许一个应用拥有多个线程并发工作。…

AI绘画——Lora模型 小人书·连环画 xiaorenshu

目录 小人书连环画 使用说明&#xff1a; Instructions for v1.5: Instructions for v1.0: 下载地址 模型演示&#xff08;多图预警&#xff09; Night Sky YOZORA Model 模型 Lora模型xiaorenshu pastel-mix模型pastel-waifu-diffusion.vae模型Lora模型xiaorenshu 小人书…

JavaSE05|数组的定义与使用

文章目录 JavaSE05|**数组的定义与使用**1.数据基本概念**2.** **数组是引用类型****3.** **数组的应用场景** JavaSE05|数组的定义与使用 1.数据基本概念 定义&#xff1a;可以看成是相同类型元素的一个集合 1.1数组初始化 动态初始化&#xff1a;在创建数组时&#xff0c…

使用 Kubectl Patch 命令更新资源

Kubectl patch 命令允许用户对运行在 Kubernetes 集群中的资源进行局部更新。相较于我们经常使用的 kubectl apply 命令&#xff0c;kubectl patch 命令在更新时无需提供完整的资源文件&#xff0c;只需要提供要更新的内容即可。 Kubectl patch 支持以下 3 种 patch 类型&…

ROS学习第三十三节——Arbotix使用

https://download.csdn.net/download/qq_45685327/87718484 1.介绍 通过 URDF 结合 rviz 可以创建并显示机器人模型&#xff0c;不过&#xff0c;当前实现的只是静态模型&#xff0c;如何控制模型的运动呢&#xff1f;在此&#xff0c;可以调用 Arbotix 实现此功能。 Arboti…

第九章 桥接模式

文章目录 前言一、桥接模式(Bridge)-基本介绍完整代码Brand 手机接口&#xff0c;定义行为Vivo 实现 Brand 接口XiaoMi 实现 Brand 接口Phone 抽象桥接类FoldedPhone 实现桥接 &#xff08;折叠样式手机&#xff09;UpRightPhone 实现桥接&#xff08;直立样式手机&#xff09;…

干货 | 被抑郁情绪所困扰?来了解CBT吧!

Hello&#xff0c;大家好&#xff01; 这里是 壹脑云科研圈 &#xff0c;我是 喵君姐姐~ 我们的情绪就像是一组正弦波&#xff0c;有情绪很高涨的时刻&#xff0c;也会有情绪低落的瞬间&#xff0c;也会有情绪平稳的时候。 这种情绪上的变化非常正常&#xff0c;也正是因为这…

shell的变量功能

文章目录 shell的变量功能什么是变量&#xff1f;变量的可变性与方便性影响bash环境操作的变量脚本程序设计(shell script)的好帮手 变量的使用与设置&#xff1a;echo、变量设置规则、unset变量的使用(echo)变量设置的规定使用案例 环境变量的功能用env观察环境变量与常见环境…

数据结构(五)—— 栈与队列(2)

一、接上章 栈与队列的中等、困难题。 堆是一块动态内存 栈是先进后出的堆的一种方法 队列是一种先进先出的线性表 二、题 2.5 150 逆波兰表达式求值 很有意思的一道题&#xff0c;将中缀表达式 4 13 / 5&#xff0c;转化为后缀表达式之后&#xff1a;["4", &qu…

深入理解机器学习——过拟合(Overfitting)与欠拟合(Underfitting)

分类目录&#xff1a;《深入理解深度学习》总目录 机器学习的主要挑战是我们的算法必须能够在先前未观测的新输入上表现良好&#xff0c;而不只是在训练集上表现良好。在先前未观测到的输入上表现良好的能力被称为泛化&#xff08;Generalization&#xff09;。通常情况下&…