C语言 9 —— 函数

news2024/11/24 17:50:11

           把相同业务功能维度的代码有机的整合起来做成函数,这样做既可以方便反复调用,又可以在空间上节省代码行数。

  • 函数的定义:
返回值类型 函数名(参数类型1 参数变量名1, ....参数类型N 参数变量N){ //此处参数为形参
    // 函数体.... 
} 

        如果不需要返回值,可以返回 void 。

  • 函数的调用:
函数名(参数1,参数2); // 此处叫实参

       1. 函数的调用,实参和形参的类型必须兼容。在C语言中,函数的实参是形参的拷贝,且形参不会影响到实参。(C语言中是没有引用类型的,但是在C++语言中,如果形参的类型是引用类型或者数组类型的时候,拷贝的是地址,地址的传递是可以影响到引用的数据的。)

       2. 函数本身就是一个表达式。函数调用的表达式的值,由函数内部的return 语句决定。

  • return语法:
return 返回值; 

       函数遇到 return 函数执行结束,并将返回值返回,作为函数的出口,可以多次出现。 函数返回可以是表达式,常量,变量都可以的。如果返回值是void ,可以直接写 return ;

  • 定义函数和使用函数 参考代码:
#include <iostream>
using namespace std;

//     printf("V = %.2f ", CalculateVolume());
double CalculateVolume(double r){
    // 对半径为 r 的球 ,其体积的计算公式为 V = 4/3 * i* r³ ,这里 i = 3.14。 现给定r,求V (保留小数点 后2位);
    cin >> r ;
    double i = 3.14;
    double V= (4/3.0)*i*r*r*r;
    return V;
}

bool isPrime(unsigned int n){
    if(n<=1){
        return false;
    }

    for(int i = 2;i<n;++i){
        if(n%i ==0) return false;
    }
    return true;
}

int main() {
    //1.调用 求体积的函数。
    double v = CalculateVolume(4.0);
    printf("v = %2.f \n", v);

    //2.调用素数函数。
    cout<< isPrime(2) << "," << isPrime(4)<<","<<isPrime(5);

}


        C++ 语言的规定: 被调用函数必须放在调用函数的前面,否则编译器就会报错;比如:本例代码的两个函数都放在main函数前面。C语言和Java和Go,就没有这个规定。

为了解决函数连环调用的问题,在函数调用语句前,只要有函数的声明即可,不一定要有定义。

代码如下 :

#include <iostream>

using namespace std;

//函数的声明1:
// double CalculateVolume(double r);
//函数的声明2 : 参数的名称可以省略。
double CalculateVolume(double);
int main() {
    printf("V = %.2f ", CalculateVolume(4));
}

double CalculateVolume(double r) {
    // 对半径为 r 的球 ,其体积的计算公式为 V = 4/3 * i* r³ ,这里 i = 3.14。 现给定r,求V (保留小数点 后2位);
    cin >> r;
    double i = 3.14;
    double V = (4 / 3.0) * i * r * r * r;
    return V;
}

        函数的声明也成为函数的原型。

递归函数:

        提到了函数不能不提递归,递归函数就是自己调用自己,它是把一个大问题,缩小成一个更小范围的问题,并且一定要在给一个临界问题的终止条件,不能永无止境的调用下去。

#include <iostream>

using namespace std;

// 阶乘
int Factorial(int);

int main() {
    int n = 4;
    printf("Factorial(%d) = %d ",n, Factorial(n));
}

int Factorial(int n) {
    if (n < 2) {
        return 1;//临界终止条件。
    } else {
        return n * Factorial(n - 1);
    }
}

运行图示:

         递归之斐波那契数列:

#include <iostream>

using namespace std;

// 求斐波那契数列 第n项
int Fib(int);

int main() {
    int n = 4;
    printf("Fib(%d) = %d ", n, Fib(n));
}

int Fib(int n) {
    if (n == 1 || n == 2)
        return 1;
    else
        return Fib(n - 1) + Fib(n - 2);
}

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

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

相关文章

【强化学习论文清单】AAAI-2022 | 人工智能CCF-A类会议(附链接)

