C语言阶段性总结1

一、前言

1.1编译环节介绍

虚拟机,乌班图

虚拟机:虚拟出来一台pc机

乌班图:linuxOS

为什么要使用linuxOS:为什么不直接去使用devc++;(以前学过的)

嵌入式:以计算机技术为基础,软硬件可裁剪的(用软件来控制硬件)

裁剪:修改

为什么需要裁剪:根据用户的需要

软件裁剪用什么:linuxOS

1.2目录结构

windows:倒置的森林,有盘符之分

linux:倒置的树,根目录(/):顶层目录;家目录(~)(/home/linux64)

C语言阶段性总结1_第1张图片

$:普通用户;#:超级用户;sudo su:切换为超级用户;linux之下一切皆文件 

C语言阶段性总结1_第2张图片

1.3linux常用命令

格式:命令 【选项】 【参数】

打开终端:

  1. 点击终端,打开
  2. Ctrl+alt+t:打开默认家目录路径的终端
  3. ctrl+shift+n:打开一个和当前终端路径相同的终端

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 原文件名  新文件名

1.4vim编辑器

C语言阶段性总结1_第3张图片

底行模式下:

w:保存

q:退出

wq:保存并退出

q!: 强制退出

wq!:保存并强制退出

Set nu: 显示行号

Set nonu: 取消显示行号

命令行模式下:

yy:复制

dd:剪切(剪切后不粘贴则为删除))

P : 粘贴

nyy:复制n行

ndd: 删除n行

u:撤销

Ctrl+r:反撤销

5.gcc编译器(编译为计算机可识别的二进制文件)

1.gcc  hello.c

默认生成的可执行文件为a.out

怎么去执行可执行文件:./a.out

2.gcc  hello.c  -o  hello

生成可执行文件为指定名字

执行./hello

二、计算机的组成、进制转换及数据类型

2.1计算机组成

组成:

输入输出设备(键盘,鼠标)

CPU处理器(控制器、运算器、寄存器)

存储器

程序

存储器:

内存:读写速度快、容量较小,掉电数据丢失

外存:读写速度慢,容量较大,掉电数据不会丢失

寄存器(cpu内部的存储器):容量很小,但是读写速度非常快

程序设计步骤:vim(编辑)->gcc(编译)->./a.out(执行)

2.2进制转换

2.2.1非数值类型转换

ASCII码(十进制):规定每个字符都以一格8进制数进行表示

‘A’:  65      ‘a’ :  97      ‘0’: 48   '\n’:10

2.2.2数值类型转换

常用的进制类型:

十进制 :->二进制:除2倒取余

二进制:->十进制:对用数字乘以进制位数的次幂

 八进制(0):->二进制:每3位二进制数可以表示一位八进制数

十六进制(0x)->二进制:每3位二进制数可以表示一位八进制数

2.3基本数据类型

32个关键字(系统预选定义,有特殊含义,不可重新定义):

数据类型(10)char、short、int、long、float、double、struct、union、enum、void

控制语句(11):if、else、while、switch、case、default、breakcontinue、for、do、goto

存储类型(4):autostatic、extern、register

其他(7):

return:返回函数

const:只读

signed:有符号数

unsigned:无符号数

sizeof:求所占内存空间的大小(sizeof(数据类型)、sizeof(变量名))

typedef:给已有的数据类型起别名

volatile:防止编译器优化

标识符:程序员自己定义

格式:【存储类型】 数据类型 变量名

eg:auto int a;

2.3.1基本数据类型

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字节

注:不同的数据类型所占内存空间不同,是为了让我们能合理的分配内存空间。

2.3.2有符号数和无符号数(默认为有符号数)

计算机中数值数据以二进制补码进行存储(易错:在计算式注意数据类型位数用补码进行计算)

signed  unsignde 

2.3.3字符型

值域范围:

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

2.3.4整型家族

值域范围:

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

2.3.5浮点型家族

Float:(4字节)单精度浮点数:准确的表示6-7位有效数字(%f)

Double:(8字节)双精度浮点数:准确的表示15-16位有效数字(%lf)

%f和%lf默认输出小数点后6位

三、转义字符,变量,常量及数据类型转换

3.1转义字符

C语言阶段性总结1_第4张图片

3.2常量

 程序运行期间,其数值不能也不会被改变的量

3.2.1字符型常量

'a' 'A'

3.2.2整形常量

二进制  八进制  十进制 十六进制  无符号  长整型  

3.2.3浮点型常量

小数:1.45   0.00001  10000(浮点型常量包含整形常量)

指数形式:1e-4   1e+4

%g:选择小数或者指数较短的一种进行输出(合适的一种)

