【c语言】复习无止境,day1--linux&c语言类型运算符流程语句篇

Linux系统介绍
BCPL-> newB-> C-> UNIX-> Minix-> Linux-> gcc
Linux管理硬盘的能力非常强大,所以我们看到只有一分区
/ 根目录,全部文件读存储在它下面
bin 存储系统命令文件
media 多媒体目录,u盘、光盘、挂载的目录
home 用户主目录,自动生成同用户名的用户主目录
usr 存储头文件
/ 根目录
… 上一级目录
. 当前目录
~ 用户主目录
注意:Linux的目录结构是呈倒悬树,目录的切换只能上下不能左右

Linux系统命令
常用的命令:
ls 显示当前目录下的文件
-a 显示当前目录所有文件
-l 以长格式显示文件的详细信息
cd 进入一个目录
clear 清理屏幕 Ctrl+l
pwd 显示当前绝对路径
whoami 显示当前用户名

文件相关的命令
touch filename 创建文件
rm filename 删除文件 不经过回收站,谨慎使用
cat/head/tail/more 查看文件
cat 把文件全部内容显示到终端,适合显示少量内容的文件
more 只显示文件的开头,按页查看,回车下一行,空格下一页
head 只显示开头前10行
tail 只显示末尾后10行
cp src dest 复制文件
mv src dest 移动文件 同时具备重命名功能

目录相关的命令
mkdir 创建空目录
rmdir 只能删除空目录
rm -rf 可以删除非空目录
cp -rf 复制非空目录
mv 移动目录

man key 帮助手册
分章节管理
1、系统命令 常见的linux命令,例如ls cd cat pwd shutdown reboot等
2、系统函数 内核提供的系统调用或者函数,例如fork
3、标准库函数 c语言库函数 例如printf之类的

Linux使用小技巧
方向键上下 可以调出历史命令
Ctrl+Alt+t 打开终端
tab 可以快速补全命令、文件名
Ctrl+l 清屏

vim文本编辑器
在终端下使用的纯键盘操作的一款文本编辑器,号称编译器之神,可以升级(二次开发)
基本用法:
进入 vim filemane 文件存在则打开,不存在则创建并打开
一开始是正常模式
输入i进入编辑模式 编写代码
保存退出: 返回正常模式Esc 输入ZZ保存退出

vim的三大模式
正常模式: 一般用于阅读文件、或者使用快捷键快速修改文件
插入模式: 一般用于编辑文件,输入内容
行底模式: 一般用于对vim编译器的配置,或者执行一些高级操作

模式之间切换:
正常 -> i -> 插入
插入 -> Esc -> 正常
正常 -> : -> 行底
行底 -> Esc -> 正常

正常模式的操作:
光标移动:
h j k l
gg 光标回到第一行
G 光标回到最后一行
nG 跳转到第n行
vim filename +n 跳转到第n行打开

删除代码:
dd 删除一行
ndd 删除n行
x 删除一个字符
nx 删除n个字符

复制代码:
yy 复制一行
nyy 复制n行
p 粘贴到当前行的下一行
P 粘贴到当前行的上一行
移动代码:
删除的内容还在粘贴板,使用p\P可以移动删除的代码到想要的位置

撤销操作:
u 撤销上一次操作
Ctrl+r 取消上一次的撤销操作

进入插入模式:
i 在当前光标处前面进入插入模式
a 在当前光标处后面进入插入模式
I 在行首进入插入模式
A 在行尾进入插入模式
o 在当前光标的下一行进入插入模式
O 在当前光标的上一行进入插入模式

Ctrl+p 自动补全

行底模式:
set nonu/nu 设置行号/取消行号 只有当次有效
q 退出
w 保存
wq 保存退出
/key 查询关键词key n向下查 N向上查
%s/old/new 把old替换为new
<n 向左缩进n行
>n 向右缩进n行

对vim的学习建议:
1、适可而止
2、适应时间两周
3、vimtutor

C语言简介:
C语言诞生于1970~1973年,丹尼斯.里奇和肯.汤普逊编写完成的,归属于美国的贝尔实验室
C语言专门为了编写操作系统而诞生的,因此天生适合对硬件编程,也非常适合数据结构和算法的实现,以速度快而著称
由于C语言出现时间早,有很多缺陷,也没想到普通人也能用C语言,因此虽然存在陷阱,但是一些前辈帮你总结好了经验<C语言的陷阱与缺陷>
虽然C语言自由度很高,但是也意味着危险,自由源于自律

C89 语法标准,gcc默认的语法标准
C99 是对C语言的扩展和增强 gcc code.c -std=gnu99
C11 全新升级

C语言的第一个程序
#include <stdio.h>
程序员所写的代码并不是标准C代码,需要一段程序把它翻译成标准C代码,负责翻译程序叫做预处理器,翻译的过程叫做预处理,被翻译的语句叫做预处理指令,以#开头的都是预处理指令
#include 把头文件导入到当前文件
#include <> 从系统指定目录下查找头文件并导入
#include “” 先从当前目录下查找,如果找不到再从系统指定目录下查找并导入
stdio.h 负责对输入输出的函数进行说明

