C++知识1——c++简单程序设计

N0.1 一些基本的内容

(1):怎样算一个语句:
程序由语句组成,每条语句由分号(;)作为结束符。
例题:
{;}是一条语句
a=0,b=0,c=0;是一条语句

(2):#include被称为预处理指令

#include 指示编译器在对程序进行预处理时,将文件iostream中的代码嵌入到程序中该指令所在的地方。但是c++程序运行时总是起始于main().
例题:
c++程序运行时,总是起始于:main()

(3):一些概念
字符集:构成c++语言的基本元素,用c++语言编写程序时,除字符型数据外,其他所有成分都只能由字符集中的字符构成。
字符集中的字符:
英文字母:A~Z,a~z
数字:0~9
特殊字符:
! # % ^ & * _ +
= - ~ < > / \ ‘
“ ; . , : ? ( )
[ ] { }

(4)关键字
asm auto bool case char int class const const_cast default delete do enum for friend goto if inline namespace return signed static struct template this sizeof true false typedef typename union virtual void while

(5)标识符:由程序员定义的单词
规则:
以大写字母、小写字母或者下划线开始;
不能使用关键字
可以由大写字母、小写字母、数字、下划线组成
大写字母和小写字母代表不同的标识符
(6)文字是在程序中直接使用符号表示的数据
(7)操作符(运算符):操作符是用于实现各种运算的符号,例如+-*/
(8)分隔符:用于分隔各个词法记号或者程序正文,例如:
(){},;:
(9)空白:用于指示词法记号的开始和结束位置,但除了这一功能外,其余的空白将被忽略。

No.2 数据类型长度(字节)

一字节:
bool
char
unsigned char
signed char
二字节:
short(signed short)
unsigned short
四字节:
int
unsigned int
long(signed long)
unsigned long
float
八字节:
double
long double
注意: 一个字节是8位,位中存储的位0和1
取值范围:(不是unsigned时) 取值范围为:-2^(n-1)~2^(n-1)-1
n=字节数8
当为unsigned时,只能表示正数,即0~2^(n)-1
n=字节数
8
字节数大小顺序:
(signed/unsigned)char<=(unsigned)short<=(unsigned) int<=(unsigned)long
float可以保存7位有效数字,double可以保存15位有效数字

No.3 常量:

常量是指在程序运行的整个过程中其值都不可更改的量。
(1)整型常量
八进制整常量的数字部分以0开头,十六进制整常量的数字部分以0x开头
八进制和十六进制的整型常量一般用来表示无符号整数,所以前面不带正负号
45L表示这个数是长整型的
78U表示这个数是无符号型的
(大小写无关)
例如:-123,0123,0x5af都合法
(2)实型常量
一般形式:
12.5 ,-12.5
指数形式:
以指数形式表示一个实数时,实数部分和小数部分可以省略其一,但不能都省略。
例如:0.345E+2(E可大写可小写)
.123E-1
12.E2(double型)
1.E-3(double型)
但是不能写成E-3这种形式
1.E-3f(float型)
实型常量默认为double型,如果后缀F(或f)可以使其成为float型
(3)字符常量
\n 换行
\r 回车
\’ 单引号
\” 双引号
\t 水平制表符
\ \ 字符

无论是不可显示字符还是一般字符,都可以用十六进制或者八进制ASCII码来表示
例如:\nnn 八进制形式
\xnnn 十六进制形式
nnn表示3位八进制或者十六进制
‘a’的16进制ASCII码为61,所以a也可以表示位\x61
字符数据在内存中以ASCII码的形式存储,每个字符占1字节,使用7个二进制位
(4)字符串
‘a’ a
“a” a \0
“jerry” j e r r y \0
注意:在c++中有字符串常量没有字符串变量

(5)布尔常量:
只有true或者false
(6)变量的存储类型
static 在内存中以固定的地址存放,在整个程序运行期间都有效

No.4 符号常量

1
2
3
const int/*(类型)*/ PI=0;
//或者
int /*(类型)*/ const PI=0;

一定要在定义时就赋初值!!!

