此专栏为移动机器人知识体系下的编程语言中的
C
{rm C}
C++从入门到深入的专栏,参考书籍:《深入浅出
C
{rm C}
C++》(马晓锐)和《从
C
{rm C}
C到
C
{rm C}
C++精通面向对象编程》(曾凡锋等)。
2.C++基本数据类型和控制结构
2.1 C++基本数据类型
-
程序是由算法和数据组成的,数据是算法的前提,数据以常量和变量的形式出现,每个常量和变量都有数据类型;
-
C
{rm C}
C++的数据类型主要分为基本数据类型和自定义类型,基本数据类型是
C
{rm C}
C++编译系统内置的,自定义类型是用户以基本类型为基础定义的符合自己要求的类型;
-
C
{rm C}
C++基本数据类型:
- 整型
(
i
n
t
,
s
h
o
r
t
,
l
o
n
g
)
({rm int,short,long})
- 字符型包括单字符型
(
c
h
a
r
)
({rm char})
(
w
c
h
a
r
_
t
)
({rm wchar_t})
- 实型包括单精度型
(
f
l
o
a
t
)
({rm float})
(
d
o
u
b
l
e
)
({rm double})
- 整型
-
非基本数据类型:
- 逻辑型
(
b
o
o
l
)
({rm bool})
- 数组
(
t
y
p
e
[
]
)
({rm type[]})
- 指针
(
t
y
p
e
∗
)
({rm type *})
- 空类型
(
v
o
i
d
)
({rm void})
- 结构
(
s
t
r
u
c
t
)
({rm struct})
- 联合
(
u
n
i
o
n
)
({rm union})
- 枚举
(
e
n
u
m
)
({rm enum})
- 类
(
c
l
a
s
s
)
({rm class})
- 逻辑型
-
整型类型:根据表示范围分为基本整型、短整型、长整型、超长整型,其表示范围根据编译系统和平台而定。
// 1.基本整型:以int关键字定义; int score; // 2.短整型:用short int或short关键字定义; short int age; short age; // 3.长整型:用long int或long关键字定义; long int height; long height; // 4.超长整型:用long long int或long long关键字定义; long long int studentID; long long studentID;
// example2_1.cpp /** * 作者:罗思维 * 时间:2023/09/24 * 描述:确定整型类型在内存中所占的字节数。 */ #include using namespace std; int main() { cout
// example2_1.cpp程序执行结果(编译系统为:Visual Studio Code编译系统) sizeof(short int) = 2字节 sizeof(int) = 4字节 sizeof(long int) = 4字节 sizeof(long long int) = 8字节
- 短整型:
−
2
15
~
2
15
−
1
-2^{15}~2^{15}-1
−
32768
~
32767
-32768~32767
- 基本整型:
−
2
31
~
2
31
−
1
-2^{31}~2^{31}-1
−
2147483648
~
2147483647
-2147483648~2147483647
- 长整型:
−
2
31
~
2
31
−
1
-2^{31}~2^{31}-1
−
2147483648
~
2147483647
-2147483648~2147483647
- 超长整型:
−
2
63
~
2
63
−
1
-2^{63}~2^{63}-1
−
9223372036854775808
~
9223372036854775807
-9223372036854775808~9223372036854775807
- 短整型:
-
实型类型:亦称为浮点数,表示形式分为十进制小数形式和指数形式,十进制小数形式由数字和小数点组成,且必须含有小数点,指数形式利用数学上的指数形式表示,形式为数字
+
E
{rm +E}
+E指数,
E
{rm E}
E可以为小写
e
{rm e}
e,实型数据类型变量分为三种,如下:
// 1.单精度:利用float关键字定义; float fNum; // 2.双精度:利用double关键字定义; double dNum; // 3.长双精度:利用long double定义; long double ldNum;
// example2_2.cpp /** * 作者:罗思维 * 时间:2023/09/24 * 描述:确定实型类型在内存中所占的字节数。 */ #include using namespace std; int main() { cout
// example2_2.cpp程序结果 sizeof(float) = 4字节 sizeof(double) = 8字节 sizeof(long double) = 16字节
// example2_3.cpp /** * 作者:罗思维 * 时间:2023/09/24 * 描述:实型数据的运算存在一定的误差。 */ #include using namespace std; int main() { float fNumber1, fNumber2; fNumber1 = 123456789.0; fNumber2 = fNumber1 + 10; cout
// example2_3.cpp程序结果: fNumber1 = 1.23457e+08 fNumber2 = 1.23457e+08
-
字符类型
-
字符在
C
{rm C}
C++中用单引号(‘’)表示,字符类型数据就是存储字符的数据类型,字符类型变量用关键字
c
h
a
r
{rm char}
char定义;
-
字符类型的变量在内存中占用
1
1
1个字节,即
8
8
8位,在存储时,字符变量存储的是一个
−
128
~
127
-128~127
−128~127的数值,存储的字符是字符的
A
S
C
I
I
{rm ASCII}
ASCII码;
-
用”“表示的字符称为转义字符,用这个符号进行转义的字符一般是控制字符,控制字符不可打印,在程序中无法用一般形式表示,因此必须用””开头的字符序列表示;
-
常用的转义字符及其含义:
字符形式
字符形式
含义
含义
A
S
C
I
I
{rm ASCII}
n
{rm n}
换行,当前位置移动到下一行开头
换行,当前位置移动到下一行开头
10
10
t
{rm t}
水平制表符,当前位置移动到下一个
T
a
b
位置
水平制表符,当前位置移动到下一个{rm Tab}位置
9
9
b
{rm b}
退格,当前位置移动到前一列位置
退格,当前位置移动到前一列位置
8
8
r
{rm r}
回车,当前位置移动到本行开头
回车,当前位置移动到本行开头
13
13
f
{rm f}
换页,当前位置移动到下一页开头
换页,当前位置移动到下一页开头
12
12
表示反斜杠
表示反斜杠
92
92
’ 表示单引号
表示单引号
39
39
“ 表示双引号
表示双引号
34
34
-
-
逻辑类型:亦称布尔型,表示真和假的数据类型,逻辑类型变量用关键字
b
o
o
l
{rm bool}
bool定义,逻辑类型变量只有真和假两种情况,真用
t
r
u
e
{rm true}
true表示,假用
f
a
l
s
e
{rm false}
false表示,在
C
{rm C}
C++中,真用
1
1
1定义,假用
0
0
0定义;
// example2_4.cpp /** * 作者:罗思维 * 时间:2023/09/25 * 描述:利用逻辑类型变量的逻辑运算判断学生成绩是否及格。 */ #include using namespace std; int main() { bool bIsPassed; int nScore1 = 80, nScore2 = 70; bIsPassed = nScore1 >= 60 && nScore2 >= 60; cout
-
变量存储限定符:存储类型用在变量前加存储限定符表示,可以对变量在内存中的存储进行控制,常用的变量限定符如下:
-
a
u
t
o
{rm auto}
-
r
e
g
i
s
t
e
r
{rm register}
-
e
x
t
e
r
n
{rm extern}
-
s
t
a
t
i
c
{rm static}
-
-
强制类型转换:开发者自行进行的转换。
// 1.强制类型转换格式 类型名(表达式) 或 (类型名)表达式 // 类型名是表达式转换后的数据类型; // 2.将long类型值转换为int类型值 long lNumber = 100.0; int nNumber = (int)lNumber; // 3.Tips: // 3.1 强制类型转换是一种不安全的转换,从高类型数据向低类型数据转换时可能有精度的损失; // 3.2 强制类型转换是暂时性的,不会改变原来数据的数据类型;
// example2_5.cpp /** * 作者:罗思维 * 时间:2023/09/25 * 描述:强制类型转换实例。 */ #include using namespace std; int main() { double lNumber = 0.0; int nNumber = 0; nNumber = 32767; lNumber = (double)nNumber; // 将int类型转换为double类型值(低->高); cout 低); cout
2.2 实战1
项目需求:提示用户输入三角形的
3
3
3条边长,计算出三角形的面积并取整,将结果输出到输出设备上。
需求分析:
- 输入信息;
- 判断
3
3
- 可以组成三角形的情况下计算三角形的面积;
- 输出信息;
处理步骤:
程序实现
(
p
r
o
j
e
c
t
2
_
1.
c
p
p
)
({rm project2_1.cpp})
(project2_1.cpp):
/**
* 作者:罗思维
* 时间:2023/09/25
* 描述:计算三角形面积。
*/
#include
#include
using namespace std;
int main()
{
/**
* 参数说明:
* dLine1,dLine2,dLine3: 三角形三边边长;
* dArea: 三角形实际面积;
* dP: 三角形边长之和的一半;
* nArea: 三角形取整面积;
* bIsTriangle: 三角形的组成条件;
*/
double dLine1, dLine2, dLine3;
double dArea, dP;
long nArea;
bool bIsTriangle;
cout > dLine1;
cout > dLine2;
cout > dLine3;
bIsTriangle = ((dLine1 + dLine2)
2.3 C++语句与控制结构
-
表达式:指用运算符连接各个运算对象,合乎语法规则的式子,表达式后面加上分号构成了表达式语句;
// 1.空语句:指只有一个分号没有表达式的语句; // 空语句不做任何运算,是作为一种形式上的语句填充在控制结构中; // 语法格式: ; // 2.赋值语句:由赋值表达式加分号构成的语句; // 语法格式: 变量 赋值运算符 表达式; age = 18; // 3.函数调用语句:调用函数语句的表达式;
-
流程图:程序流程图是人们对解决问题的方法、思路或算法的一种描述,流程图用一些专用符号绘制,如:长方形、菱形、椭圆和小圆,这些符号用箭头连接,称为流程;程序中一般有三种控制结构,分别为:顺序结构、选择结构、循环结构,常见流程图图例如下:
-
顺序结构:指按照语句在程序中的先后次序一条一条地顺序执行的过程;
-
选择结构:主要由
i
f
{rm if}
if和
s
w
i
t
c
h
{rm switch}
switch控制,
i
f
{rm if}
if为单项选择结构,
s
w
i
t
c
h
{rm switch}
switch为多项选择结构。
// 1.if语句的基本形式 if (条件表达式) { 语句序列; } // 2.if-else语句形式 if (条件表达式) { 语句序列1; } else { 语句序列2; } // 3.if-else if-else语句形式 if (条件表达式1) { 语句序列1; } else if (条件表达式2) { 语句序列2; } ... else { 语句序列n; } // 4.switch语句形式 switch (变量表达式) // 变量表达式只能是整型、字符型或枚举型表达式; { case 常量表达式1:;break; case 常量表达式2:;break; ... case 常量表达式n:;break; default:; }
-
循环结构:在给定条件成立时,反复执行某程序段,直到条件不成立为止,给定条件称为循环条件,反复执服务器托管网行的程序段称为循环体。
// 1.while结构:通过判断条件是否成立来决定循环的继续和结束; while(表达式) // 表达式是循环条件; { 语句序列; // 语句序列为循环体; } // 2.do-while结构: do { 语句序列; }while(条件表达式); // 3.for结构: /** * 表达式1:循环初始值; * 表达式2:循环结束值; * 表达式3:循环的增量; */ for(表达式1;表达式2;表达式3) { 语句序列; } // 4.基于范围的for语句,遍历序列中的每一个元素,并对每个元素进行某种操作; for(数据类型 变量:序列) // 序列是一个对象,可以是数组名、对象名、容器名等; { 语句序列; // 对每个元素进行的操作; }
-
-
控制结构实例:
-
i
f
{rm if}
if语句实例:
e
x
a
m
p
l
e
2
_
6.
c
p
p
{rm example2_6.cpp}
example2_6.cpp。
/** * 作者:罗思维 * 时间:2023/09/26 * 描述:if语句实例。 */ #include using namespace std; int main() { int nNumber; cout > nNumber; if (nNumber > 0) { cout
-
i
f
−
e
l
s
e
{rm if-else}
if−else语句实例:
e
x
a
m
p
l
e
2
_
7.
c
p
p
{rm example2_7.cpp}
example2_7.cpp。
/** * 作者:罗思维 * 时间:2023/09/26 * 描述:if-else语句实例。 */ #include using namespace std; int main() { int nNumber; cout > nNumber; if (nNumber > 0) { cout
-
i
f
−
e
l
服务器托管网s
e
i
f
−
e
l
s
e
{rm if-else if-else}
if−elseif−else语句实例:
e
x
a
m
p
l
e
2
_
8.
c
p
p
{rm example2_8.cpp}
example2_8.cpp。
/** * 作者:罗思维 * 时间:2023/09/26 * 描述:if-else if-else语句实例。 */ #include using namespace std; int main() { int nScore; cout > nScore; if (nScore >= 0 && nScore = 90) { cout = 80 && nScore = 70 && nScore = 60 && nScore
-
s
w
i
t
c
h
{rm switch}
switch语句实例:
e
x
a
m
p
l
e
2
_
9.
c
p
p
{rm example2_9.cpp}
example2_9.cpp。
/** * 作者:罗思维 * 时间:2023/09/26 * 描述:switch语句实例,判断四季。 */ #include using namespace std; int main() { int nSeason; cout > nSeason; switch (nSeason) { case 12: case 1: case 2: cout
-
w
h
i
l
e
{rm while}
while语句实例:
e
x
a
m
p
l
e
2
_
10.
c
p
p
{rm example2_10.cpp}
example2_10.cpp。
/** * 作者:罗思维 * 时间:2023/09/27 * 描述:while语句实例,计算1+2+3+...+100的值。 */ #include using namespace std; int main() { int num = 1, sum = 0; while (num
-
d
o
−
w
h
i
l
e
{rm do-while}
do−while语句实例:
e
x
a
m
p
l
e
2
_
11.
c
p
p
{rm example2_11.cpp}
example2_11.cpp。
/** * 作者:罗思维 * 时间:2023/09/27 * 描述:do-while语句实例,计算1+2+3+...+100的值。 */ #include using namespace std; int main() { int num = 1, sum = 0; do { sum = sum + num; num++; } while (num
-
f
o
r
{rm for}
for语句实例:
e
x
a
m
p
l
e
2
_
12.
c
p
p
{rm example2_12.cpp}
example2_12.cpp。
/** * 作者:罗思维 * 时间:2023/09/27 * 描述:for语句实例,计算1+2+3+...+100的值。 */ #include using namespace std; int main() { int sum = 0; for (int num = 1; num
-
f
o
r
{rm for}
for语句遍历数组中的元素:
e
x
a
m
p
l
e
2
_
13.
c
p
p
{rm example2_13.cpp}
example2_13.cpp。
/** * 作者:罗思维 * 时间:2023/09/27 * 描述:for语句实例,遍历数组中的元素。 */ #include using namespace std; int main() { char c[] = {'W', 'i', 'l', 'l', 'a', 'r', 'd'}; for (char word : c) { cout
-
-
b
r
e
a
k
{rm break}
break语句:
b
r
e
a
k
{rm break}
break语句在
w
h
i
l
e
、
f
o
r
、
d
o
−
w
h
i
l
e
、
s
w
i
t
c
h
{rm while、for、do-while、switch}
while、for、do−while、switch结构中执行时,使程序立即退出这些结构,从而执行该结构后面的第一条语句。
-
b
r
e
a
k
{rm break}
break语句实例:
e
x
a
m
p
l
e
2
_
14.
c
p
p
{rm example2_14.cpp}
example2_14.cpp。
/** * 作者:罗思维 * 时间:2023/09/28 * 描述:break语句实例,计算1+2+...+100; */ #include using namespace std; int main() { int sum = 0; for (int i = 1;; i++) { sum += i; if (i == 100) { break; } } cout
-
-
c
o
n
t
i
n
u
e
{rm continue}
continue语句:
c
o
n
t
i
n
u
e
{rm continue}
continue语句在
w
h
i
l
e
、
f
o
r
、
d
o
−
w
h
i
l
e
{rm while、for、do-while}
while、for、do−while结构中执行时,跳过当前循环的其余语句,直接进入下一轮循环。
-
c
o
n
t
i
n
u
e
{rm continue}
continue语句实例:
e
x
a
m
p
l
e
2
_
15.
c
p
p
{rm example2_15.cpp}
example2_15.cpp。
/** * 作者:罗思维 * 时间:2023/09/29 * 描述:continue语句实例,计算1-100内偶数和; */ #include using namespace std; int main() { int sum = 0; for (int i = 1; i
-
2.4 实战2
项目需求:求某整数段区间中素数并输出。
需求分析:
- 提示用户输入整数段区间;
- 判断素数规则:对于数字
n
{ n}
2
2
n
sqrt{n}
代码实现
(
p
r
o
j
e
c
t
2
_
2.
c
p
p
)
({rm project2_2.cpp})
(project2_2.cpp):
/**
* 作者:罗思维
* 时间:2023/09/29
* 描述:求某整数区间段的素数。
*/
#include
#include
using namespace std;
int main()
{
/**
* 参数说明:
* nStart: 整数区间最小值;
* nEnd: 整数区间最大值;
* nCnt1,nCnt2: 循环计数器;
* nSqrt: 存储平方根值;
* nNum: 计算素数个数;
*/
int nStart = 0, nEnd = 0;
int nCnt1 = 0, nCnt2 = 0;
int nSqrt;
int nNum = 0;
cout > nStart;
cout > nEnd;
if (nStart = nSqrt + 1) // 如果nCnt2>=nSqrt+1,说明nCnt1不能被2到nSqrt的数整除;
{
cout
2.5 实战3
项目需求:根据用户输入的年份判断年份是否为闰年。
需求分析:
- 用户输入年份;
- 判断闰年的规则:年份可以被
4
4
100
100
400
400
代码实现
(
p
r
o
j
e
c
t
2
_
3.
c
p
p
)
({rm project2_3.cpp})
(project2_3.cpp):
/**
* 作者:罗思维
* 时间:2023/09/29
* 描述:提示用户输入年份,判断是否为闰年。
*/
#include
using namespace std;
int main()
{
int year = 0;
cout > year;
while (year > year;
}
if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0))
{
cout
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
相关推荐: 【ArcGIS Pro二次开发】(81):玩个花活_控规指标块生成
一、要实现的效果 废话不多说,这次要实现的是类似控规指标块的标注: 这里只是示例,用了5个格子,做成9个格子也是可以的。 实现这个效果最关键的是要用到Pro中的复合标注。 关于复合标注的用法可以搜一下帮助里的【使用复合注释的标注】: 这里要介绍的是如何在SDK…