一、C语言概述
1.C语言的发展历史:
C语言由Dennis Ritchie(丹尼斯·里奇)于1971-1973年在B语言(源于BCPL)基础上,通过增加数据类型、结构体、指针等关键创新,并用其重写Unix内核验证而发明,其设计哲学是信任程序员、保持简洁、接近硬件、高效编译。
2.C语言的应用领域:
(1)系统软件:操作系统、编译器、数据库等
(2)嵌入式系统:智能家电、智能穿戴设备、智能汽车等
(3)网络设备:路由器、交换机、防火墙等
(4)游戏开发:电脑游戏、手机游戏等
3.C语言的标准
(1)C89(C90)标准
1989年,美国国家标准协会通过了C语言标准,简称C89
1990年,国际标准化组织接收并采纳C89作为国际标准
(2)C99标准
1999年,国际标准化组织和国际电工委员会正式发布了ISO/IEC 9899:1999,简称C99
C99引入了许多新特性,例如内联函数,变量声明可以不放在函数开头,支持变长数组
(3)C11标准
2011年,国际标准化组织和国际电工委员会正式发布C语言标准第三版草案N1570,称为 ISO/IEC 9899:2011,简称C11
C11增强了C语言对C++的兼容性
二、第一个C语言程序HelloWorld
1.include头文件包含
(1) #include的意思是头文件包含,#include <stdio.h>代表包含stdio.h这个头文件
(2)头文件:在c语言中后缀名为h的文件被称为头文件,头文件就像一本书的目录,当我们想使用某本书里的内容时,可以直接引用头文件。
2.main()函数
main函数是C语言程序的入口,一个程序有且只能有一个main函数入口
3.C语言的语句结尾
C语言每句可执行的语句结尾都要加;结尾(英文输入法下的)
4.printf函数
printf是C语言库函数,功能是向标准输出设备输出一个字符串
例如:printf("HelloWorld!\n")
\n的含义是在HelloWorld的后边直接添加一个回车换行
5.return函数
return代表函数执行完毕,返回return代表函数的终止
6.函数的注释
(1)注释的含义:对代码的解释和说明
(2)注释的目的:让人们更加轻松的看懂代码
(3)行注释://(快捷键ctrl+/)
块注释:/* */
三、数据类型
1.数据类型的分类
(1)基本类型:整型(int、short、long)、字符型(char)、
浮点型(实型)(单精度:float;双精度:double)
(2)构造类型:数组类型、结构类型(struct)、联合类型(union)、枚举类型(enum)
(3)指针类型:char*、int*、int**等
2.数据类型的作用
编译器预算数据分配的内存空间大小
3.变量
(1)变量定义
就是通过指定数据类型和变量名来分配内存空间,可以同时赋初值(初始化)。
(2)变量的命名规则
变量也叫标识符,命名规则如下:
1.只能有字母、数字、下划线组成;
2.不能使用数字开头;
3.不能使用关键字;
补充:关键字
| 数据类型 | char int float double void | 5 |
| 类型修饰 | short long unsigned signed | 4 |
| 存储类别 | auto register static extern | 4 |
| 控制语句 | if else switch case default break continue return goto | 9 |
| 循环 | for while do | 3 |
| 结构/联合/类型 | struct union enum typedef | 4 |
| 其他 | const volatile sizeof |
(3)命名规范
要做到有好的命名习惯,做到见名知意
4.char类型
char 占用 1字节,用于存储 单个字符,赋值时用 单引号(如 'A'),实际存储的是该字符的 ASCII码(整数),可用 %c(字符)或 %d(ASCII码)输出。
5.布尔类型(bool)
(1)布尔类型用于表示真(true)或假(false)
(2)C语言早期(C89标准)没有专门的布尔类型,使用整数代替:0表示假,非0表示真。
C99正式添加了布尔类型,关键字为 _Bool
6.数据类型长度
(1)存储单位
| 单位 | 说明 | 换算关系 |
|---|---|---|
| bit(比特) | 一个二进制位,只能表示0或1两种状态。数据传输习惯以“位”(bit)为单位。 | — |
| Byte(字节) | 8个二进制位组成1字节,计算机中存储的最小单位是字节。数据存储习惯以“字节”(Byte)为单位。 | 1 Byte = 8 bit |
| 1b | 1比特 | — |
| 1B | 1字节 | 1B = 8b |
| 1KB | 1千字节 | 1KB = 1024B |
| 1MB | 1兆字节 | 1MB = 1024KB |
| 1GB | 1吉字节 | 1GB = 1024MB |
| 1TB | 1太字节 | 1TB = 1024GB |
| 1PB | 1拍字节 | 1PB = 1024TB |
(2)数据类型长度
| 数据类型 | 32位系统 | 64位系统 |
|---|---|---|
char | 1 | 1 |
short | 2 | 2 |
int | 4 | 4 |
long | 4 | 8 |
long long | 8 | 8 |
float | 4 | 4 |
double | 8 | 8 |
long double | 12~16 | 16 |
7.可移植的类型
(1)为什么要用可移植类型
不同平台基本类型长度可能不同,使用可移植类型(如 int32_t)可以确保代码在所有平台上长度固定、行为一致。
(2)可移植类型的好处
| 好处 | 说明 |
|---|---|
| 长度固定 | int32_t 在任何平台都是4字节 |
| 行为一致 | 避免跨平台差异导致的bug |
| 代码清晰 | 明确表达对数据长度的要求 |
| 便于维护 | 无需为不同平台修改代码 |
8.常量
(1)常量的值在运行程序时不会发生改变,常量包括整型常量、实型常量、字符型常量、字符串常量。
(2)常量的定义有两种方式:预处理常量(如#define PI 3.14)
const常量(如const double pi2 = 3.14;)
<limits.h> —— 整数类型限制
CHAR_BIT | char 的位数 | 8 |
CHAR_MIN | char 最小值 | -128 |
CHAR_MAX | char 最大值 | 127 |
SCHAR_MIN | signed char 最小值 | -128 |
SCHAR_MAX | signed char 最大值 | 127 |
UCHAR_MAX | unsigned char 最大值 | 255 |
SHRT_MIN | short 最小值 | -32768 |
SHRT_MAX | short 最大值 | 32767 |
USHRT_MAX | unsigned short 最大值 | 65535 |
INT_MIN | int 最小值 | -2147483648 |
INT_MAX | int 最大值 | 2147483647 |
UINT_MAX | unsigned int 最大值 | 4294967295 |
LONG_MIN | long 最小值 | -2147483648(32位)/ -2⁶³(64位) |
LONG_MAX | long 最大值 | 2147483647(32位)/ 2⁶³-1(64位) |
ULONG_MAX | unsigned long 最大值 | 4294967295(32位)/ 2⁶⁴-1(64位) |
LLONG_MIN | long long 最小值 | -9223372036854775808 |
LLONG_MAX | long long 最大值 | 9223372036854775807 |
ULLONG_MAX | unsigned long long 最大值 | 18446744073709551615 |
<float.h> —— 浮点数限制
| 常量 | 含义 | 典型值 |
|---|---|---|
FLT_MANT_DIG | float 有效二进制位数 | 24 |
DBL_MANT_DIG | double 有效二进制位数 | 53 |
FLT_MIN | float 最小正值 | 1.17549435e-38 |
FLT_MAX | float 最大值 | 3.40282347e+38 |
DBL_MIN | double 最小正值 | 2.2250738585072014e-308 |
DBL_MAX | double 最大值 | 1.7976931348623157e+308 |
FLT_DIG | float 十进制有效位数 | 6 |
DBL_DIG | double 十进制有效位数 | 15 |
FLT_EPSILON | float 最小精度(1.0与下一个数的差) | 1.19209290e-7 |
DBL_EPSILON | double 最小精度 | 2.2204460492503131e-16 |
FLT_MIN_EXP | float 最小指数(以2为底) | -125 |
FLT_MAX_EXP | float 最大指数(以2为底) | 128 |

229

被折叠的 条评论
为什么被折叠?



