C语言学习第一节

C语言的具体结构

  • 简单来说,一个C程序就是由若干头文件函数组成。

  • C语言程序里通常包含预处理指令

    1. 使用预处理指令#include可以引用用户和系统头文件

      #include 是一个预处理指令,它可以把一个头文件的内容包含到当前文件中

    2. 预处理指令以#做开头,不是以;做结尾

    3. include预处理指令中通常采用相对路径表示被包含头文件的位置

      1. 把相对路径写在<>中间表示以系统中预先规定好的一组目录依次作为起点
      2. 把相对路径写在""中间表示首先以当前文件目录作为起点,然后再以系统中预先规定好的一组目录依次作为起点
  • 函数就是实现代码逻辑的一个小的单元。

    • C语言程序里必须包含一个叫做main的函数,这个函数叫做主函数
    • C程序就是执行主函数里的代码,也可以说这个主函数就是C语言中的唯一入口
    • main前面的int就是主函数的类型。
      • 整个程序必须从主函数的第一条语句开始执行,当主函数里最后一条语句结束后程序就结束了。
    • c语言程序里的函数可以在结束后用一个数字表示他的工作结果,这个数字叫做函数的返回值。
      • 主函数应该有一个返回值,如果主函数返回值是0,表示程序希望计算机认为它正常结束了,否则表示出错了,程序希望计算机认为它出错了
  • 良好习惯之规范:

    • 一个说明或一个语句占一行,例如:包含头文件、一个可执行语句结束都需要换行
    • 函数体内的语句要有明显缩进通常以按一下Tab键为一个缩进
    • 括号要成对写,如果需要删除的话也要成对删除
    • 当一句可执行语句结束的时候末尾需要有分号
    • 代码中所有符号均为英文半角符号
  • 注释:

    • 单行注释,以 // 做开头,一直到行尾。
    • 多行注释,以 /* 做开头,以*/做结尾。
  • 标识符:C语言程序里会大量使用名称区分不同内容,所有名称都叫做标识符。

    • 标识符的第一个字符应该是英文字母,或下划线
    • 后面的每个字符可以是英文字母,下划线或阿拉伯数字
    • 大小写不同的标识符是不同的标识符,(大小写敏感)
    • 关键字不可以作为标识符使用
    • 标识符长度没有限制,但是计算机只会截取前面一部分使用。
    • 标识符应该采用驼峰方式或下划线方式书写
  • 操作符:

    • 操作符用来表示对数字的处理规则,根据操作符所需要配合的数字个数把操作符分为单目操作符,双目操作符和三目操作符。

    • C语言里用+ - * 和/表示加减乘除四则运算,它们都是双目操作符。

    • 如果参与除法计算的两个数字都是整数,则计算结果只保留整数部分。

      C语言里用%表示取余操作。

    • 赋值操作符用=表示。它可以把一个数字记录到一个存储区里,赋值语句可以当作数字使用,这个数字就是赋值完成后左边存储区里的数字。可以再一条语句里使用多个赋值操作符;这个时候优先计算右边的操作符。

    • C语言里绝大多数双目操作符可以和赋值操作符合并形成复合赋值操作符(例如+=,/=等

    • 复合赋值操作符使用的时候也要求左边的内容可以代表存储区,右边的内容可以代表数字。

    • 复合赋值操作符会把双目操作符的计算结果记录到左边的存储区里。

    • 复合赋值操作符的优先级和赋值操作符的优先级一样低。

    • 自增操作符(++)和自减操作符(--)都是单目操作符。

    • 这两个操作符只能和存储区配合使用,它们可以把存储区的内容加一或者减一

    • 它们各有两种使用方法,一种是前操作,(操作符写在存储区前面),另外一种是后操作(操作符卸载存储区后面)

    • 使用这两个操作符编写的表达式本身可以当作数字使用,前操作当数字使用的时候是修改后的数字,后操作当数字使用的时候是修改前的数字。

    • 一条语句里不要对同一个变量多次进行自增或自减计算

  • 逻辑操作符:

    • 逻辑表达式的结果只能是布尔值,逻辑操作符用来编写逻辑表达式。

    • !是一个单目逻辑操作符,它表示对一个布尔值求反(真变假,假变真)

    • 这个操作符使用的时候应该写在一个布尔值的前面。

    • 双目逻辑操作符包括等于(==),不等于(!=),大于(>),小于(<),大于等于(>=)和小于等于(<=)

    • 最多只包含一个双目逻辑操作符的表达式叫做简单逻辑表达式,它们在数学里的结果和在计算机里的结果一定一样的。

    • C语言里的逻辑表达式如果包含多个双目逻辑操作符就必须拆分成多个简单逻辑表达式然后再合并

    • 可以使用与(&&)和或(||)合并两个逻辑表达式

    • 如果两个逻辑表达式里有一个的结果是真则用或(||)合并以后结果也是真,

    • 如果两个逻辑表达式里有一个的结果是假则用与(&&)合并以后结果也是真

    • 与(&&)和或(||)都具有短路特征(如果前面逻辑表达式的结果可以决定个逻辑表达式的结果就忽略后面的逻辑表达式)

    • 位操作符可以直接操作二进制数位

    • ~是一个单目位操作符,这个操作符可以根据一个数字计算出另外一个数字,这两个数字所有的二进制数位的内容都不同(按位求反)

    • 使用的时候这个操作符应该写在一个数字的前面

    • 双目位操作符包括按位与(&),按位与(|)和按位异或(^)

    • 它们可以把两个数字对应二进制数位的内容互相做计算。

    • 按位与(&)可以把两个数字对应二进制数位的内容做与计算。与计算的规则,只要一个数位的内容是0,则与计算以后结果就是0.

    • 任何数位的内容和0做按位与结果就是0;任何数位的内容和1做按位与保持不变。

    • 使用按位与可以得到数字中某些二进制数位的内容。

    • 计算机里任何操作可以用按位与来计算。判断一个非负数是奇数还是偶数。

    • Num % 2 else num & 1

    • 按位或(|)可以把对应二进制数数位的内容做或计算。或计算的规则:只要一个数位的内容是1则或计算后的结果就是1

    • 任何数位内容和0做按位或结果不变,任何数位内容和1做按位或结果是1.使用按位或可以把某些数位的内容设置成1

      image-20201129203234225

    • 按位异或(^)可以把对应数位的内容做异或计算。

    • 异或计算规则:如果两个数位的内容一样则异或以后结果是0,否则结果是1

    • 任何数位内容和0做按位异或结果不变,任何数位内容和1做按位异或变成相反数字。

    • 使用按位异或可以把某些二进制数位内容变成相反数字

基本数据类型

  • C语言中,数据类型可分为:

    • 基本数据类型

      • 整型(int)
        • 短整数类型名称是short。这个类型里包含65535个不同的整数,其中一半是非负数,另一半是负数。这些数字以0为中心向两边扩展
        • 长整数类型名称是long , 这个类型里包含2的32次方个不同的整数,其中一半是负数,另外一半是非负数。这些数字以0为中心向两边扩展
      • 字符型(char)
        • ASCII码表列出所有整数和字符之间的对应关系;ASCII码表里所有小写英文字母是连续排列的,其中'a' 对应的整数最小,'z'对应的整数最大
        • 所有字符数据被分为两组,每组128个;其中一组字符对应的整数在所有计算机里都一样,它们对应的整数范围从0到127;另外一组字符对应的整数在不同计算机上可能不同,它们对应的整数范围可能从-128到-1 , 也可能从128 到 255
        • 特殊字符:
          • '\n' 换行
          • '\r' 回车
          • '\' 代表字符\
          • '\''代表字符'
          • '\"' 代表字符"
      • 以上数据类型(整型和字符型)统一叫做有符号类型;每个有符号类型都有一个对应的无符号类型,无符号类型的名称是在对应的有符号类型名称前加 unsigned(例如:unsigned char , unsigned int)
      • 无符号类型里包含的数字个数对应有符号类型一样,但是不包含负数。程序里不带小数点的数字后加u表示数字是无符号整数类型的
      • 浮点型
        • 单精度型(float)
          • 在带小数点的数字后加f表示数字的类型是单精度浮点类型的。
        • 双精度型(double)
          • 双精度浮点类型可以记录更多小数点后面的数位。
          • 程序里所有小数点的数字默认都是双精度浮点类型的
    • 构造数据类型

      • C语言里允许程序员创建新的数据类型,这些新的数据类型叫复合数据类型
      • 复合数据类型都需要先创建出来然后才可以使用
    • 布尔类型:

      • 这个类型里只包含0和1两个整数,0叫做假,1叫做真
      • 真和假都叫做布尔值
      • 程序里可以把任何整数当作布尔值使用,0当作布尔值使用的时候是假,所有其他整数当作布尔值使用的时候都是真
      • 程序里尽量不要使用布尔类型,直接把整数当作布尔值来使用就可以。
    • 数据类型和占位符的对应关系

      • char和unsigned char %c

        short %hd

        unsigned short %hu

        long %ld

        unsigned long %lu

        int %d

        unsigned int %u

        float %f和%g

        double %lf和%lg (%f和%lf会保留小数点后面多余的0,%g和%lg不会保留

    • 不同类型的存储区所包含的字节个数不同,sizeof关键字用来计算一个存储区所包含的字节个数

      • char和unsigned char 1个字节

        short和unsigned short 2个字节

        long和unsigned long 4个字节

        int和unsigned int 4个字节

        float 4个字节

        double 8个字节

    • 二进制:

      • 一个字节分为八段,每段可以用来记录一个0或者1;要想把一个数字记录到字节里需要首先把它拆分成八个0或者1
      • 用一组0或者1表示数字的方法叫做二进制
      • 计算机里只能记录用二进制表示的数字
      • 二进制表示数字时包含很多数位,每个数位有一个编号。最右边数位编号是0,向左依次递增。
      • 二进制表示方式里某个数位的内容如果是1则它单独代表的数字应该是2的数位编号次方;二进制表示方式里如果两个相邻数位的内容一样则左边数位代表的数字是右边数位代表数字的两倍
      • 用二进制表示负数
        • 在计算机中,正数直接用原码表示。一个正数的原码是按照绝对值大小转换成的二进制数。
        • 在计算机中,负数是以其正值的补码形式表示的。
        • 符号位:
          • 有符号类型数字的最左边二进制数位可以用来判断数字的符号,这个数位叫做符号位。
          • 如果符号位的内容是0就表示数字是非负数,如果符号位内容是1就表示数字是负数。(所有数位的最左边,例如:整数类型,一个是四个字节,一个字节占八位,一共32位。)
        • 原码,补码,反码:
          • 一个负数的原码,是按照绝对值大小转换成的二进制数,然后在最高位补1(最高位为符号位)
          • 一个负数的反码,是对该数的原码除符号位外各位取反。
          • 一个负数的补码,是对该数的原码除符号位外各位取反,然后在最后一位加1.
        • 负数的二进制和十进制之间不能直接转换,必须借助相反的非负数。
        • 转换过程首先需要计算出相反数,然后把相反数进行转换,最后根据转换结果计算相反数
        • 把二进制数字中每个数位的内容变成相反内容然后再加一就可以得到相反数的二进制(证明:对一个数字做两次相反操作,得到的数与原来的数字相同)
    • 八进制:

      • 把二进制数字的所有数位从右向左每三个数位分成一组,每组用一个0到7之间的数字代替。代替后的结果叫做数字的八进制表示方式。
      • 可以在程序里直接使用八进制方式表示数字。以八进制方式表示的数字必须以数字0做开头。
      • 可以把数字的八进制表示方式显示在屏幕上,这个时候需要使用到%o作为占位符。
    • 十六进制:

      • 把二进制数字中所有数位从右向左每四个数位分成一组,每组用一个字符替换(用a到f之间的字母替换10到15之间的数字),这个替换结果叫做数字的十六进制的表示方式。
      • 可以在程序里使用十六进制方式表示数字,这种表示方式必须以0x做开头,
      • 可以使用%x或%X做占位符把数字的十六进制表示方式显示在屏幕上。
        • 用%x做占位符的时候显示结果里所有的字母都是小写的,、
        • 用%X做占位符的时候显示结果里所有的字母都是大写的
      • 显示结果不包含0x开头,自己在占位符前面接上0x
    • 指针类型

    • 空类型

posted on 2020-11-29 20:34  calm_alone  阅读(110)  评论(0)    收藏  举报