C++教程 - How to C++系列专栏第5篇

关于专栏

这个专栏是优质的C++教程专栏,如果你还没看过第0篇,点击这里去第0篇

本专栏一致使用操作系统:macOS Ventura,代码编辑器:CLion,C++编译器:Clang

感谢一路相伴的朋友们,感谢你们的支持 ^ _ ^

博主反馈非常及时,如果你在阅读的时候遇到问题,可以直接在评论区提问,博主看到后会在24小时内给你反馈

这两天出去旅游了没有及时更新,先向关注这个专栏的朋友道歉,但我们没有断更哦

C++教程 - How to C++系列专栏第5篇


目录

关于专栏

更新记录

2023年8月22日

前言

cin

cout语句的整合

函数

结语

快捷翻页

本文参考文章,书籍


更新记录

2023年8月22日

发布第一篇文章


前言

程序有了输出怎么输入?怎么把cout写的简洁一点?函数怎么写?


cin

下面我们可以来看一条程序,对前面的程序做了扩展,使用cin

#include <iostream>int main(void)
{using namespace std;int paper;cout << "How many pieces of paper do you have?" << endl;cin >> paper;paper = paper - 2;cout << "Blog time!";cout << endl;cout << "Now you have ";cout << paper;cout << " pieces of paper.";cout << endl;return 0;
}

下面是这段程序的示例输出: 

How many pieces of paper do you have?
20
Blog time!
Now you have 18 pieces of paper.

 这里我们可以看出键盘输入的信息“20”被传递给了paper变量,从cout中那里我们可以看出,实际上这个过程可以理解为键盘输入的数据流向了paper变量,显然,cin是一个输入流

cin属于iostream中的istream类中的一个对象

>>可以看作信息由大的一遍流入计算机,iostream把cin定义为了表示输出流的对象,需要在运算符右侧提供一个变量,用于接受输入的数据,在示例程序中,paper被设定为整数变量,传入数据会被转换为用于存储整数的形式


cout语句的整合

比如我们要输出:

Hello,I'm abcd

其中,abcd是需要用户的输入,那在此之前我们会这么写:

...cin >> in;
cout << "Hello I'm ";
cout << in;
cout << ".";
cout << endl;

这样很麻烦,还显得程序很难看,没有必要这么写对吗?

我们可以整合成这样:

...cin >> in
cout << "Hello I'm " << in << " ." << endl;

 这样,原本要4行的输出被整合进了一行,还更漂亮是吗?

如果你喜欢分行,也可以这样

...cin >> in;
cout << "Hello I'm ";<< in;<< ".";<< endl;

函数

函数可以创建C++程序的模块,对C++对OOP至关重要,现在我们来简单讲讲函数的一些基本特征

有函数的返回值将会生成一个值,这个值可以赋予给变量或者其他表达式使用,比如希望使用sqrt()函数,并把返回值赋予给变量c1,那么我们就可以在代码中使用这样的语句:

...
c1 = sqrt(4)
...

这里将使用sqrt函数,包括函数调用的函数叫做调用函数,被语句调用的函数叫做被调用函数

圆括号中的值(这里是4)是要传递给函数的值,括号里的值被称为参数,计算的结果为2,这个值被放回给程序,这个值就被称为返回值

函数原型之于函数就像变量声明之于变量—指出涉及的类型

例如,C++库将sqrt()函数定义成将一个(可能)带小数部分的数字(如 6.25)作为参数,并返回一个相同类型的数字

有些语言将这种数字称为实数,但是C++将这种类型称为double(在之后我们会讲解)

sqrt()的函数原型像这样:

double sqrt(double);

第一个double意味着sqrt()将返回一个double值

括号中的double意味着sqrt()需要一个double参数

因此该原型对sqrt()的描述和下面代码中使用的函数相同:

double c1;
c1 = sqrt(4);

在程序中使用sqrt()时,也必须提供原型,可以用两种方法来实现

  • 在源代码文件中输入函数原型
  • 包含头文件cmath(老系统为math.h),其中定义了原型

在这里,更建议第二种方法,因为头文件更有可能使原型正确,对于C++库中的每个函数,都在一个或多个头文件中提供了其原型,可以通过手册或在线帮助查看函数描述来确定应使用哪个头文件

比如,sqrt()函数的说明将指出,应使用cmath头文件

千万不要混淆函数原型和函数定义

可以看出,原型只描述函数接口,也就是说,它描述的是发送给函数的信息和返回的信息,而定义中包含了函数的代码

