Day1
- Linux命令
1.1打开终端 ctrl+alt+T, ctrl+shift+(+)放大字体 ctrl+(-) 缩小字体;
1.2 linux@ubuntu:~$:当前路径
$代表普通用户
#代表超级用户
1.3 pwd 查看当前路径
1.4 Linux和Windows文件系统区别:Windows有盘符之分
Linux无盘符之分,即树形根目录结构
1.5 ls:查看当前路径下的文件夹以及文件;
1.6 cd:切换路径
1.7 Tab:自动补全
1.8 cat:查看文件内容(较短文件)
more:查看文件(查看比较长文件)
1.9 mkdir:创建文件夹
1.10 touch:创建文件
1.11 vim 1.txt: i
末行模式 < ---------命令模式(默认) --------->插入模式
wq(保存退出) 3yy(复制) < --------
w(只保存不退出) p(粘贴) Esc
q(只退出不保存) 3dd(删除)
set nu(设置行号)
1.12 clear:清屏
1.13 mv:移动(重命名)文件/文件夹
1.14 cp:复制文件(文件夹)
1.15 rm:删除
1.16 rmdir:删除空文件夹
1.17 shutdown -h now:关机
1.18 reboot:重启
2.Linux开发过程
1.分析建模—2.画流程图---3.翻译成C语言---4.编译成可执行程序—5.运行
案例1:输入一个整数,判断该数是奇数还是偶数
2.1分析建模:
算法:解决问题的方法步骤:日积月累
偶数:能被2整除的是偶数
奇数:不能被2整除的奇数
2.2画流程图
2.3翻译成计算机高级语言(C语言)
2.3.1 注释:
// 单行注释
/*
多行注释
*/
2.3.2 入口函数
2.3.3 变量如何定义
类型名 变量名;
2.3.4 变量名的命名规范:
(1) 由数字,字母,下划线组成,首字母不能为数字
(2) 不能为关键字或保留字
(3) 尽量见名知意
2.3.5 C语言标准的输入输出语句
(1) 引入头文件
#include <stdio.h>
- 输入输出函数
参数1:一定是个字符串
scanf(“格式化符号”,地址列表); 标准输入
printf(“字符串+格式化符号”,变量列表); 标准输出
2.4 编译成可执行程序
2.5 运行./可执行程序
Day2
计算机的基本构成
输入输出设备(键盘、鼠标)
CPU处理器:(控制器,运算器,寄存器)
存储器
程序
存储器:内存和外存
内存:工作存储器,容量较小,运行速度快,掉电数据会丢失
外存:长期保存数据,容量较大,运行速度慢,掉电数据不会丢失
寄存器:cpu内部的存储器,运行速度最快,容量非常小
程序
定义:一组计算机可以识别的有序的指令
指令:计算机可以识别的操作
程序的设计步骤
Vim(编辑)- gcc(编译)- ./a.out(运行/调试)
计算机数据表示
非数值数据和数值数据
10 ------0000 1010
非数值数据
eg:字符、图片、声音
ASCII码表:规定字符以哪八位二进制数表示
‘a’ = 97
‘A’ = 65
‘0’ = 48
‘\0’ = 0
所有的大写字母都比小写字母:小32
数值数据
定义:可以直接进行运算的数据
二进制、八进制、十进制、十六进制
二进制: 0~1(逢二进1)
八进制:0~7(逢八进1)
十进制:0~9(逢十进1)
十六进制:0 ~9、a~ f(A~F)(逢16进1)
为了区分不同的进制:八进制前加0,十六进制前0x(0X)(0x7fa 0X7FA)
十进制:76 八进制:076 十六进制:0x76、0X76
进制转换
其他进制转十进制:(注意:从右往左:从0次幂开始)
二进制转十进制:1010 0101 = 1*2^0+1*2^2+1*2^5+1*2^7
八进制转十进制:076=6*8^0 + 7*8^1
十六进制转十进制:0xafc = 12*16^0+15*16^1+10*16^2
十进制转其他进制:
十进制转二进制:除2倒取余数
十进制转八进制:除8倒取余数
十进制转十六进制:除16倒取余数
二进制和八进制:(将每一个八进制数用三个bit的二进制数去表示)
(421)
二进制和十六进制:(每一个十六进制可以用4位二进制数去表示)
(8421)
基本数据类型
关键字:系统预先定义好的,有特殊含义的,并且都是小写,不能重新定义。
数据类型:char、short、int、long、float、double、enum、union、struct、void
控制语句:if、else、for、do、while、switch、case、default、break、continue、goto
存储类型:auto、static、extern、register
标识符:程序员自己定义的,一般用来定义变量名,函数名,类型名
命名规范:(见名知意)
- 由数字、字母、下划线组成
- 第一个不能为数字
- 不能和关键字重名
- 基本数据类型
32os:分别占据多少个字节:
字符型:char(1字节)
整型:int(4字节) short(2字节) long(4字节)
浮点型:float(4字节) double(8字节)
64os:
字符型:char(1字节)
整型:int(4字节) short(2字节) long(8字节)
浮点型:float(4字节) double(8字节)
注意:每一种数据类型所占的内存空间是不相同的,数据类型主要就是为了让我们合理的分配内存空间
有符号数与无符号数
有符号数(signed):有正数有负数(定义一个变量,默认是有符号的)
无符号数(unsigned):只有正数,并且都是数据位
字符型家族
值域范围:Char(1字节)
超过这个范围:转圈去数
整型
Int (4字节 == 32bit)
Int (8字节 == 32bit)
浮点型
Float(单精度浮点数):表示6~7位有效数据
%f(默认输出小数点后6位)
Double(双精度浮点数):表示15~16位有效数据
%lf(默认输出小数点后6位)
如果想要输出小数点后n位(%.nf)
转义字符
(1字节)
“ af\79\\\n” = 7
“ af\74\\\n” = 6
常量
定义:在程序运行期间,不会也不能被改变的量
字符常量
‘a’ ’A’ ‘b’
整型常量
二进制:1010
八进制:076
十进制:99 -2
十六进制:0xaf 0X6FC
(默认情况下,为有符号数:int、short、long)
无符号的int:66U
长整型:66L
无符号的长整型:66UL
浮点型常量
小数:3.14 10000(浮点型常量也包括整形常量)
指数:10000 = 1*10的4次方 1e+4 1e-4
%g:选择小数或者指数比较短的一种形式进行输出
^ :异或(位运算符),并不是指数
7字符串常量
“hello” “hi” 字符串以‘\0’结尾
标识常量
宏只是一个单纯的替换
宏:#define 宏名 表达式
注意:
1、宏名一般用大写表示,小写也可以,因为要和普通的变量区分开来,所以用大写
2、宏后没有分号
Day3
变量
定义:就意味着要在内存空间中开辟空间
<存储类型> 数据类型 变量名;
存储类型:决定了开辟的空间在内存空间中的哪个分区
数据类型:决定了开辟的内存空间的大小
变量名:开辟的内存空间的名字
局部变量
定义在函数体(任何函数体内)内的变量;
全局变量
定义在函数体外的变量
存储类型
存储类型:auto、static、extern、register
auto:修饰局部变量,修饰的变量存储在栈区
extern:修饰全局变量,修饰的变量存储在静态区
static:既可以修饰局部变量,也可以修饰全局变量,修饰的变量存储在静态区
register:修饰局部变量,存储在寄存器中;
初始化
初始化:在定义变量的时候就进行赋值了
(1)全局变量没有进行初始化时,他的值为0
(2)局部变量没有进行初始化时,他的值为随机值
(定义变量时,尽量给他一个初始值,避免出现随机值)
作用:告诉编译器,该变量已经在其他文件中定义过了
auto:修饰局部变量,修饰的变量存储在栈区
register:修饰局部变量,修饰的变量存储在寄存器中,建议将变量存储在寄存器中,提高运行速度,但是寄存器中的内存空间很小,因此,当用register修饰时,如果寄存器中已满,变量就会存储在栈区
extern:修饰全局变量,修饰的变量存储在静态区
程序可以由多个.c构成,但是只能有一个main函数
Static:即可以修饰全局变量,也可以修饰局部变量
(1)修饰局部变量时,延长局部变量的生命周期,如果局部变量没有初始化,其值为0;如果初始化了,则只能初始化一次;
(2)修饰全局变量时,限制作用域,该变量只能在本文件内使用
生命周期与作用域
生命周期
从开辟空间一直到释放空间
作用域
使用的范围
局部变量:
生命周期:从定义开始,到模块结束(距离它最近的大括号)释放空间
作用域:大括号内
Static修饰的局部变量:
生命周期:从定义开始,到程序结束
作用域:大括号内
全局变量:
生命周期:从定义开始,到程序结束
作用域:整个程序
Static修饰的全局变量:
生命周期:从定义开始,到程序结束
作用域:本文件内
数据类型的转化
强制转化
(int)a
隐式转化
横向箭头:不管有没有进行混合运算,都会进行转换;
纵向箭头:只有进行了混合运算,才会进行转换;
运算符
单算移关与,异或逻条赋
单目运算符、算术运算符、左移、右移、关系运算符、按位与、异或、按位或、逻辑运算符、
条件运算符、赋值
算术运算符
+ - * / % ++ --
关系运算符
> < >= <= == !=
比较两者之间的关系,结果为(真1或者假0)
逻辑运算符
&& || !
&& 表达式1 && 表达式2
&&截断法则:有一个为假,结果就为假;前一个为假,后面就不进行运算
|| 表达式1 || 表达式2
截断法则:有一个为真,结果就为真,前一个为真,后面就不进行运算
sizeof运算符
sizeof:计算所占内存空间的大小:单位:字节
sizeof(数据类型)
sizeof(变量名)
三目运算符
表达式1 ? 表达式2 :表达式3
判断表达式1是否成立,如果成立,就将表达式2的值作为整个表达式的值,否则,就将表达式3的值作为整个表达式的值
逗号运算符
表达式1,表达式2,表达式3,......,表达式n
从左往右,依次去执行每个表达式,最后将表达式n的值作为整个表达式的值
位运算符
& | ~ ^ << >>
按位与(&)
都为1,才为1,有一个为0,就为0
按位或(|)
都为0,才为0,有一个为1,就为1
按位取反(~)
1变0, 0变1
异或(^)
相同为0,不同为1
左移(<<)
Unsigned:高位丢弃,低位补0
Signed:
负数:高位丢弃,低位补0
右移(>>)
Unsigned:正数 低位丢弃,高位补0:
Signed:负数:符号位不变,低位丢弃,高位补1
Day4
输出
printf(“格式控制串”,输出表);
格式控制串:原样输出的内容+格式化符
输出表:输出的内容(格式化符要和输出表一一对应)
整型:
%d:以十进制进行输出
%o:以八进制进行输出
%x、%X:以十六进制进行输出
#:自动在八进制和十六进之前加上前缀
%u:以无符号形式(将最高位看做数据位)进行输出
%hd:short类型
%ld:long类型
%lld:long long 类型
字符型:
%c
浮点型:
%f:float
%lf:double
%e:以指数形式进行打印
%g:选择小数和指数中较短的(合适)一个进行输出
%m.nf:
.n :决定的是输出小数点后n位(有小数点,但是省略n时,输出小数点后0位)
m. :决定所占的域宽,默认右对齐,(m为负数,左对齐)m的值大于数据的实际长度时,补空格,当m的值小于实际长度时,原样输出
输入
Scanf(“格式控制串”,地址表);
格式控制串:原样输入的内容+格式化符
&+变量名://获取该变量的地址
字符输入输出
字符的输入:getchar( ); 返回值:获取到的字符的ascii码值
字符的输出:putchar( ); 需要的参数:字符的ascii码值
三大结构
三大结构:顺序结构、选择结构、循环结构
顺序结构
语句按照一定的先后顺序去执行
选择结构
单分支if结构
先判断表达式是否成立,如果成立,就执行语句。
双分支if结构(if else)
先判断表达式是否成立,如果成立,则执行语句1,否则,执行语句2;
多分支if结构(else if)
从上往下,依次去判断表达式是否成立,如果表达式成立,则执行对应的语句
switch语句
Switch(表达式)
{
Case 标号1:
语句1;
Case 标号2:
语句2;
Case 标号3:
语句3;
。。。。
Case 标号n:
语句n;
default:
语句n+1;
}
注意:
表达式不能为float类型
标号必须为常量
当表达式等于标号时,就冒号后面的语句,直到switch,case语句结束为止,或者遇到break语句结束。
for循环
for(表达式1;表达式2;表达式3)
{
循环体;
}
表达式1:循环的起始条件
表达式2:循环的终止条件
表达式3:循环变量的变化
先执行表达式1,然后执行表达式2,如果表达式2为真,执行循环体,然后执行表达式3;如此反复,当表达式2为假时,结束循环
for循环的嵌套
While
While(表达式)
{
循环体;
}
判断表达式是否成立,如果成立,就执行循环体,反之,跳出循环
do while
do
{
循环体;
}while(表达式);
先去执行循环体,然后判断表达式是否成立,如果成立,就继续去执行循环体内的语句,否则,结束循环
总结区别:
while:先判断,在执行,循环体最少执行0次
do-while:先执行,在判断,循环体至少执行1次
break和continue的区别:(跳出距离自己最近的循环)
break:1、结束switch,case语句 2、跳出循环(结束循环)
continue:跳出循环(跳出本次循环,进入下一次循环)
死循环
1、
while(1)
{
循环体
}
2、
for( ; 1 ; )
{
循环体
}
goto
goto:无条件跳转语句
goto 标号:loop
标号的命名规则:满足标识符的命名规则;