2.1 常量
定义
常量:程序运行过程中,不变的数据叫常量
源由
用法
1、一般常量:可以用八进制、十进制、十六进制表示,十进制有正负,其他八进制和十六进制只有正,八进制以0为前缀,十六进制以0x或0X作为前缀
一般常量的书写格式:
(1)一般形式,如:0.123
(2)指数形式,如:123e5
2、字符常量:单引号括起来的一个字符
3、字符串常量:双引号括起来的一个或多个字符
4、符号常量:宏值,方便修改
5、布尔类型:只有两个值,true和false,0为false,非0为true
简单例子
123 //一般常量
'a' //字符常量
"abc" //字符串常量
PI //符号串常量
bool a; //布尔类型
详解
1、指数形式书写时,E或者e前面必须有数字,且e后面的指数必须为整数
2、一个实型常数缺省说明为double,如表示float型,则实数后加f或F,如:
1.23f、4.56
3、字符串常量,计算机存储形式会以\0表示字符串结束
进阶例子收集
1、define与const的区别:
define只是代替,没有类型的检查,而const定义后面要加类型,所以有类型的判断
2.2 变量
定义
在程序运行过程中,可以发生改变的数据称为变量
源由
用法
1、命名
以字母或下划线打头,后面跟字母、数字或下划线
2、定义:存储属性 类型区分符 变量名 初值 结束分号;
简单例子
static int num = 0 //存储属性:staitc,类型区分符:int,变量名:num,初值:0,结束分号(;)
详解
1、存储属性分成auto、register、extern、static
(1)auto存储类:属于一时性存储,其存储空间可以被若干变量多次覆盖使用
(2)register存储类:存放在通用寄存器中
(3)extern存储类:在所有函数和程序段中都可引用
static存储类:在内存中以固定地址存放的,在整个程序运行期间都有效
进阶例子收集
2.3 算述表达式
定义
由算述运算符、操作数、括号构成的表达式称为算述表达式
源由
用法
简单例子
详解
1、基本的算术运算符:+ - * / %(取余),先算乘除,后加减,同级自左向右
2、增量和减量:
(1)a++:取a作为表达式的值,然后a = a+1;
(2)++a:先执行a = a+1;然后取a作为表达式的值
(3)a--:取a作为表达式的值,然后a = a-1;
(4)--a:先执行a = a-1;然后取a作为表达式的值
2、赋值运算(=):赋值运算符用于将一个数据传给一个变量
(1)双目运算符,从右到左:d=a=b,先执行a=b,再执行d=a
(2)赋值操作是一个表达式
(3)当赋值两边类型不一至时,根据左边类型转
3、复合的赋值运算符
(1)有10种复合运算符:+=,-=,*=,/*,%=,<<=,>>=,&=,^=,|=
4、逗号运算和逗号表达式
(1)格式:表达式1,表达式2
先求解1,再求解2,最终结果为表达式2的值,例如:
a=3*5,a*4;结果为60
5、关系表达式:用关系运算符将两个表达式连接起来,有:<,<=,>,>=,==,!=,关系表达式的结果为bool类型,只有true和false
逻辑运算符:!(非)、&&(与)、||(或)
6、优先级:
!
* / %
+ -
> < >= <=
== !=
&&
||
6、条件运算符与条件表达式
(1)形式:表达式1?表达式2:表达式3
表达式1必须为bool类型,先执行表达式1,若结果为true则执行表达式2,否则执行表达式3
(2)条件运算符优于赋值运算符,比关系运算符和算术运算符都低
(3)条件运算符的结合性为自右向左
(4)条件表达式与一般的if的语句的关系
(5)表达式2、3的类型可以不同,条件表达式的最终类型为2和3中较高的类型
7、sizeof 操作符
语法:sizeof(类型名)或者sizeof(表达式),结果值:类型或者表达式结果类型所占的字节数;
8、位运算:按位与(&)、按位或(|)、按位异或(^)、取反(~)、左移(<<)、右移(>>)
(1)将两个运算量的每一个位进行逻辑与(&)、或(|)、异或(^)、取反(~)、左移(<<)、右移(>>)
(2)左移运算后,低位补0,高位舍弃;右移运算后,低位舍弃,高位如果无符号则补0,有符号则补“符号位”
9、运算符优先级(由高到低):
括号
++,--,sizeof
*,/,%
+,-
==,!=
位运算
&&
||
?:
赋值运算
逗号运算
10、隐式转换:算术运算和关系运算中如果参与运算的操作数类型不一致,编译系统会自动对数据进行转换,基本原则是将低类型数据转换为高类型数据,数据类型由低到高为:
char、short、int、unsigned、long、unsigned log、float、double
10、强制转换语法:
类型说明符(表达式) 或者 (类型说明符)表达式
进阶例子收集
1、算出以下a的值://结果为:-60
a=5;a=b=c=5;a=5+(c=6);a=(b=4)+(c=6);a=(b=10)/(c=2);a+=a-=a*a;
2、若x,y,z的初值均为1,则执行表达式w=++x||++y&&++z后,x,y,z的值分别是多少?
答案:x=2,y=1,z=1;原因,当执行了++x的时候,已经为真了,所以程序是不会再往下执行了,++y和++z根本得不到运行,所以这个特例不能用优先级去算结果;
2.4 基本控制结构
定义
源由
用法
1、if语句
(1)if(表达式) {语句;}
(2)if(表达式) {语句1;} else {语句2;}
(3)if(表达式1) {语句1;} elseif(表达式2) {语句2;} else {语句3;}
2、swith
switch(表达式)
{
case 常量表达式1:语句1;break;
case 常量表达式2:语句2;break;
...
case 常量表达式n:语句n;break;
default: 语句n+1;break;
}
当表达式为常量表达式值时,执行后面的语句;
3、while语句:
while(表达式){语句}
当表达式为真时,循环执行,直到表达式为假。
4、do-while语句
do{语句}while(表达式);
先做一次语句,再判断表达式,如果表达为真,则继续执行语句,直到表达式为假跳出循环体;
5、for语句
for(表达式1;表达式2;表达式3){语句}
(1)循环前先执行表达式1
(2)再判断表达式2,如果为真,则执行循环体语句,否则跳出循环体
(3)执行表达式3
步骤(2)与(3),直到循环体结束
6、goto
语句标号:用标识符,命名规则与变量名同
当从多重循环体深处跳到之外,如用break,将用多次,可用goto
简单例子
#include "stdafx.h"
#include <stdlib.h>
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int data;
cout<<"pls input num:"<<endl;
cin>>data;
if(1==data){
cout<<"if:data=1"<<endl;
}
else if(2==data){
cout<<"if:data=2"<<endl;
}
else{
cout<<"if:data=else"<<endl;
}
switch(data){
case 1:
cout<<"switch:data=1"<<endl;
break;
case 2:
cout<<"switch:data=2"<<endl;
break;
default:
cout<<"switch:data=default"<<endl;
break;
}
while(data<10){
cout<<"while"<<endl;
data = 11;
}
int count = 0;
for(int i=0; i<3; i++){
count += i;
}
cout<<"sum[1+2]:"<<endl;
system("pause");
return 0;
}
//输出:
//pls inupt num:
//输入:1
//if:data=1
//switch:data=1
//while
//sum[1+2]:3
详解
2、switch
(1)表达式可以是整形、字符型、枚举型,但每个常量表达式的值不能相同
(2)多个case可以共用一组执行语句:
case 'A':
case 'B':
case 'C':count<
3、break与continue语句
break语句:使程序从循环体和switch语句内跳出,继续执行逻辑上的下一条语句,不宜用在别处;
continue语句:结束本次循环,接着判断是否执行下一次循环
进阶例子收集
2.5 自定义数据类型
定义
源由
用法
1、typedef语句:为一个已有的数据类型另外命名
typedef 已有类型名 新类型名;
2、枚举类型-enum:只需要将需要的变量值一一列举出来便构成了一个枚举类型;
enum 枚举类型名 {变量值列表};
3、结构体
结构体是由不同数据类型的数据组成的集合体
struct 结构名
{
数据类型 成员名1; 数据类型 成员名2; ... 数据类型 成员名n;
};
4、联合体
union 联合名
{
数据类型 成员名1; 数据类型 成员名2; ... 数据类型 成员名n;
};
定义联合体类型变量说明的语法形式:
联合名 联合变量名;
引用形式:
联合名.成员名
简单例子
typedef int int32_t
详解
1、对枚举按常量处理,不能对它们赋值
2、不能直接将整数赋值给枚举变量,应进行强制类型转换
3、结构体的使用
(1)定义结构变量的同时可以直接设置初值
(2)结构体成员的引用形式:
结构变量名.成员名
联合体的成员名公用一段内存
进阶例子收集