导图社区 【 Cxx程序设计教程】第二章 简单的程序设计
这是一篇关于【 Cxx程序设计教程】第二章 简单的程序设计的思维导图,主要内容有符号、数据类型、常量与变量、不同类型数据的转换、运算符和表达式等。
编辑于2022-12-25 17:13:45 广东这是一篇关于空间分析与建模的思维导图,主要内容包括:第五章 地理加权回归分析技术,第一章 绪论,题型,第七章 探索性空间分析,第六章 地统计分析,第四章 空间点模式分析,第三章 地理相关性分析,第二章 空间数据分析的基础理论。
遥感科学与技术专业课,高光谱遥感是指用很窄而连续的光谱通道对地物持续遥感成像的技术(多波段目连续→成像光谱遥感)。
中国矿业大学《计算机地图制图》课程期末复习,是以计算机硬件设备为基础,在相应软件系统的支持下,以数字格式对地图制图要素与现象数据进行采集、处理与管理,按照地图制图的规范进行符号化、图版制作与输出,并提供地图自动分析的全过程
社区模板帮助中心,点此进入>>
这是一篇关于空间分析与建模的思维导图,主要内容包括:第五章 地理加权回归分析技术,第一章 绪论,题型,第七章 探索性空间分析,第六章 地统计分析,第四章 空间点模式分析,第三章 地理相关性分析,第二章 空间数据分析的基础理论。
遥感科学与技术专业课,高光谱遥感是指用很窄而连续的光谱通道对地物持续遥感成像的技术(多波段目连续→成像光谱遥感)。
中国矿业大学《计算机地图制图》课程期末复习,是以计算机硬件设备为基础,在相应软件系统的支持下,以数字格式对地图制图要素与现象数据进行采集、处理与管理,按照地图制图的规范进行符号化、图版制作与输出,并提供地图自动分析的全过程
Ch2 简单的程序设计
符号
字符集
字符是组成程序的最小单位,组成词法符号的基本单位
组成
英文字母
a~z,A~Z
数字字符
0-9
特殊字符
空格!#%……&*_-+=~>/|\.,;:?'"<>()[]{}
标识符
标识符就是一个名字,用来命名程序中的变量、函数、数组及符号变量等
遵守规则
标识符由字母、数字和下划线组成,第一个字符必须是字母或下划线
标识符的长度由编译系统规定
大小写是有区别的
标识符不能与关键字相同
关键字(保留字)

关键字是语言系统预定义的具有特殊意义的词法符号
数据类型
基本数据类型
组成
 ·基本数据类型的修饰符 精度高低:short、long 是否带正负号:unsigned、signed(不能修饰实数)
整型 int
实型(浮点型) float double
字符型 char
储存字符的ASCII码
布尔型 bool
占字节数大小顺序
用sizeof(数据类型)可以测出某种数据类型的长度,eg:“count<<sizeof(int)<<endl”可以测出int型数据的长度为4
构造数据类型
数组
指针
枚举 enum
结构体struct
共用体union
类class
用typedef重定义类型
为已有的数据类型另起一个新的名称,从而提高程序可读性
语句的格式
typedef 已有类型名 新类型名表;
eg: typedef double AREA,LENGTH; AREA c,d; //等价于double c,d; LENGTH m; //等价于double m;
注意
typedef 没有创造新的数据类型
typedef是针对数据类型而不是变量
常量与变量
常量
字面常量(直接常量)
以字面值直接出现的常量
实型常量
实型常量又称浮点型常量,只能用十进制表示。
小数形式: 3.14 -0.4 5
指数形式: 1.23e2 -1.5E2 1e-6
· ·E(e)之前必须有数字,故E-2是不合法的指数形式 ·E(e)之后必须是整数,而且可正可负
整型常量
十进制整型常量
eg:234、0、-123……
八进制整型常量
eg:012、-057……
十六进制整型常量
eg:0x34、-0x68……
字符型常量
用单引号括起来的一个字符,在内存中占用一个字节,其值是该字符所对应的ASCII码值。
普通字符
用一对单引号括起来的一个字符
eg:'A'、'a'、'b'、'0'、'#'、'? '
转义字符
 最后两个是用ASCII码表示的一个字符,eg: '\101' -----------'A' '\012' -----------'\n' '\376' -----------'' '\x61' -----------'a' '\60' -----------'0'
