第三章:基础语法与数据类型
3.1 关键字与标识符命名规则
关键字
C语言中的关键字(Keywords)是预定义的保留字,具有特定语法含义,不能用作变量名或函数名。C语言共有32个标准关键字,例如:
• 数据类型相关:int
, char
, float
, double
, short
, long
, signed
, unsigned
• 流程控制:if
, else
, switch
, case
, for
, while
, do
, break
, continue
• 函数相关:void
, return
• 存储类别:auto
, static
, extern
, register
• 其他:sizeof
, typedef
, const
, volatile
标识符命名规则
标识符(Identifier)是用户定义的名称,用于变量、函数、结构体等。命名需遵循以下规则:
- 合法字符:字母(A-Z, a-z)、数字(0-9)、下划线(_)。
- 首字符:不能是数字。
- 区分大小写:
sum
和 Sum
是不同的标识符。
- 避免关键字:不能与关键字冲突。
示例
• 合法名称:age
, student_name
, _count
, MAX_SIZE
• 非法名称:3years
(以数字开头)、float
(关键字)、my-var
(含-
)
最佳实践
• 使用有意义的名称(如total_score
而非ts
)。
• 变量名建议小写,常量用全大写(如PI
)。
3.2 基本数据类型
C语言的基本数据类型决定了变量的存储空间和取值范围。
数据类型 | 描述 | 大小(字节) | 格式符 | 示例值 |
int | 整型 | 4 (通常) | %d | -10 , 100 |
float | 单精度浮点型 | 4 | %f | 3.14 , -0.5 |
double | 双精度浮点型(更高精度) | 8 | %lf | 3.1415926 |
char | 字符型 | 1 | %c | 'A' , '9' |
详细说明
整型(int)
• signed int
:默认,范围通常为 -2^31
到 2^31-1
。
• unsigned int
:范围 0
到 2^32-1
,用 %u
输出。
• 其他变体:short
(2字节)、long
(4或8字节)。
浮点型(float/double)
• float
:精度约6-7位小数。
• double
:精度约15位小数,优先使用。
字符型(char)
• 存储ASCII码(如 'A'
对应65),可用 %d
输出其整数值。
• 转义字符:\n
(换行)、\t
(制表符)、\\
(反斜杠)。
3.3 变量声明与初始化
声明变量
语法:数据类型 变量名;
int age; // 声明一个整型变量
float salary; // 声明一个单精度浮点型变量
char grade; // 声明一个字符型变量
初始化变量
声明时可直接赋值:
int count = 0; // 正确:声明并初始化
double pi = 3.14159; // 正确:声明并初始化
char symbol = '#'; // 正确:字符用单引号
int x; // 未初始化,值为随机数(危险!)
注意事项
• 变量需先声明后使用。
• 局部变量未初始化时值为随机值,全局变量默认为0。
3.4 常量与宏定义(#define)
使用 #define
定义常量
• 宏定义在预处理阶段替换文本,不占用内存。
#define PI 3.14159 // 无分号!
#define MAX_LEN 100
示例
#include <stdio.h>
#define TAX_RATE 0.05 // 定义税率常量
int main() {
float price = 100.0;
float tax = price * TAX_RATE;
printf("Tax: %.2f\n", tax); // 输出 Tax: 5.00
return 0;
}
const
关键字
• 定义具有类型的常量,编译器会进行类型检查。
const int MAX = 100; // 必须初始化
const double G = 9.8;
宏与 const
的区别
特性 | #define | const |
类型检查 | 无 | 有 |
作用域 | 文件作用域 | 块作用域 |
内存占用 | 无 | 有 |
3.5 格式化输入输出(printf/scanf)
printf
函数
语法:printf("格式字符串", 变量列表);
常用格式符:
• %d
:整型
• %f
:浮点型
• %c
:字符
• %s
:字符串
• %p
:指针地址
示例
int age = 25;
float height = 1.75;
printf("Age: %d, Height: %.2f meters\n", age, height);
// 输出:Age: 25, Height: 1.75 meters
scanf
函数
语法:scanf("格式字符串", &变量地址);
int num;
float value;
char ch;
scanf("%d", &num); // 输入整型
scanf("%f %c", &value, &ch); // 输入浮点型和字符
注意事项
scanf
必须传变量地址(&
符号)。
- 输入数据需与格式符严格匹配(如输入
3.14
用%f
而非%d
)。
3.6 类型转换:隐式与显式
隐式类型转换
编译器自动进行,规则如下:
- 整型提升:
char
和 short
运算时提升为 int
。
- 算术转换:不同类型运算时,向更高精度转换:
int → unsigned int → long → double
示例
int a = 5;
double b = 2.5;
float c = a + b; // a隐式转换为double,结果再转float
显式类型转换(强制转换)
语法:(目标类型)表达式
double pi = 3.14159;
int integer_pi = (int)pi; // 结果为3(直接截断)
int x = 10, y = 4;
float result = (float)x / y; // 2.5(避免整数除法)
注意事项
• 高精度转低精度可能丢失数据(如double
→int
)。
• 显式转换优先级高于隐式转换。