美文网首页iOS程序猿
C语言学习笔记

C语言学习笔记

作者: 十二生肖都背不全的家伙 | 来源:发表于2016-10-11 18:29 被阅读0次

    此文章为个人学习时记录笔记,顺便试试MarkDown,不是教程~。

    C语言学习笔记C语言学习笔记

    Mac系统的使用

    • Finder 文件管理系统

    • Dock 快捷栏

    • 系统偏好设置

    • Safari浏览器

    • App Store

    常用快捷键

    指令 作用
    CMD + 空格 切换输入法
    CMD + C 拷贝
    CMD + V 粘贴
    CMD + A 全选
    CMD + S 保存
    CMD + X 剪切
    CMD + Tab 切换应用程序
    CMD + F 查找
    CMD + N 新建
    CMD + Shift + 3 截全屏
    CMD + Shift + 4 截选中部分
    CMD + Z 撤销
    CMD + Shift + Z 恢复撤销

    终端常用命令

    命令 作用
    ls 显示当前目录下的子目录
    pwd 查看当前路径
    cd 子目录名 进入当前子目录(有空格!)
    cd.. 返回上一级目录
    clear/ctrl+l 清屏
    tab 自动补齐
    touch test.txt 新建文件 test.text
    open test.txt 打开文件 test.txt
    rm test.txt 删除文件 test.txt
    mkdir test 新建目录 test
    rmdir test 删除目录
    rm -rf test 删除文件或目录 test

    练习:
    ​ 在桌面通过命令新建一个目录。进入到该目录,在目录里新建一个文件,打开文件,写入一句话,关闭文件,删除整个目录,包括里面的文件。

    进制转换

    引入二进制的原因 计算机是以二进制的形式进行数据存储的,因为二进制存储简单。

    引入八进制和十六进制的原因 八进制和十六进制能更好的表示二进制。

    二进制- >十进制

    二进制:用0,1来表示所有的自然数

    十进制:用0~9来表示所有的自然数

    八进制:用0 ~ 7来表示所有的自然数

    十六进制:用0--9,a—f来表示所有的自然数

    规律 任何一个二进制数,从右向左依次数起,分别为第0位,第1位,第2位......,找到所有的数值为1的位数,用2的位数次方依次相加,得到十进制结果。

    11001(2) = 25(10)

    十进制- >二进制

    倒除法

    45(10) = 101101(2)
    98(10) = 1100010(2)
    123(10) =  1111011(2)
    

    八进制- >二进制

    三位一取:每1位8进制数用3位2进制数来表示。

    54(8) =  101 100(2)
    000  0
    001  1
    010  2
    011  3
    100  4
    101  5
    110  6
    111  7
    

    十六进制- >二进制

    四位一取 : (高位的0可以省略)

    2d (16) = 0010 1101(2) = 101101(2)

    二进制- >八进制

    三位一取

    1011(2) = 001 011(2) = 13(8)

    二进制- >十六进制

    四位一取 : 从低位向高位数

    101101(2) = 0010 1101 = 2d(16)

    原码 补码 反码

    真值:一个数的十进制表示形式

    机器数:一个数的二进制表示形式

    原码

    由符号位和机器数组成,最高位表示符号位。1表示负数,0表示正数;其余位数用真值的绝对值得二进制表示。

    真值 源码
    1(10) 0 000 0001(2)
    -1(10) 1 000 0001(2)

    结论 计算机不以原码的方式进行数据存储,因为原码会出现计算错误。

    反码

    正数的反码是原码,附属的反码是原码的符号位不变,其余位数按位取反(0变1,1变0);反码的反码是原码。

    1
    0 000 0001 原码                  0 000 0001  反码
    0 000 0001 反码                  1 111 1110  反码
    -1
    1 000 0001 原码                  1 111 1111 反码
    1 111 1110 反码                  1 000 0000 原码
    -0 真值
    

    结论 计算机不以反码的方式进行数据存储,因为反码解决不了0的问题。

    补码

    正数的补码是原码,负数的补码是反码+1;补码的补码是原码。

    1
    0 000 0001 原码
    0 000 0001 反码                  0 000 0001  补码
    0 000 0001 补码                  1 111 1111  补码
    -1                                           +
    1 000 0001 原码                  0 000 0000 补码
    1 111 1110 反码                  0 000 0000 原码
    1 111 1111 补码
    0 真值
    

    结论 计算机是以补码的形式进行数据存储的。

    内存大小

    内存是由大量开关组成的,每个开关有两种状态,0表示关,1表示开,每个开关只能存储一个值,用1bit表示。

    一个字节存储范围是:-128 ~ 127

    1byte(字节)=8bit

    1kb=1024byte

    1Mb=1024kb

    1Gb=1024Mb

    1Tb=1024Gb

    注意 计算机分配内存的最小单位是字节。

    终端

    命令模式
    编辑模式

    VI编辑器

    用来编辑C代码(C源文件后缀是 .c)

    1. 新建或打开.C源文件
      vi test.c
    2. 从命令模式切换到编辑模式
      i
    3. 退出编辑模式,返回命令模式
      ESC
    4. 保存并返回
      :wq
    5. 编译代码(将.c源文件编译成可执行文件)
      gcc test.c -o t
    6. 运行可执行文件
      ./t

    变量与常量

    变量:值可以改变的量

    常量:值不可以改变的量

    定义变量

    数据类型 变量名;

    常见的数据类型

    整形

    类型 16位系统 32位系统 64位系统
    short(短整形) 2字节 2字节 2字节
    int(整形) 2字节 4字节 4字节
    long(长整形) 4字节 4字节 8字节

    无符号的(unsigned)

    unsigned int a = 3;
    unsigned short b;
    

    浮点型

    float  //(单精度)小数点后3-6位  4字节
    
    double  //(双精度)小数点后13-16位  8字节
    

    字符型

    char 1字节

    变量名

    标示符:只能由数字、字母、下划线组成,但是不能以数字开头(不能以关键字命名)

    变量名遵循标示符的命名规则

    int a;
    int  //数据类型
    a    //变量名
    ;    //语句结束符
    

    变量的赋值

    a=4;
    a  //变量名
    =  //赋值运算符
    4  //常量
    

    变量的初始化

    int a = 3;
    ```c
    printf("hello world");  //屏幕上显示hello world
    printf("%d",a); //屏幕输出变量a的值
    

    常用的格式符

    %d 十进制整形

    %f 浮点型

    %c 字符型

    %ld 十进制长整形

    %lf double

    %.2f 保留小数点后两位(四舍五入)

    %.2d 保留两位整数

    %o 八进制整型

    %0x 十六进制整型

    \n 换行

    整数的表示形式

    十进制(默认)20

    八进制 020

    十六进制 0x20

    字符型

    char c;

    c = ‘A’;

    c //字符型变量

    ‘A’ //字符型常量

    【注】字符型 常量是由一对 单引号 括起来。

    ASCII码

    字符常量的十进制表达形式。

    ‘0’ 48

    ‘A’ 65

    ‘a’ 97

    转义字符

    本身并不会显示,但是具有特殊意义的一类字符(一般用在printf里)

    \n //换行

    \t //tab

    \r //回车不换行(覆盖)

    \ //打印 \

    %% //打印 %

    运算符

    算术运算符

    +加法运算符 - 减法运算符

    *乘法运算符 / 除法运算符

    %模运算符(求余运算符) 5%8=5 8%5=3

    相同数据类型变量做算术运算,结果类型不变;如果是两个整数做除法运算,结果仍然是整数,小数部分被舍弃(不四舍五入)

    不同数据类型变量做算数运算,遵循以下规则:

    1. 整形向浮点型看齐
    2. 单精度向双精度看齐
    3. 短字节向长字节看齐
    4. 有符号向无符号看齐

    强制转换运算符(不建议使用)

    (数据类型)表达式
    float a = 3.14;
    int
    a=(int)f;

    强转之后,f本身值不发生变化。

    float a = 3.14;
    float b = 4.1;
    int c = (int)(a + b);
    

    自增运算符

    结果:变量的值自加1
    变量++:先使用,后+1
    ++变量:先+1,后使用

    int a;  int a;
    int i=5;    int i=5;
    a=i++;  a=++i;
    //结果:a=5,i=6    a=6,i=6
    

    自减运算符

    结果:变量的值自减1
    变量++: 先使用,后-1
    ++变量: 先-1,后使用

    关系运算符

    >   //大于
    <   //小于
    ==  //等于
    !=  //不等于
    >=  //大于等于
    <=  //小于等于
    
    • ==与=的区别
    • 关系运算符主要用于条件语句中
    • 关系表达式的值,只有真和假两种结果,如果为真则值为1,如果为假,则值为0。

    逻辑运算符

    &&  //逻辑与
    ||  //逻辑或
    !   //逻辑非
    
    • 逻辑与(&&)

    逻辑与的表达式可以有无数个。

    表达式1 表达式2 逻辑与

    只要有一个为假,结果为假。

    • 逻辑或(||)

    逻辑或的表达式可以有无数个。

    表达式1 表达式2 逻辑与

    只要有一个为真,结果为真。

    • 逻辑非(!)
    表达式 逻辑非

    非零为真,零为假。

    复合运算符

    +=、-=、*=、/=

    a+=b; => a=a+b;
    a*=b+3; => a=a*(b+3);
    

    逗号运算符

    表达式1,表达式2,表达式3,......,表达式n;

    执行过程

    • 每个表达式依次执行一遍。

    返回值

    • 返回最后一个表达式的值。

    条件运算符

    表达式1 ? 表达式2 : 表达式3;

    条件运算符是唯一的一个三目运算符

    执行过程

    • 先判断表达式1的值

    • 如果表达式1的值为真,那么执行表达式2,不执行表达式3;

    • 如果表达式1的值为假,那么执行表达式3,不执行表达式2。

    返回值

    • 先判断表达式1的值

    • 如果表达式1的值为真,那么返回表达式2的值

    • 如果表达式1的值为假,那么返回表达式3的值。

    int i=2;
    int j=2;
    3>2 ? i++ : j++;
    

    格式化输入输出

    printf(“%d”,a); //格式化输出
    scanf(“%d”,&a); //格式化输入
    

    条件语句

    if else

    如果。。。。那么。。。。

    if(表达式)
    {
    //语句;
    }
    

    执行过程

    • 如果有表达式的值为真,那么执行语句

    • 否则,跳过if,继续向后执行。

    如果。。。。那么。。。。否则。。。。

    if(表达式)
    {
      //语句;
    }
    else
    {
      //语句2;
    }
    

    执行过程

    • 如果有表达式的值为真,那么执行语句1
    • 如果有表达式的值为假,那么执行语句2。

    switch case

    switch(表达式)
    {
    case 常量1:
    //语句1;
    break;
    case 常量2:
    //语句2;
    break;
    case 常量3:
    //语句3;
    break;
    ...
    case 常量n:
    //语句n;
    break;
    default:
    }
    
    

    • case分支可以有无数个
    • default分支可有可无
    • break必须写,用来跳出switch语句
    • case后面跟的是常量

    循环语句

    while

    while(表达式)
    {
    //语句;
    }
    

    执行过程

    • 当程序执行到while循环式,先判断表达式的值
    • 如果表达式的值为真,那么执行循环体语句
    • 然后再判断表达式的值,如果仍然为真,继续执行循环体语句
    • 直到表达式的值为假,循环结束。

    注意

    • 问题需要有规律,才可以使用循环
    • 需要有能使循环终止的条件
    • 需要有使循环执行的循环变量

    do while

    do
    {
    语句;
    }while(表达式);
    

    for

    for (语句1;表达式;语句3){
    //语句2;
    }
    

    执行过程

    • 先执行语句1,判断表达式的值
    • 如果表达式的值为真,那么执行语句2,执行语句3
    • 再判断表达式的值,如果仍然为真,继续执行语句2,执行语句3
    • 再判断表达式的值,知道表达式的值为假,循环终止。

    continue:结束本次循环,继续下一次循环;
    当程序遇到continue时,continue后面的语句就不会被执行了,继续去循环下一次。
    break:用来终止循环(可以使用在任何循环中)。

    相关文章

      网友评论

        本文标题:C语言学习笔记

        本文链接:https://www.haomeiwen.com/subject/urubyttx.html