复习:
1、常用的linux命令
ls cd pwd cat head tail more clear rm touch nv cp mkdirwhoami
ifconfig ping grep find sudo man
tar ftp ssh telnet
2.vim文本编辑器
vi是系统自带的文本编辑器,vim是它的增强版
三大模式:正常、插入、行底
切换方式:i、Esc :
正常模式下的操作
光标:gg G n6 n- vim file +n
删除:
x nx dw dd ndd d& d^ dgg
复制:
yy nyy p P
替换:
r cw R
撤销:
u U ctrl+r
进入插入模式:
i\a\I\A\o\O
ctrl+p 自动补全头文件、main
插入模式下:
jj Esc ctrl+c
ctrl+z保存退出
ctrl+p 自动补齐标识符
ctrl+x 保存编译运行
行底模式下:
set nu
set nonu
%s/old/new
!cmd
>n
<n
/key n向下 N向上
w
q
wq x
X
3、C语言简介
美国贝尔实验室,1970-1973年,肯.汤普逊、丹尼斯.里奇
C89 C99 C11 gcc 默认c89 -std-gnu99
------------------------------------------------------------------------------
一、第一个C程序
gcc xxx.c
./a.out
#include <stdio.h>
程序员所编写的代码并不是标准的C代码,需要一段程序把它翻译成标准的C代码,
负责翻译的程序叫做预处理器,翻译的过程叫做预处理,被翻译的代码叫做预处理指令
以#开头的代码都是预处理指令
#include 的功能是把一个头文件导入到当前文件中
#include <>从系统制定的路径去加载头文件
#include ""先从当前路径下加载头文件,如果找不到,再从系统指定的路径下加载头文件
操作系统是通过设置环境变量来指定加载头文件的路径
stdio.h
头文件:以.h结尾,里面存储生的是一些辅助性的代码,绝大部分是函数的声明
源文件:以.c结尾,里面存储的是功能性的代码
C语言标准委员会为C语言以函数的形式提供了一些基础功能,这些函数就被封装到了
libc.so库中
用很多头文件负责对库中的函数进行分类说明,stdio.h就是其中的一个,常用的
有stdlib.h string.h
stdio.h 负责对输入输出功能的函数进行说明
int main(int argc,const char* argv[])
{
printf("hello! world!\n");
return 0;
}
main函数:
C语言,以函数为单位来管理代码,是管理代码的最小单位,一个函数就是一段具有某项
功能的代码段
maim函数是程序的执行入口,有且只有一个
int 是一种数据类型,它表示main函数的执行结果
结果是一个整数
return 功能有两个:1、结束函数的执行 2、返回一个数据给函数的调用者
main函数是由操作系统调用的,它的返回值给操作系统的反应了程勋是怎么样结束的
通常有三种情况:
正数 出现异常 (别人的错误)
0 一切正常
负数 出现错误 (自己的错误)
可以通过 echo $? 命令查看上一个程序的返回值
printf/scanf 是标准库中的函数,负责输入、输出数据,用来调试代码
printf("---------------\n");
转义字符:
键盘上一些按键是没有符号的,只能用一些特殊的字符组合来表示,这些特殊的字符
组合就是转义字符,\n就是期中一个
\n 换行
\b 退格字符 \b \b
\r 回到行首
\t 制表符,用于对齐数据
\a 铃响
\\ 表示一个\
%% 表示一个%
C语言以分号作为一行代码的结果,使用大括号来划分代码区域
for(;;);
{
}
while();
{
}
二、编译器:
负责把人能看得懂的记录了代码的文本文件,翻译成计算器能看懂的二进制文件,
由预处理器、编译器、链接器
gcc是由GNU组织为了编译Linux内核代码而开发的一款免费、开源的编译器,默认
采用c89标准,-std=gnu99可以设置语法标准
常用的参数:
-E 显示预处理的结果
-c 只编译不链接//小写
-o 设置编译结果的名字//小写
-I 指定头文件的加载路径
-S 生成汇编代码
-l 指定要使用的库文件 -lm -lc
-Wall 以更严格的标准来检查代码。
-Werror 把警告当错误处理
三、C代码变成可执行储层序的过程
1、预处理 把源文件翻译成预处理文件
gcc -E code.c 显示预处理的结果
gcc -E code.c -o code.i 生成以.i结尾的预处理文件
2、编译 把预处理文件翻译成汇编文件
gcc -S code.i 生成以.s结尾的汇编文件
3、汇编 把汇编文件翻译成二进制的目标文件
gcc -c code.s 生成以.o结尾的目标文件
4、链接 把若干个文件合并成一个可执行文件
gcc a.o b.o c.o... 默认生成一个a.out 的可执行文件
C语言的文件类型:
.h 头文件
.h.gch 头文件的编译结果,它会被优先使用
.c 源文件
.i 预处理文件
.s 汇编文件
.o 目标文件
.a 静态库文件
.so 共享库文件
四、数据类型
为什么要对数据进行分类:
1、现实社会中的数据本来就是自带类别的属性的
2、对数据进行分类后可以节约存储空间、提高运行效率
存储空间的单位:
Bit 比特 一个二进制位,只能存储0或者1,计算机存储数据的最小单位
Byte 字节 八个二进制位,计算机存储数据的基本单位
Kb 1024字节
Mb 1024Kb
Gb 1024Mb
Tb 1024Gb
Pb 1024Tb
c语言中数据分为两大类:自建(程序员自己设计的:结构、联合、类)和内建(c语
言自带的)
注意:可以使用sizeof运算符计算类型的字节数
整型:
有符号 signed
signed char 1 -128~127
signed short 2 -32768~32767
signed int 4 正负20亿
signed long 4/8
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位有效
time ./a.out 计算程序运行时间
模拟型:
字符型char
字符其实就是符号或图案,内存中存储的是整数,当需要显示成字符时
会根据ASCII码表中对应的关系显示出相应的符号或图案
'\0' 0
'0' 48
'A' 65
'a' 97
布尔型bool
先有了C语言后才有了bool类型,所以C语言中是不可能有真正的布尔类型,
stdbool.h头文件对布尔类型进行了模拟
bool true false
五、变量与常量
什么是变量:程序在运行期间数值可以变化的叫做变量,相当于存储数据的盒子
定义:
类型 变量名;
int num_i;
取名规则:
1、由字母、数字、下划线组成
2、不能以数字开头
3、不能与32个关键字重名 ************作业*****************
4、见名知意(功能、类型、范围.......)
printf scanf bool sizeof
使用:
赋值: num = 100;
参与运算:num * 10;
注意:变量的默认值是随机的,为了安全起见要进行初始化,一般初始化为0
变量的输入、输出
int printf(const char *format,...);
功能:输出数据
format: "用双引号包含的格式信息(提示信息+占位符)"
... : 变量列表
返回值: 输出字符的个数
类型占位符:C语言通过类型占位符的方式来传递变量的类型
%hhd %hd %d %ld %lld 有符号
%hhu %hu %u %lu %llu 有符号
%f %lf %LF
%c
int scanf(const char *format,...);
功能:输入数据
format:"双引号包含的格式信息(占位符)"
... : 变量地址列表 &变量名
返回值:成功输入的变量个数
注意:scanf需要的是变量类型、变量地址
变量地址 = &变量名
练习1:定义各种类型的变量并初始化,使用printf来显示
#include <stdio.h>
int main(int argc,const char* argv[])
{
signed char num_a = 0;
signed short num_b = 1;
signed int num_c = 2;
signed long num_d = 3;
signed long long num_e = 4;
unsigned char num_f = 5;
unsigned short num_g = 6;
unsigned int num_h = 7;
unsigned long num_i = 8;
unsigned long long num_j = 9;
printf("num=%d %d %d %d %d %d %d %d %d %d\n",num_a,num_b,num_c,num_d,num_e,num_f,num_g,num_h,num_i,num_j );
}
练习2:定义各种类型的变量并初始化,使用scanf输入,printf输出