C语言的历史
C 语言是贝尔实验室的 Ken Thompson、Dennis Ritchie 等人开发的 UNIX 操作系统的“副产 品”。
C 语言的最近两次改变分别发生在 2011 年和 2018 年。国际标准化组织在 2011 年通过的 C 语言标准是 ISO/IEC 9899:2011,这一标准所描述的 C 语言通常称为 C11;在 2018 年通过的 C 语言标准是 ISO/IEC 9899:2018,这一标准所描述的 C 语言通常称为 C18。
基于C的语言
- C++:包括了所有C特性,增加了类和其他特性以支持面向对象编程。
- Java:基于C++,继承了C的许多特性。
- C#:由C++和Java发展起来的一种新的语言。
- Perl:简单的脚本语言,在发展过程中采用了C的许多特性。
C语言的优缺点
- C语言是一种底层语言。提供了对机器级概念的访问,例如字节和地址。C语言还提供了与计算机内置指令紧密协调的操作,使程序可以快速执行。
- C语言是一种小型语言。
- C语言是一种包容性语言。它提供了比其他许多语言更高的自由度。
优点:
- 高效。
- 可移植。
- 功能强大。
- 灵活。
- 标准库。
- 与UNIX系统的集成。
缺点:
- 用C编程出错的概率较高。
- 编程的语句可能会难以理解。
- 较难修改,可阅读性较差。
C语言书写规范
- 运算符前后加一个空格
- 标点符号后加一个空格
- 缩进
- 适时空行划分逻辑单元
- 标识符使用小驼峰式
C语言基础概念
第一个C程序
#include<stdio.h> // 文件包含,将stdio.h文件包含在当前源程序文件中,stdio.h为标准输入输出库文件,printf和scanf的使用均需要该文件。在编译前把<stdio.h>中的信息“包含”到程序中。
int main(void) // main函数,每一个c程序有且只有一个main函数,代码从main函数开始执行
{
printf("Hello World"); // 打印输出双引号的内容
return 0; // 该函数为整型int,需要返回一个整数
}
#
:命令或者叫指令,预处理器执行以#开头的指令。指令不需要使用;
结尾。include
:包含,后面使用<>
或者""
,将其他文件包含在当前文件中,可以在当前文件中使用包含进来的文件的内容。int
:整型,即整数类型。main
:主函数,在执行程序时系统会自动调用 main 函数。void
:表明函数没有参数。printf
:格式化打印输出。return
:函数的返回值,可以理解为函数的结果。;
:C语言规定语句都以;
结尾。
C语言代码运行原理
预处理:程序运行前,会被交给预处理器,预处理器执行代码中的指令,即
#
开头的命令。编译:计算机并不会识别我们所写的代码,由编译器将代码转化为机器指令,即目标代码(.obj)。
链接:链接器把由编译器产生的目标代码和所需的其他附加代码整合在一起,最终产生了完全可执行的程序(.exe)。
函数
C 程序就是函数的集合,函数是C语言的基本单位。
- 自定义函数:根据需求自己编写的功能函数
- 库函数:C语言实现的一部分提供的函数。
函数的定义
函数类型 函数名(参数) // 函数类型是什么就需要返回什么类型的值,参数为形参,可以不设置(void)
{
函数体
return 返回值;
}
语句
语句是程序运行时执行的命令,以;
结尾。
数据类型
类型 | 关键字 | 备注 |
---|---|---|
整型 | int | (integer)整数,范围受限制。 |
实型 | float | (floating-point)小数,但并不精确,只是近似值;在赋值时通常在数字后面加一个f ;范围比int型变量大得多。 |
字符型 | char | 字符 |
变量
用于临时存储数据的载体,存储的值可以改变。
在使用变量之前必须对其进行声明,声明格式为:
数据类型 变量名; // 可以声明多个变量,用“,”隔开
当main函数包含声明时,必须把声明放置在语句之前
int main(void)
{
// 声明
// 语句
}
变量赋值
使用=
运算符(赋值运算符)给变量赋值。
int demo; // 声明一个整型变量demo,该变量可以存储整数类型数据
demo = 1; // 为demo变量赋值为1,demo中存储的值就是整数1
常量
有确定的值
宏定义
#define 常量名 常量 // 此时的常量名就叫一个宏
常量名一般全部大写
标识符
变量,函数,宏和其他实体需要命名,这些名字称为标识符
命名规则
:
- 可以含有字母,数字,下划线
- 只能以字母或下划线开头
- 不能与关键字重名
- 区分大小写
关键字
关键字严格区分大小写!
注意:main
和printf
不是关键字
运算符
一元运算符
:+
,-
正负,右结合性
赋值运算符 | 意义 | 备注 |
---|---|---|
= | 右侧的值赋给左值 | 赋值运算符都是右结合性 |
+= | 左值加右侧的值然后重新赋值给左值 | |
*= | 左值乘右侧的值然后重新赋值给左值 | |
/= | 左值除以右侧的值然后重新赋值给左值 | |
%= | 左值对右侧的值求余然后重新赋值给左值 |
算数运算符 | 意义 | 备注 |
---|---|---|
+ | 加 | 二元 |
- | 减 | 二元 |
* | 乘 | 二元 |
/ | 除 | 结果取左右两边范围更大的值的格式,若整数与整数相除,结果会只截取整数部分 |
% | 求余 | 二元,只能是整数求余 |
关系运算符 | 意义 | 备注 |
---|---|---|
> | 大于 | |
< | 小于 | |
== | 等于 |
自增自减运算符 | 意义 | |
---|---|---|
++ | 自身加1 | |
-- | 自身减1 | |
注意运算符位置,在值左侧先自增自减,再代入运算;在值右侧,先取值运算再自增自减 |
转义序列 | ||
---|---|---|
警报(响铃)符 | \a | 输出会产生一声鸣响 |
回退符 | \b | 使光标从当前位置回退一个位置 |
换行符 | \n | 使光标跳到下一行的起始位置 |
水平制表符 | \t | 使光标移动到下一个制表符的位置 |
转义字符 | \ | 当需要输出某个符号时,在符号前加一个\ ,如:输出" ,在代码中使用\" |
优先级
从高到低:
- 自增自减(后缀)
- 自增自减(前缀),正号负号
- 乘,除,余
- 加减
- 赋值