变量是存储数据的容器。本课将介绍 C 语言中的基本数据类型和如何使用变量。
想象变量是一个带标签的盒子:
┌─────────────┐
│ score │ ← 变量名(标签)
│ 100 │ ← 存储的值
└─────────────┘
int score = 100; // 创建一个名为 score 的盒子,放入值 100
C 语言有几种基本的数据类型:
| 类型 | 大小 | 范围 | 用途 |
|---|---|---|---|
int |
4 字节 | -21 亿 ~ +21 亿 | 一般整数 |
short |
2 字节 | -32768 ~ +32767 | 较小整数 |
long |
8 字节 | 更大范围 | 大整数 |
unsigned int |
4 字节 | 0 ~ 42 亿 | 非负整数 |
int age = 25;
short small_number = 100;
long big_number = 1000000000;
unsigned int score = 100; // 分数不能为负数
| 类型 | 大小 | 精度 | 用途 |
|---|---|---|---|
float |
4 字节 | 6-7 位 | 一般小数 |
double |
8 字节 | 15-16 位 | 高精度小数 |
float price = 19.99f;
double pi = 3.1415926535;
char grade = 'A'; // 单个字符用单引号
char snake_symbol = '🐍'; // 实际上存储的是编码
#include <stdbool.h>
bool is_game_over = false;
bool has_won = true;
// 声明变量
int score;
// 初始化变量
score = 100;
// 声明并初始化
int lives = 3;
// 声明多个变量
int x = 0, y = 0, width = 80, height = 24;
看看我们的游戏中如何使用这些类型:
// 蛇的位置(整数坐标)
int snake_x = 10;
int snake_y = 5;
// 游戏状态
int score = 0;
int high_score = 1000;
int level = 1;
// 布尔状态
bool is_game_over = false;
bool is_paused = false;
// 方向(可以用枚举或整数)
int direction = 0; // 0=上,1=下,2=左,3=右
// 字符显示
char snake_head = 'O';
char snake_body = '#';
char food_symbol = '*';
使用 printf 输出不同类型的变量:
#include <stdio.h>
int main(void) {
int score = 100;
float speed = 3.14f;
char symbol = '*';
bool active = true;
printf("分数:%d\n", score); // %d 用于整数
printf("速度:%.2f\n", speed); // %.2f 用于小数,保留 2 位
printf("符号:%c\n", symbol); // %c 用于字符
printf("激活:%s\n", active ? "是" : "否"); // 三元运算符
return 0;
}
| 说明符 | 类型 | 示例 |
|---|---|---|
%d |
int | printf("%d", 42); → 42 |
%f |
float/double | printf("%.2f", 3.14); → 3.14 |
%c |
char | printf("%c", 'A'); → A |
%s |
字符串 | printf("%s", "hello"); → hello |
%p |
指针 | printf("%p", ptr); → 0x7fff... |
有些值不应该改变,使用常量:
// 方法 1:#define 预处理器宏
#define MAX_SCORE 1000
#define PI 3.14159
// 方法 2:const 关键字
const int MAX_LIVES = 3;
const float GRAVITY = 9.8f;
// 在贪吃蛇中
#define SCREEN_WIDTH 80
#define SCREEN_HEIGHT 24
#define INITIAL_SPEED 100
int a = 10;
float b = 3.0f;
// 隐式转换(自动)
float result = a / b; // 10 / 3.0 = 3.333...
// 显式转换(强制)
int c = (int)3.99; // c = 3(截断小数部分)
// 注意整数除法
int x = 10 / 3; // x = 3,不是 3.333!
float y = 10.0 / 3; // y = 3.333...
#include <stdio.h>
int main(void) {
int initial_length = 3;
int food_eaten = 5;
int growth_per_food = 1;
// 计算当前长度
int current_length = initial_length + (food_eaten * growth_per_food);
printf("蛇的初始长度:%d\n", initial_length);
printf("吃掉的食物:%d\n", food_eaten);
printf("当前长度:%d\n", current_length);
return 0;
}
#include <stdio.h>
int main(void) {
// 定义游戏统计数据
int games_played = 10;
int games_won = 7;
float win_rate = 70.5f;
int high_score = 1500;
char player_name = 'A'; // 玩家等级
// 输出统计信息
printf("=== 游戏统计 ===\n");
printf("游戏次数:%d\n", games_played);
printf("获胜次数:%d\n", games_won);
printf("胜率:%.1f%%\n", win_rate);
printf("最高分:%d\n", high_score);
printf("玩家等级:%c\n", player_name);
return 0;
}
int score;
printf("%d\n", score); // ❌ 未定义的值
int x = 10;
x = 3.14; // ❌ 小数赋给整数,会丢失精度
int a = 5;
int b = 2;
float result = a / b; // ❌ result = 2.0,不是 2.5!
float correct = (float)a / b; // ✅ result = 2.5
下一课:函数