C++学习之旅前的“新兵训练“

本文详细介绍了C++程序的基本结构,包括main()函数的作用,C++语句(如声明、赋值和输出),以及函数的调用、预处理指令#include和iostream文件的使用。作者通过实例演示了如何使用标准输出工具cout和控制符endl,以及如何定义和调用用户自定义函数。
摘要由CSDN通过智能技术生成

一、进入C++

1.一个简单的C++程序

首先,让我们通过一个简单的C++程序,来了解一个程序的基本构造。

#include <iostream>  // 标准输入输出头文件的包含

using namespace std;  // 使用标准命名空间

int main()  // 函数头
{
	cout << "Welcome everyone to read my blog !";  // 打印双引号内的字符串
	cout << endl;  // 换行

	return 0;  // 返回0,并结束函数
}

相信大家看完代码以后,对程序的运行结果心里也有了个大概。实践是对真理的唯一检验,运行一下代码,看看是否和你预期的一致。(C++区分大小写)

在这里插入图片描述
这是我在visual studio 2022 上运行的结果,打印了双引号内的字符串,然后换行。(没有这个环境的也不要担心,上面代码的在不同环境下运行结果都差不多)

2.对程序个部分的介绍

程序包含了如下元素:

a.预处理编译指令#include
b.编译指令 using namespace
c.函数头:int main()
d.函数体:{…}
e.C++的标准输出工具 — cout
f.控制符endl
g.结束main()函数的return语句

2.1 main()函数

函数的作用是为了帮助我们完成指定的任务。
把函数这部分单独拿出来,也就只有两个部分,函数头和函数体。
函数头描述了任务所需的工具和完成任务的结果。
函数体描述了执行任务的过程。

int main()  // 函数头
{
	// 语句
	return 0;  // 返回0,并结束函数
}

其实很好理解,比如老妈让你去买一瓶酱油。任务就是买酱油,但是你没钱,你问老妈要了买酱油的钱,这就是任务所需的工具。然后你去超市买了一瓶酱油回来,这就是执行任务的过程。最后,你把酱油给了老妈,这就是完成任务的结果。

所以函数头的格式为,返回类型 函数名(参数列表)
函数体的格式为,{ 其他语句+返回语句 }
把买酱油变成上面的格式的话就是:

酱油 买酱油(钱)
{
去超市买酱油;
return 酱油;
}

在C++中每条完整的指令都称为语句,所有的语句都以分号结束。就和咱们人写文章一样,用句号代表一句话结束。不然计算机怎么知道你这条指令什么时候结束。

现在我们对函数已经有了一个大致了解了,重新回过头来看看刚开始的main()函数

int main()  // 函数头
{
	cout << "Welcome everyone to read my blog !";  // 打印双引号內的字符串
	cout << endl;  // 换行
	return 0;  // 返回0,并结束函数
}

第一条语句打印双引号中的字符串,以分号结束。
第二条语句换行,就是到下一行的开头,以分号结束。
最后返回语句return,返回0,结束函数,老妈都拿到酱油了,你的任务不就结束了。
从返回值0,可以推出这个函数的返回类型int是整形,也就是整数。然后参数列表里什么都没有,说明它不需要参数,也就是不需额外的工具。毕竟它的任务就是打印个字符串然后换行。

其实大家应该有个疑问,为什么函数名非要叫main呢,为什么不能是别的名字?这个其实也好理解,咱们解数学题都是先写一个解,然后按顺序慢慢解题,不然你乱写一堆,改卷老师怎么知道你的答案从哪里开始。所以C++标准规定,通常一个程序必须包含一个main()函数,程序从main()函数开始执行,到main()函数结束。也就是说main()函数是主体,其他函数只是完成任务所需的工具。

那main()函数作为主体,只有main()函数调用其他函数,一般其他函数不会调用main()函数,那为什么需要返回值呢?通常,main()函数被启动代码调用,最后返回0是表示程序正常运行。

2.2 C++注释

注释的作用是对程序的说明和部分代码的解释。养成好的注释习惯,有利于他人阅读,也便于自身回顾。刚学习的时候写的代码只有寥寥几行,随着学习的深入,代码行数也会不断增加,若没有适当的注释,别人阅读起来会十分吃力,过了一段时间自己再去看的时候,理解起来也不会那么轻松。

