目录
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
变量
空间按字节有一个唯一的编号(地址),使用该空间时需要寻址,但是地址不容易操作,为了能方便操作,采用标识符标识空间,即变量名
数据类型 标识符;
标识符命名规则
-
由数字、字母、下划线组成
-
区分大小写
-
不能以数字开头
-
不能与关键字同名
-
最好能体现出作用
拆解定义变量
定义变量———申请一个使用的空间
定义一个字符型变量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;
}