1
2
3
const int a;
a=100;
//错误!!!

No.5 优先级和结合性

优先级

“=”的优先级大于”,”
所以先算等号相关,在看逗号表达式。

1
2
int i=3,j=0;
//先赋值然后,看逗号后面的

先++,–
| / * %
后 + -

=, > , <= , < 的优先级大于 ==, !=

! > && > ||
关于”&&”和”||”的补充:
短路性质:
当&&前为false 时,不再执行后面,因为无论怎样结果都为false,同理,||前为true时,结果必为true,所以后面的部分也不会执行
例如:
(a==b)||(++c==1),此时a==b的结果会影响c的值,只有当a==b为false时,c的自增才会被执行
三目运算符:

1
表达式1? 表达式2:表达式3;

表达式1真时,执行表达式2,反之,执行表达式3
逻辑运算符 > 条件运算符 > 赋值运算符
sizeof:运算符用于计算某种类型的对象在内存中所占的字节数
位运算之^:
对应为相同为0,不同为1
一个数与0异或不变,与1异或结果与该位的值相反
位运算之移位运算符:
移位运算的结果是位运算表达式的值,移位运算符左边的表达式的值本身不会改变
左移位:移出的高位舍弃,低位补0
右移位:无符号数,高位补0
有符号数:高位补符号位或者补0
a=11111000
a>>2
得到 11111110
运算符优先级:
P34
后置++,后置–的优先级大于*(指针)

结合性

“=”的结合性自右向左

“,”表达式:
表达式1,表达式2
//先计算表达式1,在计算表达式2,然后最终结果为表达式2的值
例如:

1
a=3*5 , a*4  //最终结果为60

No.6 数据类型转换

隐式转换

低类型数据转换为高类型数据。这种转换是安全的,因为在转换的过程中,精度没有损失
有一个操作数的类型是long,另一个为unsigned int 最后都转换为unsigned int (这两个的字节数都是4)
隐式转换时候
赋值:以左端类型为主,不考虑高位和低位
运算:低位到高位

显示转换

类型说明符 (表达式)
或者(类型说明符) 表达式
强制类型转换并不会改变内存单元中的值,只是读取的方式不同
注意:
dec 十进制
oct 八进制
hex 十六进制
判断闰年:
闰年可以被4整除而不能被100整除,或者能被400整除
switch:
switch后面的表达式可以为整型、字符型、枚举型
每个case语句只是一个入口标号,并不能确定执行的终止点,因此每个case分支后都应加上break语句,否则会从入口点开始一直执行到switch的结束点
每个case分支可以有多条语句,不用{}
当若干分支的需要执行相同操作时,可以使多个case分支公用一组语句
break
用在switch和循环语句中
typedef

1
2
3
typedef int ii;  
//typedef 已有类型 新类型名表
//可以为一个已知的类型定义多个名字

枚举类型:(enum)

1
2
//enum 枚举类型名 {变量值列表}   
enum week {sun,mon,fe,we,th,fri,sat};

注意事项:对枚举元素按常量处理,不能对他们赋值
例如: sun=100;不对
枚举元素具有默认值,依次为0,1,……
enum week {sun=7,mon=1,fe,we,th,fri,sat};
可以在声明时定义枚举类型的值
枚举值可以进行关系运算
整数值不能直接赋给枚举变量,如果需要将整数值赋给枚举变量,要进行强制类型转化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include<iostream>
using namespace std;
enum gameresult {win,lose,tie,cancle};//定义
int main(){
gameresult result;//gamesult类型下的一个元素
enum gameresult omit=cancle;//这里的enmu可有可无
for(int cot=win;cot<=cancle;cot++){
result=gameresult(cot);//要进行强制类型转化
if(result==omit)cout<<"cancle"<<endl;
else {
cout<<"played"<<endl;
if(result==win)cout<<"win"<<endl;
else if(result==lose)cout<<"lose"<<endl;
}
}
return 0;
}

union
所需字节数为数据中最大的那个
struct
所需字节数为数据种字节数的总和