虚拟机,乌班图
虚拟机:虚拟出来一台pc机
乌班图:linuxOS
为什么要使用linuxOS:为什么不直接去使用devc++;(以前学过的)
嵌入式:以计算机技术为基础,软硬件可裁剪的(用软件来控制硬件)
裁剪:修改
为什么需要裁剪:根据用户的需要
软件裁剪用什么:linuxOS
windows:倒置的森林,有盘符之分
linux:倒置的树,根目录(/):顶层目录;家目录(~)(/home/linux64)
$:普通用户;#:超级用户;sudo su:切换为超级用户;linux之下一切皆文件
格式:命令 【选项】 【参数】
打开终端:
Tab:自动补全
Clear:清屏
Ctrl+l: 清屏
Pwd:显示当前所在的绝对路径
绝对路径:从根(/)目录开始的路径
相对路径:相当于当前的路径
ls :显示当前路径下的文件
根据颜色区分:
蓝色:文件夹
白色:文件
绿色:可执行文件
ls 路径:显示指定路径下的文件
ls -l:显示当前路径下文件以及他们的属性
ls -a:显示当前路径下的所有文件(包含隐藏文件)
隐藏文件:以.开头的文件
. :当前目录
.. :上一级目录
ls -la:显示所有文件的属性
ls -la 路径:显示指定路径下的所有文件的属性
touch 文件名/文件路径:创建文件,一次可以创建多个
rm 文件名/文件路径: 删除文件,一次可以删除多个
mkdir 文件夹名/文件夹路径:创建文件夹,一次可以创建多个(注意路径)
rmdir 文件夹名/文件夹路径:删除空文件夹,一次可以删除多个
rm -rf : 删除空、非空文件夹
rm -ri: 删除文件夹并且会询问你是否要删除
cd :回到家目录
cd .. :进入上一级目录
cd -:进入上一次操作的路径之下
拷贝:cp 源(文件/-r文件夹) 目标文件中
mv有两个作用:
移动:mv 文件/文件夹 目标文件
(后面的文件如果存在,就是移动的作用,如果不存在,就是改名的作用)
重命名: mv 原文件名 新文件名
底行模式下:
w:保存
q:退出
wq:保存并退出
q!: 强制退出
wq!:保存并强制退出
Set nu: 显示行号
Set nonu: 取消显示行号
命令行模式下:
yy:复制
dd:剪切(剪切后不粘贴则为删除))
P : 粘贴
nyy:复制n行
ndd: 删除n行
u:撤销
Ctrl+r:反撤销
1.gcc hello.c
默认生成的可执行文件为a.out
怎么去执行可执行文件:./a.out
2.gcc hello.c -o hello
生成可执行文件为指定名字
执行./hello
组成:
输入输出设备(键盘,鼠标)
CPU处理器(控制器、运算器、寄存器)
存储器
程序
存储器:
内存:读写速度快、容量较小,掉电数据丢失
外存:读写速度慢,容量较大,掉电数据不会丢失
寄存器(cpu内部的存储器):容量很小,但是读写速度非常快
程序设计步骤:vim(编辑)->gcc(编译)->./a.out(执行)
ASCII码(十进制):规定每个字符都以一格8进制数进行表示
‘A’: 65 ‘a’ : 97 ‘0’: 48 '\n’:10
常用的进制类型:
十进制 :->二进制:除2倒取余
二进制:->十进制:对用数字乘以进制位数的次幂
八进制(0):->二进制:每3位二进制数可以表示一位八进制数
十六进制(0x)->二进制:每3位二进制数可以表示一位八进制数
32个关键字(系统预选定义,有特殊含义,不可重新定义):
数据类型(10):char、short、int、long、float、double、struct、union、enum、void
控制语句(11):if、else、while、switch、case、default、break、continue、for、do、goto
存储类型(4):auto、static、extern、register
其他(7):
return:返回函数
const:只读
signed:有符号数
unsigned:无符号数
sizeof:求所占内存空间的大小(sizeof(数据类型)、sizeof(变量名))
typedef:给已有的数据类型起别名
volatile:防止编译器优化
标识符:程序员自己定义
格式:【存储类型】 数据类型 变量名
eg:auto int a;
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 unsignde
值域范围:
char(1byte == 8bit)
Unsigned : 0000 0000 ------------1111 1111 (0-255)
Signed: 1000 0000 -----------0111 1111 (-128~127)
eg:
Unsigned char c = 260;(超范围:转圈去计算他的值)
Printf(“%d\n”,c); // 4
Signed char a = 130;
Printf(“%d\n”,a);//-126
值域范围:
int(4byte == 32bit)
Unsigned :(0至2^32-1)
0000 0000 0000 0000 0000 0000 0000 0000 --- 1111 1111 1111 1111 1111 1111 1111 1111
Signed:(-2^31至2^31-1)
1000 0000 0000 0000 0000 0000 0000 0000 --- 0111 1111 1111 1111 1111 1111 1111 1111
Float:(4字节)单精度浮点数:准确的表示6-7位有效数字(%f)
Double:(8字节)双精度浮点数:准确的表示15-16位有效数字(%lf)
%f和%lf默认输出小数点后6位
三、转义字符,变量,常量及数据类型转换
程序运行期间,其数值不能也不会被改变的量
'a' 'A'
二进制 八进制 十进制 十六进制 无符号 长整型
小数:1.45 0.00001 10000(浮点型常量包含整形常量)
指数形式:1e-4 1e+4
%g:选择小数或者指数较短的一种进行输出(合适的一种)
(error//1*10^4)
“hello” “hi”
注意:字符串‘\0’作为结束符
#define 宏名 表达式
注:红名大写;
易错:宏只是一个单纯的替换不进行计算
<存储类型> 数据类型 变量名;
存储类型:决定开辟的空间在内存中的那个分区(定义时无存储类型,默认为auto);
数据类型:决定了开辟的这片内存空间的大小;
变量名:开辟的空间的名字
初始化:定义时已经赋值
局部变量:定义在函数体(任何函数体)内,未初始化,值为随机数
全局变量:定义在函数体外的变量,未初始化,值为0
auto: 只能用来修饰局部变量,修饰的变量存储在栈区
extern:只能用来修饰全局变量,修饰的变量存储在静态区
告诉编译器,该变量已经在其他文件定义过了(调用)
static:既可以修饰全局变量,也可以修饰局部变量,修饰的变量存储在静态区
1.修饰全局变量,限制作用域,仅在本文件内使用
2.修饰局部变量,延长局部生命周期,已初始化,不可重新定义;未初始化。默认值为0
register:只能修饰局部变量,修饰的变量存储在寄存器中,若寄存器已满则存放在栈区
局部变量:
生命周期:从定义开始,到模块(大括号)结束
作用域:大括号内
Static修饰的局部变量:
生命周期:从定义开始,到程序结束
作用域:大括号内
全局变量:
生命周期:从定义开始,到程序结束
作用域:整个程序
Static修饰的全局变量:
生命周期:从定义开始,到程序结束
作用域:本文件内
float a=3.14;
int b=0;
b=(int)a;//b=3
横向:没有混合运算也会进行转换
纵向:在进行混合运算时才会进行转换
易错:有符号负数转化为无符号数
unsigned int a=2;
int b=-10;
if(a+b>0)//在计算机中将有符号计算结果-8隐式转换为无符号数
{
printf("666");
}
else
{
printf("888")
}
单算移关与,异或逻条赋(单目运算符,算术运算符,左移,右移,关系运算符,按位与,异或,按位或,逻辑运算符,条件运算符,赋值运算符)
> < >= <= == !=(比较结果为布尔值)
易错:常量写在等号左边(如果判断相等时少写了一个=,会报错)
+ - * / % (不能用于浮点数) ++ --
易错:后置++--,在执行一步操作后执行自加或自减(易错点:1.三目运算赋【d=a>b?b++:c++】2.逗号运算符:b=(a++,b+1,a+b)
&& || !
注:阶段法则:&& 表达式1为假,结果为假,不执行表达式2
||表达式1为真,结果为真,不执行表达式2
4.4sizeof运算符
sizeof(变量名或数据类型)
表达式1?表达式2:表达式3
注意:
判断表达式1,是否成立,如果成立,就将表达式2的值作为整个表达式的值,否则,就将表达式3的值作为整个表达式的值
易错:必须依次计算,以防止前面的表达式改变了表达式n中的变量的值!
& | ~ << >> ^
用途:&~ 000111000(3-5位清零) |0000111000(3-5位置1)
有符号数:符号位不变,左移都补0,正数右移补0,负数右移补1
无符号数:都补0
Printf(“格式控制串”,输出表);
格式控制串:原样输出的内容+格式化符(:%c,%d,%f ,%lf)
输出表:输出的内容
int a = 10;
printf(“a = %d”,a);
整型:
%d:以整型形式进行输出
%o: 以八进制形式进行输出
%x:以十六进制形式进行输出(a-f)
#:自动在八进制和十六进制前加上前缀
%X:以十六进制的形式进行输出(A-F)
%u:以无符号整型进行输出
%hd:以short类型,进行输出
%ld:long类型
字符型:
%c
浮点型:
%f:float类型
%lf:double类型
%g:选择小数/指数较短的一种进行输出
%e:以指数形式进行输出
%.nf:保留小数点后n位进行输出
%m.nf
注:m:指定我们输出的域宽:当m大于0时,默认右对齐,m小于0,左对齐当m的值大于数据的实际长度时,补空格,m小于数据的实际长度,原样输出!
Scanf(“格式控制串”,地址表);
格式控制串:原样输入的内容+格式化符
地址表:&+变量名
注:
getchar()
putchar()
语句按照一定先后顺序去执行
if(表达式1)
{
语句;
}
先判断表达式的值,如果表达式为真,就执行语句
if(表达式1)
{
语句1;
}
else
{
语句2;
}
先判断表达式的值是否成立,如果成立,就执行语句1,否则,执行语句2
eg:输入一个年份,判断该年是闰年还是平年
#include
void main()
{
int year;
printf("请输入一个年份\n" );
scanf( " %d" ,&year);
if (year%4==0&&year%100!=||lyear%400==0)
{
printf( "%d年是闰年\n " , year);
}
else{
printf("%d年是平年\n" ,year);
}
If(表达式1)
{
语句1;
}
else if(表达式2)
{
语句2;
}
Else if(表达式3)
{
语句3;
}
、、、、、
Else if(表达式n)
{
语句n;
}
else
{
语句n+1;
}
从上往下,依次判断每个表达式的值,如果表达式成立,则执行对应的语句
Switch(表达式)
{
Case 标号1:
语句1;
Case 标号2:
语句2;
Case 标号3:
语句3;
。。。。
Case 标号n:
语句n;
default:
语句n+1;
}
注意:1.表达式不能为类型;2.标号必须为常量.3.当标号==表达式,执行标号毫米那的语句。4.跳出循环:(1)遇到break(2)执行完标号后面的语句
1.只有当所有case都不匹配时才会进入default语句
2.当找到一个匹配(无论是case还是default)后,会进入下面的case语句,直到找到break才会跳出switch。
for(表达式1;表达式2;表达式3)
{
循环体;
}
表达式1:循环的初始条件
表达式2:循环的终止条件
表达式3:循环变量的变化
先执行表达式1,在执行表达式2,如果表达式2为真,执行循环体,然后执行表达式3,去判断表达式2是否成立,如果成立则,继续执行循环体,否则,跳出。
注:表达式1,3均可省略,但要做相应补充 ,表达式2省略后进入死循环
(1)while... 先判断再执行
While(表达式) //循环的终止条件
{
循环体;
}
(2)do...while 先执行再判断
do
{
循环体
}while(表达式);
无条件跳转语句
eg:求和1-100
#include
{
int main(){
int sum = 0;
loop:
if(i <= 100)
{
sum+=i;
goto loop;
}
printf( "i = %d\n",i);
printf( "sum = %d\n " ,sum);
return 0;
}