(error//1*10^4)

3.2.4字符串常量

“hello” “hi”

注意:字符串‘\0’作为结束符

3.2.5宏常量

#define 宏名 表达式

注:红名大写;

易错:宏只是一个单纯的替换不进行计算

3.3变量

 定义:意味着要开辟内存空间C语言阶段性总结1_第5张图片

<存储类型数据类型  变量名;

存储类型:决定开辟的空间在内存中的那个分区(定义时无存储类型,默认为auto);

数据类型:决定了开辟的这片内存空间的大小;

变量名:开辟的空间的名字

初始化:定义时已经赋值

3.3.1局部变量和全局变量

局部变量:定义在函数体(任何函数体)内,未初始化,值为随机数

全局变量:定义在函数体外的变量,未初始化,值为0

3.3.2存储类型

auto: 只能用来修饰局部变量,修饰的变量存储在栈区

extern:只能用来修饰全局变量,修饰的变量存储在静态区

                告诉编译器,该变量已经在其他文件定义过了(调用)

static:既可以修饰全局变量,也可以修饰局部变量,修饰的变量存储在静态区

                1.修饰全局变量,限制作用域,仅在本文件内使用

                2.修饰局部变量,延长局部生命周期,已初始化,不可重新定义;未初始化。默认值为0

register:只能修饰局部变量,修饰的变量存储在寄存器中,若寄存器已满则存放在栈区

3.3.3生命周期(开辟和释放的时间)和作用域(用用范围)

局部变量:

        生命周期:从定义开始,到模块(大括号)结束

        作用域:大括号内

Static修饰的局部变量:

                生命周期:从定义开始,到程序结束

                作用域:大括号内

全局变量:

                生命周期:从定义开始,到程序结束

                作用域:整个程序

Static修饰的全局变量:

                生命周期:从定义开始,到程序结束

                作用域:本文件内

3.4数据类型转换及输入输出函数

3.4.1强制类型转换(自己转)

float a=3.14;
int b=0;
b=(int)a;//b=3

3.4.2隐式类型转换(编译器转)

C语言阶段性总结1_第6张图片

 横向:没有混合运算也会进行转换

纵向:在进行混合运算时才会进行转换

易错:有符号负数转化为无符号数

unsigned int a=2;
int b=-10;
if(a+b>0)//在计算机中将有符号计算结果-8隐式转换为无符号数
{
    printf("666");
}
else
{
    printf("888")
}

四、运算符

单算移关与,异或逻条赋(单目运算符,算术运算符,左移,右移,关系运算符,按位与,异或,按位或,逻辑运算符,条件运算符,赋值运算符)

4.1单目运算符

>  <  >=  <=  ==  !=(比较结果为布尔值)

易错:常量写在等号左边(如果判断相等时少写了一个=,会报错)

4.2算术运算符

+  -  *  /  % (不能用于浮点数) ++  --

易错:后置++--,在执行一步操作后执行自加或自减(易错点:1.三目运算赋【d=a>b?b++:c++】2.逗号运算符:b=(a++,b+1,a+b)

4.3逻辑运算符

&&  ||  !

注:阶段法则:&& 表达式1为假,结果为假,不执行表达式2

                          ||表达式1为真,结果为真,不执行表达式2

4.4sizeof运算符

sizeof(变量名或数据类型)

4.5三目运算符

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

注意:

判断表达式1,是否成立,如果成立,就将表达式2的值作为整个表达式的值,否则,就将表达式3的值作为整个表达式的值

易错:必须依次计算,以防止前面的表达式改变了表达式n中的变量的值!

4.7位运算符

&  |  ~  <<  >>  ^

用途:&~ 000111000(3-5位清零)   |0000111000(3-5位置1)

4.8左移、右移

有符号数:符号位不变,左移都补0,正数右移补0,负数右移补1

无符号数:都补0

4.9输入输出函数

4.9.1输出函数

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小于数据的实际长度,原样输出!

4.9.2输入函数(不要加多余的修饰语)

Scanf(“格式控制串”,地址表);

格式控制串:原样输入的内容+格式化符

地址表:&+变量名

注:

  1. 如果输入“%d%d”时,要给多个变量进行赋值,在格式控制串中,没有多余的修饰语时,那么输入以空格,回车,tab键作为第一个变量结束的标志
  2. 全部输入结束,必须以回车作为结束符
  3. 如果以“%c%c”输入多个字符时,不能有空格,回车,tab键,因为空格,回车,tab键也是一个字符(在%c%c中间加上空格,或者中间加上%*nc【吃掉n个字符】

4.9.3字符输入输出函数

getchar()

putchar()

五、三大结构

5.1顺序结构

语句按照一定先后顺序去执行

5.2选择结构

5.2.1单分支

if(表达式1)

{

    语句;

}

先判断表达式的值,如果表达式为真,就执行语句

5.2.2双分支if选择结构

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);
    }

5.2.3 多分支if选择结构

If(表达式1)

{

语句1;

}

else if(表达式2)

{

语句2;

}

Else if(表达式3)

{

语句3;

}

、、、、、

Else if(表达式n)

{

语句n;

}

else

{

语句n+1;

}

从上往下,依次判断每个表达式的值,如果表达式成立,则执行对应的语句

5.2.4 switch语句

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。

5.3循环语句

5.3.1for循环

for(表达式1;表达式2;表达式3)

{

循环体;

}

表达式1:循环的初始条件

表达式2:循环的终止条件

表达式3:循环变量的变化

先执行表达式1,在执行表达式2,如果表达式2为真,执行循环体,然后执行表达式3,去判断表达式2是否成立,如果成立则,继续执行循环体,否则,跳出。

C语言阶段性总结1_第7张图片

注:表达式1,3均可省略,但要做相应补充 ,表达式2省略后进入死循环

5.3.2while语句

(1)while...  先判断再执行

        While(表达式)  //循环的终止条件

        {

        循环体;

        }

(2)do...while  先执行再判断

        do

        {

        循环体

        }while(表达式);

5.3.3goto语句 

无条件跳转语句

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;
}

你可能感兴趣的:(linux,c语言)