简单信息的表示和基本运算
数据类型
整数
类型 | 表示类型的符号 | 字节数 | 数值范围 |
---|---|---|---|
整型 | int | 4 | -2^31(-2147483648)~2^31-1(2147483647) |
短整型 | short/short int | 2 | -32768~32767 |
长整型 | long/long int | 4 | -2^31~2^31-1 |
无符号整型 | unsigned [int] | 4 | 0~2^32-1 |
无符号短整型 | unsigned short[int] | 2 | 0~65535 |
无符号长整形 | unsigned long[int] | 4 | 0~2^32-1 |
C++没有规定不同类型的数占的字节数,会因计算机系统、编译器的不同而不同。可以使用sizeof()运算符测试某类型数所占的字节数
cout<<sizeof(int)<<endl;
十六进制前缀0x 八进制前缀0 无符号整数加后缀U或u
实数
单精度:float
* 4字节,±3.410^-38~±3.410^38
双精度:double
* 8字节,±1.810^-308~±1.810^308
* 指数表示形式:1.2E-2表示1.2*10^-2
字符
- 字符型 char 数值范围-128~127
- 单个字符的表示。
- 每个字符占一个字节,保存英文字符的ASCII码。
- unsigned char 数值范围0~255
字符串
- 连续多个字符
- 字符串写在一对双引号中
- 字符串占的字节数等于字符串长度+1(末尾加了一个结束符,用\0表示,数值上是0)
- 汉字保存的是机内码,一个汉字占两个字节
逻辑型(布尔型,bool)
- 表示真假
- 取值:true表示真,false表示假。
- 存储:true存1,false存0
- 非0数值,当逻辑值相当于true
sizeof(<类型名>) //类型占字节数
sizeof(<数据>)//数据的字节数
常量和变量
常量
常量:不能改变的量。
字面常量(字面量、直接常量):直接写出的数据。
符号常量:用符号表示数据,一旦确定了表示哪个数据,以后就不再改变。
const <类型说明符> <符号常量名> =<数据>;
const int N =100;
在main函数前 #define <符号名称> <数据>
例如:define PAI 3.14
编译时,先将<符号名称>全部替换为数据,然后开始正式编译,所以这样的说明称为编译预处理
变量
值可以变的量,必须先定义再使用。
更通俗的说,变量是用符号表示数据,他表示的数据是可以改变的。
变量的说明/声明 <类型说明符> <变量名表>;
例如:int a;
变量意味着编译系统会给这个变量在内存中分配一个存储单元,所以变量的声明也称变量的定义
变量的初始化 <类型说明符> <变量名1>=<值或表达式1>[,<变量名2>=<值或表达式2>];
简单的信息表达和运算
算术运算符
算术运算 比较运算 逻辑运算 位运算
算术运算包括加、减、乘、除、乘方、指数、对数、三角函数、求余等。
C++中没用乘方运算符,也没有指数、对数、三角函数的运算符,是通过函数的调用实现的。
如:pow(x,n)-->x^n , exp(x)-->e^x , log(x) , log10(x) , sin(x) , cos(x) , tan(x) , asin(x) -->反正弦
使用数学函数需要在程序开头写include<cmath>
自增运算与自减运算
- 无论前置、后置,++使变量自身加1,--使变量自身减一。
- 作为表达式时,前置运算符的结果是加一或减一之后的结果;后置运算符的结果是加以或减一之前的结果。
- 例如
int n=5,m=10;
int a,b,c,d;
a=n++;b=m--;
cout<<a<<"/t"<<b<<"/t"<<n<<"/t"<<m<<endl;
c=++n;d=--m;
cout<<a<<"/t"<<b<<"/t"<<n<<"/t"<<m<<endl;
结果:5 10 6 9
6 9 6 9
算术运算符的优先级
- 先乘除求余,后加减,级别相同的从左向右逐个计算。
- 圆括号可以改变优先级。
- 圆括号可以嵌套,越靠里,圆括号的优先级越高。
- %和*、/ 优先级相同。
- 后置++、--的优先级>前置j++、--的优先级。
- 前置++、--的优先级>乘除的优先级。
建议使用圆括号标明优先级。
#### 运算的数据类型
- 相同类型的数据进行算数运算,结果还是这种数据类型。
- 不同类型数据运算,默认向级别高的类型转换。
低 | short,char --> int --> unsigned --> long --> double | 高 - 强制类型转换
(<类型>)x 或 <类型>(x) ---> 将x转换为<类型>的数据
复合运算符
为简化书写,C++提供复合运算符
+= , -= , *= , /= , %=
双目运算
a+=b; 等价于 a=a+b;
a-=b; 等价于 a=a-n;
... ...
关系运算
比较运算,比较的结果C++中布尔值 true、false
表示这些关系的符号称为 关系运算符 或 比较运算符
> 大于 < 小于 >= 大于等于 <= 小于等于 == 等于 != 不等于
注意:关系运算符不要连用,除非你清楚的知道在做什么。
逻辑运算符
逻辑运算表达判断多个条件之间的关系:同时成立、之一成立、不成立
逻辑符号
&& 表示逻辑与 and
|| 表示逻辑或 or
! 表示逻辑非 not
逻辑表达式
&&,||是双目运算符,格式为 <条件>运算符<条件2>
!是单目运算符,格式为 !<条件>
逻辑值 true / false
逻辑运算符优先级
高 | 逻辑非 !,负号 -
乘、除、求余 * / %
加、减 + -
大于小于 >,>=,<,<=
等于不等于 =,!=
逻辑与 &&
低 | 逻辑或 ||
实例:
bool f;
f=!(2>-1);
cout<<f<<endl;
f=!2>-1;
cout<<f<<endl;
输出:0
1
true -- 1
false -- 0
非0 -- true
0 -- false
注意:
判断是否为闰年:
#include<iostream>
using namespace std;
int main(){
int y;
bool f;
cin>>y;
f=((y%4==0)&&(y%100!=0)||(y%400==0));
cout<<f<<endl;
return 0;
}
程序测试建议:
不能被4整除的,2011年
能被4整除,不能被100整除的2012年
能被400整除的,2000年
能被4整除,能被100整除,不能被400整除的,1900年
位运算
数据在计算机中以二进制形式存储
与(and)、或(or)、取反(not)、异或(xor)左移、右移
按位与、按位或、按位取反、按位异或
按位与 | ||||
---|---|---|---|---|
ai | 0 | 0 | 1 | 1 |
bi | 0 | 1 | 0 | 1 |
结果 | 0 | 0 | 0 | 1 |
按位或 | ||||
---|---|---|---|---|
ai | 0 | 0 | 1 | 1 |
bi | 0 | 1 | 0 | 1 |
结果 | 0 | 1 | 1 | 1 |
按位异或 | ||||
---|---|---|---|---|
ai | 0 | 0 | 1 | 1 |
bi | 0 | 1 | 0 | 1 |
结果 | 0 | 1 | 1 | 0 |
按位取反 | ||
---|---|---|
ai | 0 | 1 |
结果 | 1 | 0 |
#### 移位运算
移位:将二进制数的每一位 向左 或 向右 移动指定的位数。
位运算符
&
按位"与"
|
按位"或"
^
按位"异或"
<<
左移
>>
右移
~
按位"取反" 单目运算
格式:
<整数类型表达式1> <位运算符> <整数类型表达式2>
~<整数类型表达式>
复合位运算
特殊运算符
赋值运算符
等号"=" 是赋值运算符
格式:<变量>=<表达式>
作用:将右边的值给左边
字节数运算符
字节数运算符 sizeof()
作用:求某类型的数据或表达式的值占的字节数
条件运算符
条件运算符、问号运算符 ? :
三目运算
格式:<条件>?<表达式1>:<表达式2>
逗号表达式
多个表达式用逗号隔开,构成逗号表达式
格式:<表达式1>,<表达式2>,......,<表达式n>
作用:从左向右依次计算n个表达式的值 整个表达式的值问<表达式n>
的值
实例:计算三角形的面积
#include<iostream>
#include<cmath>
using namespace std;
int main(){
double a,b,c;
double s,A;
cout<<"Please input three edges a,b,c=";
cin>>a>>b>>c;
s=(a+b+c)/2.0;
A=sqrt(s*(s-a)*(s-b)*(s-c));
cout<<"The area is "<<A<<endl;
return 0;
}
实例:构造五位数的反序数
#include<iostream>
#include<cmath>
using namespace std;
int main(){
int n,m;
char a,b,c,d,e;
cout<<"Please input a five-digit number";
cin>>n;
a=n%10;
n=n/10;
b=n%10;
n=n/10;
c=n%10;
n=n/10;
d=n%10;
n=n/10;
e=n%10;
m=(((((a*10)+b)10+c)*10+d)*10+e);
cout<<"The inversed number is "<<m<<endl;
return 0;
}
实例:加密解密
#include<iostream>
using namespace std;
int main(){
char c; //定义字符变量,存放原字母
char ex; //定义字符变量,存放加密后的字母
int k; //定义整型变量,存放密钥k
cout<<"Please input a lower charater and k"<<endl;
cin>>c>>k;
ec=((c-'a')+k)%26+'a'; //加密算法
cout<<ec<<endl;
return 0;
}
重点难点:转义符
Comments | NOTHING