Linux&C语言基础

目录

Linux部分

通配符

*——匹配一个字符串;?——匹配一个字符。

可以删除同类型文件

例:

cry@yuchen:~/d$ ls
2.txt  3.txt  cry.c  e
cry@yuchen:~/d$ rm ?.txt
cry@yuchen:~/d$ ls
cry.c  e
cry@yuchen:~/d$ touch 1.c 2.c 33.c 44.c
cry@yuchen:~/d$ ls
1.c  2.c  33.c  44.c  cry.c  e
cry@yuchen:~/d$ rm ??.c
cry@yuchen:~/d$ ls
1.c  2.c  cry.c  e
cry@yuchen:~/d$ touch 222.c 666.c
cry@yuchen:~/d$ ls
1.c  222.c  2.c  666.c  cry.c  e
cry@yuchen:~/d$ rm *.c
cry@yuchen:~/d$ ls
e

不能touch通配符 创建文件

tips:

1.Ctrl+C 结束进程

2.练习创建当日目录,留存


C语言部分

 part1:C语言对于层级的概念特别强

主函数包含了整个项目的运行逻辑,其余函数进行封装

程序架构-->主函数

part2:进制转换

整数转换

十进制-->其他进制:模n取余,将所得余数倒序

其他进制-->十进制:系数*进制数^位数,求和

二进制-->八进制:三位一组相互对应

二进制-->十六进制:四位一组相互对应

        二进制        -->        八进制

000 000 111        7            0007
000 001 000        8            0010

        二进制        -->        十六进制
0000 1111        15            0x0f
0001 0000        16            0x10

小数部分

p.s.存在有限小数在计算机里可能是无限小数-->计算机里的小数不精确--》浮点型

十进制-->二进制:小数部分*2,大于等于1,写1,减去1后重复;小于1,写0,继续。

其余进制-->十进制:同理整数部分。系数*进制数^位数,求和。

  0.1 --> 1*2^(-1)

part3:数据类型

数据类型的分类

  • 基本数据类型

计算机中所有的数据类型能直接操作数据的只有基本数据类型

char  short  int  long  float  double

  • 构造数据类型

数组   struct  union  enum

  • 指针类型

int*  char*  

  • 空类型

void

  • typedef重命名数据类型

基本数据类型

  • 字符型                char         1字节 0~255  -128~127
  • 短整型                short        2字节 0~65535 
  • 整型                    int            4字节 42亿9千万  【常用】
  • 长整型                long          8字节
  • 单精度浮点型    float          4字节  最多精确到小数点后6位
  • 双精度浮点型    double      8字节  最多精确到小数点后12-15位

p.s.想要在计算机内存中存储一个数据,如果这个数据是一个整数,那么就有char short int long 4中选择 想要使用哪一种?看数据的大小选择数据类型 

关键字名称作用p.s.
unsigned无符号字节中的每一位都是数据位
signed有符号字节中的最高位是符号位,其余都是数据位0正1负
    short int a=0; //定义短整型变量
    short b=1; 
    int short c=2; 
    printf("%d %d %d\n",a,b,c); //0 1 2

存储单元中的空间结构

  • 整数:无符号 数据位
    •     有符号    符号位+数据位
  • 小数:有符号    符号位+整数部分+小数部分

计算机中存储机制--适用于所有机制

原反补码

主要目的是能让计算机进行正常的符合我们数学运算行为的运算

计算机中存储的是二进制的补码

非负数:原反补码都是相同

负数:有符号位的数据才有负数

        原码:数据的二进制

        反码:原码的符号位不变,数据位取反

        补码:反码+1

p.s.只要反码参与的运算,符号位是不会变的

-128-1 = -129

-129 在一个字节中存储的实际值是127

-128 的补码:1 000 0000

     1 的补码: 0 000 0001

结果的补码:0 111 1111

结果的反码:0 111 1111

结果的原码:0 111 1111     --> 127 

 环状存储