C++注释风格:以双斜杠(//)开始,到本行末尾的内容均为注释。
程序在运行过程中会忽视注释,毕竟它对程序的了解最起码和写程序的人一样懂,所以不用担心写注释会加重代码的负担。

C语言注释风格:
在这里插入图片描述
C++兼容C语言,要注释多行时可采用C注释格式

2.3 标准输出cout

cout << “Welcome everyone to read my blog !”;
让我们来探究一下这条语句是如何把信息打印出来的:
首先,用双引号括起的部分是要打印的信息。在C++中用双引号括起的一系列字符叫做字符串,<<符号表示把字符串发送给cout,该符号指出了信息流动的方向。cout是一个预定义的对象,现在只需要知道它可以显示字符串、数字和单个字符等就可以了,它不需要你告诉它输出的类型,它可以根据要显示的对象自己判断。我们可以把输出看成一个流,cout的对象属性包括一个插入运算符(<<)可以把右边的信息插入到输出流中,然后显示出来。
在这里插入图片描述

2.4 控制符endl

endl是一个特殊的C++符号,插入到输出流中时,使屏幕光标移动到下一行开头,就是换行。像这种对cout有特殊意义的特殊符号被称为控制符。打印不止一个字符串时,其他字符串会接在上个字符串末尾。我们看代码:

int main()  // 函数头
{
	// 打印两个字符串
	cout << "Welcome every one to read my blog !";
	cout << "Please give feedback on my blog.";

	return 0;
}

输出结果:
在这里插入图片描述
第二个显示的字符串紧跟在第一个末尾,加上endl控制符才会换行,我们看代码:

int main()  // 函数头
{
	// 打印两个字符串
	cout << "Welcome every one to read my blog !";
	cout << endl;  // 换行
	cout << "Please give feedback on my blog.";

	return 0;
}

运行结果如下:
在这里插入图片描述
其实C语言对输出字符串有一种更加省力的换行,前面说了C++兼容C,所以我们也能使用。在字符串末尾加上一个转义字符\n
在这里插入图片描述
运行结果和上面使用endl控制符的运行结果完全一致。
在这里插入图片描述
输出一个字符串并然后要换行时C语言的\n方便一点,但其他情况下C++的endl控制符更好。

2.5 预处理编译指令#include 和 iostream文件

如果我们要使用C++的标准输入输出工具,就必须包含以下两行代码:

#include <iostream>  // 标准输入输出头文件的包含
using namespace std;  // 使用标准名称空间

第一行编译指令使预处理器将iostream文件内容添加到程序中,预处理器执行在编译之前的预处理操作。为什么要这样做?首先,我们使用一种工具需要按照说明书进行操作,使用函数也需要函数的定义,不然编译器怎么知道如何使用cout工具。
第二行编译指令告诉编译器,我们使用的是std名称空间下的cout。为什么要这做?例如,小明和小张一起编写一个程序,他们都写了一个函数叫add,把他们的代码链接到一起,编译器调用add函数时如何分辨调用的是谁的add函数?因此,把小明的函数定义放入名为ming的名称空间,小张把他的函数定义放入名为zhang的名称空间。这样调用函数是加上前缀,zhang::add就是调用小张的add函数。

二、C++语句介绍

C++程序时一组函数,而每个函数又是一组语句。下面介绍C++的几种语句。

1.声明语句

要将信息存储在计算机中,需要指出所需空间大小和存储位置。声明语句可以帮助我们更简单地实现,如下代码:

	int a = 2;

这句声明语句告诉计算机我要存储一个int类型的变量,然后计算机根据变量的类型寻找一块对应大小的空间,将这片空间命名为a,也叫标识符。给这块空间赋初值2,声明变量的时候赋初值也叫初始化。然后把这块空间的控制权交给你,你就可以通过使用变量名a对这块空间进行操作。int表示整数,就是没有小数的部分。严格来说其实上面的语句叫做声明定义语句,声明是不会开辟空间的,只是告诉计算机我的这个变量的类型是什么、需要多大的空间,而定义才会让计算机开辟空间。变量的意思是其值可以改变。
在这里插入图片描述

2.赋值语句

	a = 5;

赋值语句,符号=叫做赋值运算符,他把等号右边的值赋给等号左边。计算机先找到名为a的这块空间,然后把5这个值保存到这块空间里面。这里就体现了声明的必要性,倘若没有声明变量a,编译器怎么知道a是什么意思,所以我们要在第一次使用变量之前对其声明。而且编译器还可以根据声明发现拼写错误,例如你定义了一个int类型的变量名为apple,不小心打成了appll,编译器就会显示错误,使用未定义的标识符,如下:

int main()  // 函数头
{
	int apple = 2;
	appll = 3;

	return 0;
}

在这里插入图片描述
既然已经给变量a赋了值,我们来打印一下a的值。相信有了前面打印字符串的经验,下面的代码应该很容易理解:

int a = 2;
cout << a;

运行结果如下:
在这里插入图片描述
前面说过了,cout会根据后面的对象判断类型进行输出。

3.cin标准输出语句

既然有cout标准输出工具,那么肯定有标准输入工具。和cout类似,cin使用>>运算符从输入流中抽取字符,根据接收的对象类型对其进行正确的转换,存入标识符所在空间。如下图:
在这里插入图片描述
从键盘中输入5然后按下enter键确定,通过cin使5被放入变量a中,然后用cout打印变量a。

三、函数

函数组成了C++程序的各个模块,对C++程序而言十分重要,接下来继续介绍一些函数的基本特征。

1.调用有返回值的函数

标准C/C++库中有一个名为abs()的函数,他返回绝对值,使用如下代码:

int a = -2;
int b;
b = abs(a);

创建一个变量a赋初值为-2,然后创建一个变量b存储a的绝对值2。表达式abs(a)称为调用函数,被调用的函数叫做被调用函数,包含函数调用的函数叫做调用函数。有点绕明白大概意思就行。

首先把a的值传给abs函数,称为参数,然后abs()函数通过一系列操作的出a的绝对值,称为返回值,最后返回值覆盖调用函数,等价于 b = -2; 。简单来说,a发送给函数的参数,-2是返回的结果。

2.其他函数

除了有返回值的函数,还有没有返回值的函数,也有不需要参数的函数。例如,只打印一句话的函数,只需要使用cout工具打印一句话即可,不需要返回值,也不需要参数。

3.用户定义的函数

标准C库提供了100多个预定义函数,如果其中的函数能满足需求,尽量使用库函数。但是,往往库中的函数只能解决部分问题,或者根本解决不了问题,这是就需要自己定义函数了。

3.1 函数声明与定义

和变量一样,函数也需要声明,编译器通过函数声明检查用户对函数使用是否正确。函数声明的格式为:返回类型 函数名(参数列表);
如:

// 函数声明
int Print(int a);  // 输出变量a的值

由上述代码可知,函数的返回类型为int,函数名为Print,函数所需参数为int,参数列表也可以写多个用逗号隔开。函数要在函数调用之前声明,且函数之间相互独立,函数的定义不能放到另一个函数里面。函数的定义格式与上面类似:返回类型 函数名(参数列表) {…}
如:

// 函数定义
int Print(int a)
{
	cout << a << endl;  // 输出变量a的值并换行
}

一般main函数上面放函数声明,main函数下面放定义。

// 函数声明
int Print(int a);  // 输出变量a的值并换行

int main()  // 函数头
{
	int a = 2;
	Print(a);  // 函数调用

	return 0;
}

// 函数定义
int Print(int a)
{
	cout << a << endl;  // 输出变量a的值并换行
}

如果没有声明就会报错,如:
在这里插入图片描述
因为没有函数声明,编译器找不到标识符Print,不明白是什么意思。

如果在函数声明的地方直接定义,这个定义也是函数的声明。如:
在这里插入图片描述
编译器并未报错。

总而言之,用户需要使用库函数或设计适当的函数来到达其要求。

四、总结

C++程序由一个或多个函数组成。程序从main()函数开始执行,所以每个程序都要包含一个main()函数。函数由函数头和函数体组成,函数头描述了函数的返回值的类型(如果由返回值的话),函数名,和函数期望的参数数量和类型。函数头由一系列位于花括号{}中的C++语句组成。

本文讲述了如下几种语句:
a. 变量声明语句:定义函数中使用的变量的名称和类型,并根据类型在内存中开辟对应的空间
b. 赋值语句:把赋值运算符=右边的值赋给左边
c. 标准输出语句:使用标准输出cout把符号<<右边的对象根据其类型正确地插入到输出流中
d. 函数调用语句:执行函数,执行完毕后返回
e. 函数声明语句:声明函数的返回类型,函数名,函数接受的参数数量和类型
f. 返回语句:被调函数返回一个值给主调函数

标准输出工具cout,与标准输出工具cin定义在头文件iostream中同时也位于名称空间std,要使用他们需包含如下两行代码:

#include <iostream>  // 包含标准输入输出头文件

using namespace std;  // 使用名称空间std

cout使用插入运算符<<把对象插入到输出流中,而cin使用>>运算符从输入流中抽取数据放入对象里,二者都是智能的,能根据符号右侧对象的类型进行自动转换。

C++可以使用大量的库函数,使用必须包含对应的头文件。当然,如果库函数不能满足需求,还是自己定义函数。

五、作者想说

首先,对所有阅读过本文的读者表示感谢。

其次,这是我的第一篇博客,这篇博客按道理应该在两个月前就应该发出,却迟迟拖到了现在。本人目前大三,普通二本院校学生,所学不是本专业,对IT行业感兴趣同时也是为了就业,所以选择了计算机。在网上找了些课程,在三月出头开始了我的学习之旅,刚开始学习老师就告诉我们要写博客,我当时感觉时间挺紧的,因为已经大三下了,就想着后面再写,然后就一直拖到了五月。期间学习了C语言和数据结构初阶,C++的课程也听了几节,题目也写了一点,然后想着五一最后的时间搞一篇博客出来。刚开始也不知道怎么写,写什么,就去b站上了解了一下博客对程序员的重要性和如何写博客。看完以后认为博客确实很重要,但是觉得写起来应该不难。然后我便开始了我的第一篇博客的写作,从晚上开始写的,也忘了几点,刚开始想了半天不知道写什么,本来想写一下C语言或者数据结构的,毕竟自己已经学了一遍,还练了一点题目。但是,写起来才发现自己虽然会但是知识不能连成一串,零零散散的。这个时候我才发现自己对这些所学知识的掌握只是最浅那一层,也有点明白了那句话 — 写博客可以加深自己对知识的理解。后面我想到了我在学习编程的过程中还阅读了经典书籍,学习C语言的时候我阅读了《C Primer plus》,学习数据结构初阶的时候我阅读了《大话数据结构》,现在学习C++我阅读的是《C++ Primer plus》,所以我决定根据当前所阅读的书籍《C++ Primer
plus》写一篇介绍C++学习之前的基础知识,希望能对初学者有所帮助。

本文从当晚开始写,写到第二天晚上7点结束,差不多写了10个小时。其中的过程非常曲折,前面也有想放弃不写的打算,但是最后还是坚持下来了。写完以后,我更能感觉到写博客的作用了。我们学知识,是要自己理解,而写博客却是要让读者理解,这就已经把难度拔高了一层。写完以后相当于复习了一遍所学的知识,而且理解的更加深入。说句实话,有点小成就感,毕竟第一次写这么长的。本文有一些句子是从《C++ Primer plus》中摘抄的,但是更多的还是自己的理解,上面的代码和图片也是本人自己制作的,毕竟抄袭而来的成果毫无意义。

我写这段话的主要是想分享一下第一次写博客的经历和告诉那些想写博客却还一直在拖的人,行动起来吧,每个人都是从第一次开始的,不用管结果如何,至少过程是对的。

最后,非常感激能阅读到这里的读者,第一次写作,肯定有很多不足之处,请各位读者点评其中的问题,本人必定会挨打立正,积极做出改正。也非常欢迎大家找我一起交流学习。

  • 22
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值