OneBigLoser
OneBigLoser
发布于 2024-06-23 / 13 阅读
0
0

C# 变量和数据类型 (1)

首先,让我们了解什么是变量。变量是程序中存储数据的容器,每个变量都有一个名称和类型。变量的声明和初始化是两个重要步骤。

1. 变量的规则

变量是程序中存储数据的容器,每个变量都有一个名称(变量名)和一个类型(数据类型)。在使用变量之前,需要先声明它。

 

变量的声明和初始化:

int age; // 声明一个名为age的整数变量
age = 25; // 初始化变量age,赋值为25

// 声明并初始化
int height = 170;

变量命名规则:

  1. 变量名必须以字母或下划线开头。

  2. 变量名只能包含字母、数字和下划线。

  3. 变量名是区分大小写的(例如,ageAge是不同的变量)。

  4. 变量名不能是C#的关键字(如intforclass等)。

常见的值类型和引用类型和它们的范围。

值类型:

  1. byte (字节):

    • 范围: 0 到 255

    • 占用 1 个字节 (8 位)

    • 可以理解为一个小盒子,最多能装 255 个小球

  2. short (短整型):

    • 范围: -32,768 到 32,767

    • 占用 2 个字节 (16 位)

    • 可以理解为一个稍大的盒子,能装正负两种小球,总共 65,536 个

  3. int (整型):

    • 范围: -2,147,483,648 到 2,147,483,647

    • 占用 4 个字节 (32 位)

    • 可以理解为一个大盒子,能装更多的正负小球,总共 4,294,967,296 个

  4. long (长整型):

    • 范围: -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807

    • 占用 8 个字节 (64 位)

    • 可以理解为一个超大盒子,能装非常多的正负小球,总共 18,446,744,073,709,551,616 个

  5. float (单精度浮点型):

    • 范围: 大约 ±1.5 x 10^-45 到 ±3.4 x 10^38

    • 占用 4 个字节 (32 位)

    • 可以理解为一个能装小数的盒子,但精度有限

  6. double (双精度浮点型):

    • 范围: 大约 ±5.0 x 10^-324 到 ±1.7 x 10^308

    • 占用 8 个字节 (64 位)

    • 可以理解为一个能装更精确小数的大盒子

引用类型:

  1. string (字符串):

    • 表示文本,由一系列字符组成

    • 长度可变,理论上无限制

    • 可以理解为一串连在一起的字符珠子

  2. 数组:

    • 存储相同类型元素的集合

    • 长度在创建时确定,不可变

    • 可以理解为一排有编号的盒子,每个盒子装相同类型的东西

  3. 类 (class):

    • 用户自定义的引用类型

    • 封装了数据和行为

    • 可以理解为一个自定义的模具,可以创建出具有相同属性和方法的对象

值类型和引用类型的主要区别在于存储方式:

  • 值类型直接存储数据,在内存中占用固定大小的空间

  • 引用类型存储对数据的引用,实际数据存储在另一个内存位置

一个字节(Byte)是什么?

一个字节(Byte)是计算机存储和处理数据的基本单位之一,通常由8位(bit)组成。每一位可以存储一个二进制值(0或1),因此一个字节可以存储2^8 = 256种不同的值,从0到255。这意味着一个字节可以用于存储以下内容:

1. 数字

一个字节可以存储0到255之间的整数。这在许多应用中非常有用,例如存储计数器值、状态标志等。

2. 字符

一个字节通常用来存储一个字符。例如,在ASCII编码中,一个字节可以表示一个字符,如'A'、'B'、'1'、'!'等。ASCII编码只使用了0到127的值,因此一个字节足够存储所有ASCII字符。

3. 颜色值

在图像处理中,一个字节可以用来存储颜色通道的值。例如,24位真彩色图像中的每个像素通常由三个字节组成,分别表示红色、绿色和蓝色(RGB)通道的值,每个通道的值范围为0到255。

4. 布尔值

虽然布尔值(true或false)只需要一位来存储,但在实际应用中,布尔值通常用一个字节来存储,以便于处理和存取。

5. 指令

在某些计算机架构中,一个字节可以存储一条简单的机器指令。不同的指令集合架构(ISA)可能有不同的指令长度,但一些简单的操作(如加载或存储)可能只需要一个字节。

6. 小数据块

一个字节可以用来存储小数据块的标记或标识符。例如,在某些协议或数据格式中,一个字节可以用来标识数据包的类型或长度。

十六进制:0x41 (65 in decimal)
ASCII字符:'A'
颜色值(红色通道):255 (纯红)
布尔值:true (1)

2.数据类型

在C#中,数据类型定义了变量可以存储的数据的类型和大小。数据类型主要分为值类型和引用类型。

  • 值类型包括整数类型、浮点类型、字符型和布尔型。

  • 引用类型包括字符串、类、数组、接口和委托。

值类型

值类型变量直接包含它们的数据。在赋值时,实际的数据会被复制。值类型通常存储在栈(Stack)中。

引用类型

引用类型变量存储的是对其数据的引用(即内存地址)。在赋值时,只复制引用,不复制实际数据。引用类型通常存储在堆(Heap)中。

using System;

public class Program
{
    public static void Main()
    {
        // 值类型示例
        int a = 10;
        int b = a;
        b = 20;
        Console.WriteLine("值类型示例:");
        Console.WriteLine("a: " + a); // a 仍然是 10
        Console.WriteLine("b: " + b); // b 是 20

        // 引用类型示例
        Person person1 = new Person { Name = "Alice" };
        Person person2 = person1;
        person2.Name = "Bob";
        Console.WriteLine("\n引用类型示例:");
        Console.WriteLine("person1.Name: " + person1.Name); // person1.Name 是 "Bob"
        Console.WriteLine("person2.Name: " + person2.Name); // person2.Name 是 "Bob"
    }
}