数据是一个闭环,最大值+1=最小值

    char a=220; //有符号数和无符号数的溢出
    unsigned char b=220; 
    printf("a=%d\n",a); //-36
    printf("b=%d\n",b); //220

变量

空间按字节有一个唯一的编号(地址),使用该空间时需要寻址,但是地址不容易操作,为了能方便操作,采用标识符标识空间,即变量名

数据类型 标识符;

标识符命名规则

  1. 由数字、字母、下划线组成

  2. 区分大小写 

  3. 不能以数字开头

  4. 不能与关键字同名

  5. 最好能体现出作用

拆解定义变量

定义变量———申请一个使用的空间

定义一个字符型变量a 

    char a; // 定义一个字符型变量a
    (auto signed) char a;
    auto : CPU自动分配存储单元 
    signed : 有符号位
    char : 字符型  空间大小1字节
    a : 空间标识   方便后续操作,地址使用不方便,标识符直接代表空间

定义一个浮点型变量b

float b=5.1; // 申请一个空间,标识为b ,并存储数据5.1
        =  运算符中的赋值运算符  把右边的数据赋值给左边 

        符号位+整数+小数【浮点型没有无符号】

 常量

存储单元中的数据不可变,只读

  • 数字常量:0777  0xaa  200  -1  3.14【都是int】
  • 字符常量:数据的字符形式【都是char】单引号引用的是字符

  ASCII码表 0~127  中的所有字符都是字符常量,共128个字符

     0        32     48    49   65   97
 空字符   空格   ‘0’   ‘1’    ‘A’  ‘a’
    ‘\0’       '  '

  NULL(用于指针)

 ‘’  只能有一个字符

  • 字符串常量:“” 可以是任意数量的字符        双引号引用的是字符串

            字符串结尾默认有一个 ‘\0’
            

字符串代表自身起始字符的地址[e.g.“123”这个字符串就代表这里的字符1的字符地址]
            

有效长度:起始字符到第一个 ‘\0’之前的字符个数

总长度:从起始字符到最后一个 ‘\0’

一个字符=一个字节=一个地址编号

转义字符  \   

转义符 \        字符和字符串中使用

转义八进制数:‘\HHH’  一般默认转义3位8进制

转移十六进制数:‘\xHH’  一般默认转义2位16进制     

‘\101’  转义八进制数        
‘\x41’  转义十六进制数        

‘\\’        转义' \ '一个反斜杠

 ‘\’’        转义' ' '一个单引号

 “\””        转义' " '一个双引号

此外,讨论字符串有效长度 (注意转义字符\对有效长度的影响)      

“123” 有效长度:3

“\123” 有效长度:1        转义为一个八进制数

“\128” 有效长度:2        由于8不可看作八进制数,所以\12转义为一个八进制数,作为一个字

                                        符; 8作为第二个字符。

“abc\000abc” 有效长度:3          字符串到\0结束

                         总长度:8

“abc\x00abc” 有效长度:3        \x00被识别为十六进制数后仍为0,则再次作为\0结束该字符

                                                  串

“\xabc00abc” 有效长度:7        \xab被识别为十六进制数,作为一个字符        

sizeof()        求空间长度运算符,测量占用的空间总长度

#include <stdio.h> 
int main() 
{ 
    int a=6; 
    printf("%ld\n",sizeof(a)); //4
    printf("%ld\n",sizeof(int)); //4
    printf("%ld\n",sizeof(6)); //4
    printf("%ld\n",sizeof("123\000abc")); //8
    return 0;
}

\后的字符首先被当作数字,满足转义条件之后的才是字符