人工智能促进会(AAAI)成立于1979年&#xff0c;前身为美国人工智能协会(American Association for Artificial Intelligence)&#xff0c;是一个非营利性的科学协会&#xff0c;致力于促进对思想和智能行为及其在机器中的体现的潜在机制的科学理解。AAAI旨在促进人工智能的研究…

【构建ML驱动的应用程序】第 5 章 :训练和评估模型

&#x1f50e;大家好&#xff0c;我是Sonhhxg_柒&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f4dd;个人主页&#xff0d;Sonhhxg_柒的博客_CSDN博客 &#x1f4c3; &#x1f381;欢迎各位→点赞…

Linux 文件系统与inode,软硬链接

目录 磁盘的结构 磁盘的抽象&#xff08;虚拟&#xff0c;逻辑&#xff09;结构 分区 Block Group 块组&#xff1a; 分析&#xff1a; 文件名 vs inode编号 创建/删除/查看 一个文件&#xff0c;操作系统做了什么&#xff1f; 软硬链接 软连接 硬链接 对比&#xf…

Devart IBDac数据访问组件库

Devart IBDac数据访问组件库 IBDAC是一个完整的InterBase(和FireBird)数据访问组件库&#xff0c;用于将程序连接到FireBird、InterBase和Yaffil。该库有Dolphin、CBuilder、Lazarus和Free Pascal版本&#xff0c;可用于32/64位Windows、Mac OS X、iOS、Android、Linux和FreeBS…

Nacos Config--服务配置

目录 服务配置中心介绍 Nacos Config入门 Nacos Config深入 配置动态刷新 配置共享 nacos的几个概念 创建命名空间(Namespace) 命名空间 组 Nacos多环境切换 如何解决不同环境配置不同 如何解决不同环境配置相同 不同微服务相同配置共享 bootstrap 总结 服务配置…

融云 IM 和 RTC 服务,「助攻」智能物流等客户打通链路、完善生态

关注公众号报名融云&艾瑞“政企数智办公研究报告及新品发布会” 移动互联网时代&#xff0c;通信技术已经突破传统优势项“社交泛娱乐场景”的应用范围&#xff0c;在不同的业务中大放异彩&#xff0c;起到打通链路的关键作用。关注【融云全球互联网通信云】回复【融云】抽…

【数据挖掘】分类与回归预测

OutLine 章节概述1分类与预测2关于分类与预测中存在的问题3决策树分类4贝叶斯分类5BP网络分类6其他分类算法7预测8准确性与误差Chapter 1. 分类与预测 分类 预测分类标签&#xff0c;可以是离散数据或者是名义数据根据训练集和分类属性中的类标签对记录进行分类&#xff0c;…

【构建ML驱动的应用程序】第 6 章 :调试 ML 问题

&#x1f50e;大家好&#xff0c;我是Sonhhxg_柒&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f4dd;个人主页&#xff0d;Sonhhxg_柒的博客_CSDN博客 &#x1f4c3; &#x1f381;欢迎各位→点赞…

iTOP2K1000开发板Makefile文件

Makefile 就是描述了整个工程编译连接等规则的文件。 我们在终端输入完 make 命令之后&#xff0c;会调用 make 工具&#xff0c; make 就会在当前目录按照文件名就会找 makefile 文件&#xff0c; Makefile 的命名必须是 makefile 或 Makefile &#xff0c; m 大写小写都是可以…

ubuntu+Docker部署Django+Vue项目(1-Vue)

文章目录ubuntu安装下载Docker1.卸载(清除旧版本。没下载过也可以执行下试试)2.更新apt包索引并安装包&#xff0c;以允许apt通过HTTPS使用存储库3.添加Docker的官方GPG密钥4.使用以下命令设置存储库5.更新apt包索引6.安装最新版本的Docker Engine、containerd和Docker Compose…

概率论发展史上的几个重要悖论

