1.数据和类型

    • 计算机处理的对象是**数据,而数据是以某种特定的形式存在的(例如整数 浮点数 字符等形式) **

    • 不同的数据之间往往还存在某些**联系**(例如由若干个整数组成一个整数数组)。

    • 数据结构指的是数据的组织形式**。例如,数组就是一种数据结构。**



    * 1、C  的数据类型 - 图1 | 类型 | 类型标识符 | 字节 | 数值范围 | | | —- | —- | —- | —- | —- | | 整型 | [signed] int | 4 | -2147483648 ~ +2147483647 | | | 无符号整型 | unsigned [int] | 4 | 0 ~ 4294967295 | | | 短整型 | short [int] | 2 | -32768 ~ +32767 | | | 无符号短整型 | unsigned short [int] | 2 | 0 ~ 65535 | | | 长整型 | long [int] | 4 | -2147483648 ~ +2147483647 | | | 无符号长整型 | unsigned long [int] | 4 | 0 ~ 4294967295 | | | 字符型 | [signed] char | 1 | -128 ~ +127 | | | 无符号字符型 | unsigned char | 1 | 0 ~ 255 | | | 单精度 | float | 4 | 3.410~3.410 | | | 双精度型 | double | 8 | 1.710~1.710 | | | 长双精度型 | long double | 8 | 1.710~1.7*10 | |

    2.常量与变量

    • 常量

      • 在程序运行过程中,其值一直保持不变的量为常量;
      • 常量也区分不同的类型:30,40 为整型,30.0,40.0为实型, 编辑器只是根据其表面形式来判断其类型。
    • 变量

      • 在程序运行过程中,其值可以改变的量为变量 。
      • 变量在程序执行中能够赋值,发生变化。
      • 变量有一个名字,并在使用之前要说明其类型,一经说明,就在内存中占据与其类型相应的存储单元。
      • 不管什么类型的变量,都是说明在前,使用在后。
    • 变量的存储类型

      • auto存储类

        1. 属于一时性存储,其存储空间可以被若变量多次覆盖使用
      • register存储类

        1. 存放在通用寄存器中。
      • extern存储类

        1. 在所有函数和程序段中都可引用。
      • static存储类

        1. 在内存中是以固定地址存放的,在整个程序运行期间都有效。
    • 变量名的命名方法

      • 变量名、数组名、函数名、数组名、函数名…称为标识符。
      • 标识符只能由字母、数字、下划线这三种字符组成,且第一个字符必须为字母或下划线,长度不大于247个字符,大小写不通用。
      • 关键字不能作为标识符,关键字即是VC++的语法要求中使用的字, 如int if while 等。

        1. 正确的标识符:INT, sum , de12, SUM等。
      • 变量必须使用前定义,以分配空间

      • 命名方式

    一般变量都是用匈牙利命名法命名的:
    ** 匈牙利**命名法是种一编程时的命名规范
    基本原则是:变量名=属性+类型+对象描述
    **

    • 变量赋初值
      • 定义变量时,计算机会在内存中开辟一个空间,空间中为随机值,随后可以给这个空间赋值。空间的值在程序运行中可以改变。


    3.整型数据**

    • 整型常量
      • 整形量是没有小数点的整数。
      • 范围: -2的31次方 ~ 2的31次方 - 1
      • 三种形式: (1)十进制 (默认) 例: 43、 1345 、87654

    (2)八进制 (以0开头) 例: 053、02501、0253146
    (3)十六制 (以0x开头) 例: 0x2B、0x541、0x15666

    • 整形变量
      • 有符号型:short 在内存中占两字节 范围为 -2的15次方 ~ 2的15次方 - 1

    int 在内存中占四字节 范围为 -2的-31次方 ~ 2的31次方 - 1
    long 在内存中占四字节 范围为 -2的-31次方 ~ 2的31次方 - 1

    • 无符号型:最高位不表示符号位

    unsigned short 在内存中占两字节 范围为 0 ~ 2的16次方 - 1
    unsigned int 在内存中占四字节 范围为 0 ~ 2的32次方 - 1
    unsigned long 在内存中占四字节 范围为 0 ~ 2的32次方 - 1

    • 说明

    (1)整型常量也有长短之分,常量无unsigned型,但一个非负的整形常量可赋给 unsigned型的变量
    (2)若一个常量定义为长整形数,则在其后家l或L进行区分。
    如:32L 、 564 l

    • 整型数据在内存中的存储方式

    一个数在内存中为:
    批注 2020-08-06 170947.png
    当这个数是有符号数时,为-1;为无符号数时,为2-1
    内存中的数以补码的形式存放
    例:

    1. #include<iostream.h>
    2. void main()
    3. {
    4. unsigned short a;
    5. short int b = -1;
    6. a=b;
    7. cout<<"a="<<a<<endl;
    8. }

    运行结果: a=65535
    解析: 不同类型的整型数据间的赋值就是按存储单元中的存储形式直接传送。
    批注 2020-08-06 173155.png
    如上图,a、b的存储形式在内存中相同,输出时,由于a、b的数据类型不同,输出的值也不同。

    • 实型数据
      • 实型数据又称浮点数,有两种表示方式:

    (1)十进制形式: 23.0、24.5、3.56789
    (2)指数形式: 23E1、145e-1、356789e1
    注:e前有数字,后面必须是整数

    • 实型变量分单精度 float和双精度 double 两种形式:

      1. 1float:占四字节,提供7~8位有效数字。<br /> 2double:占八字节,提供15~16位有效数字。
    • 当计算机中出现小于机器所能表示的最小数时,机器只能当0来处理,当出现超过机器所能表示的最大数时,出现溢出现象。定点数、浮点数均会出现溢出现象。

    4.字符型数据(char)

    • 字符型数据实际上是作为整型数据在内存中存储的
      计算机以字符编码的形式处理字符,因此在计算机内部以ASCLL码的形式表示所有字符。
    • 7位二进制数即可表示一个字符,用一个字节存储一个字符

    例: A的ASCLL码为65,在内存中表示为:
    批注 2020-08-06 223338.png

    • 定义一个字符型变量时,要用’ ‘把字符括起来。

      1. 可直接用字符的整型值给变量赋值
      1. char grade;
      2. //以下赋值形式等效
      3. grade='A';
      4. grade=65;
      5. grade=0x41;
      6. grade=0101;


    • 非打印字符

      • 有些ASCLL的字符代表操作,不能打印

        1. 如:回车、退格等,可用两种方式表示这些字符<br /> 1ASCLL码的形式 char re= 13;<br /> 2)用转义字符 char re=' \r';
    转义字符 含义 ASCLL代码
    \a 响铃 7
    \n 换行,将当前位置移到下一行开头 10
    \t 水平制表(跳到下一个tab位置) 9
    \b 退格,将当前位置移到前一列 8
    \r 回车,将当前位置移到本行开头 13
    \f 换页,将当前位置移到下页开头 12
    \v 竖向跳格 8
    \\ 反斜杠字符“\” 92
    \‘ 单引号(撇号)字符 39
    \‘’ 双引号字符 34
    \0 空字符 0
    \ddd 1到3位8进制所代表的字符
    \xhh 1到2位16进制数所代表的字符 25


    • 转义字符包含多个字符,但它只代表一个字符。编译系统在见到字符“\”时,会接着找它后面的字符,把它处理成一个字符,在内存中只占一个字节

    5.字符串常量

    • 用” “表示,在内存中按顺序存放,以’\0’结束。

    如:”CHINA “
    批注 2020-08-06 233105.png
    实际内存是对应字符的ASCLL码格式
    批注 2020-08-06 233105.png
    注:’a’在内存中占一个字节,”a”占两个字节

    6.标识符常量

    • 定义标识符常量的两种方式:

    1)一种是使用编译预处理指令;
    2)一种是使用C++的常量说明符const。
    例:

    1. #define PRICE 30
    2. //程序中出现的PRICE均用30替代
    3. #define PI 3.1415926
    4. #define S "China"

    7.强制转换类型

    • 语法: (类型名) (表达式)

    如: (double)a 、 (int)(x+y) 、(int) 6.2%4 = 2

    • 强制类型运算后原变量不变,但得到一个所需类型的中间变量。

    例:

    1. int x;
    2. float y = 5.8;
    3. x=(int) y;

    结果: x=5,y=5.8