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

news/2024/11/16 9:54:55/

关于专栏

这个专栏是优质的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.ppmy.cn/news/1052899.html

相关文章

Docker 的基本概念和优势,以及在应用程序开发中的实际应用

Docker 是一款开源的容器化平台&#xff0c;它可以将应用程序及其依赖项打包成一个运行环境&#xff0c;使得应用程序可以在任何地方运行&#xff0c;而不需要考虑底层系统的差异性。下面是 Docker 的基本概念和优势&#xff1a; 基本概念&#xff1a; Docker 镜像&#xff1…

【Nginx19】Nginx学习:FastCGI模块(一)基础配置

Nginx学习&#xff1a;FastCGI模块&#xff08;一&#xff09;基础配置 万众瞩目啊&#xff0c;总算到 FastCGI 了。看我文章和视频的各位大佬们8成以上都是 PHPer 吧&#xff0c;要做 PHP &#xff0c;FastCGI 的配置就少不了。CGI 、FastCGI 、PHP-FPM 这些概念&#xff0c;咱…

【工具使用】Git的使用

dev代表开发版 1. git clone 命令 通过 git add <name> 对文件进行跟踪&#xff0c;把<name>加入到暂存区 git commit -m XXXXXXX 提交修改并补充XXXXX作为注释 “暂存”状态&#xff1a;出现了一些修改&#xff0c;但是还没有提交 对于Java来说&#xff0c;.cl…

目标检测任务数据集的数据增强中,图像水平翻转和xml标注文件坐标调整

需求&#xff1a; 数据集的数据增强中&#xff0c;有时需要用到图像水平翻转的操作&#xff0c;图像水平翻转后&#xff0c;对应的xml标注文件也需要做坐标的调整。 解决方法&#xff1a; 使用pythonopencvimport xml.etree.ElementTree对图像水平翻转和xml标注…

按斤称的C++散知识

一、多线程 std::thread()、join() 的用法&#xff1a;使用std::thread()可以创建一个线程&#xff0c;同时指定线程执行函数以及参数&#xff0c;同时也可使用lamda表达式。 #include <iostream> #include <thread>void threadFunction(int num) {std::cout <…

9.1 功率放大电路概述

在实用电路中&#xff0c;往往要求放大电路的末级&#xff08;即输出级&#xff09;输出一定的功率&#xff0c;以驱动负载。能够向负载提供足够信号功率的放大电路称为功率放大电路&#xff0c;简称功放。从能量控制和转换的角度看&#xff0c;功率放大电路与其它放大电路在本…

适配器模式实现stack和queue

适配器模式实现stack和queue 什么是适配器模式&#xff1f;STL标准库中stack和queue的底层结构stack的模拟实现queue的模拟实现 什么是适配器模式&#xff1f; 适配器是一种设计模式(设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结)&#xff…

AcWing算法基础课第四讲动态规划(2): 线性DP、区间DP

文章目录 &#xff08;1&#xff09;线性DP898. 数字三角形895. 最长上升子序列897. 最长公共子序列 &#xff08;2) 区间DP282. 石子合并区间 DP 常用模版 &#xff08;1&#xff09;线性DP 898. 数字三角形 题目链接 给定一个如下图所示的数字三角形&#xff0c;从顶部出发…