C语言的数据

一.C语言的数据类型:

1.整型‌:

        char:1字节,用于表示字符或小整数。

        short:2字节,用于表示短整数。

         int:通常为4字节,用于表示整数。

         long:通常为4或8字节,用于表示长整数。

         long long:8字节,用于表示更长的整数。

2. 浮点型‌:

          float:4字节,用于表示单精度浮点数。

          double:8字节,用于表示双精度浮点数。

          long double:通常为8或16字节,用于表示更高精度的浮点数。

3.布尔型‌:

          bool:用于表示真(true)或假(false)的值。

‌4.枚举型‌:

           enum:用于定义一组具有离散取值的常量。 

5.指针型‌:

  1.  *:指针是一种特殊的数据类型,用于存储变量的内存地址。

6.构造型‌:

  1.  ‌数组(Array)‌:用于存储相同类型数据的集合,可以通过索引访问其中的元素。

     ‌结构体(Structure)‌:用于定义一种包含不同数据类型成员的复合数据类型。

     ‌共用体(Union)‌:用于定义一种可以存储不同数据类型的数据结构,但只能同时存储其中的一种数据类型。

     ‌构造类型(Typedef)‌:用于为已有数据类型定义一个新的名称。

  • 7.修饰符:

  1.   C语言的数据类型还可以通过修饰符进行扩展,包括:

  2.   有符号(signed:表示数据可以是负数字。

  3.   无符号(unsigned)‌:表示数据只能为非负数。

  4.   短(short)‌:表示数据占用较少的内存空间。

  5.   长(long)‌:表示数据占用较多的内存空间。

PS:先作了解,后期熟悉后运用自然会记住,但是一定要看一遍!!!

常用数据类型的大小:(字节)

#include 
int main()
{
    printf("%d\n", sizeof(char));
    printf("%d\n", sizeof(short));
    printf("%d\n", sizeof(int));
    printf("%d\n", sizeof(long));
    printf("%d\n", sizeof(long long));
    printf("%d\n", sizeof(float));
    printf("%d\n", sizeof(double));
    printf("%d\n", sizeof(long double));
    return 0;
}

输出结果:

C语言的数据_第1张图片

计算机的存储单位主要包括位(bit)、字节(byte)和更高级的单位如千字节(KB)、兆字节(MB)、吉字节(GB)和太字节(TB)等。‌‌

‌位(bit)‌:位是计算机中最小的存储单位,每个位可以存储一个二进制码,值为0或1。字节由8个位组成,即1B=8bit。

‌字节(byte)‌:字节是计算机中用于描述存储容量和传输容量的基本单位。一个字节由8个位组成,通常用于表示一个字符。

‌千字节(KB)‌:1KB=1024B。

‌兆字节(MB)‌:1MB=1024KB。

‌吉字节(GB)‌:1GB=1024MB。

‌太字节(TB)‌:1TB=1024GB。

二.常量和变量:

  • 常量:

  • 不改变的量

  • 分类

  • 整型常量‌:可以是十进制、八进制或十六进制形式。例如,12、0x1A(十六进制)、022(八进制)。

  •   实型常量‌:表示小数或科学计数法形式的数。例如,3.14、1.5e3(表示1.5乘以10的3次方)。

      字符常量‌:用单引号括起来的单个字符。例如,'a'、'B'。

  • 定义格式

  • #define 标识符 常量     

  • 例:#define CONSTANT_NAME 10

  • 变量:

  • 可以改变的量,要先定义再使用。

  • 定义格式

  • 变量类型 变量名列表

  • 如:

  • int a; // 声明一个整型变量a
    float b; // 声明一个浮点型变量b
    char c; // 声明一个字符型变量c
    int a = 10; // 声明并初始化一个整型变量a为10
    float b = 3.14; // 声明并初始化一个浮点型变量b为3.14
    char c = 'A'; // 声明并初始化一个字符型变量c为'A' 

  • PS:“//”在C语言中是注释。

  • 变量的命名规则

  • 标识符只能包含字母、数字和下划线‌,并且第一个字符必须是字母或下划线。

  • 不能使用C语言的关键字‌作为变量名。例如,int、float、char等都是关键字,不能用作变量名。

    区分大小写‌,例如int a;和int A;会被视为两个不同的变量。

    命名应具有描述性‌,能够清晰地表达变量的用途或存储的数据类型。例如,使用int age;而不是int a;。

    ‌避免使用数字开头‌,但可以使用下划线开头,例如int 3a;是错误的,而int  _3a;是正确的。

    长度限制‌:C语言的标识符长度没有固定限制,但通常不超过128个字符。

  • 三.整型数据

  • 整型常量:

  • 整常数。

  • 在C语言中,整型常量是直接写在代码中的数字,表示一个具体的数值,不可以更改的值。整型常量可以是十进制、八进制、十六进制。

    十进制整型常量:直接写数字,不带前缀,如123,-456。

  • 八进制整型常量:以0开头,如0123表示八进制数。

  • 十六进制整型常量:以0x或0X开头,如0x1A表示十六进制数。

  • #include 
    int main()
    {
        int a = 123;         // 定义一个int类型变量a,并初始化为十进制整型常量123
        int b = 0123;        // 定义一个int类型变量b,并初始化为八进制整型常量123
        int c = 0x1A;       // 定义一个int类型变量c,并初始化为十六进制整型常量26
        return 0;
    }
    

  • 在上述代码中,a被定义为一个int类型变量,并初始化为十进制整型常量123。b被定义为一个int类型变量,并初始化为八进制整型常量123,即十进制的83。c被定义为一个int类型变量,并初始化为十六进制整型常量0x1A,即十进制的26。

  • 整型变量:

  • 用于存储整数。

  • 整形数的长度与取值范围

  • 长度

    Byte(字节型)‌:通常为无符号8位整数,占1个字节

    ‌short(短整型)‌:有符号16位整数,占2个字节

    ‌int(整型)‌:有符号32位整数,占4个字节

    ‌long(长整型)‌:通常为有符号32位或64位整数,占4个字节或8个字节

    ‌long long(长长整型)‌:有符号64位整数,占8个字节

    取值范围

    byte‌:0~255

    short‌:-32,768~32,767

    int‌:-2,147,483,648~2,147,483,647

    ‌long‌:在32位系统下为-2,147,483,648~2,147,483,647,在64位系统下为-9,223,372,036,854,775,808~9,223,372,036,854,775,807

    ‌long long‌:-9,223,372,036,854,775,808~9,223,372,036,854,775,807

    不同类型整形数的应用场景

    byte‌:常用于表示ASCII字符或较小范围的整数。

    ‌short‌:表示比byte更大范围的整数。

    ‌int‌:C++中最常用的整型之一,可以表示较大范围的整数。

    ‌long‌:适用于表示更大范围的整数,具体范围取决于系统架构。

    long long‌:可表示最大范围整数的整型,适用于需要处理极大整数的场景。

  • 整形变量的形式:

  • 形式:类型说明符 变量名标志符;

  • 例:

  • #include 
     
    int main() 
    {
        int number;  // 定义一个整型变量
        number = 10; // 给变量赋值
     
        printf("The value of number is: %d\n", number); // 打印变量的值
     
        return 0;
    }
    

    整形数据的溢出:(先作了解)

  • 在C语言中,整型数据的溢出通常不会由编译器自动检测,也不会产生任何形式的错误消息。如果发生溢出,溢出的数据可能被截断或者进入下一个数据单元,从而导致程序运行时的不正确行为。

  • 四.实型数据:

    实型也称作浮点型,实型常量也称作实数或者是浮点数。

    实型常量:

    表示方式:
    十进制小数形式‌:这种形式由数字和小数点组成,小数点必须存在。例如,0.0、25.0、5.789、0.13、–456.789等都是合法的实数表示。

    指数形式‌:这种形式由尾数、字母e或E和阶码组成。尾数必须是十进制数,e或E的两侧必须有数字,阶码(指数)必须是整数。例如,2.2E3表示2.2×10^3。

    类型和存储方式

    在C语言中,实型常量默认按双精度(double)处理。如果需要表示单精度常量,可以在常量后加f或F。例如,3.14f表示单精度浮点数‌。

    在内存中的存放形式:

    与整型数的存储方式不同,浮点数是按照指数形式存放的,系统将数据分成小数部分和指数部分分别存放,小数部分按规格化的指数形式表示。单精度用4个字节存储,双精度用8个字存储,分符号位(s)、阶(e)、尾数(m)三部分。单精度数阶占8位,尾数占24位,符号位占1位;双精度数阶占11 位,尾数占53位,符号位占1位。

    实型变量:

    在程序运行过程中可以改变其值的变量

    定义和分类

    单精度(float)‌:占用4个字节(32位),有效位数为6-7位,取值范围为3.4×10^−38到3.4×10^38
    ‌双精度(double)‌:占用8个字节(64位),有效位数为15-16位,取值范围为1.7×10^−308到1.7×10^308
    ‌长双精度(long double)‌:占用更多的存储空间,具体位数和精度依平台而异,通常比double类型有更大的精度和范围。

    定义格式和初始化

    定义实型变量的一般格式为:

    数据类型 变量名1[, 变量名2, ...];

    例:(省略了头文件引用与函数)

  • float x, y, z;  //float在C语言中代表单精度浮点型数据类型
    double a = 2.0, b, c;  //‌double在C语言中代表双精度浮点型数据类型
    

    初始化实型变量的一般格式为:

    数据类型 变量名1[=初值1], 变量名2[=初值2], ...;

    例:(省略了头文件引用与函数)

  • float x = 3.14;
    double y = 123.456;
    

    五.字符型数据:

    字符型数据的定义和类型:

    字符型数据用单引号括起来,例如 'a'、'1'、'?' 等。字符常量可以是字母、数字或符号,但不能包含多个字符。例如,'abc' 不是合法的字符常量,因为它包含多个字符‌。

    字符型数据的存储方式:

    在内存中,字符型数据以ASCII码(见下)的形式存储。每个字符变量占用一个字节的内存空间。例如,字符 'a' 的ASCII码为97,在内存中以二进制形式 01100001 存储‌。

    字符型数据与整型数据的转换:

    在C语言中,字符数据与整型数据是通用的,可以互相赋值和运算。例如,字符 'a' 的ASCII码为97,可以直接赋值给一个整型变量,反之亦然。这种转换使得字符型数据在处理时更加灵活‌。

    特殊字符:转义字符:

    转义字符以反斜线 \ 开头,后跟一个或多个字符,具有特定的含义。例如,\n 表示换行,\t 表示横向跳到下一个制表位置。转义字符主要用于表示那些无法直接输入的控制字符‌。

    一般转义字符:

    一般转义字符由反斜杠“\”和随后的一个字符组成,例如:

    \t:制表符

    \b:退格符

    \\:反斜杠本身

    \r:回车符

    这些字符在编程中常用于控制输出格式或表示特殊的控制代码。

    八进制转义字符:

    八进制转义字符由反斜杠“\”和一个八进制数组成,例如:

    \130:表示字符“X”

    \141:表示字符“a”

    八进制转义字符最多可以包含三个数字,例如\177表示控制字符。

    十六进制转义字符:

    十六进制转义字符由反斜杠“\”和字母“x”或“X”以及随后的两个十六进制数字组成,例如:

    \x30:表示字符“0”

    \x41:表示字符“A”

    十六进制转义字符最多可以包含两个数字,例如\x7f表示控制字符。

  • C语言的数据_第2张图片

  • 六.变量赋初值:

    为变量开辟空间时为其进行初始化的操作。

    变量赋虽然比较简单理解,但有许多人不清楚变量赋初值与变量赋值有什么区别,虽然都是使用“=”完成的,但二者并不是相同的。

  • int main()
    {
      int a=10;
      a=20;
    }

    在定义标识符a的时候给他内存空间存入10,即是对a完成初始化。

    对a进行赋值是将a 内部的初始内容10替换成20。这就是这两者的区别。

  • 七.运算符与表达式:

  • 运算符:

    算术运算符

    算术运算符用于执行基本的数学运算,如加法、减法、乘法、除法等。

  • int a = 21;
    int b = 10;
    int c;
    
    c = a + b; // 加法
    c = a - b; // 减法
    c = a * b; // 乘法
    c = a / b; // 除法
    c = a % b; // 取模运算符,得到除法的余数
    c = a++; // 自增运算符,整数值增加1
    c = a--; // 自减运算符,整数值减少1

    关系运算符

    关系运算符用于比较两个值的大小关系,如等于、不等于、大于、小于等。

  • if(a == b) {
    // 如果a等于b
    }
    if(a != b) {
    // 如果a不等于b
    }
    if(a > b) {
    // 如果a大于b
    }
    if(a < b) {
    // 如果a小于b
    }
    if(a >= b) {
    // 如果a大于或等于b
    }
    if(a <= b) {
    // 如果a小于或等于b
    }

    PS:if循环后面会提及,先做了解。

    逻辑运算符

    逻辑运算符用于执行逻辑运算,如逻辑与(AND)、逻辑或(OR)和逻辑非(NOT)。

    判断符号为:&&       ||        !

if(a && b) {
// 如果a和b都为真
}
if(a || b) {
// 如果a或b任意一个为真
}
if(!a) {
// 如果a为假
}

位运算符

位运算符用于对整数在二进制位级别上进行操作,如按位与、按位或、按位异或等。(暂作了解)

c = a & b; // 按位与
c = a | b; // 按位或
c = a ^ b; // 按位异或
c = ~a; // 按位取反
c = a << 2; // 左移两位
c = a >> 2; // 右移两位

赋值运算符

赋值运算符用于将值赋给变量,包括简单赋值和复合赋值。(要结合后面的运算符优先级进行理解)

c = a; // 简单赋值
c += a; // 加且赋值
c -= a; // 减且赋值
c *= a; // 乘且赋值
c /= a; // 除且赋值
c %= a; // 模且赋值
c <<= 2; // 左移且赋值
c >>= 2; // 右移且赋值
c &= a; // 按位与且赋值
c ^= a; // 按位异或且赋值
c |= a; // 按位或且赋值

自增自减运算符

sizeof(a); // 返回变量的大小
&a; // 返回变量的地址
*a; // 指向一个变量
a ? b : c; // 条件表达式,如果a为真则取b,否则取c

  • 前置自增自减运算符‌:如 ++i 或 --i,这些运算符会先将变量的值增加1(或减少1),然后再进行其他运算。例如,int a = i++; 会先将 i 的值增加1,然后再将增加后的值赋给 a
  • 后置自增自减运算符‌:如 i++ 或 --i,这些运算符会先进行其他运算,然后再将变量的值增加1(或减少1)。例如,int b = ++j; 会先将 j 的值增加1,然后再将增加后的值赋给 b
    #include 
    
    int main() {
        int a = 5;
        int b = 5;
        int c = 5;
        int d = 5;
    
        printf("a = %d, b = %d, c = %d, d = %d\n", a, b, c, d);
        a++; // 等价于 a = a + 1
        ++b; // 等价于 b = b + 1
        c--; // 等价于 c = c - 1
        --d; // 等价于 d = d - 1
    
        printf("a = %d, b = %d, c = %d, d = %d\n", a, b, c, d);
        return 0;
    }

    输出:

  • C语言的数据_第3张图片

  • 一元运算符与二元运算符

             在编程中,运算符根据操作数的数量可以分为一元运算符、二元运算符和三元运算符。这里将重点介绍一元运算符和二元运算符的区别。

             一元运算符

              一元运算符只需要一个操作数。常见的一元运算符包括:

              递增和递减运算符++ 和 --,用于对操作数进行增加或减少 。

              正负号运算符+ 和 -,用于表示正负数。

              逻辑非运算符!,用于对布尔值进行取反。

  • 例如:

  • int a = 5;
    a++; // a 变为 6
    a--; // a 变为 5
    boolean b = true;
    b = !b; // b 变为 false

  • 二元运算符

    二元运算符需要两个操作数。常见的二元运算符包括:

  • 算术运算符+-*/%,用于执行加法、减法、乘法、除法和取模运算。

  • 关系运算符==!=><>=<=,用于比较两个操作数之间的关系,返回布尔值。

  • 逻辑运算符&&||,用于执行逻辑与和逻辑或运算。

  • 赋值运算符=+=-=*=/=%=,用于将右侧的值赋给左侧的变量。

  • 位运算符&|^<<>>>>>,用于执行位操作。

  • int a = 5;
    int b = 3;
    int sum = a + b; // sum 为 8
    boolean isEqual = (a == b); // isEqual 为 false
    int bitwiseAnd = a & b; // bitwiseAnd 为 1

    主要区别

  • 操作数数量:一元运算符只需要一个操作数,而二元运算符需要两个操作数。

  • 功能:一元运算符主要用于简单的增减、取反等操作,而二元运算符用于更复杂的算术、逻辑、关系等操作。

其他运算符

C语言还包括其他运算符,如条件运算符、逗号运算符、取地址运算符等。

sizeof(a); // 返回变量的大小
&a; // 返回变量的地址
*a; // 指向一个变量
a ? b : c; // 条件表达式,如果a为真则取b,否则取c

运算符优先级

说明:
同一优先级的运算符,运算次序由结合方向所决定。

简单记就是:! > 算术运算符 > 关系运算符 > && > || > 赋值运算符

C语言的数据_第4张图片

规律总结:

    1. 结合方向只有三个是从右往左,其余都是从左往右。
    2. 所有双目运算符中只有赋值运算符的结合方向是从右往左。
    3. 另外两个从右往左结合的运算符也很好记,因为它们很特殊:一个是单目运算符,一个是三目运算符。
    4. C语言中有且只有一个三目运算符。
    5. 逗号运算符的优先级最低,要记住。
    6. 此外要记住,对于优先级:算术运算符 > 关系运算符 > 逻辑运算符 > 赋值运算符。逻辑运算符中“逻辑非 !”除外。

表达式:

在C语言中,表达式是一种用于计算的值。‌表达式可以由操作数、运算符和括号组成,用于执行特定的计算或操作。常见的表达式类型包括算术表达式、赋值表达式等。‌

表达式的类型

  1. 算术表达式‌:用于执行数学运算,如加、减、乘、除等。例如:x + ya - bc * de / f
  2. 赋值表达式‌:使用赋值运算符(=)将右侧的值赋给左侧的变量。例如:num = 10。赋值表达式的值等于赋值后的变量值,类型也与变量相同。

表达式的语法规则

在C语言中,表达式通常以一个或多个操作数组成,通过运算符连接。赋值表达式的左操作数必须是一个变量,而右操作数可以是一个常量、另一个变量或更复杂的表达式。例如:num = x + y

表达式的应用场景

表达式在C语言中广泛用于计算、赋值和条件判断等场景。通过表达式,可以控制程序的逻辑流程,实现各种计算和数据处理任务。

八.字符串:

(先作了解,后会细讲)

字符串是使用null字符'\0'结束的一维字符数组。字符串常用于存储和操作文本数据。

  1. 字符串的创建和初始化:

  2. char str[] = "Hello, World!";
    

  3. 字符串的长度:

  4. int length = strlen(str);
    

    字符串的复制:

  5. char copy[50];
    strcpy(copy, str);
    

    字符串的链接:

  6. char copy[50];
    strcpy(copy, str);
    

    字符串的比较:

  7. char copy[50];
    strcpy(copy, str);
    

    字符串中字符的查找:

  8. char copy[50];
    strcpy(copy, str);
    

    字符串中字符的修改:

    str[0] = 'h'; // 修改第一个字符为 'h'
    

    字符串中字符的增加与删除:

  9. char *added = "#####";
    strncat(str, added, 4); // 添加前四个字符
    str[strlen(str) - 1] = '\0'; // 删除最后一个字符
    

    格式化字符串:

  10. char name[] = "John";
    char greeting[50];
    sprintf(greeting, "Hello, %s!", name);
    

    字符串中的动态分配和释放:

  11. char *dynamicStr = (char *)malloc(50 * sizeof(char));
    strcpy(dynamicStr, "Dynamic");
    free(dynamicStr);
    

九.格式说明符

  1. 整数类型‌:
    • %d:带符号的十进制整数(适用于int类型)。
    • %hd:带符号的短整数(适用于short int类型)。
    • %ld:带符号的长整数(适用于long int类型)。
    • %lld:带符号的长长整数(适用于long long int类型)。
    • %u:无符号的十进制整数(适用于unsigned int类型)。
    • %lu:无符号的长整数(适用于unsigned long int类型)。
    • %llu:无符号的长长整数(适用于unsigned long long int类型)。
    • %o:无符号八进制整数。
    • %x 或 %X:无符号十六进制整数(小写或大写)。
  2. 浮点数类型‌:
    • %f:十进制浮点数(适用于float类型)。
    • %lf:十进制浮点数(适用于double类型)。
    • %e 或 %E:科学计数法表示的浮点数(小写或大写)。
    • %g 或 %G:根据值的大小选择最紧凑的格式。
  3. 字符类型‌:
    • %c:单个字符。
  4. 字符串类型‌:
    • %s:字符串(以空字符‘\0’结束的一串字符)。
  5. 指针类型‌:
    • %p:打印指针地址,并通常会自动转换为适合平台的格式。
  6. 其他特殊用途‌:
    • %n:读入并记录到相应整型变量中已读取字符的数量(仅在scanf系列函数中使用)。
    • %t:用于布尔型数据(某些扩展库可能支持)。
    • %a:C99引入的十六进制浮点数输出格式(用于double)。

你可能感兴趣的:(c语言,算法,开发语言)