带给C++初学者与同学们的一份指南

138次阅读
没有评论

共计 5579 个字符,预计需要花费 14 分钟才能阅读完成。

什么是 C ++?

C++,同广为人知的 PythonJavaC 等一样,是一种 编程语言 ,并且是 编译型 的。


什么是编译型语言?

编译型语言 ,如CC++,顾名思义,就是 需要编译 后才能够运行的编程语言吗,与之相对的是 解释型语言 ,如PythonJava,就是 不需要编译就能运行 的编程语言。

通常来说,编译型语言 的运行速度比 解释性语言 快得多,为什么呢?

因为计算机能够看懂的只有 二进制指令 (在各个系统中,通常被称为 可执行文件 ),编译型语言是 将你的程序一次性全部翻译成二进制指令 ,而解释性语言则是 程序执行到哪里翻译哪一行,效率更低一些。

当然,这并不是我们的重点,我想要说的是,写 C ++ 代码一定要 编译!编译!编译!,切记不要傻傻地去执行一个 修改过了却没有编译的程序 ,因为你将会执行你程序 上一个版本 的编译出来的 可执行文件,就会出现一个奇特的心理状况:

我明明改过这里了呀?为什么执行起来和原来一样啊?

所以另一个方面上来讲,当你有这样的疑惑时,去看看自己是不是忘记编译了


如何使用 C ++?

C++ 的 Hello World

某个编程语言的 ”Hello World”,指的是 使用这个编程语言输出 ”Hello World”,在 C ++ 里,这并不是一件简单的事情 ,因为Python 只有:

print("Hello World")

而 C ++ 嘛……

#include <bits/stdc++.h>

using namespace std;

int main() {
    cout << "Hello World";
    return 0;
}

多了这么多!

凭什么?为什么?不可思议!Unbelievable!Incredible!


这代码都干了些什么?

先分析一波,第一行 代码:#include <bits/stdc++.h>,英文直接翻译:包含 <bits/stdc++.h> 这个文件?,所以说……这是在 引用头文件


头文件是啥?

当我们要写一个程序,肯定 不能直接写二进制代码 ,但是如果要使用一些功能,我们又不得不去看 针对于某个操作系统的程序开发教程(来自官方),需要写一堆代码!怎么办呢?所以说,这些工作 已经有人帮我们做好了 ,换句话说,叫 不用重复造轮子 直接使用别人预先帮我们写好的各种功能 就行了。

如何声明头文件?

声明头文件,首先要知道 有什么头文件 ,C++ 里的头文件根据不同的功能,有 很多 个,如:iostreamvectorstack,这时候不经就要问了,这么多头文件?他们分别是干啥的?我 记不住 怎么办?(这个才是重点(bushi))

别担心,伟大的先人们 已经帮我们提前搞定了 ,这时候,就要请出 万能头文件

bits/stdc++.h

这个头文件里,把我们写程序几乎所有要用的头文件都整合到了一起,所以说,原先可能有好几行的头文件引用,现在只要:

#include <bits/stdc++.h>

到这里,应该也可以看出 C++ 引用头文件 的语法了:#include < 头文件名称 >

然而,不得不提的是 ,万能头文件虽然 很方便 ,但是由于承载的 函数太多 ,就会导致有一些你 不能使用的变量名 (因为已经在头文件里被定义成 功能函数 或是别的什么了,这时后你再去定义,编译器就会抛出一个 重复定义 的错误),所以说当你发现 莫名其妙的变量或函数重定义或者命名错误时,换个变量或函数的名称试试


这个 Using namespace std; 是啥?

分析完了头文件,我们来看 第二行代码

using namespace std;

看起来毫无头绪呢……

那就先分析 分号 ;),C++ 的语法 要求我们在非头文件和宏定义的语句后面加上分号 表示代码指令的分割

举个栗子:

带给 C ++ 初学者与同学们的一份指南

  

#开头的不需要加 ;:如#include <bits/stdc++.h>#define int long long 这些,后面都没有分号

# 开头的一般要加;:如:using namespace std;cout << "Hello World";

当然,也有特殊情况 :像是 定义函数不用加 ;(编程里的函数和数学里的函数 很像 ,但不仅可以进行运算, 还可以干一些其他的事情 不过这是后话 ),其余的 暂时不提 ,总之只要有这样的一套 完整的概念 就行了。

一个 小 Tip,其实,你甚至可以在需要分号的地方不换行,比如:

int a = 1;
int b = 1;

可以写成:

int a = 1; int b = 1;

编译器也是不会报错哒~

所以这到底是啥?

其实,这个和头文件 相辅相成 ,因为功能函数多了就肯定要 分类 呀,所以 C ++ 里要调用一个输出的函数,就需要先写它的分类,也就是说,要写成 std::cout << "Hello World";,很烦是不是?那么using namespace std;派上用场了 ,这个意思就是把std 这个分类下的所有功能函数直接移到 根分类 下面,就可以不写分类名称,直接调用。

具体就是:

没写using namespae std;

* 根分类

|- std