以“\”开头的字符序列,用来表示控制字符、字母字符、图形符号和专用字符
字符数据在计算机存储的是该字符的ASCII码,与整数相同,·两者可以相互赋值 ·字符型数据可以参加算数运算
'A'-------'\101'-------'\x41'--------65 eg:a-32=A
字符串常量
用双引号括起来的字符或字符序列
字符串可以出现普通字符和转义字符,也可以包含C++语言以外的字符(汉字)
字符串结束标志
\0
eg:“hello”字符串的存放  \0:ASCII码值为0,代表空操作,不起任何控制作用,只表示字符串结束
注意区分:字符常量和字符串常量
·'a'和"a"代表的含义不同。 ·存储空间不同。 'a'仅占用1个字节;而"a"需要占用两个字节,其中一个字节用来存放字符串结束符'\0'的ASCII码值。 
布尔型常量(逻辑型常量)
true(真)
false(假)
符号常量
·用一个标识符代表一个常量 ·增加程序的可读性和可维护性
使用之前,先用预处理命令定义
#define 标识符 常量
该命令的功能是用标识符代替后面的常量;习惯上,符号常量名用大写 eg:#define PI 3.14159 **注意避免以下错误: #define PI=3.14159 或 #define PI 3.14159;
一旦某标识符被定义成了符号常量,该符号变量的值在其作用域内不能改变,不能再被赋值
变量
变量是在程序执行过程中其值可以变化的量
属性
变量名
对运行变量内存单位的命名,代表一个变量的存储位置
·程序编译运行时,每个变量占用一定的存储单元,并且变量名和内存单位地址之间存在一个对应关系; ·当引用一个变量时,计算机通过变量名寻址,从而访问其中数据
命名要求
注意区分字母的大小写
一般情况,变量名用小写字母
命名原则:“见名知意” ,增加程序的可读性
不能与关键字、函数名和类名相同
长度由编译系统规定
数据类型
变量的值
变量的声明(变量定义)
变量都必须先声明后使用
确定了变量的名字、数据类型、允许的取值及合法操作
这样便于编译程序为变量预先分配存储空间和进行语法检查 eg: int sum; //定义整型变量sum float average; //定义单精度实型变量average char ch; //定义字符型变量ch int a,b; //定义整型变量ch
位置
可以放在程序的任何位置,只要是使用该变量之前
变量初始化
在定义变量的同时,给它赋以初值
语句格式
常变量(只读变量)
在定义变量时,加上关键字const
变量的值在程序运行期间不能再改变
定义的格式
const 数据类型 标识符=初始值;
eg:const float PI=3.14159;
符号常量与常变量的区别
符号常量
#define定义
没有类型
只是一个符号代替字符串,在预编译时把所有符号常量替换为所指定的字符串
内存中没有以符号常量命名的存储单位
只是简单的宏替换,编译时不作语法检查,可能成为引发一些错误的根源
eg:#define PI 3.14159m 在编译阶段不会被检查出错误
常变量
const定义
有类型
内存中有以它命名的存储单位
像普通变量一样,编译时要对其进行类型检查,使得许多错误在编译阶段就被发现,大大降低了程序的出错率
eg:#const float PI=3.14159m 在编译阶段则会被检查出错误,因为3.14159m不是一个浮点型数据
不同类型数据的转换
为了便于运算,将不同类型的数据转换为同一类型
隐式类型转换(自动类型转换)

char、short类型的数据,自动转换成int类型
精度低的数据类型转换成精度高的数据类型
eg:1/2*3.0=0.0 1/2=0.5→(int)0(因为1和2的更高级的精度类型为int,故其运算结果也为int型) 0(int)*3.0(double)=0.0(double)*3.0(double)=0.0(double)[0转换成更高级精度的double型] 最后结果得出是double型的0.0
在赋值表达式中,将赋值号"="右边表达式的值的类型转换成左边变量的类型。
若左边变量类型的精度低于右边表达式值类型的精度,可能会丢失数据的精度
显式类型转换(强制类型转换)
格式
两种格式的理解: (double)3/2 //先把整型3强制转换成双进精度类型3.0,再把整型2自动转换成双精度类型2.0,得出结果1.5 double(3/2) //先计算3/2 的3处结果1.5自动装换成整型1,再把整型1装换成双精度类型的1.0,得出结果为双精度类型的1,0
(类型)表达式
(int)2.56 将2.56转换成整数2
类型(表达式)
int(2.56) 将2.56转换成整数2
强制类型转换不影响原来变量的类型
强制类型转换后得到的是一个所需类型的中间变量,原来变量的类型没有发生任何变化 eg:double pi=3.14159; int x=(int)pi; 上述程序执行后,pi的值还是3.14159(类型和值都美哟有改变),x的值则是3
运算符和表达式
关系
表达式=运算符+运算分量(操作数)
运算符的三个基本概念
元(目)
参加运算的操作数的个数
单目运算
双目运算
三目运算
优先级
反映参加运算的先后次序
分为15级

