内容提要 :C语言概述 数据类型 常量
C语言概述:
计算机基础
计算机组成 计算机:能进行计算以及逻辑处理的设备
- 硬件:组成计算机的物理部件。(内存条、CPU、硬盘..)
开发中对于硬件的认知: 硬件包括电子设备、单片机、集成电路和嵌入式系统。
- 软件:计算机中运行的程序和数据。
开发中对于软件的认知: 软件分为系统软件(OS)、应用软件和编程工具(编译器)
计算机的六大部件
- 中央处理器(CPU):控制 + 计算
- 内存:临时存储运行时的数据。
- 输入设备:向计算机输入数据(键盘、鼠标、扫码枪)
- 输出设备:将计算机数据进行输出(显示器、打印机)
- 外存储器:永久存储数据(硬盘)
- 网络:数据传输与通信
计算机的工作原理
- 存储程序:程序和数据存储在内存中
- 程序控制:CPU按指令顺序执行
计算机的语法
- 机器语言:二进制代码,直接控制硬件
- 汇编语言:助记符形式,需要汇编器翻译
- 高级语言:C/C++,Java,Python,PHP,C#,GO
C语言特点
简洁高效,支持底层硬件操作
可移植性强,适合结构化编程
生成代码质量高,执行速度快
C语言程序的开发过程(!)
开发的三个步骤
1. 编辑:编写源代码( .c 文件,程序员完成)
2. 编译:将源代码文件转换为可执行文件(编译器完成)
3. 运行:执行程序(操作系统加载)
C语言程序的编译过程
1. 预处理:处理宏和头文件以及注释等
2. 编译:生成汇编代码
3. 汇编:转换为机器码/二进制代码( .o 文件)
4. 链接:合并库文件和目标文件
#include <stdio.h>
// 定义宏
#define PI 3.14
int main(int argc,char *argv[])
{
printf("hello world!\n");
double area = PI * 2 * 2;
return 0;
}
编译的命令:
一个简单的C语言程序
#include <stdio.h>
// 主函数
int main(int argc,char *argv[])
{
printf("hello world\n");
return 0;
}
运行结果:
程序结构分析:
- 注释:解释代码逻辑,写给程序员自己看,预处理阶段会被删除;
- 预处理指令:程序中包含的某一文件内容( #include );
- 主函数: main 函数是程序唯一的入口,一个文件中最多有1个,这个函数不能被其他函数调 用,这是一个自动执行函数,系统是通过这个函数的指针进行访问的。
- 关于函数:
- 函数头:(函数首部或者函数说明)
说明函数类型,函数头由函数名和函数参数构成。 - 函数体: 包括变量说明和语句执行部分。
- 函数调用语句:比如:printf();
- 函数头:(函数首部或者函数说明)
数据类型:
定义:
数据类型其实就是固定大小内存的别名,并且描述了一个变量存放什么类型的数据。简单类说,就 是组织和操作数据。
数据:计算机要处理的数据(数字、字符串、文字、符号、图片、音频、视频等)
数据类型不仅帮助我们组织和操作数据,还决定了程序如何有效的利用内存。
了解数据类型的内存需求是理解计算机管理和操作数据的关键
注:程序运行需要再内存中
数据类型分类(!)
- 基本类型(C语言内置)
- 整型(整数)
- 短整型:short(short int缩写)
- 基本型:int(使用最多)
- 长整型:long(long int缩写)
- 长长整型:long long(long long int缩写,C99新增)
- 浮点型(小数、实数)
- 单精度型:float 双精度型:
- 双精度型:double
- 长双精度型:long double(C99新增)
- 字符型:char
- 构造类型(用户自己定义)
- 结构体:struct
- 联合体/共用体:union
- 枚举类型:enum
- 指针类型
- 空类型:void(C语言内置)
数据类型在内存中大小(重点)

注意: true 和 false 是宏定义,实际值是 1 和 0
注意:因为C语言没有Byte这个单位,所以我们一般使用char来表示字节。因为 1char = 1byte
printf("true size:%d\n", sizeof(true)); // trus size:4 解释:true本身就是int类型的1,所以
占4个字节
printf("bool size:%d\n", sizeof(bool)); // bool size:1 解释:占1个字
总结:
① 数据类型在内存中所占的字节数跟C语言的编译系统有关。
② 计算某个数据类型所占字节数可以用sizeof运算符。
③ 布尔类型要添加 #include ,大家也可以直接使用int类型的0和1来表示布尔类型
常量:
在C语言中,数据的基本表现形式是常量和变量。不管是常量还是变量,都是需要在内存中申请一 块空间,用于数据的存放。
定义:在程序执行过程中其值不能被改变的量。
分类:int、float、double、char、符号常量(宏定义)
整型常量
整型常量可以用十进制、八进制、十六进制三种形式表示。
十进制常量:由数字 0~9 构成,没有前缀,不能以0开头。举例:
99,218 // 正确的
0 // 正确的
09 // 错误的,不能以0开头
八进制常量:由数字 0~7 构成,以 0 为前缀,不能表示小数。举例:
023,077 // 正确的
00 // 正确的
099 // 错误的,只能由数字0~7构成
十六进制常量:由数字 0~9 ,字母 a-fA~F 构成,以 0x|0X 为前缀,不能表示小数,举 例:
0xff0000 // 正确的
0X55 // 正确的
0x0 // 正确的
整型常量中的长整型数据可用 L或者l 作为后缀,举例:
long num = 123L;
整型常量的分类:
- 有符号与无符号基本整型常量(int)
- 有符号表示范围:负数 + 0 + 正数 无
- 符号表示范围:0 + 正数,内存中所有负数的位置都用来表示正数,此时它的正数范围 超过有符号数正数范围。
- 有符号与无符号长整型常量(long)
- 有符号与无符号短整型常量(short )
- 整型常量的表示
- 十进制表示:可以使用10个数字符号0~9以及 +,- ,如:123,-90
- 八进制表示:以0开头,可以使用7个数字符号0~7以及 +,- ,如:0123,-011
- 十六进制表示:以0x或者0X开头,可以使用 0~9 以及 A~F(a~f) ,如:0x12,-0x12
浮点型常量
C语言中浮点型数就是平常所说的小数(实数),有两种表现形式:
- 十进制小数:如:0.123, -12.6,0.123F(F代表float)
- 指数形式(科学记数法):
- 正数表示:如十进制小数 的指数表示法就是 ,也可以表示为 ;
- 负数表示:如十进制小数 的指数表示法就是 ,也可以表示为 ;
注意:
① 在符号e的前面必须要有数字
② 在符号e的后面必须为整数,不能是带有小数点的实数型。
③ 实型常量的后缀用F/f表示单精度型。后缀用L/l表示双精度型。
字符型常量
用单引号 '' 括起来的一个字符,如 'a' 'A', '4', '_' 等,比如: '刘' 就不是字符,一个汉字所 占的字节数超过1个字符。中文符号当成汉字理解。英文输入法下输入的字母、数字、符号都是单 字符。
转义字符常量:以反斜杠 \ 开头的字符序列,表示控制以及不可见字符。如:
字符串常量
说明:在C语言中,支持字符串常量,不支持字符串变量。字符串变量需要使用字符数组或者字符 指针实现。
- 用一对双引号 "" 括起来的一个字符序列
- 可以使用printf输出一个字符序列
注意: 字符常量'a'与字符串常量"a"的区别:
系统自动为字符串常量加上结尾的 \0 ,使所占内存单元多一个,单字符常量的长度不变,可 用sizeof()运算符来测量。
符号常量
说明:一般通过宏定义,在预处理的时候替换成具体的常量
定义:一个标识符来代表一个常量。如:用PI代表圆周率π(3.1415926)
好处:
- 增加可读性
- 增强了可维护性
定义符号常量:
- 用预处理指令: #define
- 格式:#define 标识符 字符串
- 标识符和字符串之间用空格隔开
- 句末不用分号
- 标识符的命名采用大写,如果有多个单词,使用下划线分隔,如:MAX_VAL MIN_VAL
范例:
#include <stdio.h>
// 定义符号常量
#define PI 3.14
#define R 20
int main(int argc,char *argv[])
{
// 计算圆的周长 2 × PI × R
printf("计算圆的周长:%f\n",2 * PI * R);// %f:以小数显示
// 计算圆的面积 PI × R × R
printf("计算圆的面积:%f\n",PI * R * R);
return 0;
}