.c 源文件 记录的都是功能性代码
.h 头文件 绝大多数记录的是函数的说明

stdlib.h string.h

int main()
{
printf(“Hello World!\n”);
return 0;
}

main函数:
函数是C语言管理代码的基本单位,一个函数就是一个功能的实现,就是一个代码段
main函数是程序的入口,也是唯一出口,有且只有一个

int 是一种数据类型,表示函数的返回值类型,是一个整数
return 作用:
1、返回一个返回值给调用者
2、结束函数的执行
main函数的调用者是操作系统,它的返回值返回给操作系统,反映了程序的是怎么样结束的:
正数 出现异常
0 正常结束
负数 出现错误

printf/scanf 属于C标准库中的函数,输入、输出数据
转义字符:
键盘上一些没有的符号,通过一些特殊的字符来表示
\n 换行符
\b 退一个字符
\r 回到行首
\a 铃响
\t 制表符
%% 一个%
\\ 一个\

C语言以分号作为一行代码的结束,使用大括号来划分代码

gcc编译器
负责把人能看懂的代码的文本文件翻译成计算机能看懂的二进制文件。
由预处理器、编译器、链接器组成
gcc是由GNU组织为了编译Linux内核而开发的一款免费的编译器
常用参数:
-std=gnu99 设置编译语法标准 -std=c99
-E 对文件只进行预处理操作,并显示结果
-c 只编译不链接
-o 指定输出的结果名
-S 对文件进行汇编操作
-I 指定头文件的查找路径
-l 使用指定的代码库 -lm math.h
-Wall 尽可能多地产生警告
-Werror 把警告当做错误处理

C语言代码变成可执行程序的过程
预处理: 把源文件翻译成预处理文件
gcc -E code.c
把源文件预处理后的结果显示屏幕上
gcc -E code.c -o code.i ->code.i
生成以.i结尾的预处理文件
编译: 把预处理文件翻译成汇编文件
gcc -S code.i ->code.s
生成以.s结尾的汇编文件
汇编: 把汇编文件翻译成目标文件 (二进制)
gcc -c code.s ->code.o
生成以.o结尾的目标文件
链接: 把若干个目标文件合并成一个可执行文件 a.out
gcc a.o b.o c.o… ->a.out
生成a.out可执行文件

C文件类型:
.c 源文件
.h 头文件
.h.gch 头文件的编译结果
.i 预处理文件
.s 汇编文件
.o 目标文件
.a 静态库文件
.so 共享库文件

存储空间的单位:
Bit 比特 存储一个二进制位,只能存0或1,计算机存储数据的最小单位
Byte 字节 八个二进制位,计算机存储数据的基本单位
Kb 1Kb=1024Byte
Mb 1Mb=1024Kb
Gb =1024Mb
Tb =1024Gb
Pb =1024Tb

数据类型
为什么要对数据进行分类?
1、在自然界中数据本来就是分类的
2、对数据进行分类可以节约空间,提高运行效率

C语言中把数据分为自建(程序员自己设计的类型,例如结构、联合、类)、内建(C语言自带的)
整型:
signed 有符号
signed char 1 -128~127
signed short 2 -32768~32767
signed int 4 正负20亿
signed long 4/8 正负20亿/以9开头正负19位数
signed long long 8 以9开头19位数

注意:signed 不加代表了加
unsigned 无符号
unsigned char 1 0~255
unsigned short 2 0~65535
unsigned int 4 0~40亿
unsigned long 4/8
unsigned long long 8 0~以1开头的20位整数

注意:
由于定义无符号的数据比较麻烦,标准库中有头文件<stdint.h>把无符号的类型进行了重定义
uint8_t
uint16_t
uint32_t
uint64_t

int8_t
int16_t
int32_t
int64_t

浮点型
float 4
double 8
long double 12/16
小数点后6位有效

模拟型
char 字符型:%c %hhd
所谓的字符就是符号或图案,在内存中是以整数形式存储的,需要显示字符时,会根据ASCII码表中的对应关系来显示出对应的符号或图案
0 ‘\0’ 特殊字符
48 ‘0’
65 ‘A’
97 ‘a’

bool 布尔型:
先有的C语言才发明的bool类型,所以C语言没有真正的布尔类型,必须加上头文件<stdbool.h>才能使用
bool true 1 false 0

sizeof(unsigned int) 计算类型、变量所占的字节数

变量和常量:
什么是变量:
相当于存储数据的盒子,在程序运行期间数值可以发生改变
定义:
类型 变量名;
int num;
变量名的取名规则:
1、由字母、数字、下划线组成
2、不能以数字开头
3、不能与32个关键字重名
4、见名知意(功能、类型、范围)
注意:变量的值是随机的,为了安全起见,一般初始化为0
int num = 0;

使用:
赋值: num = 10;
参与运算 num*10

变量的输入输出:
int printf(const char *format, …);
功能:输出数据
format:“双引号包含的提示信息+占位符”
…: 变量列表
返回值: 输出字符的个数

int scanf(const char *format, …);
功能:输入数据
format:“双引号包含的占位符”
…: 变量地址列表 变量的地址 = &变量名
返回值:成功输入的数据的个数