1. 蒙提霍尔问题&#xff08;三门问题&#xff09; 三门问题&#xff08;Monty Hall problem&#xff09;亦称为蒙提霍尔问题、蒙特霍问题或蒙提霍尔悖论&#xff0c;大致出自美国的电视游戏节目Lets Make a Deal。问题名字来自该节目的主持人蒙提霍尔&#xff08;Monty Hall&…

数字图像处理(十)腐蚀和膨胀

文章目录前言一、腐蚀1.概念2.算法的具体步骤3.举例4.python代码二、膨胀1.概念2.算法步骤3.举例4.C代码5. 结果展示参考资料前言 二值图像中一类主要处理是对提取的目标图形进行形态分析。形态学处理中最基本的是腐蚀和膨胀。   腐蚀和膨胀是两个互为对偶的运算。腐蚀的作用…

g++无法找到动态库问题

文章目录一、错误发现二、include两种查找方式三、路径1.gcc与g路径2.头文件路径(1)默认路径(2)使用-l指定路径寻找。(3)gcc搜索头文件的顺序3.库文件路径(1)默认路径(2)编译时指定路径(3)在配置文件中指定路径(4)通过环境变量(5)查找顺序一、错误发现 在使用各种各样的C库的时…

栈进阶:ElasticSearch

栈进阶&#xff1a;ElasticSearch 文章目录前言一、学习ES1、ES课程简介2、聊聊Lucene创始人3、ES概述1、历史2、谁在使用3、ELK简介4、Solr和ES的差别1、ES简介2、Solr简介3、Lucene简介4、ElasticSearch与Solr比较5、ES安装及head插件安装1、ES安装2、Window下安装3、安装可视…

【深入浅出Spring6】第十期——尾声

一、Spring集成了Junit 之前我们只是使用Junit的测试注解 Test&#xff0c;并没有使用Spring对于Junit的支持 Spring6既支持Junit4、也支持Spring5 要想使用Spring对于Junit的支持&#xff0c;我们需要在pom中导入相关依赖 <!--我们引入Spring对junit支持的依赖 >> …

[LeetCode/力扣][Java] 0315. 计算右侧小于当前元素的个数(Count of Smaller Numbers After Self)

题目描述&#xff1a; 给你一个整数数组 nums &#xff0c;按要求返回一个新数组 counts 。数组 counts 有该性质&#xff1a; counts[i] 的值是 nums[i] 右侧小于 nums[i] 的元素的数量。 示例1&#xff1a; 输入&#xff1a;nums [5,2,6,1] 输出&#xff1a;[2,1,1,0] 解释&…

CSS3------什么是css

什么是CSS 层叠样式表Cascading Style Sheets&#xff0c;缩写为CSS&#xff0c;是一种样式表语言&#xff0c;用来描述HTML或XML&#xff08;包括如SVG、MathML、XHTML 之类的XML 分支语言&#xff09;文档的呈现。 CSS描述了在屏幕、纸质、音频等其它媒体上的元素应该如何被…

uniapp之路由中携带参数跳转

目录 前言 一 路由跳转方式 1. 直接在 template中定义 2.直接在methods中定义 二 携带参数 1.在template中定义 2.在methods里定义 3. 拼接 前言 在我们写 uniapp 小程序时&#xff0c;时常遇到的就是路由携带参数进行跳转&#xff0c;这项功能似乎已成家常便饭一样&am…

(八)笔记.net core学习之特性Attribute声明、使用、验证

1.特性Attribute 特性&#xff1a;是用于在运行时传递程序中各种元素&#xff08;比如类、方法、结构、枚举、组件等&#xff09;的行为信息的声明性标签。您可以通过使用特性向程序添加声明性信息。一个声明性标签是通过放置在它所应用的元素前面的方括号&#xff08;[ ]&…

缺陷修改实践——replace函数的运用|思考?

目录介绍问题出现问题分析解决方法优化实现总结介绍 大家好&#xff0c;我是清风。今天给大家分享一个项目中遇到问题解决问题的案例&#xff0c;编程其实就是一个思考的过程&#xff0c;缺少思考就没有灵魂&#xff0c;遇到问题先静下心去思考&#xff0c;想到方法后再去实践。…