结合性
操作数对运算符的结合方向
左结合(自左向右方向)
操作数先与左边的运算符结合
右结合(自右向左方向)
操作数先与右边的运算符结合
算术运算符与算数表达式
算术运算符
+(加) - (减) *(乘) /(除) %(取余) ++(自增) --(自减)
算术表达式
由算数运算符、操作数、括号组成
优先级
先乘除、后加减,同级运算自左向右
注意区分/与%
除法运算(/)
操作数可以是整型或实型常量、变量以及表达式
两个操作数均为整型,则结果取商的整数部分,小数部分被自动舍弃
3/2=1
操作数其中一个是实型,则结果为实型
3.0/2=1.5
取余运算(%)
两个操作数必须为整型
两个操作数均为正数时,结果符号取正
两个操作数存在负数时,通常结果符号与被除数相同
结果符号主要与具体的编译器有关
自增(++)与自减(--)
操作数必须是变量,不能是常量和表达式
eg:5++、(a+b)--、++(2*i)都是不合法的
结合性:右结合
两种形式
前置
先将变量的值增(或减)1,然后再使用变量的值进行其他运算
后置
先使用变量的值进行其他运算,然后再将变量的值增(或减)1
赋值运算符与赋值表达式
赋值运算符
=
赋值表达式
变量=表达式
·由赋值运算符将变量和一个表达式连接起来的表达式。 ·作用:将赋值运算符右边的表达式的值赋给其左边的变量。
结合性:右结合
·赋值表达式的类型为赋值号左边变量的类型,其值为赋值运算符左边变量的值。
10种复合运算符
·双目运算符,与=优先级相同 ·结合性为右结合
+= -= *= /= %= <<= >>= &= ^= |=
a+=3 等价于 a=a+3 x*=y+8 等价于 x=x*(y+8) a+=a-=a*a 等价于 a=a+(a=a-a*a) a%=b 等价于 a=a%b m&=n 等价于 m=m&n
关系运算符与关系表达式
关系运算符
对数据进行大小比较运算
> < >= <= == !=
关系运算结果
true(真)或false(假)
结合性:左结合
两个实数是否相等
若x、y为实数,要判断x是否等于y,则可写成fabs(x-y)<1e-6
若x、y为实数,要判断x是否不等于y,则可写成fabs(x-y)>1e-6
逻辑运算符与逻辑表达式
逻辑运算符
(逻辑非)!
单目运算符,具有右结合性
(逻辑与)&&
(逻辑或)||
双目运算符,具有左结合性
优先级(由高到低)
! > && > ||
逻辑表达式
闰年的判断条件是:①能被4整除,但不能被100整除;②能被400整除。设年份用year表示,则判断year是否闰年的条件用逻辑表达式可表示如下: (year%4==0)&&(year%100!=0)||year%400==0
用逻辑运算符将关系表达式或逻辑量连接起来的表达式
遵循“短路求值”的规则
例 a=1;b=2;c=3;d=4;m=1;n=1; 程序: (m=a>b)&&(n=c>d) 结果:m=0,n=1 原因:a>b,为假,故m被赋值为0 “&&”为逻辑与,m=a>b被判定为假,该逻辑运算已经可以得出结果,右短路特性,接下来的对n的赋值将不会再执行,n为初始值1
逻辑表达式求解时,并非所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符
判断x,y的成绩是否为不及格 程序:int x=50,y=100; if(0<x<60) cout<<"不及格"<<endl; if(0<y<60) cout<<"不及格"<<endl; 最后结果:x,y均为不及格 原因:0<y<60,依照逻辑运算,y=100代入后,先进行0<100的逻辑判断,结果为1(真);然后再进行1<60的逻辑判断,结果也为真,故最后结果输出为“不及格” 更改: 0<y<60 →→→→→ (0<y)&&(y<60)
逗号运算符与逗号表达式
逗号运算符(顺序求值运算符)
,
逗号表达式
运算顺序:从左向右依次计算
表达式1,表达式2,…,表达式n
整个逗号表达式的值是表达式n的值
eg:a=3*5,a*4 整个逗号表达式的值为60(先计算a=3*5=15,再a=a*4=60)
逗号运算符的优先级最低
位运算
对数据以按照二进制位进行的操作 PS:均为补码运算,最后结果为负数的要转为原码=(补码取反+1)
6种位运算符(重点掌握前3种)
位运算的数据只能是整型或字符型数据,不能是实型数据
按位取反 ~
对每一位取反 eg;:~5 结果-6 
按位与 &
对应两个二进制位均为1时,结果才为1 例:5&6 结果 4 
按位或 |
对应的两个二进制位有一个为1,结果就为1 例:5|6 结果7 
按位异或 ^
对应的两个二进制位相同,则该为的运算结果为0;若不相同,则对应位置的运算结果为1 例:5^6 结果3 
左移运算 <<
按照指定的位数将一个数的二进制值向左移,左移后,移出的高位舍弃,低位补0 例:5<<2 结果20 
右移运算 >>
按照指定的位数将一个数的二进制值向右移,右移后,移出的低位舍弃;如果是无符号数,高位补0;如果是有符号数高位补0或1由编译系统规定 例:5>>2 结果1 
C++语言的基本控制结构及语句
C++语句
表达式语句
表达式;
eg:i++: x=5 一般执行能使某些变量的值改变或者能产生某种效果的表达式才能称为有意义的表达式语句
函数调用语句
由函数调用表达式之后加上分号构成的
eg:sqrt(4); 构成一个函数调用语句,用来求解一个数的平方根
复合语句
用“{}”把若干语句括起来
控制语句
用于控制程序的流程
九种
if…else语句 switch语句 do while语句
while语句 for语句 break语句
continue语句 return语句 goto语句
空语句
只有分号“;”组成的语句
编译时不产生任何指令,运行时不产生任何动作
在程序中,可以用作空循环体
当要循环执行的动作已全部由循环控制部分完成时,就需要一个空循环体
三种基本结构
顺序结构
·顺序结构是指构成程序的若干条语句按照从上向下的顺序执行 ·顺序结构是最简单的一种控制结构 ·C++程序中数据的输入和输出是通过I/O流操作完成的,他们也是顺序的
赋值语句
C++程序中实现顺序结构的语句
输入输出语句
cout流输出
cout<< 表达式1 << 表达式2 << … << 表达式n;
cin流输入
cin >>变量名1 >> 变量名2 >> …>> 变量名n;
各数据之间需要有分隔符,从键盘输入时的分隔符为空格、回车、TAB键
不许在cin中加变量名以外的符号,例:逗号
选择结构
条件判断时结果非0即为真
if语句(条件选择语句)
三种形式
单分支
执行流程图 
双分支
执行流程图 
多分支
执行流程图 
if后面的表达式类型任意 语句可以是复合语句(用{ }括起来)
嵌套