public class Person
{
    public string Name { get; set; }
}

值类型(不分享玩具)

假设有两个兄弟,每个人都有自己的玩具车。当其中一个兄弟修改了自己的玩具车,另一个兄弟的玩具车不会受影响。

using System;

public class Program
{
    public static void Main()
    {
        // 值类型示例
        int toyCarA = 10; // 哥哥的玩具车数量
        int toyCarB = toyCarA; // 弟弟得到和哥哥同样数量的玩具车
        toyCarB = 20; // 弟弟又得到了一些玩具车

        Console.WriteLine("值类型示例:");
        Console.WriteLine("哥哥的玩具车数量: " + toyCarA); // 哥哥的玩具车数量还是 10
        Console.WriteLine("弟弟的玩具车数量: " + toyCarB); // 弟弟的玩具车数量是 20
    }
}

引用类型(分享玩具)

假设有两个兄弟,他们一起玩同一辆遥控车。如果其中一个兄弟修改了遥控车,另一个兄弟也会看到变化。

using System;

public class Program
{
    public static void Main()
    {
        // 引用类型示例
        RemoteCar remoteCar1 = new RemoteCar { Speed = 10 }; // 哥哥的遥控车速度
        RemoteCar remoteCar2 = remoteCar1; // 弟弟也玩同一辆遥控车
        remoteCar2.Speed = 20; // 弟弟加快了遥控车的速度

        Console.WriteLine("\n引用类型示例:");
        Console.WriteLine("哥哥的遥控车速度: " + remoteCar1.Speed); // 哥哥的遥控车速度是 20
        Console.WriteLine("弟弟的遥控车速度: " + remoteCar2.Speed); // 弟弟的遥控车速度也是 20
    }
}

public class RemoteCar
{
    public int Speed { get; set; }
}

代码总结

  • 值类型像是每个人有自己的玩具,不会互相影响。

  • 引用类型像是大家共享同一个玩具,一个人改变玩具的状态,其他人也会看到改变。

值类型的应用场景:

int score = 0;
int lives = 3;
float positionX = 10.5f;
float positionY = 2.7f;
byte volume = 80;
byte brightness = 120;

玩家分数或生命值,存储游戏对象的位置坐标,游戏设置中的音量或亮度

引用类型的应用场景:

//存储游戏对象的名称或描述:
string playerName = "Hero";
string itemDescription = "A powerful sword";

//管理游戏中的物品栏:
Item[] inventory = new Item[10];

//表示游戏中的角色或敌人:
Player player = new Player();
Enemy enemy = new Enemy();

简单题目:

题目1:
声明一个整型变量 age 并赋值为 25。

题目2:
声明一个字符串变量 name 并赋值为你的名字。

题目3:
声明一个浮点型变量 height 并赋值为你的身高(单位:米)。

题目4:
声明一个布尔型变量 isStudent 并赋值为 true 或 false,表示你是否是学生。

题目5:
声明一个字符型变量 grade 并赋值为你的成绩等级(如 'A', 'B', 'C' 等)。

int age = 25;
string name = "你的名字";
float height = 1.75f;
bool isStudent = true;
char grade = 'A';

难度提升的题目:

题目1:
编写一个程序,计算并打印两个整数的和、差、积、商。

题目2:
编写一个程序,接收用户输入的姓名和年龄,然后打印一条欢迎消息。

题目3:
编写一个程序,计算并打印圆的面积和周长,其中圆的半径由用户输入。

题目4:
编写一个程序,判断用户输入的数字是否为偶数,并打印结果。

题目5:
编写一个程序,接收用户输入的字符,判断它是否为元音字母(a, e, i, o, u),并打印结果。

//1
int num1 = 10;
int num2 = 5;

int sum = num1 + num2;
int difference = num1 - num2;
int product = num1 * num2;
int quotient = num1 / num2;

Console.WriteLine("Sum: " + sum);
Console.WriteLine("Difference: " + difference);
Console.WriteLine("Product: " + product);
Console.WriteLine("Quotient: " + quotient);


//2
Console.Write("Enter your name: ");
string name = Console.ReadLine();

Console.Write("Enter your age: ");
int age = Convert.ToInt32(Console.ReadLine());

Console.WriteLine("Welcome, " + name + "! You are " + age + " years old.");


//3
Console.Write("Enter the radius of the circle: ");
float radius = Convert.ToSingle(Console.ReadLine());

float area = 3.14159f * radius * radius;
float circumference = 2 * 3.14159f * radius;

Console.WriteLine("Area: " + area);
Console.WriteLine("Circumference: " + circumference);

//4
Console.Write("Enter a number: ");
int number = Convert.ToInt32(Console.ReadLine());

bool isEven = (number % 2 == 0);

if (isEven)
{
    Console.WriteLine(number + " is even.");
}
else
{
    Console.WriteLine(number + " is odd.");
}

//5
Console.Write("Enter a character: ");
char character = Console.ReadLine()[0];

bool isVowel = (character == 'a' || character == 'e' || character == 'i' || character == 'o' || character == 'u' ||
                character == 'A' || character == 'E' || character == 'I' || character == 'O' || character == 'U');

if (isVowel)
{
    Console.WriteLine(character + " is a vowel.");
}
else
{
    Console.WriteLine(character + " is not a vowel.");
}


评论