C++教程

Posted 喵喵喵爱吃鱼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++教程相关的知识,希望对你有一定的参考价值。

自学C++第二章

本章课程承接作者主页中《自学C++》的第一章内容。

这套课程特别适合自学C++的小白。每节课程最后还有一道练习题,边学边练,可以帮你及时巩固学习到的知识。

本教程中的练习题,请移步 登录 - 1024 - 乐学编程 - Powered By 1024fun 进行练习。

您也可以在该网站免费学习到更多课程

C++ 变量作用域

上节课我们学习了变量,这节课我们重点学习一下变量的作用域。

作用域是程序的一个区域,一般来说有三个地方可以定义变量:
在函数或一个代码块内部声明的变量,称为局部变量
在函数参数的定义中声明的变量,称为形式参数
在所有函数外部声明的变量,称为全局变量

局部变量

在函数或一个代码块内部声明的变量,称为局部变量。
它们只能被函数内部或者代码块内部的语句使用。下面的实例使用了局部变量:

#include <iostream>
using namespace std;

int main ()
{
 // 局部变量声明
 int a, b;
 int c;
 // 实际初始化
  a = 10;
  b = 20;
  c = a + b;
  cout << c;
 return 0;
}

全局变量

在所有函数外部定义的变量(通常是在程序的头部),称为全局变量。全局变量的值在程序的整个生命周期内都是有效的。
全局变量可以被任何函数访问。也就是说,全局变量一旦声明,在整个程序中都是可用的。下面的实例使用了全局变量和局部变量:

#include <iostream>
using namespace std;

// 全局变量声明
int g;
int main ()
{
 // 局部变量声明
 int a, b;
 
 // 实际初始化
  a = 10;
  b = 20;
  g = a + b;
 
  cout << g;
 return 0;
}

在程序中,局部变量和全局变量的名称可以相同,但是在函数内,局部变量的值会覆盖全局变量的值。下面是一个实例:

#include <iostream>
using namespace std;

// 全局变量声明
int g = 20;
int main ()
{
 // 局部变量声明
 int g = 10;
  cout << g;
 return 0;
}

执行结果为10

初始化

接下来我们再来讲解一下局部变量和全局变量的初始化
当局部变量被定义时,系统不会对其初始化,您必须自行对其初始化。定义全局变量时,系统会自动初始化为下列值:

数据类型初始化默认值
int0
char'\\0'
float0
double0

字符 '0' 和 '\\0' 及整数 0 的区别

字符型变量用于存储一个单一字符,用 char 表示,其中每个字符变量都会占用 1 个字节(8 位二进制数)。
整型 int 在内存中占用空间为四个字节(32位二进制数)。
字符 '0':char c = '0'; 它的 ASCII 码实际上是 48,内存中存放表示:00110000。
字符 '\\0': ASCII 码为 0,表示一个字符串结束的标志。这是转义字符(整体视为一个字符)。由于内存中存储字符,依然是存储的是对应字符集的字符编码,所以内存中的表现形式为 00000000。
整数 0 : 内存中表示为 00000000 00000000 00000000 00000000,虽然都是 0,但是跟上面字符 '\\0' 存储占用长度是不一样的。

好,接下来我们做一道练习题,请移步到该网站 C++基础课程的 《作用域》小节中,习题在内容最后。

http://www.eluzhu.com:1818/my/course/71

算术运算

算术运算符,让计算机先变成计算器。虽然把计算机当成计算器来用,对计算机来说有点大材小用。但对编程来说,基本的算术运算肯定是少不了的,“万丈高楼平地起”,让我们从基础学起。
运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。C++ 内置了丰富的运算符,并提供了以下类型的运算符:
• 算术运算符
• 关系运算符
• 逻辑运算符
• 位运算符
• 赋值运算符
• 杂项运算符
接下来的课程,我们会重点讲解一些常用的运算符,首先我们先学习 算术运算符

基本算术式的计算和输出

数学中有四个基本运算,它们是加、减、乘、除。在C++语言中,四则运算被称为 算术运算符(operator):
加法,使用加号+作为运算符,例如a + b。
减法,使用减号-作为运算符,例如a - b。
乘法,区别于我们平时手写的乘号“×”,C++ 语言中使用 * 作为乘号,例如a * b表示a与b相乘。
除法,区别于我们小时候写的除号“÷”和写分式时的中横线“—”,在 C++ 语言中我们使用 斜杠 / 作为除号,例如 a / b 表示a被b除。

请看下面的实例,了解 C++ 中可用的算术运算符。

#include <iostream>
using namespace std;
 
int main()
{
 int a = 21;
 int b = 10;
 int c;
 
   c = a + b;
   cout << "Line 1 - c 的值是 " << c << endl ;
   c = a - b;
   cout << "Line 2 - c 的值是 " << c << endl ;
   c = a * b;
   cout << "Line 3 - c 的值是 " << c << endl ;
   c = a / b;
   cout << "Line 4 - c 的值是 " << c << endl ;
 return 0;
}

当上面的代码被编译和执行时,它会产生以下结果:

Line 1 - c 的值是 31
Line 2 - c 的值是 11
Line 3 - c 的值是 210
Line 4 - c 的值是 2

数学中可以 ab 表示 a 乘以 b ,但 C++ 中乘号不能省略,出现除法时注意括号的应用。如

应写为: ( a + b ) / (c * d ) 或 ( a + b) / c / d
但不能写成: (a + b ) / c *d 或 a + b / c * d

在写算术表达式时,为使表达式更加清晰,一般在运算符前后各插一个空格