if ~ else 配对原则
缺省{ }时,else总是和它上面离它最近的未配对的if配对

条件运算符与表达式
·唯一的三目运算符 ·执行流程图: 
形式
expr1 ? expr2 : expr3
计算expr1的值
真
整个表达式的值为expr2
假
整个表达式的值为expr3
expr1、expr2、expr3类型可不同,表达式值取较高的类型
eg:x>y?1:1.5 若x>y ,值为1.0 若x<=y ,值为1.5
条件运算符可嵌套
结合方向
eg: a>b?a:c>d?c:d 等价于 a>b?a:(c>d?c:d)
自右向左
优先级
逻辑运算符>条件运算符>赋值运算符
于if语句的联系
若被判断表达式的值无论真假,都给一个变量赋值,这是时两者之间可以互换
条件表达式是有值的,而if语句是没有值的
switch语句(开关分支语句)
执行过程: 当表达式的值与某一个case后面的常量表达式值相等时,执行此case后面的语句。 否则,执行default后面的语句。
形式
注意
switch 后的表达式只能是整型、字符型等有序类型
*case 后面是常量表达式,不能含有变量,并且各个case不能冲突
*每个case的最后,一般要添加break语句
*case后可包含多个可执行语句,且不必加{ }
*多个case可以共用一组执行语句
switch可嵌套
没有匹配项,则执行default语句,无default,则退出
多分支结构中,何时使用if语句,何时使用switch语句?
if ... else语句总是可以的 在某些条件下,用switch语句更直观、方便
if语句可以用来判断一个值是否在一个范围而swtch语句则要求其相应分支的常量与某一值相等
循环结构
循环结构的组成
循环控制条件+循环体
三种循环语句
while语句
执行流程图 
形式