比如计算平方根的代码,C和C++将库函数的这两项特性(原型和定义)分开了,库文件中包含了函数的编译代码,而头文件中则包含了原型

在首次使用函数之前要提供它的原型

通常的做法是把原型放到 main()函数定义的前面(前面我们使用头文件也可以把函数原型放到main()函数的前面),我们举个例子,下面的程序通过包含cmath文件来提供该函数的原型

#include <iostream>
#include <cmath>int main(void)
{using namespace std;double in;double out;cout << "This is a tool for measuring the side length of a square" << endl;cout << "Enter the area of the square:";cin >> in;out = sqrt(in);cout << "Its side length is " << out << "." << endl;return 0;
}

这是一个计算正方形边长的工具,下面是这个程序的输出

This is a tool for measuring the side length of a square
Enter the area of the square:16
Its side length is 4.

 如果你使用的是很老的编译器,那么使用头文件方法应该使用

#include <math.h>

有些函数需要多项信息

这些函数使用多个参数,参数间用逗号分开

例如,数学函数pow()接受两个参数,返回值为以第一个参数为底,第二个参数为指数的幂

该函数的原型如下:

double pow(double, double);

​​​​​​​比如要计算3的3次方,可以这么使用pow()函数

c1 = pow(3.0, 3.0);

有一些函数不接受任何参数,比如rand()函数,它的原型如下

int rand(void);

其中void表示它不接受任何参数,返回一个随机整数

可以这么使用这个函数

c1 = rand(void)

或者

c1 = rand() 

省略void或者不省略效果是一样的

实际上main(void)函数也是不接受任何参数的,前面我们说过,这里不过多赘述

标准C库提供了140多个预定义的函数。如果其中的函数能满足要求,那么就可以使用它们。但用户经常需要编写自己的函数,尤其是在设计类的时候。无论如何,设计自己的函数很有意思,下面来介绍一下

其实前面已经使用过好几个我们自己定义的函数,它们就是main(),每个C++程序都必须有一个main()函数,用户必须对它进行定义

假设需要添加另一个用户定义的函数。和库函数一样,也可以通过函数名来调用用户定义的函数。对于库函数,在使用之前必须提供其原型,通常把原型放到main()定义之前。

但现在你必须提供新函数的源代码。最简单的方法是,将代码放在main()的后面,我们来举个例子

#include <iostream>
int conversion(double);int main(void)
{using namespace std;double length;cout << "This is a meter to centimeter conversion tool." << endl;cout << "Enter the length calculated using meters." << endl;cin >> length;conversion(length);return 0;
}int conversion(double accept)
{using namespace std;cout << "Converted to centimeters is " << accept * 100 << endl;
}

但是这种方法编译器会抛出编译警告

firstfunction.cpp:22:1: warning: non-void function does not return a value [-Wreturn-type]
}
^
1 warning generated.

意思是,又返回值的函数没有检测到返回值,虽然它可以正常运行,但我们最好改进一下

#include <iostream>
int conversion(double);int main(void)
{using namespace std;double length;double out;cout << "This is a meter to centimeter conversion tool." << endl;cout << "Enter the length calculated using meters." << endl;cin >> length;out = conversion(length);cout << "Converted to centimeters is " << out << "." << endl;return 0;
}int conversion(double accept)
{return accept * 100;
}

我们可以把运算结果作为返回值,然后赋值给变量out,这样就不会有编译警告了

下面是这段程序的示例输出:

This is a meter to centimeter conversion tool.
Enter the length calculated using meters.
1
Converted to centimeters is 100.

下一篇我们来细致讲解函数


结语

作者会经常帮助有问题的小伙伴解决问题

如果你有问题,可以直接到评论区指出,作者会在看到后到24小时内给予答复

如果本文有任何问题欢迎在评论去指出,如果喜欢这篇文章,希望能点赞评论关注

如果你们身边有像你提起过这个领域的,或者希望可以和ta一起进步的,把这篇文章分享给ta吧

4652字,9个父项,1个子项


快捷翻页

cout还是printf?C++教程 - How to C++系列专栏第4篇

C++教程 - How to C++系列专栏第3篇

C++教程 - How to C++系列专栏第2篇

C++教程 - How to C++系列专栏第1篇

C++教程 - How to C++系列专栏第0篇


本文参考文章,书籍

参考文章

C++中cin的详细用法_cin函数_大大大大大大旭的博客-CSDN博客