计算梯形的面积

咱们来做一道题。
题目:
已知梯形的上底长 15, 下底长 20,高 12 。请编程输出该梯形的面积。

提示:
回忆一下梯形面积公式。
另外,如数学中的运算一样,C++ 语言的基本运算符也是有优先级的,乘法、除法、求余(模运算,接下来马上讲到)的优先级比加法、减法要更高。
如果我们想改变这种优先级,C++ 语言中也设计了一种和数学中教的一模一样的工具——小括号。
不要忘记加括号,否则可能出错。

请移步到该网站 C++基础课程的 《运算符(一)》小节中,习题在内容最后。

http://www.eluzhu.com:1818/my/course/71

求余(模运算)

求余(complementation) 运算也称 模运算(modulo operation),就是求两个整数相除以后的余数。
如果我们要求 21 除以 4 的余数,我们会得到 1。
在 C++ 语言中,我们用百分号 % 作为求余运算的运算符,可以写成例如 a % b 的形式。对于上面的例子,我们可以直接写成

21 % 4  

这个运算式的值将会是 1。

自增、自减运算符

自增、自减运算符:++,- -
相当于 n = n + 1 和 n = n - 1, 它有前缀和后缀两种用法

++k,  k++,  - -k,  k- -

但含义有所不同。如:i=3

j=i++    i=4    j=3 
j=++i    i=4    j=4 
j=i--    i=2    j=3 
j=--i    i=2    j=2 
++i 是 先加,先对 i 的值加 1 ,再使用 i 的值执行该命令,而 i ++ 是后加,先使 i 执行该命令,执行完再对 i 的值加1.

关系运算符

在 C++ 语言中,“真和假”这对概念是用布尔型( bool )的数据来进行标记——false 表示假,true 表示真。
在 C++ 语言中,有一个单目的 取反运算符( logical negation operator ): !
单目,就是指运算符的操作对象只有一个。
取反( ! )运算的规则是:
对 false(假)取反,得到 true(真);
而对 true (真)取反,得到 false(假)。

这也是我们的生活常识:真的反面是假、假的反面是真

在 C++ 语言中还有一个 相等关系运算符(equal-to operator): == 。

它由两个等于号构成。 a == b ,
可以理解为“变量a与变量b的值是相等的吗?”

如果a与b相等,回答“是”,这个表达式的值就是 true(真);
如果a与b不相等,回答“不是”,这个表达式的值就是false(假)。

由于 == 经常与 = 混淆,而编译器一般检查不出这种错误,因此建议在相等关系比较时,把常数/常量放在左边,这样如果搞混 == 与 = 时,编译器就会报错。

类似的,C++ 语言中还有一个 不相等关系运算符(not-equal-to operator): != 。它由一个取反运算符和一个等于号构成。

a != b ,可以理解为“变量a与变量b的值不相等吗?”

如果a与b不相等,回答“是”,这个表达式的值就是 true(真);
如果a与b相等,回答“不是”,这个表达式的值就是false(假)。

注意:这里稍微有点绕,聪明的你回想一下英语中疑问句和否定疑问句的回答,应该就能触类旁通。

比如: 9 != 12 ,这个表达式的结果是什么?

9 不等于 12 ,所以 9 != 12 是真的,得到的结果是 true

那 9 == 12 ,这个表达式的结果是什么?

9 不等于 12 ,所以 9 == 12 是假的,得到的结果是false

我们在 C++ 语言中可以使用的关系运算符还有 :

大于等于关系运算符(greater-than or equal-to operator) >= 、
小于等于关系运算符(less-than or equal-to operator) <= 、
大于关系运算符(greater-than operator) > 、
小于关系运算符(less-than operator) < 。

比如, 7 >= 7、6 < 8、7 <= 9这样的式子返回结果是什么呢?

这三个表达式都是对的,是”真“的。所以结果是 true

逻辑运算符

然后我们介绍一下 逻辑运算符
其实 与&&、或|| 运算符和我们在逻辑上的与、或概念是一致的,具体的取值,请参考下面的这个真值表:

同时也请注意,&& 和 || 这两个运算符的两侧的值只能是真或假(也就是 true 或 false)。
另外,需要注意 && (与)的结合优先级是高于 || (或)的。

在给出逻辑运算值时 , 以 “ 1 ” 代表 “ 真 ”,“ 0 ” 代表 “ 假 ”。 但反过来判断一个量是为 “ 真 ” 还是为 “ 假 ” 时 , 以 “ 0 ” 代表 “ 假 ”, 以非 “ 0 ” 的数值作为 “ 真 ”。

由于 5 和 3 均为非 “ 0 ”, 因此 5 && 3 的值为 “ 真 ”, 即为 1 。

5 || 0 的值为 “ 真 ”, 即为 1 。
我们做一道练习题,巩固一下今天学习的知识点。请移步到该网站 C++基础课程的 《运算符(二)》小节中,习题在内容最后。

1024乐学编程-C++基础

 

我们这次先讲到这里,您可以进入上面的地址免费学习完整的算法课程。

以上是关于C++教程的主要内容,如果未能解决你的问题,请参考以下文章

以下代码片段 C++ 的说明

C++ 代码片段执行

此 Canon SDK C++ 代码片段的等效 C# 代码是啥?

C++ 代码片段(积累)

我的Android进阶之旅NDK开发之在C++代码中使用Android Log打印日志,打印出C++的函数耗时以及代码片段耗时详情

什么是在 C++ 中获取总内核数量的跨平台代码片段? [复制]