C++ 函数(模块化编程)

article/2025/8/30 6:05:58

目录

函数定义

函数

函数定义的语法形式

函数调用

调用函数需要先声明函数原型

函数调用形式

嵌套调用

例3-1编写一个求x的n次方的函数

例3-2  数制转换

源代码:

例3-3

编写程序求π的值

arctan函数

主程序

例3-4

寻找并输出11~999之间的数M,它满足M、M2和M3均为回文数。

源代码:

例3-5 计算分段函数,并输出结果

例3-6投骰子的随机游戏

rand函数

srand函数

源代码


函数定义

函数

函数:定义好的、可重用的功能模块

定义函数:将一个模块的算法用C++描述出来

函数名:功能模块的名字

函数的参数:计算所需要的数据和条件

函数的返回值:需要返回的计算结果

函数定义的语法形式

函数名

形式参数表

语句序列

类型标识符

函数调用

调用函数需要先声明函数原型

若函数定义在调用点之前,可以不另外声明;

若函数定义在调用点之后,必须要在调用函数前声明函数原型:

函数原型:类型标识符 被调用函数名(含类型说明的形参表)

函数调用形式

函数名(实参列表)

嵌套调用

17.png

嵌套调用:在一个函数的函数体中,调用另一函数。

例3-1编写一个求x的n次方的函数

#include <iostream>using namespace std;//计算x的n次方double power(double x, int n) {double val = 1.0;while (n--) val *= x;return val;}int main() {cout << "5 to the power 2 is "
<< power(5, 2) << endl;return 0;}

例3-2  数制转换

输入一个8位二进制数,将其转换为十进制数输出。

例如:从键盘输入1101

11012=1×23+1×22+0×21+1×20=1310

所以,程序应输出13

源代码:

#include <iostream>
using namespace std;double power (double x, int n); //计算x的n次方int main() {int  value = 0;cout << "Enter an 8 bit binary number  ";for (int i = 7; i >= 0; i--) {char ch;cin >> ch;if (ch == '1')value += static_cast<int>(power(2, i));}cout << "Decimal value is  " << value << endl;return 0;
}
double power (double x, int n) {double val = 1.0;while (n--) val *= x;return val;
}

例3-3

编写程序求π的值

l  π的计算公式如下:

arctan1.gif

l  其中arctan用如下形式的级数计算:

arctan2.gif

l  直到级数某项绝对值不大于10-15为止;π和x均为double型。

arctan函数

#include <iostream>using namespace std;double arctan(double x) {double sqr = x * x;double e = x;double r = 0;int i = 1;while (e / i > 1e-15) {double f = e / i;r = (i % 4 == 1) ? r + f : r - f;e = e * sqr;i += 2;}return r;}

主程序

