03 变量
------------恢复内容开始------------
1,变量是程序的基本组成单位,比如:
1 //1,引入头文件 2 #include<stdio.h> 3 4 void main() { 5 int a = 1;//定义了一个整型变量,取名为a ,并赋值为1(强数据类型语言) 6 int b = 3; 7 b = 89;//给变量赋值 为 89 8 printf("a=%d\n", a);//使用输出语句,把变量a的值输出,%d表示输出的形式为整数 9 printf("b=%d\n", b); 10 }
2,变量的概念:
①变量相当于内存中一个数据存储空间的表示,你可以把变量看做是一个房间的门牌号,通过门牌号我们可以找到房间,而通过变量名可以访问到变量(值)
②
1 //1,引入头文件 2 #include<stdio.h> 3 4 void main() { 5 int num = 1;//整型 6 double score = 2.3;//小数 7 char gender = 'A';//字符 8 char name[] = "张三";//字符串 9 printf("num=%d score=%.2f gender=%c name=%s", num, score, gender, name); 10 说明: 11 1,如果输出的是整数:%d 12 2,如果输出的是小数 %f 如果希望保留2位小数 %.2f 13 3,如果输出的是字符:%c 14 4,如果输出的是字符串 %s 15 5,在输出不同数据时,对应的格式化的形式要对应起来 16 }
③变量使用注意事项:
变量表示内存中的一个存储区域(不同的数据类型,占用的空间大小不一样)
该区域有自己的名称和类型
变量必须先声明,后使用
该区域的数据可以在同一类型范围内不断变化
变量在同一个作用域内不能重名
变量三要素(变量名+值+数据类型)
④变量的数据类型
每一中数据都定义了明确的数据类型,在内存中分配了不同大小的内存空间(使用多少字节表示)
注意:在C中,没有字符串类型,使用字符数组表示字符串
在不同系统上,部分数据类型字节长度不一样,int 2 或者4
⑤整数类型
C语言的整数类型就是用于存放整数值的
类型 | 存储大小 | 值范围 |
char | 1字节 | -128到127, 即- 2^7 到 (2^7-1) |
unsigned char | 1字节 | 0到255 (2^8-1) |
signed char | 1字节 | -128到127, 即- 2^7 到 (2^7-1) |
int signed int |
2字节或4字节 |
-32768到32767 ( 2^15 -1) 或 -2147483648到2147483647 ( 2^31-1) |
unsigned int | 2字节或4字节 |
0到65535 ( 2^16-1) 或0到4294967295(2^32-1) |
short signed short |
2字节 | -32768到32767 ( 2^15 -1) |
unsigned short | 2字节 | 0到65535 ( 2^16-1) |
long signed long |
4字节 | -2147483648到2147483647 ( 2^31-1) |
unsigned long | 4字节 | 0到4294967295(2^32-1) |
各种类型的存储大小与操作系统,系统位数和编译器有关
C语言的整数类型,分为有符号 signed 和无符号 unsigned 两种,默认是signed
C 程序中整型常声明为 int 型,除非不足以表示大数,才使用 long long
bit(位):计算机中的最小存储单位,byte(字节):计算机中基本存储单元
1 byte =8 bit
如:short 3 在内存中占有2个字节
int 3 在内存中占有4个字节
⑥浮点类型
C语言的浮点类型可以表示一个小数
分类:float 单精度 4字节
double 双精度 8字节
关于浮点数在机器中存放形式的简单说明,浮点数=符号位+指数位+尾数位,浮点数是近似值
尾数部分可能丢失,造成精度损失
浮点型常量默认为 double 型,声明 float 型常量时,后加 ' f ' 或 ' F '
浮点型常量有两种表示形式:
十进制数形式:如:5.12 512.0f .512(必须有小数点)
科学计数法形式:如:5.12e2 5.12E-2
通常情况下,应该使用double型,因为它比 float 型更精确
printf(" dl = %f " , dl ); //在输出时,默认保留,小数点后6位
1 //1,引入头文件 2 #include<stdio.h> 3 4 5 void main() { 6 //浮点型常量默认为double型,声明float型常量时,需要加"f"或"F" 7 float d1 = 1.18909095; 8 float d2 = 1.1f; 9 double d3 = 1.3; 10 double d4 = 5.12; 11 double d5 = .512; //等价0.512 12 double d6 = 5.12e2; //等价 5.12*(10^2)=512 13 double d7 = 5.12e-2; //等价 5.12*(10^-2)=0.0512 14 15 //在输出时,如果%f默认保留小数点后6位 16 printf("d1=%.15f d2=%f d3=%f d4=%f d5=%f d6=%f d7=%f", d1, d2, d3, d4, d5, d6, d7); 17 }
⑦字符类型(char)
字符类型可以是单个字符,字符类型是char,char 是1个字节(可以存字母或者数字),多个字符成为字符串,在C语言中,使用char数组表示,数组不是基本数据类型,而是构造类型
基本使用:
1 //1,引入头文件 2 #include<stdio.h> 3 4 void main() { 5 char c1 = 'A'; 6 char c2 = '0'; 7 char c3 = '\t'; 8 printf("c1=%c c2=%c c3=%c ", c1, c2, c3); 9 }
使用细节:
字符常量时用单引号括起来的单个字符
C中还允许使用转义字符 ' \ ' 来将其后的字符转变为特殊字符型常量
在C中,char的本质是一个整数,在输出时,是ASCII码对应的字符
可以直接给char赋一个整数,然后输出时,会按照对应的ASCII字符输出
char类型是可以进行运算的,相当于一个整数,因为它都对应有unicode码
1 #include<stdio.h> 2 3 void main() { 4 char c1 = 'a'; 5 char c2 = 'b'; 6 char c3 = 97; //这时当我们以%c输出时,就会安装ASCII编码表,理解字符《==》数字的对应关系,97对应字符 a 7 int num = c2 + 10; //98+10 8 printf("c1=%c c2=%c c3=%c num=%d", c1, c2, c3, num); 9 }
字符类型本质探讨:
字符型存储到计算机中,需要将字符对应的码值(整数)找出来
存储:字符 ' a ' --->码值(97) --> 二进制 (1100001) --> 存储()
读取:二进制(1100001) --> 码值(97) --> 字符 'a' --> 读取(显示)
字符和码值的对应关系是通过字符编码决定的
ASCII码介绍
在计算机内部,所有数据都使用二进制表示,每一个二进制位(bit)有0和1两种状态,因此8个二进制位就可以组合出256中状态,这被称为一个字节(byte),一个字节一共可以用来表示256中不同的状态,每一个状态对应一个符号,就是256个符号,从00000000到11111111
ASCII码:上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一规定,这被称为ASCII码,ASCII码一共规定了127个字符编码,比如空格 " SPACE" 是32(二进制00100000),大写的字母A是65(二进制01000001)。这128个符号(包括32个不能打印出来的控制符号),只占用了一个字节的后面7位,最前面的1位统一为0.
ASCII码表
缺点:不能表示所有字符
⑧布尔类型:boolean
C语言标准(C89)没有定义布尔类型,所以C语言判断真假时以0为假,非0为真
但这种做法不直观,所以我们可以借助C语言的宏定义
C语言标准提供了_Bool型,_Bool 仍是整数类型,但与一般整型不同的是,_Bool 变量只能赋值0或1,非0的值都会被存储为1,C99 还提供了一个头文件 <stdbool.h>定义了bool 代表_Bool,true代表1,false代表0,只要导入 stdbool.h ,就能方便的操作布尔类型了,比如 bool flag=false;
1 #include<stdio.h> 2 //宏定义 3 #define BOOL int 4 #define TRUE 1 5 #define FALSE 0 6 7 void main() { 8 int isPass = -1; //0表示假,非0表示真 9 //定义一个布尔变量 10 BOOL isOK = TRUE; //等价于 int isOK=1 11 12 if (isPass) { 13 printf("通过考试\n"); 14 } 15 if (isOK) { 16 printf("OK"); 17 } 18 }
打印结果:
通过考试
OK