今日思维导图
一,第一个c语言程序
【1】格式
#include <stdio.h>
int main()
{
printf("hello,world!");
return 0;
}
二,gcc编译
c语言是编译型语言,需要编译才能执行.
【1】一步编译
gcc 文件名.c 默认生成一个名为a.out 的可执行文件
gcc hello.c -o hello
【2】分步编译ESc->iso
预处理---编译---汇编---链接
每一步都可以用.c 文件直接执行
i)预处理E i
删除注释,展开头文件,替换宏定义,不会检查语法错误,生成编译文件
gcc -E hello.c -o hello.i
ii)编译S s
会检查语法错误,生成一个汇编文件
gcc -S hello.i -o hello.s
iii)汇编c
生成一个二进制文件
gcc -c hello.s -o hello.o
iv)链接
链接到程序需要的静态库/动态库,生成一个可执行文件,ELF文件类型
gcc hello.o -o hello
(gcc hello.c -o hello可以任意跳,这就算一步编译)
gcc -E hello.c -o hello.i
vim hello.i
gcc -S hello.i -o hello.s
vim hello.s
gcc -c hello.s -o hello.o
vim hello.o
gcc hello.o -o hello
vim hello
三,计算机中的数据存储
数值型,非数值型
【1】计算机中的存储单位
1bit 是最小的存储单位
1 Byte =8 bit 是内存分配的最小单位
1 Kb=1024 Byte
1Mb =1024 Kb
1Gb=1024Mb
1Tb=1024 Gb
【2】进制转换
二进制,十进制,八进制,十六进制,六十进制
计算机中数据的处理都是以二进制的形式进行处理的
0010 0001
基数 | 2 | 8 | 10 | 16 |
数码 | 0 1 | 0-7 | 0-9 | 0-9 A-F |
位权 | 2^0 2^1 | 8^0 8^1 | 10^1 10^0 | 16^0 16^1 |
标识符 | 0b | 0 | 无 | 0x |
i)十进制转二进制
十进制转任意进制,都可以用辗转相除法
ii)二进制转16进制
二进制转16进制,每四位二进制数转一位十六进制数,四位二进制数依次是8421
1111 0110
F6
iii)二进制转八进制
三位二进制数转一位八进制数
一位八进制数转三位二进制数
111 111
7 7
四,基本数据类型
c语言中的数据类型分为:基本数据类型 构造数据类型 void类型
【1】整形
整形数据默认是int 类型
数据类型 | 大小 | 占位符 |
int | 4 byte | %d |
short int | 2 Byte | %d |
long int | 4/8 byte | %ld |
long long int | 8 byte | %ld |
【2】浮点型
浮点型数据默认是double类型
浮点型数据在计算机存储的是一个近似值
浮点型数据遵循IEEE754标准.
float最多可以表示小数点后6位
double最多可以表示小数点后15位
数据类型 | 大小 | 占位符 |
float | 4byte | %f |
double | 8 byte | %lf |
【3】字符型
非数值型数据
在计算机中以ASCII进行存储
数据类型 | 大小 | 占位符 |
char | 1 byte | %c 输出字符 %d 输出字符的ASCII 码 |
sizeof()运算符:求数据的大小
运行结果:
需要记住的ASCII码
'\n':10
‘a':97
'A':65
' ':32
' 0':48
五,常量
在程序运行过程中,不能修改的量.
【1】整形常量
1,2,3,4 ..... %d
【2】浮点型常量
1.0 2,0 7.8
【3】字符型常量
'a', 'b' .... 被单引号包起来的单个字符
【4】字符串常量
''hello"被双引号包起来的一个或多个字符 %s字符串常量占位符
c语言中字符串结束标志,字符串的结尾有一个'\0'
【5】宏定义常量
1.无参宏定义
#define 宏名 宏体
在程序中所有遇到宏名的位置都被替换成宏体
#define N 10
在程序中所有遇到N的位置都被替换
2.带参宏定义
#define 带参宏名 宏体
#define ADD(a,b) a+b
宏定义就是简单定义宏名的过程
=10+2*10+10+2/4=40
#include <stdio.h>
#define S hello //hello不能作为字符串输出,因为没有""
#define STR "hello" //hello可以作为字符串输出,因为有""
#define STR1(n) #n //#把带参宏的参数转成字符串
int main(int argc, const char *argv[])
{
printf("%s\n",STR);
printf("%s\n",STR1(h));
return 0;
}
六,标准的输入输出函数
【1】输出函数printf
printf使用时,需要一个格式符和一个格式符对应类型的数据
printf("占位符/格式符",输出表象); //有一个格式符就要有一个输出表象
printf("%d\n",10) //10就是输出表象 %d 就是10对应的格式符
转义字符:有特殊意义的字符
\n : 换行
\t :制表符 一个tab键的大小 ----4个空格
\b :退格
\r :回车:回退到行首进行输出
\\:输出一个反斜杠
格式符
%d : 整形数据的格式符
%-nd 以n个数据宽度左对齐输出,不够就补空格
%nd :以n个数据宽度右对齐输出 不够就补空格
%ld:长整形数据的格式符
%f:单精度浮点型的格式符,printf默认输出小数点后6位
%mf:指定小数点后的输出位数
%lf:双精度浮点型的格式符
%c:字符型的格式符
%s:字符串的格式符
%#x:输出十六进制,并且带前导符0x,小写x,输出十六进制时对应的字母都是小写的
%#X:输出十六进制,并且带前导符0X,大写X,输出十六进制时对应的字母都是大写的
%%:输出一个百分号