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

cpp 复制代码
#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;
}

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

bash 复制代码
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语句的整合

比如我们要输出:

cpp 复制代码
Hello,I'm abcd

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

cpp 复制代码
...

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

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

我们可以整合成这样:

cpp 复制代码
...

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

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

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

cpp 复制代码
...

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

函数

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

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

cpp 复制代码
...
c1 = sqrt(4)
...

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

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

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

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

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

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

cpp 复制代码
double sqrt(double);

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

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

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

cpp 复制代码
double c1;
c1 = sqrt(4);

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

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

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

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

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

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

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

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

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

cpp 复制代码
#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;
}

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

bash 复制代码
This is a tool for measuring the side length of a square
Enter the area of the square:16
Its side length is 4.

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

cpp 复制代码
#include <math.h>

有些函数需要多项信息

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

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

该函数的原型如下:

cpp 复制代码
double pow(double, double);

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

cpp 复制代码
c1 = pow(3.0, 3.0);

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

cpp 复制代码
int rand(void);

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

可以这么使用这个函数

cpp 复制代码
c1 = rand(void)

或者

cpp 复制代码
c1 = rand() 

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

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

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

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

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

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

cpp 复制代码
#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;
}

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

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

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

cpp 复制代码
#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,这样就不会有编译警告了

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

bash 复制代码
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

相关推荐
黑客-雨9 分钟前
从零开始:如何用Python训练一个AI模型(超详细教程)非常详细收藏我这一篇就够了!
开发语言·人工智能·python·大模型·ai产品经理·大模型学习·大模型入门
Pandaconda13 分钟前
【Golang 面试题】每日 3 题(三十九)
开发语言·经验分享·笔记·后端·面试·golang·go
半盏茶香14 分钟前
扬帆数据结构算法之雅舟航程,漫步C++幽谷——LeetCode刷题之移除链表元素、反转链表、找中间节点、合并有序链表、链表的回文结构
数据结构·c++·算法
加油,旭杏17 分钟前
【go语言】变量和常量
服务器·开发语言·golang
行路见知17 分钟前
3.3 Go 返回值详解
开发语言·golang
xcLeigh21 分钟前
WPF实战案例 | C# WPF实现大学选课系统
开发语言·c#·wpf
哎呦,帅小伙哦22 分钟前
Effective C++ 规则41:了解隐式接口和编译期多态
c++·effective c++
l1x1n026 分钟前
No.35 笔记 | Python学习之旅:基础语法与实践作业总结
笔记·python·学习
NoneCoder31 分钟前
JavaScript系列(38)-- WebRTC技术详解
开发语言·javascript·webrtc
关关钧42 分钟前
【R语言】数学运算
开发语言·r语言