c语言学习笔记

编译器

负责把人能看懂的记录着代码的文件,翻译成计算机能看的懂的二进制文件,由预处理器、编译器、连接器组成

gcc是由GNU社区为了编译Linux内核代码而开发的一款免费的编译器

gcc常用的编译参数(一个指令可以使用多个参数,空格隔开 再-xx):

-E 只显示预处理结果到终端

-std=gnu99  设置c99语法标准

-c   只编译不链接

-o   指定编译结果的名字(如果没有还能生成文件)   -o name = -oname

例如:(其他生成结果的都可,在编译器后就可  例:gcc -o xxx xxx.c)

-S   生成汇编代码

-I(大写i)  指定头文件的加载路径 -I 加载路径

-Wall   尽可能多地产生警告

-Werror   把警告当错误处理

-l    指定要加载的代码库 例:-lm 使用数学库

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语言的文件类型

.c   源文件

.h   头文件

.h.gch    头文件的编译结果文件,它会被优先使用

.i    预处理文件

.s   汇编文件

.o    目标文件

.a    静态库文件

.so   共享库文件

存储空间的单位

Bit   比特    一个二进制位,只能存储0或者1,计算机中存储数据的最小单位

Byte   字节   八个二进制位,计算机存储器描述存储容量的基本单位

KB   1024字节

MB   1024KB

GB    1024MB

TB    1024GB

PB    1024TB

数据类型

为什么要对数据分类?

  1. 现实生活中的数据本身就自带类别属性
  2. 对数据进行分类可以节约存储空间、提高运行速度

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位整数

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位整数

注意:由于定义无符号整形时比较麻烦,c标准库把这些类型重定义成一些新的简单的类型名:

需要导入头文件<stdint.h>

uint8_t  uint16_t  uint32_t  uint64_t 对应无符号

int8_t .... int64_t  对应有符号

浮点型:  有小数部分的类型

float  单精度  4字节

double   双精度  8字节

long double    12/16

注意:小数点后六位有效

doule num

if(num<0.000001 && num>-0.000001)

注意:采用一定的算法对真实的浮点型数据到2进制数据进行转换,这个过程比存储、读取整形要慢得多,编程时尽量使用整型数据

模拟型:

字符型:char

字符就是符号或图案在内存中存储的依然是整数,需要显示出字符时,会根据ASCII表中对应的关系显示出对应的字符或图案123

’\0‘   0    特殊字符

’0‘    48

’A‘    65

’a‘    97

布尔型:bool

先有的C语言后有的bool类型,所以C语言中不可能有真正的布尔类型,在头文件stdbool.h 中对布尔类型进行了模拟

非零为真

bool  true  false

变量和常量

在程序运行期间数值可以发生变化的叫做变量 ,类似装数据的盒子

定义:  类型名 变量名;

取名规则:

  1. 由字母、数字、下划线组成
  2. 不能以数字开头
  3. 不能与C语言32个关键字重名,默写
  4. 见名知意(功能、类型、作用范围...)

使用:

赋值:  变量名=10;

num=10;

参与运算:  2+(变量名*10);

2+(num*10);

注意:C语言中变量的初始值是随机的,为安全起见,一般在定义时初始化为0

变量的输出与输入:

int printf(const char +format,...);(man printf)

功能:输出数据

format:“双引号包含的提示信息+占位符”

... :变量名列表

返回值:输出的字符个数

类型占位符:C语言中通过类型占位符传递变量的类型

signed   %hhd %hd %d %ld %lldZZZZ

unsigned   %hhu %hu %u %lu %llu

float %f

double %lf

long double %LF

字符型 char %c

练习1:定义各种类型的变量并初始化,使用printf显示它们各自的值(day02 train.c)

int scanf(const char +format,...);

功能:输入数据

format:“双引号包含的占位符”

...:变量地址列表

返回值:成功输入的变量个数

注意:scanf需要提供变量的地址

&变量名==变量地址

练习2:用scanf

常量:程序运行期间数值不能发生改变的叫做常量

100默认int类型

100l   long类型

100ll  long long类型

100u  unsigned int

...

无符号运用:3600*24*365*100u

3.14  默认double类型

3.14f  float

3.14l  long double

变量的格式化输入输出

%nd  显示n个字符宽度,不够则补充空格,右对齐

%-nd  显示n个字符宽度,不够则补充空格,左对齐

%0nd  显示n个字符宽度,不够则补充0,右对齐

%n.mf  显示n个字符宽度(小数点也算一位),不够则补充空格,m表示小数点后几位(四舍五入不够补0),右对齐

%g  不显示小数点后多余的0

运算符

自变运算符:++/--  是变量自动加1或者减1

前自变:++num/--num 立即生效

后自变:num++/num-- 下一行语句才有效

注意:不要在一行中多次使用自变运算符

算术运算符:+ - * / %

除数不为0 整数/整数  结果还是整数,没有小数点,只保留整数部分

10/3 ->3

10%3 ->1

/ % 除数不能为0,否则就会浮点数例外(核心已转储),编译时警告,运行时报错,一旦产生程序立即停止,后面不再执行

关系运算符:< 、> 、>= 、<=、==、!=

比较结果0(不成立)或1(成立),比较的结果可以继续参与后续的运算

int n=-100;

if(10<n<100) 结果永远为真,与数学运算规则不同

注意:==建议常量放左边

逻辑运算符:  &&  ||  !  

先把运算的对象转换成逻辑值,0则转换为假,非零是真

A && B 一假即假

A||B  一真即真

!A    求反

&&  ||  短路特性:

当左边部分的值可以确定整个表达式的结果时,右边部分就不执行计算

三目运算符  :运算对象有三个部分

A?B:C   判断A的值如果为真则执行B,否则执行C

赋值运算符    

a=10;

a+=10;

  1. =10;

....

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

分支语句

if(表达式)//单分支

{

//表达式为真,则执行此处代码

}

if(表达式)//双分支

{

//表达式为真(非零),则执行此处代码

}

else

{

//表达式为假(零),则执行此处代码

}

if(表达式)//多分支

{

//表达式为真(非零),则执行此处代码

}

else if(表达式2)

{

//表达式二为真,则执行此处代码

}

else if()

{

...

}

else//可不加

{

如果以上都为假,则执行此处代码

}

  1. 输入三个整数 从小到大显示
  2. 输入一个年份,判断闰年

四闰百不闰,四百闰

  1. 输入一个月份,判断该月多少天
  2. 输入一个成绩,判断等级

[90,100]  A

[80,89]   B

[70,79]   C

[60,69]   D

[0,59]    E

OTHER 有误

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值