当前位置: 首页 > news >正文

C语言--函数

1. 函数定义

语法:

类型标识符 函数名(形式参数)
{函数体代码
}

(1)类型标识符 --- 数据类型(函数要带出的结果的类型)

注:数组类型不能做函数返回结果的类型,如果函数不需要带出什么结果,此时返回结果的类型说明符为void,如果返回结果的类型与类型说明符不一致,以类型说明符为准(类型说明符不写,默认为int)。

(2)函数名 --- 标识符,符合标识符命名规则

(3)形式参数 --- 表示改函数需要用到的数据

注:每一个形参变量都得指定类型,实参和形参需要类型匹配,参数个数相同,顺序一一对应,如果不需要接收实际参数,形参一般设计为void

(4)函数体代码 --- 实现函数功能的代码。

        写法:                

数据类型 形参变量名1,数据类型 形参变量2...
int a,int bint a,b     // 不能这样写

2. 函数调用

函数调用的本质:实际上是利用栈的结构,先进后出,保证了函数可以层层嵌套调用。

调用者和被调用者:main函数时整个程序的入口,只能是调用者

注:函数不支持嵌套定义,但是可以嵌套调用

函数名是函数的入口地址。

3. 递归

可以实现循环的功能,是一种特殊的循环。

直接递归:自己调用自己

间接调用:调用其他函数,其他函数调用了自己,这样又实现了调用自己。

代码实现思路:

(1)递推关系 --- 从问题n到问题n - 1;

(2)递推结束的条件

eg:前 n 项的累加求和

sum(n)=> sum(n-1)+ n            //递推关系

n = 1;                           // 结束条件

#include<stdio.h>int sum(int n)
{if(n==1)                    // 递推结束条件{return 1;}else{return sum(n-1)+n;     // 递推关系}
}int main(void)
{int n;printf("Input a num:");scanf("%d",&n);int ret = sum(n);printf("%d\n",ret);return 0;
}

代码运行结果:

4. 数组作为函数参数

(1)数组元素作为函数参数--- a[0]

(2)数组本身作为函数参数--- a

        形参--- 写成数组形式,还需要数组长度

        实参--- 数组名,数组长度

printfArray(int a[],int len)    // 形参printArray(a,len);    //调用

eg:打印数组元素

#include<stdio.h>void printArray(int a[],int len)        // 定义形参
{int i = 0;for(i = 0;i < len;++i){printf("a[%d] = %d\n",i,a[i]);}
}int main(void)
{int a[] = {1,2,3,4,5,6,7,8,9};int len = sizeof(a)/sizeof(a[0]);printArray(a,len);                  // 调用时传入实参return 0;
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【dijkstra】迪杰斯特拉算法 洛谷 P1828例题代码讲解
  • C++与云计算的融合:构建高效、可扩展的云服务
  • 逻辑推理之lora微调
  • 2024/8/3 英语每日一段
  • 数据结构与算法 - 堆
  • Halcon 模型变化
  • 题解题解题解题解
  • 《古代希腊赛会研究:能揭开古希腊赛会的神秘面纱吗?》
  • 学习编程的第二十天,加油!
  • 【Android】通知的使用
  • 【java基础】徒手写Hello, World!程序
  • 剪画小程序:致敬奥运举重冠军:照片变成动漫风格!
  • Python 爬虫项目实战(二):爬取微博热搜榜
  • Flink笔记整理(六)
  • WordPress资源下载类主题 CeoMax-Pro_v7.6绕授权开心版
  • centos安装java运行环境jdk+tomcat
  • css的样式优先级
  • CSS进阶篇--用CSS开启硬件加速来提高网站性能
  • javascript 总结(常用工具类的封装)
  • Js基础知识(一) - 变量
  • mockjs让前端开发独立于后端
  • Python中eval与exec的使用及区别
  • Vue 动态创建 component
  • Vue源码解析(二)Vue的双向绑定讲解及实现
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 前端js -- this指向总结。
  • 前端路由实现-history
  • 如何利用MongoDB打造TOP榜小程序
  • 腾讯大梁:DevOps最后一棒,有效构建海量运营的持续反馈能力
  • 我这样减少了26.5M Java内存!
  • 小程序 setData 学问多
  • 最简单的无缝轮播
  • #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
  • (windows2012共享文件夹和防火墙设置
  • (二)WCF的Binding模型
  • (翻译)Entity Framework技巧系列之七 - Tip 26 – 28
  • (附源码)ssm高校实验室 毕业设计 800008
  • (附源码)计算机毕业设计SSM在线影视购票系统
  • (算法)大数的进制转换
  • (正则)提取页面里的img标签
  • (终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测
  • (转)AS3正则:元子符,元序列,标志,数量表达符
  • (最新)华为 2024 届秋招-硬件技术工程师-单板硬件开发—机试题—(共12套)(每套四十题)
  • **Java有哪些悲观锁的实现_乐观锁、悲观锁、Redis分布式锁和Zookeeper分布式锁的实现以及流程原理...
  • .NET Conf 2023 回顾 – 庆祝社区、创新和 .NET 8 的发布
  • .net framework 4.0中如何 输出 form 的name属性。
  • .net framework profiles /.net framework 配置
  • .Net OpenCVSharp生成灰度图和二值图
  • .NET 应用架构指导 V2 学习笔记(一) 软件架构的关键原则
  • .NET/C# 将一个命令行参数字符串转换为命令行参数数组 args
  • .net对接阿里云CSB服务
  • .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验