C语言:(第三章)数据类型及其运算

本文介绍了C语言中的数据类型,包括原子类型如整型、浮点型和字符型,以及结构类型。详细阐述了基本数据类型的字节数和取值范围,并通过示例解释了枚举的使用。此外,讨论了常量、变量的概念,包括它们的分类和存储方式,还涉及了运算符如算数、关系和逻辑运算符的用法。
摘要由CSDN通过智能技术生成

3.1:定义

数据类型分为:

​         原子类型:不可以再分解的基本类型

​         结构类型:由若干数据类型组合而成的,是可以再分解的数据类型

3.2:基本数据类型

(1)整数

        ​ 整型 --int (4字节)

        ​ 短整型 --short int(2字节)

        ​ 长整型 --long int (8字节)

(2)浮点数(实数)

​         单精度浮点数 --float (4字节)

        ​ 双精度浮点数 --double(8字节)

(3)字符(字符型变量并不是将字符本身放到内存中存储,而是将对应的ASCII编码放入到存储单元)

​         单个字符 --char (1字节)

        ​ 字符串 --str(字符串:character string是一个或多个字符的序列)

                ​ (一):以数字‘\0’结尾的字符数组是字符串

                ​ (二):字符串处理以‘\0’作为结束符,后面的字符不会输出

                 (三):C语言中没有专门存储字符串的变量类型,字符串都被存储在char类型的数组中

/*
时间:2022年3月23日14:58:20
目的:测试char的用法
*/
#include<stdio.h>
int main(void)
{
    char ch;
    printf("please enter a character.\n");
    scanf_s("%c",&ch);   //%c指明待打印的字符
    printf("the code for %c is %d\n",ch,ch);
    return 0;
}
/*
output:
please enter a character.
C
the code for C is 67
*/

3.3:复合类型数据

​ 枚举

        (1)什么是枚举?

                        把一个事物所有可能的取值一一列举出来

        (2)怎么使用枚举?

enum weekday   //enum:枚举(列举类别)
{
  MonDay, TuesDay, WednesDay, ThursDay, FriDay, SaturDay, SunDay 
};
void f(enum weekday i)
{
    switch (i)
    {
    case 0:
        printf("MonDay!\n");
        break;
    case 1:
        printf("TuesDay!\n");
        break; 
    case 2:
        printf("WednesDay!\n");
        break; 
    case 3:
        printf("ThursDay!\n");
        break;
    case 4:
        printf("FriDay!\n");
        break; 
    case 5:
        printf("SaturDay!\n");
        break;
    case 6:
        printf("SunDay!\n");
        break;
    }
}
int main(void)
{
    f(FriDay);    //虽然FriDay本质上就是5,但直接写成f(5)就是错的
    return 0;
}

        (3)枚举优缺点

                代码更安全(书写麻烦)

数据类型决定:1数据占内存字节数

​                         2数据取值范围

                        ​ 3其上可进行的操作

数据类型的存在意义:给变量分配合适的内存空间

3.4:常量、变量、标识符

        3.4.1:标识符

                定义:用来命名变量、常量、函数等的字符序列

                组成:

                        -只能由字母、数字、下划线组成,且第一个字符必须是字母或下划线

                        -大小写敏感

                        -不能使用关键字(关键字:C语言中预先保留的单词)

                长度:最长32个字符

        3.4.2:常量

                定义:程序运行时其值不能改变的量(即常数)

                分类:

                        1>符号常量:用标识符代表常量

                        2>直接常量:

                                (1)整型常量(二、八、十、十六进制的整数)

                                (2)实型常量(浮点数)(默认double型)

                                (3)字符常量(用单引号括起来的单个普通字符或转义字符<反斜线后跟一个字符或一个代码值表示>)

                                (4)字符串常量

​                                         定义:用双引号括起来的字符序列

                                        ​ 存储:每一个字符串尾自动加一个‘\0’作为字符串结束标志

                                整数以补码的形式转化为二进制代码存储在计算机中;

                                实数以IEEE754标准转化为二进制代码存储在计算机中;

                                字符与整数的存储方式相同

*浮点数的存储所带来的问题

        float和double都不能保证可以精确的存储一个小数

        例子:

                float i = 99.9;

                printf(“%f\n”);

                在vs2019中的输出结果:99.900002

        3.4.3:变量(初始化就是赋值的意思;不初始化的变量通常就是垃圾值)

                1>定义:其值可以改变的量

                2>如何定义变量?

                        数据类型 变量名 = 要赋的值;

                等价于

                        数据类型 变量名;

                        变量名 = 要赋的值;

                eg:

                        int i = 3; 等价于 int i ; i=3;

                        int i, j = 3; 等价于 int i; int j; j =3;

                3>分类

​                 (1)整型变量:占字节数随机器不同而不同,一般占一个机器字符(short<int<long<long long)(可用sizeof<类型标识符>测量)

