认识数据 - 变量与数据类型
-
- 变量是什么?
- [C# 基本数据类型](# 基本数据类型)
-
- [快捷方式:使用 var 关键字](#快捷方式:使用 var 关键字)
- [1. 整数类型(int)](#1. 整数类型(int))
- [2. 浮点数类型(double)](#2. 浮点数类型(double))
- [3. 布尔类型(bool)](#3. 布尔类型(bool))
- [4. 字符串类型(string)](#4. 字符串类型(string))
- [5. 其他基础类型](#5. 其他基础类型)
-
- [5.1 其他整数类型](#5.1 其他整数类型)
- [5.2 其他浮点数类型](#5.2 其他浮点数类型)
- [5.3 字符类型(char)](#5.3 字符类型(char))
- [5.4 空值类型(可空类型)](#5.4 空值类型(可空类型))
- 数据类型对比表
- 变量命名规则和规范
-
- 命名规则(必须遵守)
- 命名规范(推荐遵守)
- [驼峰命名法(Camel Case)](#驼峰命名法(Camel Case))
- 实践:计算圆面积
-
- [问题:计算半径为 5 的圆的面积](#问题:计算半径为 5 的圆的面积)
- 代码说明:
- 实践:判断年龄是否成年
- [字符串插值( 字符串)](#字符串插值( 字符串))
- 变量赋值
- 本章总结
程序的本质是处理数据。这一周,我们将学习如何在程序中存储和使用数据。
变量是什么?
用一个比喻来理解
想象你有许多不同颜色的盒子,每个盒子上都贴着标签:
- 盒子标签叫"年龄",里面装着数字 25
- 盒子标签叫"名字",里面装着文字"小明"
- 盒子标签叫"是否学生",里面装着"是"或"否"
在编程中:
- 盒子 = 变量
- 标签 = 变量名
- 盒子里装的内容 = 变量的值
- 盒子的类型 = 数据类型(决定能装什么类型的东西)
为什么需要变量?
没有变量,我们就像一个没有记忆的人,每次用完数据就忘了。有了变量,我们可以:
- 存储数据:记住信息供后续使用
- 传递数据:在程序的不同部分之间传递信息
- 处理数据:对数据进行各种操作和计算
例子:
csharp
// 计算圆的面积,需要记住圆周率和半径
double pi = 3.14; // 存储 π 的值
double radius = 5; // 存储半径
double area = pi * radius * radius; // 计算面积
Console.WriteLine(area); // 输出:78.5
C# 基本数据类型
C# 提供了多种数据类型,每种类型适合存储不同类型的数据。
快捷方式:使用 var 关键字
在开始学习各种数据类型之前,先介绍一个方便的写法:var 关键字。
var 可以让编译器自动推断变量类型,不需要手动指定类型名。定义时必须赋值,实际类型由定义时的值推断。
csharp
// 传统写法(明确指定类型)
int age = 25;
string name = "小明";
double price = 19.99;
bool isStudent = true;
// 使用 var(编译器自动推断类型)
var age = 25; // 自动推断为 int
var name = "小明"; // 自动推断为 string
var price = 19.99; // 自动推断为 double
var isStudent = true; // 自动推断为 bool
注意:
var只是语法糖,编译后变量仍然有明确的类型var必须在声明时赋值(编译器需要根据值推断类型)- 使用
var可以让代码更简洁,但不要过度使用
什么时候用 var,什么时候不用:
✅ 推荐使用 var:
csharp
var message = "这是一条消息"; // 类型很明显,用 var 更简洁
var list = new List<string>(); // 类型很长,用 var 更清晰
var user = new { Name = "张三", Age = 20 }; // 匿名类型必须用 var
❌ 不推荐使用 var:
csharp
var result = SomeMethod(); // 看不出来返回什么类型,不清晰
var age = 25; // 直接写 int 更明确
var isTrue = true; // 直接写 bool 更明确
学习建议: 作为初学者,建议先明确写出类型(如 int age = 25),这样可以更好地记忆和理解类型的概念。等你熟悉后,再酌情使用 var 让代码更简洁。
1. 整数类型(int)
存储整数,没有小数部分。
csharp
int age = 25; // 年龄
int count = 100; // 数量
int temperature = -10; // 可以是负数
常用场景: 年龄、数量、计数、索引等
2. 浮点数类型(double)
存储带小数的数字。
csharp
double pi = 3.1415926; // 圆周率
double price = 19.99; // 价格
double height = 1.75; // 身高
常用场景: 价格、尺寸、科学计算等需要精度的场景
3. 布尔类型(bool)
存储逻辑值,只有两个可能的值:true 或 false。
csharp
bool isStudent = true; // 是学生
bool isAdult = false; // 是成年人
bool hasMoney = true; // 有钱
常用场景: 条件判断、状态标记、开关等
4. 字符串类型(string)
存储文本信息。
csharp
string name = "小明"; // 姓名
string message = "Hello!"; // 消息
string email = "abc@example.com"; // 邮箱
常用场景: 姓名、地址、消息、文本内容等
注意: 字符串需要用双引号 " 包围
5. 其他基础类型
除了上述常用的 4 种类型,C# 还提供了其他基础类型:
5.1 其他整数类型
| 类型 | 说明 | 范围 | 大小 |
|---|---|---|---|
sbyte |
有符号字节 | -128 到 127 | 8 位 |
byte |
无符号字节 | 0 到 255 | 8 位 |
short |
短整数 | -32,768 到 32,767 | 16 位 |
ushort |
无符号短整数 | 0 到 65,535 | 16 位 |
int |
整数(最常用) | -2,147,483,648 到 2,147,483,647 | 32 位 |
uint |
无符号整数 | 0 到 4,294,967,295 | 32 位 |
long |
长整数 | -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 | 64 位 |
ulong |
无符号长整数 | 0 到 18,446,744,073,709,551,615 | 64 位 |
csharp
byte age = 18; // 年龄,范围 0-255 足够
short temperature = -10; // 温度,可能是负数
long population = 1400000000; // 人口数量,需要更大的范围
选择原则:
- 默认使用
int(最常用) - 需要存储大数时使用
long - 需要确保非负时使用
uint、ulong - 处理字节数据时使用
byte、sbyte
5.2 其他浮点数类型
| 类型 | 说明 | 精度 | 大小 |
|---|---|---|---|
float |
单精度浮点数 | 约 6-7 位小数 | 32 位 |
double |
双精度浮点数(最常用) | 约 15-16 位小数 | 64 位 |
decimal |
高精度小数 | 约 28-29 位小数 | 128 位 |
csharp
float pi = 3.1415926535f; // 单精度,数字后加 f
double gravity = 9.80665; // 双精度,默认
decimal price = 19.99m; // 高精度,适合金融计算,数字后加 m
选择原则:
- 默认使用
double(最常用) - 需要高精度 时使用
decimal(如金额计算) - 需要节省内存时使用
float
重要提示:
csharp
// ❌ 不建议:用 float 或 double 存储金额
double money = 0.1 + 0.2;
Console.WriteLine(money); // 输出:0.30000000000000004(精度损失!)
// ✅ 推荐:用 decimal 存储金额
decimal money = 0.1m + 0.2m;
Console.WriteLine(money); // 输出:0.3(精确!)
5.3 字符类型(char)
存储单个字符。
csharp
char grade = 'A'; // 等级
char symbol = '@'; // 符号
char digit = '5'; // 数字字符(注意:这是字符,不是数字!)
注意: 字符需要用单引号 ' 包围
常用场景: 性别('男'、'女')、等级、单个符号等
转义字符:
csharp
char newline = '\n'; // 换行符
char tab = '\t'; // 制表符
char quote = '\''; // 单引号
5.4 空值类型(可空类型)
有时变量可能没有值,C# 使用 ? 表示可空类型。
csharp
int? age = null; // age 可以为 null(没有年龄)
double? price = null; // price 可以为 null(没有价格)
bool? isVerified = null; // isVerified 可以为 null(未验证)
// 判断是否有值
if (age.HasValue)
{
Console.WriteLine($"年龄:{age.Value}");
}
else
{
Console.WriteLine("年龄未知");
}
常用场景:
- 数据库中可能为 null 的字段
- 表单中用户未填写的字段
- 可能有也可能没有的值
数据类型对比表
| 类型 | 关键字 | 示例 | 说明 |
|---|---|---|---|
| 整数 | int |
123, -45 |
没有小数的数字 |
| 浮点数 | double |
3.14, 0.5 |
带小数的数字 |
| 布尔 | bool |
true, false |
逻辑值 |
| 字符串 | string |
"Hello" |
文本内容 |
变量命名规则和规范
命名规则(必须遵守)
- 只能包含 :字母、数字、下划线
_ - 不能以数字开头
- 不能使用 C# 关键字 (如
class,void,int等) - 区分大小写 :
age和Age是不同的变量
命名规范(推荐遵守)
✅ 好的命名示例:
csharp
int studentAge; // 清晰易懂
string firstName; // 驼峰命名法
bool isLoggedIn; // 布尔值通常以 is 开头
❌ 不好的命名示例:
csharp
int a; // 太短,不明确
int Age1; // 含义不清
string n; // 不推荐
驼峰命名法(Camel Case)
当变量名由多个单词组成时:
- 第一个单词首字母小写
- 后续单词首字母大写
示例:
csharp
string firstName; // 不是 firstname
string userEmailAddress; // 清晰易读
int totalScore; // 不是 totalscore
实践:计算圆面积
问题:计算半径为 5 的圆的面积
圆面积公式:面积 = π × 半径 × 半径
csharp
using System;
namespace Week2Practice
{
class Program
{
static void Main(string[] args)
{
// 定义变量
double pi = 3.1415926; // 圆周率
double radius = 5; // 半径
double area; // 面积
// 计算面积
area = pi * radius * radius;
// 输出结果
Console.WriteLine($"半径为 {radius} 的圆的面积是:{area}");
}
}
}
输出结果:
半径为 5 的圆的面积是:78.539815
代码说明:
double pi = 3.1415926;- 定义圆周率变量double radius = 5;- 定义半径变量double area;- 声明面积变量(先声明,后赋值)area = pi * radius * radius;- 计算面积并赋值给 area$"..."- 字符串插值,可以在字符串中直接使用变量
实践:判断年龄是否成年
csharp
using System;
namespace Week2Practice
{
class Program
{
static void Main(string[] args)
{
// 定义变量
int age = 18; // 年龄
int adultAge = 18; // 成年年龄标准
bool isAdult; // 是否成年
// 判断是否成年
isAdult = age >= adultAge; // age 是否大于等于 18
// 输出结果
Console.WriteLine($"年龄:{age} 岁");
Console.WriteLine($"是否成年:{isAdult}");
}
}
}
输出结果:
年龄:18 岁
是否成年:True
代码说明:
bool isAdult;- 声明布尔变量age >= adultAge- 比较表达式,结果为true或false- 当
age = 18时,18 >= 18为true
字符串插值($ 字符串)
C# 6.0 引入的便捷特性,可以方便地在字符串中嵌入变量。
csharp
string name = "张三";
int age = 20;
// 传统方式(字符串拼接)
Console.WriteLine("姓名:" + name + ",年龄:" + age);
// 字符串插值(推荐)
Console.WriteLine($"姓名:{name},年龄:{age}");
两种方式输出相同的结果,但字符串插值更清晰、易读。
变量赋值
声明和赋值
csharp
// 方式一:声明时赋值
int age = 20;
// 方式二:先声明,后赋值
int score;
score = 95;
// 方式三:一次声明多个变量
int a = 1, b = 2, c = 3;
变量重新赋值
csharp
int age = 18;
Console.WriteLine(age); // 输出:18
age = 25; // 重新赋值
Console.WriteLine(age); // 输出:25
只读变量(常量)
如果变量的值不会改变,可以使用 const 关键字定义常量。
csharp
const double Pi = 3.1415926; // 常量命名通常首字母大写
const int MaxCount = 100;
// Pi = 3.14; // 错误!常量不能重新赋值
本章总结
- ✅ 理解了变量的概念(盒子比喻)
- ✅ 学习了 C# 基本数据类型
- ✅ 掌握了变量命名规则和规范
- ✅ 实践了计算圆面积和判断成年
- ✅ 学会了字符串插值的用法