【无标题】

C语言简介

​ 诞生于1970~1973年,在丹尼斯·里奇和肯·汤姆逊编写下完成,归属于美国贝尔实验室

​ 是专门用于编写操作系统二发明的编程语言,天生适合对硬件编程,以运行速度快著称,适合是实现数据结构和算法

​ 《C陷阱与缺陷》

​ 语法自由,也意味着危险,自由源于自律

​ C89语法标准,默认是gcc编译器的语法标准

​ C99语法标准,对C语言的扩展和增强,Ubuntu 16.04默认C99 -stn=gnu99 指定为C99语法标准

​ C11语法标准,全新的升级

第一个C语言程序

​ 1、vim xxx.c 创建.c 源文件

​ 2、编写代码,保存退出

​ 3、gcc xxx.c 编译.c 源文件,成功得到a.out可执行文件

​ 4、./a.out 运行可执行文件

​ 合并3、4 gcc xxx.c && ./a.out

  1 #include <stdio.h>   
  2 int main()
  3 {
  4     printf("Hello World!\n");
  5     return 0;
  6 }

​ 程序员所编写的代码不是标准C代码,需要一段程序把它翻译成标准C代码,负责翻译的程序叫做预处理器,需要被翻译的代码叫做预处理指令,以#开头的代码叫做预处理指令

 #include导入头文件
	 #include <xxx.h>  
			<> 从系统指定路径查找头文件并导入
	 #include "xxx.h"
            ""先从当前工作路径查找头文件,若找不到再从系统指定路径查找并导入

stdio.h 头文件:以.h结尾,里面存放的是辅助性代码,绝大多数是函数声明

main函数:

​ C语言以函数为单位管理代码,一个函数就是一段具有某一项功能的代码段

​ main函数是程序的执行入口,必须有且只能有一个

int 是一种数据类型,表示main函数的执行结果是一个整数

return 功能:1、返回一个结果给函数调用者 2、结束函数执行

​ main 函数的调用者是操作系统,它的返回值给操作系统,它的值能反映出程序是如何结束的,一般有三类:

​ 正数 出现异常(别人的错误)

​ 0 一切正常

​ 负数 出现错误 (自己的错误)

printf/scanf是标准库中的函数,负责输入、输出数据

printf("想要输出的内容");
转义字符:

​ 键盘上一些无法直接打印显示的符号,用一些特殊的字符组合来表示,这种特殊的字符组合称为转义字符

	\n	//换行
    \r	//回到行首
    \t	//制表符,相当于Tab,用于输出格式对其
    \b	//退格键
    \a	//铃响
    \\	//表示一个\
    %%	//表示一个%

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

二、编译器

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

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

gcc常用的编译参数:

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

-std=gnu99 设置c99语法标准

-c 只编译不链接

-o 指定编译结果名字 -oname ` -o name

-S 生成汇编代码

-I 指定头文件的加载路径 -I 加载路径

-Wall 尽可能多地产生警告

-Werror 把警告当错误处理

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

三、C代码变成可执行文件的详细过程

​ 1、预处理 把源文件翻译成预处理文件

gcc -E xxx.c 显示预处理结果到终端

gcc -E xxx.c -o xxx.i 生成以 .i 结尾的预处理文件

​ 2、编译 把预处理文件翻译成汇编文件

gcc -S xxx.i 生成以 .s 结尾的汇编文件

​ 3、汇编 把汇编文件翻译成二进制的目标文件

gcc -c xxx.s 生成以 .o 结尾的目标文件

​ 4、链接 把若干个目标文件合并成一个可执行文件

gcc a.o b.o c.o ... 默认生成 a.out 的可执行文件

四、C语言文件类型

​ .c 源文件

​ .h 头文件

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

​ .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 有符号 1101 1001 负数

signed char 1 Byte -128~127

signed short 2 Byte -32768~32767

signed int 4 Byte 正负20亿

signed long 4/8 Byte

signed long long 8 Byte 正负9开头的19位整数

​ unsigned 无符号 1101 1001 正数

unsigned char 1 Byte 0~255

unsigned short 2 Byte 0~65535

unsigned int 4 Byte 0~40亿

unsigned long 4/8 Byte 32位同上 64位同下

unsigned long long 8 Byte 0~1开头的20位整数

​ 注意:signed不加就代表加

​ 由于定义无符号整型时比较麻烦,C标准库中把这些类型重定义成一些简单的类型名:

​ 需要导入 <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位有效 num<0.000001 && num>-0.000001

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

模拟型:

​ 字符型:char

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

​ ‘\0’ 0 特殊字符

​ ‘0’ 48

​ ‘A’ 65

​ ‘a’ 97

​ 布尔型:bool

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

​ bool true false

七、变量与常量

​ 变量:程序运行期间数值可以发生变化的叫变量,相当于一个可以存储数据的盒子

​ 定义: 类型名 变量名 ; int num;

​ 取名规则:1、由字母、数字、下划线组成

​ 2、不能以数字开头

​ 3、不能与C语言的32个关键字重名

​ 4、见名知意(功能、类型) int sum_i

​ 使用:

​ 赋值: 变量名 = 10 ;

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

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

变量的输入与输出:

int printf(const char *format, ...);

​ 功能:输出数据

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

... :变量名列表

​ 返回值:输出字符个数

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

​ signed %hhd %hd %d %ld %lld

​ unsigned %hhu %hu %u %lu %llu

​ float %f

​ double %lf

​ long double %Lf

​ 字符型 char %c

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

​ 功能:输入数据

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

... : 变量地址列表

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

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

​ 常量:程序运行期间数值不能改变

​ 100 默认int类型

100l long

100ll long long

100u unsigned int

100lu unsigned long

​ 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-- 下一行语句才有效

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

算数运算符

+ - * / %

​ 整数/整数 结果还是整数,没有小数点,1只保留整数部分

​ / % 除数不能为0,否则会浮点数例外、(核心以转储),这是运行报错,一旦产生程序立即停止

关系运算符

> < >= <= == !=

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

int n=-100;
if(10 < n <100)		//结果为真	10<n -> 0  0<100 -> 1

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

逻辑运算符

&& || !

​ 先把运算对象转换成逻辑值,0转换为假,非0转换为真

A && B 一假即假

A || B 一真即真

!A 求反

​ && || 短路特性:当左边部分的值可以确定整个表达式的结果时,右边部分不执行计算

三目运算符

​ 运算对象有三个部分

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

赋值运算符

a = 10;

a += 10; a %= 10;

位运算符

& | ~ ^ << >>

十、分支语句
if(表达式)		//单分支
{
    //表达式为真(非0),执行此处代码
}

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

if(表达式1)		//多分支
{
    //表达式为真(非0),执行此处代码
}
else if(表达式2)
{
    //表达式2为真(非0),执行此处代码
}
else if(表达式3)
{
    //表达式3为真(非0),执行此处代码
}
...
else
{
    //若以上表达式均为假,则最后执行此代码
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值