C/C++语言 9 —— 函数

news2024/11/18 11:39:12

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

  • 函数的定义:
返回值类型 函数名(参数类型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/29842.html

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

相关文章

外汇天眼:德国PPI利淡欧美镑美跌逾百点,美元涨近百点,黄金跌约20美元,关注美制造业指数

昨日重要因素影响 : 1.英媒&#xff1a;英国在继续购买俄罗斯石油 但称从其他国家进口 2.德国10月PPI月率低于市场预期 3.欧洲央行首席经济学家连恩&#xff1a;我们将在12月再次加息&#xff0c;不认为12月将是最后一次加息 4.穆迪&#xff1a;在需求降温的环境下&#xf…

Java标准输入输出流【转换流打印流】

➤ Java 输入输出IO流 全部导航 文章目录乱码转换【转换流】InputStreamReaderOutputStreamWriter打印流&#xff1a;PrintStreamPrintWriter类型默认设备System.in 标准输入InputStream键盘System.out 标准输出PrintStream显示器 System类的 public final static InputStream…

C++ 语法基础课4 —— 数组

文章目录1. 一维数组1.1 数组的定义1.2 数组的初始化1.3 访问数组元素(通过下标访问数组)1.4 练习1:1.5 练习21.6 练习31.7 练习41.8 练习4(难点)2. 多维数组2.1 练习11. 一维数组 1.1 数组的定义 数组的定义方式和变量类似 #include<iostream> #include<algorithm…

linux网络编程 - epoll边沿触发/水平触发内核实现代码分析

1、listen socket水平触发的poll函数调用 以服务器端epoll为例&#xff0c;加入监听、等待并接受连接、再次等待&#xff0c;会有3次检查是否有连接就绪的操作&#xff0c;分别是epoll_ctl、epoll_wait、epoll_wait。 1.1、epoll_wait(第1次调用) 等待就绪链表相关内核看前面发…

dropout 机制存在,对于同一句子的两次输出是不同的

SimCSE 提供了无监督&#xff08;上图 a&#xff09;和有监督&#xff08;上图 b&#xff09;两种架构&#xff0c;由于业务需要我们只用了无监督方式&#xff0c;其基本思路是&#xff1a; 1. 同一个 batch 内的数据两次输入模型。 2. 由于有 dropout 机制存在&#xff0c;对…

摩托车商城系统(基于javaweb开发的项目)

目录 前言 一、项目目录 二、效果图 2.1 首页面效果图 2.2 商品分类页面 ​​​​​​​2.3 热销栏页面 2.4 新品栏页面 2.5 购物狂欢栏页面 2.6 我的订单页面 2.7 个人中心页面 2.8 注册页面 2.9 用户登录页面 2.10 Admin后台管理主页面 2.11 Admin订单管理页面 2.12 A…

[附源码]SSM计算机毕业设计基于社区生鲜配送系统JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

万字总结线程池

本文将从背景、原理、架构、实现、参数状态等方面详细介绍percona-线程池。此外&#xff0c;还将简单介绍腾讯云企业级MySQL(CDB)内核技术--TXSQL&#xff0c;关于线程池的动态启停、负载均衡以及快速断连等优化。 「第一部分 背景」 社区版的MySQL的连接处理方法默认是为每个…

“信任机制”才是数字化时代发展中的精髓所在

2008年&#xff0c;美国次贷危机全面爆发并不断蔓延&#xff0c;最终席卷全球&#xff0c;酿成了世界性的金融危机。当年11月1日&#xff0c;一位署名为中本聪的人发表一篇《比特币&#xff1a;一种点对点的电子现金系统》论文提出了一种完全通过点对点技术实现的电子现金系统。…

Flutter 实现背景 Parallax 动画

Flutter 实现背景 Parallax 动画 原文 https://arkapp.medium.com/background-parallax-animation-in-flutter-4aa9e23d6cfb 前言 我们将创建我们的 Flutter 项目惊人的 Parallax 动画。 在本文中&#xff0c;我们将实现一个简单的实用工具 widget &#xff0c;它将在任何 widg…

Transformer/Bert

诸神缄默不语-个人CSDN博文目录 文章目录1. Transformer1.1 Transformer整体工作流程1.2 Transformer的输入1.2.1 单词 Embedding1.2.2 位置 Embedding1.3 Block1.3.1 Add & Norm层1.3.2 Self-Attention1.3.3 Multi-Head Attention1.3.4 Feed Forward1.3.5 Masked Multi-He…

[附源码]计算机毕业设计JAVA篮球装备商城系统

[附源码]计算机毕业设计JAVA篮球装备商城系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybati…

HTTP/2是什么?和HTTP/1.1有什么不同?和SPDY有什么不同?

HTTP/2简介 HTTP/2 是超文本传输协议第2版&#xff0c;最初命名为 HTTP 2.0 &#xff0c;其简称为 h2&#xff08;基于TLS/1.2或以上版本的加密连接&#xff09;或 h2c&#xff08;非加密连接&#xff09;&#xff0c;是HTTP协议的的第二个主要版本&#xff0c;使用于万维网。 …

备考2023年软考需要了解什么?

2022年软考已经结束啦&#xff01;下半年还是有不少地区取消了&#xff0c;没能报上名或是没能正常参考的朋友们&#xff0c;只能把目光转向2023年了。 这篇文章就来给大家讲讲备考2023年软考需要了解什么&#xff1f; 软考小白必看哦&#xff01; 一、软考是啥&#xff1f;…

带你走进神奇的元宇宙的世界

&#x1f3e0;个人主页&#xff1a;黑洞晓威 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是晓威&#xff0c;一名普普通通的大二在校生&#xff0c;希望在CSDN中与大家一起成长。&#x1f381;如果你也在正在学习Java&#xff0c;欢迎各位大佬来到我的博客查漏补缺…

阿里架构师推荐,微服务分布式构架开发实战PDF,快快收藏吧

什么是微服务架构 微服务是一种软件架构风格&#xff0c;目标是将一个复杂的应用拆分成多个服务模块&#xff0c;每个模块专注单一业务功能对外提供服务&#xff0c;并可以独立编译及部署&#xff0c;同时各模块间互相通信彼此协作&#xff0c;组合为整体对外提供完整服务。 微…

嵌入式开发学习之--创建工程

提示&#xff1a;本篇文章依旧是了解为主&#xff0c;实际做项目时直接找开源的类似项目做模板更效率。 文章目录一、前言二、新建工程三、使用模板工程四、总结一、前言 前面的学习&#xff0c;都是文件内的代码联系&#xff0c;这一篇&#xff0c;是学习文件与目录的联系。当…

数字信号处理-8-自相关

1 皮尔森相关系数 假设 x 和 y 均为 N 个样本的数组&#xff0c;皮尔森公式如下&#xff1a; 皮尔森相关系数总是在 -1 到 1 之间&#xff08;包含这两个字&#xff09;。ρ 的绝对值意味着相关性的强度。ρ 接近 1 表示强正相关&#xff1b;ρ 接近 -1 表示强负相关&#xf…

上传文件很费时费力?那是你没用对方式

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录前言一、前端直传的优点二、实现步骤2.1、后端方面2.1.1 添加依赖2.1.2 增加接口2.1.3 测试接口2.2、前端方面2.2.1 安装 cos-js-sdk-v5 依赖2.2.2 新建组件2.2.3 使…

你的哪些SQL慢?看看MySQL慢查询日志吧

前言 在项目里面&#xff0c;多多少少都隐藏着一些执行比较慢的SQL, 不同的开发测试人员在平时使用的过程中多多少少都能够遇到&#xff0c;但是无法立马有时间去排查解决。那么如果有一个文件能够将这些使用过程中比较慢的SQL记录下来&#xff0c;定期去分析排查&#xff0c;…