特点
先判断表达式,后执行循环体
循环次数
(终值-初值)/步长+1
步长:循环变量的增值
注意
循环体有可能一次也不执行
循环体可为任意类型语句
循环体包含一个以上的语句,要用{}括起;循环体中应有趋向于结束的语句
下列情况,退出while循环
条件表达式不成立(为零)
循环体内遇break,return,goto
无限循环
do…while语句
执行流程图 
形式
特点
先执行循环体,后判断表达式
注意
至少执行一次循环体
do~while可转化成while结构
当while语句中的条件表达式一开始为假时,这两种循环的结果就不同了,不能互换
do … while语句末尾的分号";"不可省略
for语句
执行流程图 
形式
注意
for语句中表达式1, 表达式2 ,表达式3 类型任意,都可省略,但分号;不可省
省略表达式1
不对循环控制变量赋初值,或在for语句前已经赋值
省略表达式2
表示循环条件总为”真“相当于无限循环
省略表达式3
循环控制变量不发生改变,故要在循环体中加入修改循环变量的语句
表达式1可以是设置循环变量的赋值表达式,也可以是与循环变量无关的其他表达式
如: for(sum=0,i =1;i<=100;i++) sum=sum+i;
表达式1和表达式3可以是一个简单的表达式,也可以是逗号表达式
eg:for(i=0,j=100; i<=j; i++,j--) k=i+j;
表达式2只要其值是非0就执行循环体
无限循环: for(;;)
转换成while结构
循环嵌套
 
三种嵌套
外循环;内循环;多层循环

三种循环可互相嵌套,层数不限
外层循环可包含两个以上内循环,但不能相互交叉
嵌套循环的执行流程(先内后外)
嵌套循环的跳转
可以:从循环体内跳到循环体外,提前结束循环
禁止:从外层跳入内层,跳入同层的另一循环
外循环每执行一次,内循环要执行与之相应的所有次数
辅助控制语句
break语句
形式
break;
在循环语句和switch语句中,终止并跳出循环体或开关体
注意
break只能出现于循环语句和switch语句
break只能终止并跳出最近一层的结构
break经常与if语句搭配使用
continue语句
形式
continue;
注意
continue语句只能出现在循环体中
continue并不使整个循环终止,而仅仅是跳过循环体中剩余的语句,结束本次循环,然后准备进入下一次循环
continue语句常与if条件语句一起使用,用来加速循环
常见错误分析
数学公式与C++程序的混用
整数除法的规则:两整数相除的结果只保留商的整数部分,小数部分是直接舍去
程序中的乘法运算的“*”是不可以省略的
数学中的条件式“0<x<100”不能直接用到C++的程序中,需要 分成两个条件,并且需要用圆括号括起来
((x>0)&&(x<100))
整除运算符/和模除运算符%的区别
eg:假设n是一个介于100~999之间的整数,那么n/100表示的是n的百位数数值,n%10表示的是n的个位数数值
赋值运算符=和关系运算符==
在使用cin和cout进行输入输出多个变量时,用法不当
不能用逗号来分隔多个变量
键盘输入的只能是值,不能是表达式
自增自减的滥用
添加圆括号,防止发生歧义
一条语句拆分成几条语句
switch语句
case后面的常量表达式写成关系表达式或者含有变量
case后面忘记加break
for语句
for()后面没有;
循环体的条件有多条时,要用“{}”括起来
do……while语句
while()的后面有;
()里的条件满足时执行循环
当输入98和101时,运行结果如何?
输入98时,,运行结果均为297
输入101
while语句结果为0
do…while语句结果为101