关于专栏
这个专栏是优质的C++教程专栏,如果你还没看过第0篇,点击这里去第0篇
本专栏一致使用操作系统:macOS Ventura,代码编辑器:CLion,C++编译器:Clang
感谢一路相伴的朋友们,感谢你们的支持 ^ _ ^
博主反馈非常及时,如果你在阅读的时候遇到问题,可以直接在评论区提问,博主看到后会在24小时内给你反馈
这两天出去旅游了没有及时更新,先向关注这个专栏的朋友道歉,但我们没有断更哦
C++教程 - How to C++系列专栏第5篇
目录
更新记录
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++中cin的详细用法_cin函数_大大大大大大旭的博客-CSDN博客
https://www.cnblogs.com/suozhiyuan/p/11932985.html
C++ 类 & 对象 | 菜鸟教程
pow函数的原型 以及使用pow函数需注意的坑!!_pow 原型_SSS迪的博客-CSDN博客
C++的POW()函数用法介绍,也即幂函数的使用方法_c++ pow 负数_Howe Tan浪漫的季节的博客-CSDN博客
参考书籍