https://www.cnblogs.com/suozhiyuan/p/11932985.html​​​​​​​

C++ 类 & 对象 | 菜鸟教程​​​​​​​

pow函数的原型 以及使用pow函数需注意的坑!!_pow 原型_SSS迪的博客-CSDN博客

C++的POW()函数用法介绍,也即幂函数的使用方法_c++ pow 负数_Howe Tan浪漫的季节的博客-CSDN博客

sqrt()函数的详解和用法_辉小歌的博客-CSDN博客 

文心一言

参考书籍

C++ Primer Plus

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

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

相关文章

【Apollo学习笔记】——规划模块TASK之PATH_REUSE_DECIDER

文章目录 前言PATH_REUSE_DECIDER功能简介PATH_REUSE_DECIDER相关配置PATH_REUSE_DECIDER总体流程PATH_REUSE_DECIDER相关子函数IsCollisionFreeTrimHistoryPathIsIgnoredBlockingObstacle和GetBlockingObstacleS Else参考 前言 在Apollo星火计划学习笔记——Apollo路径规划算…

21、WEB漏洞-文件上传之后端黑白名单绕过

目录 前言验证/绕过 前言 关于文件上传的漏洞&#xff0c;目前在网上的常见验证是验证三个方面&#xff1a; 后缀名&#xff0c;文件类型&#xff0c;文件头&#xff0c;其中这个文件头是属于文件内容的一个验证 后缀名&#xff1a;黑名单&#xff0c;白名单 文件类型&#xf…

JS中的Ajax

封装原生 Ajax 请求 在 JavaScript 中&#xff0c;可以通过封装原生的 Ajax 请求来进行与服务器的数据交互。下面是一个封装了原生 Ajax 请求的示例代码&#xff0c;以及对代码的详细注解。 1.简单的Ajax封装代码 <h2>ajax原生</h2><script>//1.创建xhr对象…

Hive Cli / HiveServer2 中使用 dayofweek 函数引发的BUG!

文章目录 前言dayofweek 函数官方说明BUG 重现Spark SQL 中的使用总结 前言 使用的集群环境为&#xff1a; hive 3.1.2spark 3.0.2 dayofweek 函数官方说明 dayofweek(date) - Returns the day of the week for date/timestamp (1 Sunday, 2 Monday, …, 7 Saturday). …

数据封装与解封装过程

2.2数据封装与解封装过程(二) 如果网络世界只有终端设备&#xff0c;那么将不能称之为网络。正因为有很多中转设备才形成了今天如此复杂的Internet网络&#xff0c;只不过一贯作为网络用户的我们没有机会感知它们的存在&#xff0c;这都是传输层的“功劳”&#xff0c;由于传输…

在外SSH远程连接macOS服务器

文章目录 前言1. macOS打开远程登录2. 局域网内测试ssh远程3. 公网ssh远程连接macOS3.1 macOS安装配置cpolar3.2 获取ssh隧道公网地址3.3 测试公网ssh远程连接macOS 4. 配置公网固定TCP地址4.1 保留一个固定TCP端口地址4.2 配置固定TCP端口地址 5. 使用固定TCP端口地址ssh远程 …

科技云报道:云计算下半场,公有云市场生变,私有云风景独好

科技云报道原创。 大数据、云计算、人工智能&#xff0c;组成了恢弘的万亿级科技市场。这三个领域&#xff0c;无论远观近观&#xff0c;都如此性感和魅力&#xff0c;让一代又一代创业者为之杀伐攻略。 然而高手过招往往一瞬之间便已胜负知晓&#xff0c;云计算市场的巨幕甫…

测试框架pytest教程(11)-pytestAPI

常量 pytest.__version__ #输出pytest版本 pytest.version_tuple #输出版本的元组形式 功能 pytest.approx pytest.approx 是一个用于进行数值近似比较的 pytest 断言工具。 在测试中&#xff0c;有时候需要对浮点数或其他具有小数部分的数值进行比较。然而&#xff0c;由于…

Node.JS教程

文章目录 Node.JSNode.js学习指南一、Node.js基础1.认识Node.js2.开发环境搭建3. 模块、包、commonJS3.1、为什么要有模块化开发&#xff1f;3.2、CommonJS规范3.3、 modules模块化规范写法 总结 Node.JS Node.js学习指南 服务端开发底层平台周边生态 学习前提 JavaScript、E…