类型占位符:
%hhd %hd %d %ld %lld
%hhu %hu %u %lu %llu
%f %lf %LF
%c

什么是常量:
程序运行期间数值不能发生改变的叫常量
100 默认int
100l long
100ll long long
100u unsigned int
100lu unsigned long
100llu

3.14 默认double
3.14f float

格式化的输出:
%nd 显示n个字符宽度,不足则补空格,右对齐
%-nd 显示n个字符宽度,不足则补空格,左对齐
%0nd 显示n个字符宽度,不足则补0,右对齐
%n.mf 显示n个字符宽度,不足补空格,m表示小数点后的位数
%g 不显示小数点后多余的0

运算符:
自变运算符 ++/-- 使变量的值自动加1或减1
前自变:立即有效
后自变:下一句语句才有效
注意:不要在一行代码内多次使用自变运算符

算术运算符: + - * / %
整除/整数 结果不能有小数点 10/3 3
/ % 除数不能为0,否则产生 浮点数例外,核心已转储的报错信息
一旦除零,程序直接死掉

关系运算符: > < >= <= == !=
运行后,得到的是比较的结果 1或者0,比较的结果是可以继续参与运算
int n=-100;
10<n<100; C语言中永远为真,规则跟数学中的不一样
if(100 == n)
{

}

逻辑运算符: && || !
会把运算对象转换为逻辑值,0转换为假,非0转换真
A && B 一假即假
A || B 一真即真
!A 求反
&& || 具有短路特性 当左边值可以确定整个表达式的结果时,右边的不再进行运算

三目运算符:运算对象有三个部分
A ? B : C; 判断A的值如果为真则执行B,如果为假则执行C
该语句不能使用流程控制语句,因为它必须要有运算的结果

赋值运算符 = += -= *= /= …
a += b; a = a + b;
a -= b; a = a - b;

位运算符:& | ~ ^ << >>

类型转换
自动类型转换:
只有相同的类型的数据才能进行运算,不同类型的数据需要转换成相同类型才能运算
转换规则:以不丢失数据为基础,适当地牺牲一些空间
1、字节少向字节多的转
2、有符号向无符号转
3、整型向浮点型转

强制类型转换:
(新类型)数据 有丢失数据的风险,谨慎使用

分支语句:
if(表达式) //单分支
{
表达式为真,则执行此处代码
}

if(表达式) //双分支
{
表达式为真,则执行此处代码
}
else
{
表达式为真,则执行此处代码
}

if(表达式1) //多分支
{
表达式1为真,则执行此处代码
}
else if(表达式2)
{
否则,表达式2为真,则执行此处代码
}
else
{
表达式1和2都为假时,则执行此处代码
}

switch开关语句:
switch(n) //n可以是数值、变量、表达式,运算结果必须是整数
{
case val://val必须是整常量,如果val等于n,则打开开关,执行后面语句

break;// break 可以关闭开关,如果每个语句后面都加上break
// switch语句不能与continue配合使用
default: // 当所有case都没有匹配成功时则打开此处开关,无论放在哪里,都会最后执行
}
for循环语句
循环就是让一段代码反复执行,达到你想要的效果
for是一种比较灵活且比较危险(与其他循环相比)的循环
一般使用一个变量来引导for循环的运行,这个变量叫做循环变量 i

for([1];[2];[3])
{
[4];
}
1、给循环变量赋值,C99标准才可以在for内定义循环变量 -std=gnu99
for内定义的循环变量,只能在for循环内使用
2、判断循环变量是否到达边界,判断为真时执行4,为假结束循环
4、被反复执行的代码,也叫做循环体
3、改变循环变量,防止出现死循环,一般是对循环变量自加或自减
1 2 4 3 2 4 3 2…

大括号:
1、建议上下对齐``
2、循环体如果只有一行代码,大括号可以省略
但是不利于代码的扩展,一般的商业代码要求大括号不能省略

for的多种写法:
for(;😉
{
//死循环
}

int i=0;
for(; i<10; i++)
{

}

for(int i=0; i<10;)
{
printf("—\n");
i++;
}

while语句
while(条件) //当条件为真时,执行循环体,否则结束循环
{
//循环体
}

while相当于for循环的精简版本 for(;条件;)
for循环负责明确知道循环次数的问题
while负责解决只知道结束条件而不确定循环次数的问题

do while
do{
//循环体
}while(条件); 注意:分号不能少

先执行循环体,在判断循环条件,该循环至少执行一次
适合先干活,再判断的特殊情况

循环嵌套
循环语句中包含循环语句
外层循环执行一次,内存循环执行n次

跳转语句
goto 可以在函数内任意跳转
标签名:
goto 标签名;

goto可能会破坏已经设计好的分支或循环语句,因此绝大多数公司禁止使用
在驱动编程时特别适合处理异常

break
1、在switch语句中,可以关闭执行开关
2、在循环语句中,可以跳出一层循环

continue
结束本次循环,直接进入下一次循环

return
1、返回一个数据给函数的调用者
2、结束函数的执行,跳转到调用该函数的位置

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值