​                 (2)实型变量(float、double)

​                 (3)字符变量(char)

                4>变量的作用域和存储方式

                        ❶按作用域分

                                ①全局变量

                        在所有函数外部定义的变量(使用范围:从定义位置开始到整个程序结束)

                                ②局部变量

                        在一个函数内部定义的变量或函数的形参(使用范围:只能在本函数内部使用)

                                #注意问题

                         1.全局变量和局部变量命名的冲突问题

​                         2.在一个函数内部如果定义的局部变量的名字和全局变量名字一样时,局部变量会屏蔽掉全局变量

                        ❷按变量的存储方式分

                                静态变量

                                自动变量

                                寄存器变量

        3.4.4:运算符和表达式

        (1)算数运算符 + - * / %

                %:运算对象必须是整数,结果是整除后的余数,其余数的符号与被除数相同;

               ​ 被除数小于除数时,运算结果等于被除数

               ​ 两个小数是不可以作为取模运算的

        (2)关系运算符

                1 关系运算符:用来对两个数值进行比较的运算符

                2 六种关系运算符:

                (1)< 小于 (2)<=小于等于

                (2)> 大于 (4)>=大于等于

​                  优先级相同(高)

                (5)==等于 (6)!= 不等于

​                  优先级相同(低)

               3 关系表达式:用关系运算符将两个表达式连接起来(关系表达式的值是一个逻辑值,非真即假)

        (3)逻辑运算符

                ​ 1 三种逻辑运算符:

                        &&(与) ||(或) 双目(元)运算符

                        !(非) 一目(元)运算符

​                 2 逻辑表达式:用逻辑运算符将关系表达式或逻辑量连接起来(逻辑表达式的值应该是逻辑量“真”或“假”)

​                 3 编译系统在表示逻辑运算时以数值1代表“真”,以数值0代表“假”

        (4)赋值运算符

                = += -=

                /= *= %=

                1.= 赋值运算符

                变量=表达式如:a=3;将a的值赋为3

                2./= 除后赋值

                变量/=表达式 如:a/=3;即a=a/3

                3.*= 乘后赋值

                变量=表达式 如:a=3;即a=a*3

                4.%= 取余后赋值

                变量%=表达式 如:a%=3;即a=a%3

                5.+= 加后赋值

                变量+=表达式 如:a+=3;即a=a+3

                6.-= 减后赋值

                变量-=表达式如:a-=3;即a=a-3

        (5)自增(自减)运算符【使变量值加1或减1】

                分类:前置自增:++i(先让变量+1,然后进行表达式计算)

​                          后置自增:i++(先使用i值,再执行i+1)

#include<iostream>
using namespace std;  //使用名字空间std
int main02()
{
    //前置和后置的区别
    //前置递增:先让变量+1,然后进行表达式运算
    int a = 10;
    int b = ++a * 10;
    cout << "a = " << a << endl;
    cout << "b = " << b << endl;
    //后置递增
    int a2 = 10;
    int b2 = a2++ * 10;
    cout << "a2 = " << a2 << endl;
    cout << "b2 = " << b2 << endl;
    return 0;
}
/*
output:
a = 11
b = 110
a2 = 11
b2 = 100
*/

                 出现原因:自增速度快

​                                   代码更精炼

                学习自增应明白的几个问题?

                        1>在编程时应该尽量屏蔽掉前自增和后自增的差别

                        2>i++或++i单独成一个语句,不要把它作为一个完整复合句的一部分来使用

        (6)三目运算符

                A ? B : C 等价于

                        ​ if(A)

                        ​ B;

                        ​ Else

                        ​ C;

        (7)逗号表达式

                格式:(A,B,C,D)

                功能:从左到右去执行,最终表达式的值是最后一项的值

        (8)位运算符

                现实意义:通过位运算符我们可以对数据的操作精确到每一位

                & -- 按位与 && -- 逻辑与(也叫并且)

                        &&与&的含义完全不同

​                              例子:1&1 = 1

​                                         1&0 = 0

                                        ​ 0&0 = 0

                                        ​ 0&1 = 0

               | -- 按位或 || -- 逻辑或

                        |与||的含义完全不同

​                              例子:1|1 = 1

                                         1|0 = 1

​                                         0|0 = 0

                                        ​ 0|1 = 1

                ~ -- 按位取反

                        ​ -- ~i就是把i变量所有的二进制位取反

                ^ -- 按位异或

​                         -- 相同为0,不同为1

                << -- 按位左移

                        ​ 例子:i<<1表示把i的所有二进制位左移一位,右边补零(左移n位相当于乘2的n次方)

                >> -- 按位右移

​                         例子:i>>1表示把i的所有二进制位右移一位,左边一般补零,当然也可能补1(左移n位相当于除以2的n次方,前提是数据不能丢失)

                优先级:!> 算术运算符 > 关系运算符 > &&、|| > 赋值运算符

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值