Rspack 创建 vue2/3 项目接入 antdv(rspack.config.js 配置 less 主题)

一、简介 Rspack CLI 官方文档。 rspack.config.js 官方文档。 二、创建 vue 项目 创建项目&#xff08;文档中还提供了 Rspack 内置 monorepo 框架 Nx 的创建方式&#xff0c;根据需求进行选择&#xff09; # npm 方式 $ npm create rspacklatest# yarn 方式 $ yarn create…

html动态爱心代码【二】(附源码)

目录 前言 效果演示 内容修改 完整代码 总结 前言 七夕马上就要到了&#xff0c;为了帮助大家高效表白&#xff0c;下面再给大家带来了实用的HTML浪漫表白代码(附源码)背景音乐&#xff0c;可用于520&#xff0c;情人节&#xff0c;生日&#xff0c;表白等场景&#xff0c…

【Python】【数据结构和算法】查找最大或最小的N个元素

除了直接排序&#xff0c;还可以利用heaq模块的nlargest()和nsmallest()方法&#xff0c;例如&#xff1a; >>> nums [3, 5, 2, 4, 1] >>> smallest heapq.nsmallest(3, nums) >>> print(smallest) [1, 2, 3] >>> largest heapq.nlarg…

【C#基础】unity中结构体的使用

【C#基础】unity中结构体的使用 结构体&#xff08;Struct&#xff09;是值类型数据结构&#xff0c;在栈上分配内存&#xff0c;可以包含字段&#xff0c;属性&#xff0c;方法&#xff0c;构造函数。结构体可以实现接口&#xff0c;但是不能继承。在Dots里有大量依靠Struct实…

Android 面试之Glide做了哪些优化?

前言 Glide可以说是最常用的图片加载框架了&#xff0c;Glide链式调用使用方便&#xff0c;性能上也可以满足大多数场景的使用&#xff0c;Glide源码与原理也是面试中的常客。 但是Glide的源码内容比较多&#xff0c;想要学习它的源码往往千头万绪&#xff0c;一时抓不住重点.…

搭建自己的私有 开源LoRaWAN 网络服务器(The ThingsStack)---之配置

介绍 这是使用 Docker 在您自己的硬件上安装 Things Stack Enterprise 或开源代码以运行您自己的私有 LoRaWAN 网络服务器的指南。 运行 The Things Stack 的方法有多种。 Things Stack 开源和企业发行版旨在在您自己的硬件上运行,本指南也对此进行了介绍。 对于具有高吞吐量的…

shell脚本免交互

一.Here Document免交互 1.免交互概述 使用I/O重定向的方式将命令列表提供给交互式程序 是一种标准输入&#xff0c;只能接收正确的指令或命令 2.格式&#xff1a; 命令 <<标记 ....... 内容 #标记之间是传入内容 ....... 标记 注意事项 标记可以使用任意的合法…

Cesium 相机的三种放置方式

文章目录 Cesium 相机的三种放置方式第一种&#xff1a;setView 计算视角1. Cartesian3 方式2. Rectangle 方式 第二种&#xff1a;flyTo第三种&#xff1a;lookAt Cesium 相机的三种放置方式 Cesium 提供了三种方式对相机的位置进行摆放 第一种&#xff1a;setView 计算视角 …

mybatisplus批量写入

1.新建MybatisPlusConfig /*** MybatisPlusConfig.*/ Configuration MapperScan("com.test.mapper") public class MybatisPlusConfig {/*** 自定义批量插入 SQL 注入器.*/Beanpublic InsertBatchSqlInjector insertBatchSqlInjector() {return new InsertBatchSqlI…

android 申请电池优化,自启动,无障碍权限

代码仅用于自己记忆,都是实际跑过的 /*** 引导开通-无障碍服务 可以跳转到系统的无障碍功能,并高亮自己的app*/fun gotoAccessibilitySetting(context: Context) {val EXTRA_FRAGMENT_ARG_KEY ":settings:fragment_args_key";val EXTRA_SHOW_FRAGMENT_ARGUMENTS &q…

WPF 项目中 MVVM模式 的简单例子说明

一、概述 MVVM 是 Model view viewModel 的简写。MVVM模式有助于将应用程序的业务和表示逻辑与用户界面清晰分离。 几个概念的说明&#xff1a; model :数据&#xff0c;界面中需要的数据&#xff0c;最好不要加逻辑代码view : 视图就是用户看到的UI结构 xaml 文件viewModel …