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
初始化
接下来我们再来讲解一下局部变量和全局变量的初始化
当局部变量被定义时,系统不会对其初始化,您必须自行对其初始化。定义全局变量时,系统会自动初始化为下列值:
数据类型 | 初始化默认值 |
---|---|
int | 0 |
char | '\\0' |
float | 0 |
double | 0 |
字符 '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++基础课程的 《运算符(二)》小节中,习题在内容最后。
我们这次先讲到这里,您可以进入上面的地址免费学习完整的算法课程。
以上是关于C++教程的主要内容,如果未能解决你的问题,请参考以下文章
此 Canon SDK C++ 代码片段的等效 C# 代码是啥?
我的Android进阶之旅NDK开发之在C++代码中使用Android Log打印日志,打印出C++的函数耗时以及代码片段耗时详情