| |- cout

| |…

|…

写了using namespace std;

* 根分类

|- cout

|- std

| |- cout

| |…

|…

好啦,搞定


主函数是啥?

现在我们来到了 第三行代码(块)

int main() { ...}右大括号 出现在代码的 最后一行

不难发现,C++ 程序 里的 {} 不仅 有特殊意义 ,还是必须 成对出现 的。具体有什么意义?简单点说,在 大括号内 的代码可以 看做一个整体 在一个特定条件满足的前提下 ,这一块代码块 才会被执行

那么反推一下,意思是:不写在代码块里的东西,不用特定条件(触发),就会被直接执行? 是这样没错。


让我们来讲讲函数

前面说过,在头文件里,有各种各样 提前准备好了的功能 ;前面亦说过,C++ 的函数 和数学的函数很像,又比数学的函数强大

提到函数,有一个东西 不得不讲


C++ 的数据类型

数据类型,在数学里 十分常见 ,如: 整数 小数 分数 负数 正数 有理数……

在编程中,先人们为了 达到更高的运算效率 ,并且为了 便于区分 ,要求我们在定义一个变量(在 数学 中,我们称其为 未知数 ;在 科学 中,变量 意为 会改变的量 ,与 常量 相对。)的时候,要先告诉电脑这是一个 什么类型的变量 ,用专业()一点的话来说,叫做 声明变量类型 ,那这里的 类型 数学里的各种类型 一样吗?

有点区别。

C++ 中,我们最常见的就是 数字 ,但是计算机里保存 一个超大大数字 还要 进行计算 不是什么简单的事情 ,因为计算机的存储也是有 单位 的,超多单位 要协同就会 非常困难 ,而且,编写电脑 操作系统的家伙们 还规定了一套 管理内存 的法则,如果我们在程序里不规定数字范围,都按照 超大 来跟 操作系统申请内存 的话,就会出现:

“喂!我这边又多了 三个整数变量!还是老样子!给我按最大的整啊!”

“可是程序老爷,那边的内存管理小姐来报告说 内存都装不下 了……您看……要不……”

“不行!这个东西必须要!不然我这边就会 出错 的。”

“可……”

“没什么可是的,快去给我办!”

“哦……好……”

(另一边)

“啊?操作系统小姐,您的意思是说……还要来我这里申请 20M 内存?您难道没看到 这里都满了吗?”

“这是那边要的……我这不是没有什么办法嘛……”(声音 小小 的)

“行了行了,就知道你 不靠谱,那就试试那个吧,不行的话……他们也就死心了。”

于是就……

带给 C ++ 初学者与同学们的一份指南

这个故事告诉我们,数据类型 的管理和范围的限定 非常重要

为了避免这个情况,我们有了:


群魔乱舞的数据类型

C++ 里,最常见 的数据类型就是 int 了。int的范围是 -2147483648 ~ 2147483647,记不住?没关系!我也记不住 ,这时候,就要用到 先人 的智慧啦~ 祭出法宝

INT_MININT_MAX

分别是 最小 ,和 最大

这是 C ++ 的 climits头文件里的一个 常量 (虽然你也可以改变它就是了),当然,这个头文件已经被包含在bits/stdc++.h 里了(先人真伟大)。
  那么 int 类型就这么点范围,我如果要存一个更大的数怎么办?我也不讲什么 long int 了,直接上最长的 long long,它的范围常量:

LONG_LONG_MINLONG_LONG_MAX

那么我们 该用哪种

依据情况 而定,一般来说,开 int 类型的变量 已经足够 ,但要留意下题目给的 数据范围 有没有超过 int 的数据范围,还有中间的计算过程也可能会 超出范围,所以,如果不够的话,就开 long long

为什么不都开long long

你是想开几亿个 long long,然后让内存小姐 full of workssssss?还是想让存储格 直接坏掉 啊?啊?回答我

咳咳,以上的发言 来自内存小姐,不来自作者本人哈。


如何声明和使用变量?

数学 一样,数学的定义变量是这样的:$$x \epsilon Z$$,到 C++ 里:int x;,或者 long long x;,不难发现,C++ 定义变量的语法是 变量类型 变量名称;简单!

使用就更加简单了,数学里:

$$x=1$$

C++ 里:

x = 1;

就多了个 分号

这是 赋值 ,那么 运算 呢?

数学里:

$$x=x+1$$

C++ 里:

x = x + 1;

这么 简单 ?其实,像加一这样的小操作还可以写成:x += 1; 或者 x++; 简单解释一下,变量名 运算符 + 等号 数字 ,这个语句 等同 变量名 = 变量名 运算符 数字 特殊的 ,如果是 加减一 这样的操作,直接:x++或者 x-- 就行。

值得注意的是,x + 1会返回 x + 1 的值,就是先取出变量 x,再给你 这个值 +1 所得到的结果(并不会改变 x),而x = x + 1 就是再这个基础上,把这个结果 重新赋值 x,明白了吗?