换行符 \ 代码中使用的(防止一行代码的字符过多

数据有多种表示形式

    65  0101  0x41  ‘A’   ‘\101’  ‘\x41’

 //以不同格式输出\n
    char a='\n'; 
    printf("%c|\n",a); 
    printf("%d\n",a); 
输出结果:

|
10

格式化输入输出函数

函数名:printf(“”,参数1,参数2,...)

函数功能:格式化打印

函数参数: “ ”中间进行打印的参数

                   参数1,参数2…… 可选参数

头文件:#include <stdio.h>

printf(“输出双引号中间的内容”);

格式控制符   

 把数据以指定格式添加到字符串中,再进行打印
%c        char        字符型

%d        int        有符号整型  十进制

%f        float        单精度浮点型 默认精确到小数点后6位,自动四舍五入

%s        字符串   

%p        打印地址

%ld        long

%lf        double         printf限制最多打印出来6位

%u        usigned int

%o        八进制

%x        十六进制

//以不同形式输出变量a、b
    int a=65; 
    int b; 
    printf("%c\n",a); //A
    printf("%d\n",a); //65
    printf("%p\n",&a); //地址:000000000062FE18
    printf("b=%d\n",b); //b=0
    printf("%c\n",'A'); //A
    printf("%d\n",'A'); //65
    printf("%c\n",65); //A
    printf("%d\n",65); //65
    printf("%o\n",65); //101八进制
    printf("%x\n",65); //41十六进制
    printf("%f\n",65); //0.0000数据类型不一致
    printf("%f\n",65.0); //65.000000
    printf("%s\n","65"); //65
    printf("%s\n","你好"); //你好
    printf("%d\n",-1); //-1
    printf("%u\n",-1); //当将有符号整数 -1 作为无符号整数进行输出时,由于无符号整数的取值范围是从 0 开始,所以 -1 会被解释为无符号整数的最大值。具体的值取决于系统中无符号整数的位数,例如在常见的 32 位系统中,输出结果为 4294967295。
    float a=1.1; 
    double b=2.1; 
    printf("%f %lf\n",a,b); //1.100000 2.100000

制表符

    用于打印的内容排版
    \n  换行
    \t   横向制表符  TAB
    \a  响铃
    \r   回车
    \b   退格
    \v   垂直移动到下一个制表位
    \f    换页

cry@yuchen:~/record/1010$ ./char
101012a0.000000cry@yuchen:~/record/1010$ ...
//不换行就会这样,所以要用制表符
#include <stdio.h> 
int main() 
{ 
    printf("\ah\tell\bo\n"); 
    return 0; 
}
输出结果:h       elo

位宽和有效字符

%md        m:5 位宽为5,右对齐

                m:-5 位宽为5,左对齐

%.nf        n:2 有效位为2 保留两位有效小数(四舍五入)

%m.nf

%m.ns        m代表位宽 n代表有效字符

#include <stdio.h>
int main(){
    int a=123; 
    printf("%d%d\n",a,a); //123123
    printf("%5d%5d\n",a,a); //  123  123[位宽为5,右对齐]
    printf("%-5d%-5d\n",a,a);//123  123  [位宽为5,左对齐]
    float b=3.1456; 
    printf("%f%f\n",b,b);3.1456003.145600
    printf("%.2f%.1f\n",b,b);3.153.1[小数点后2位、小数点后1位]
    printf("%-9.3f%-9.3f\n",b,b);3.146    3.146    [位宽为9,小数点后3位,左对齐]
    printf("%5.2s\n","hello");//he
    printf("%s\n","123\000abc");//123
    return 0;
}

函数名:scanf(“”,&参数1,&参数2,...)

函数功能:格式化输入

函数参数: “ ”中间需要键盘输入的参数

                        &参数1,&参数2…… 可选参数

空格和回车作为除了%c之外的格式,数据的间隔符

e.g.
    int a;
    int b;
    scanf(“可乐%d元%d瓶”, &a, &b);  // 就要输入 可乐1元2瓶

键盘每个按键按下都会输入一个字符
 

#include <stdio.h>
int main()
{
    int m,n;
    printf("输入两个数据:");
    scanf("%d %d\n", &m,&n);
    printf("m=%d n=%d\n",m,n);
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值