int main() {double a = 16.0 * arctan(1/5.0);double b = 4.0 * arctan(1/239.0);//注意:因为整数相除结果取整,如果参数写1/5,1/239,结果就都是0cout << "PI = " << a - b << endl;return 0;}

例3-4

寻找并输出11~999之间的数M,它满足M、M2和M3均为回文数。

l  回文:各位数字左右对称的整数。

l  例如:11满足上述条件

n  112=121,113=1331。

分析:

用除以10取余的方法,从最低位开始,依次取出该数的各位数字。按反序重新构成新的数,比较与原数是否相等,若相等,则原数为回文。

源代码:

#include <iostream>using namespace std;//判断n是否为回文数bool symm(unsigned n) {unsigned i = n;unsigned m = 0;while (i > 0) {m = m * 10 + i % 10;i /= 10;}return m == n;}int main() {for(unsigned m = 11; m < 1000; m++)if (symm(m) && symm(m * m) && symm(m * m * m)) {cout << "m = " << m;cout << "  m * m = " << m * m;cout << "  m * m * m = "<< m * m * m << endl;}return 0;}

运行结果:

m=11  m*m=121  m*m*m=1331m=101  m*m=10201  m*m*m=1030301m=111  m*m=12321  m*m*m=1367631

例3-5 计算分段函数,并输出结果

其中r、s的值由键盘输入。sin x的近似值按如下公式计算,计算精度为10-10:

 

3-6投骰子的随机游戏

每个骰子有六面,点数分别为1、2、3、4、5、6。游戏者在程序开始时输入一个无符号整数,作为产生随机数的种子。

每轮投两次骰子,第一轮如果和数为7或11则为胜,游戏结束;和数为2、3或12则为负,游戏结束;和数为其它值则将此值作为自己的点数,继续第二轮、第三轮...直到某轮的和数等于点数则取胜,若在此前出现和数为7则为负。

rand函数

l  函数原型:int rand(void);

l  所需头文件:<cstdlib>

l  功能和返回值:求出并返回一个伪随机数

 

srand函数

l  void srand(unsigned int seed);

l  参数:seed产生随机数的种子

l  所需头文件:<cstdlib>

l  功能:为使rand()产生一序列伪随机整数而设置起始点。使用1作为seed参数,可以重新初化rand()。

源代码

#include <iostream>
#include <cstdlib>
using namespace std;
enum  { WIN=0, LOSE=1, PLAYING=2 };
int main() {int sum, myPoint;int  status;unsigned seed;int rollDice();cout << "Please enter an unsigned integer: ";cin >> seed; //输入随机数种子srand(seed); //将种子传递给 rand()sum = rollDice(); //第一轮投骰子、计算和数switch (sum) {case 7: //如果和数为 7 或 11 则为胜,状态为 WINcase 11:status = WIN;break;case 2: //和数为 2、3 或 12 则为负,状态为 LOSEcase 3:case 12:status = LOSE;break;default: //其它情况,尚无结果,状态为 PLAYING,记下点数status = PLAYING;myPoint = sum;cout << "point is " << myPoint << endl;break;}while (status == PLAYING) { //只要状态为 PLAYING,继续sum = rollDice();if (sum == myPoint) //某轮的和数等于点数则取胜status = WIN;else if (sum == 7) //出现和数为 7 则为负status = LOSE;}//当状态不为 PLAYING 时循环结束,输出游戏结果if (status == WIN)cout << "player wins" << endl;elsecout << "player loses" << endl;return 0;
}
//投骰子、计算和数、输出和数
int rollDice() {int die1 = 1 + rand() % 6;int die2 = 1 + rand() % 6;int sum = die1 + die2;cout << "player rolled " << die1 << " + " << die2 << " = " << sum << endl;return sum;
}


http://chatgpt.dhexx.cn/article/mAlgJxBe.shtml

相关文章

单片机常开常闭检测

单片机检测常开常闭点&#xff08;干接点信号&#xff09;的方法&#xff1a;检测干接点的闭合和断开&#xff0c;从而单片机实施一定的操作&#xff0c;它具有两根线&#xff0c;具体步骤&#xff1a;1、引出单片机一个IO口线&#xff0c;连接干接点一端。2、干接点另一端通过…

干海星怎么吃做法 干海星的功效与作用有哪些

干海星是生活中并不常见的一种海鲜类食材&#xff0c;在很多人眼中干海星都是一种中药材&#xff0c;其实它也可以当做一种菜品来食用&#xff0c;那么干海星应该怎么吃呢&#xff1f;接下来我就把自己总结的干海星吃法大全写出来分享给大家。 干海星怎么吃 干海星的功效与作用…

大前端干货资料

JavaScript 文档&#xff1a;https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference ES6 入门教程&#xff1a;https://es6.ruanyifeng.com/ Vue 官网&#xff1a;https://cn.vuejs.org router 官网&#xff1a;https://router.vuejs.org/zh UI框架 Ele…

干簧管(磁开关)

其实干簧管的工作原理并不复杂 干簧管的特点&#xff1a; 干簧管是干式舌簧管的简称&#xff0c;是一种有触点的无源电子开关元件&#xff0c;具有结构简单&#xff0c;体积小便于控制等优点&#xff0c;其外壳一般是一根密封的玻璃管&#xff0c;管中装有两个铁质的弹性簧片…

苹果手机位置共享后没开启定位服务器,iPhone默认开启但无卵用的设置开着干嘛?难怪手机这么耗电...

原标题&#xff1a;iPhone默认开启但无卵用的设置开着干嘛&#xff1f;难怪手机这么耗电 如果你的苹果手机开启了定位功能&#xff0c;那么在iPhone【设置】-【隐私】-【定位服务】-系统服务】&#xff0c;点击进入后有很多项开关&#xff0c;而很多都是在打开定位服务后默认开…

adams打不开提示msc license_adams安装后打不开

虽然要支持正版……但是 安装后打不开&#xff0c;借鉴了adams2017安装教程后台留言 图片发自简书App 1.首先我这么做是因为其实在安装过程中就有一次没找到路径 。所以该方法仅供参考。 图片发自简书App 此时我直接在“此电脑”内搜索“MSC.Software”了 图片发自简书App 耐心…

使用Arduino开发板连接干簧管(Reed Switch)的方法

topic 1.干簧管&#xff08;Reed Switch&#xff09;干簧管的特点&#xff1a;模块使用说明&#xff1a;干簧管有两种常见的类型&#xff1a;干簧管常见的应用需要的组件代码 1.干簧管&#xff08;Reed Switch&#xff09; 干簧管&#xff0c;又称磁力开关或磁簧开关&#xff0…

查看电脑使用日志------电脑干了些什么,别人是否动了你的电脑

** 现在我们都有了电脑&#xff0c;有时候短暂的离开可能会有人偷偷的查看你的电脑&#xff0c;有意无意的&#xff0c;总是会感觉心里不是很踏实&#xff0c;那么怎么知道自己的电脑有没有被别人偷偷的查看呢&#xff0c;下面我们通过一些列操作查看电脑是否被别人动过&#x…

高版本envi打不开Landsat8 C2L2数据解决教程

引申部分不写&#xff0c;直接开干 首先找到你的Landsat8 C2L2数据 进入后将首行GROUP LANDSAT_METADATA_FILE改为GROUP L1_METADATA_FILE 编辑—查找—GROUP LEVEL1_PROCESSING_RECORD&#xff0c;查找下一处可得该区域总和 将 GROUP LEVEL1_PROCESSING_RECORD 到 END_…

【错误记录】Melodyne 报错 ( 无法打开音频文件 )

文章目录 一、报错信息二、修改音源格式三、继续使用 Melodyne 打开 一、报错信息 打开一个 48000Hz , 立体声音源 , 采样位数 32 位的采样 , 无法打开 , 报下面的错误 ; 这是用 Bandicam 录制的音频 , 感觉有点问题 , 之后使用 Au 录制音频 ; 二、修改音源格式 在 Adobe Audit…

带你了解测开

测开——测试开发工程师 测试开发工程师 (Software Development Engineer in Test,简称SDET&#xff09;是指那些既可以称作是开发人员&#xff0c;同时也负责软件开发阶段和测试周期的测试工作的技术人员。一个专业的SDET更关注软件产品的可测性&#xff0c;稳健性和性能。他…

开干,开源 k8s 负载均衡器大比拼

原文链接&#xff1a;https://ewhisper.cn/posts/29610/ &#x1f9e0; 译者声明&#xff1a; 请注意文章发布时间&#xff0c;时间比较久远&#xff0c;部分观点可能已经过时。原文作者为 PureLB 的利益相关者&#xff0c;所以本文可能不尽客观。 词汇表 英文中文备注LoadBala…

开干!Elasticsearch官方文档离线访问实操指南

Elasticsearch 最少必要知识实战教程直播回放 1、开发不能联网怎么访问Elasticsearch文档&#xff1f; 这是最近被频繁问到的问题。直接上个图&#xff1a; 不能让 Elasticsearch 文档限制了你我的学习热情&#xff01; 2、直接开干 步骤1&#xff1a;访问&#xff1a;https://…

开干!

阅读本文大概需要 2.6 分钟。 很多人知道&#xff0c;我自由了&#xff0c;但很多人会误以为自由就是在家混吃等死&#xff0c;那人生得多没意思&#xff0c;我也有自己的事要做的&#xff0c;只是会自主安排时间&#xff0c;自主决策事情而已&#xff0c;下周开始&#xff0c;…

python中读写Protobuf总结

Protobuf是谷歌开源的协议框架&#xff0c;以高效传输著称并且支持多种语言。工作中也用到了&#xff0c;在此做个总结。 Protobuf运行原理 下面一张图可以说明&#xff1a; Python中使用Protobuf 2.1安装protoc程序 protoc --version 我安装的是3.6.1版本 2.2定义协议 syntax …

protobuf 入门

参考自 https://juejin.cn/post/7029961388411846664 介绍了protobuf基本概念、优缺点、与protobuf在C上的基本使用 1. 什么是protobuf 它是一个灵活、高效、结构化的序列化数据结构&#xff0c;它与传统的XML、JSON等相比&#xff0c;它更小、更快、更简单。 ProtoBuf是由…

protobuf语法详解

文章目录 一、包&#xff08;package&#xff09;二、选项&#xff08;option&#xff09;三、消息类型&#xff08;message&#xff09;3.1、常规消息类型3.1.1、字段修饰符3.1.2、字段类型3.1.2.1、标量类型3.1.2.2、枚举类型3.1.2.3、Any类型3.1.2.4、oneof类型3.1.2.5、map…

ProtoBuf在中C++使用介绍

ProtoBuf 我们先来看看官方文档给出的定义和描述&#xff1a; protocol buffers 是一种语言无关、平台无关、可扩展的序列化结构数据的方法&#xff0c;它可用于&#xff08;数据&#xff09;通信协议、数据存储等。 Protocol Buffers 是一种灵活&#xff0c;高效&#xff0c;自…

linux 安装protobuf

从github&#xff1a;https://github.com/protocolbuffers/protobuf 下载源代码 1、根据protobuf GitHub的README.md安装protoBuf &#xff08;1&#xff09;安装依赖工具 sudo apt-get install autoconf automake libtool curl make g unzip&#xff08;2&#xff09;在prot…

protobuf-master :编译篇

protobuf的编译其实相对简单&#xff0c;这里搬一下protobuf的ReadMe就很清楚了~ 如果是平时接触开源项目无从下手的小伙伴&#xff0c;也建议从阅读ReadMe开始哦! This directory contains CMake files that can be used to build protobuf with MSVC on Windows. You can bui…