值得一提的是,赋值操作 也会返回 一个值,这个值就是 x 被赋值之后的值 ,也就是说,当你有两个变量,想 快速赋值 的时候,别人的代码:x = 1; y = 1,你的代码:x = y = 1

也就是说,y = 1返回了 y 的值,也就是 1,而这个值被x = 接收 到,所以 x 也被赋值为1

咳咳,好啦变量和数据类型就 到此为止


函数的定义

C++ 的 函数定义 ,和变量的定义 极为相似 ,只不过,变量的值是一个 常数或者别的什么东西 ,而函数呢?它则可以 运行一串代码 ,然后根据代码来 返回结果

不过,这不是本期的内容,我就只讲一个 特殊的函数——主函数

主函数(Main Function),也就是我们的 int main() { ...},我们已经可以解释 一些东西了 ,函数和变量一样,也要规定它的 返回值的数据类型 ,我们发现,主函数的返回值是 int,这被称为程序的 结束代码 。用于判断程序终止的 正不正常

“哎!操作系统小姐!我结束了啊!退出码是 0”

“嗯,(๑‾ ꇴ ‾๑)好哒~ 我知道啦~ 辛苦啦。”

  “操作系统小姐!这边的退出码是 -33433121呢……”

“看起来 没有正常结束 ,反馈给 用户 看看吧。”

带给 C ++ 初学者与同学们的一份指南

是不是很银杏话捏?

那么我们的函数该 怎么返回一个值?,答案是:翻译一下! 返回的英文:return,所以返回 0 这个数就是:return 0;,也就是代码的 倒数第二行

归类一下,所以 C++ 函数声明 就是:返回值类型 函数名 {函数被调用时执行的代码}

那么主函数的 独特之处 就在于它会在程序开始执行时就被 调用一次 ,不过在它 被调用之前 ,会先执行函数外面的代码。不过,C++ 规定,除了 个别的语句 (如 定义变量 / 函数 引用头文件 提取分类到根分类 ……),其他的 都不能 直接写在主函数或者其他函数的 外面


如何输出捏?

前面已经说过了,头文件中有各式各样 已经提前写好的功能 ,这其实也就是提前定义了 超~ 大~ 一堆函数 供我们来使用。


如何使用函数?

最简单的就是这样:printf();

是的!后面加括号 (别忘了 分号)就行了!是不是很简单?来看看我们的 Hello World

cout << "Hello World";

丝……

看来有个别函数 不是这么用的 ,不过问题不大,就目前来看, 我所接触到的函数里 只有 cin 和 cout不是这样用的,其余的都可以这样用:函数名(参数 1, 参数 2, ...);

具体的,下一节来讲


一个新的数据类型!

"Hello World",这是什么?""这又是什么?这就是一种 新的数据类型 ,,叫做 字符串 字符串 ,就是 “字符” 组成的 “串”,那么 字符是什么?

字符,就是像 abA,等字符,包括了 文字 )和符号 ),不过是 单个的 ,值得一提的是,1 也可以是一个 字符 ,当它被 定义 成这样:'1' 时,就是了。

字符定义时,是在字符的两边加上 单引号 ,并且在 C 中,字符这一类型被命名为 char,那么定义一个字符 a 为 a,就是:char a = 'a';(C允许在定义变量时就赋值的哦)。

那么 刨根问底 ,字符是怎么 存储的 ?计算机不是只能 存数字 吗?这就要请出:Ascii 码表

带给 C ++ 初学者与同学们的一份指南

它定义了 一套用于把字符与数字互相转换的规则 ,使得计算机可以 存储字符 ,也就是说,你可以像操作数字那样 操作字符

比如:char a = '/' + 1;,我们发现,/Ascii 码47,加一就是 48,所对应的就是字符0 的 Ascii 码!

那么我该如何把 字符 0 转化成 数字 0 呢?简单!char a='0'; int b=a-'0'; 这个时候,b 这个变量里存的就是 数字0,厉不厉害?


说回字符串

字符串,就是 把多个字符串在一起 ,使用 双引号 来表示,数据类型名称为:string。如:string a = "Hello World";,但是 注意 ,字符串 不能像字符一样直接进行数学运算 ,而且当一个 字符串和一个字符做比较判断时 结果总是 false(假)


回到 cout

cout,就是 输出函数 ,它的用法是:cout << 输出内容;,也可以:cout << 输出内容 1 << 输出内容 2 << ...;,但是这样的 cout 只会 暴力把东西拼在一起,比如:

cout << "Hello" << "World"

这段代码的结果是 HelloWorld,没有 空格 ,也没有 换行,要注意。

那么如何换行?endl 来也!

cout << "Hello" << endl << "World";

当然,你也可以写 多个 cout

cout << "Hello" << endl;
cout << "World";

这两个的结果都是:

Hello
World

现在你 明白 Hello World了吧?


结语

代码到这里 就讲完了 ,有什么问题欢迎随时来提,下一次,我们讲 基础运算符~

正文完
 0
syh
版权声明:本站原创文章,由 syh 于2025-09-14发表,共计5579字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)
本站总字数:7.2w