C#初级教程(7)——初级期末检测

C# WinForms游戏开发实战:雷霆战机项目架构与核心技术解析 游戏开发是计算机图形学与实时交互系统的重要应用领域,其核心在于游戏循环、对象管理与碰撞检测等基础原理。通过面向对象设计模式,开发者可以构建可维护的游戏架构,实现流畅的动画与交互体验。在工程实践中,双缓冲技术能有效解决画面闪烁问题,而对象池模式则显著优化了内存管理与性能。这些技术共同支撑了如《雷霆战机》等2D射击游戏的开发,为C# WinForms桌面应用提供了完整的游戏开发范本,尤其适合课程设计或综合实战演练。 阅读详情

练习 1:计算圆的周长和面积

改编题目:编写一个 C# 程序,让用户输入圆的半径,然后计算并输出该圆的周长和面积,结果保留两位小数。

using System;

class CircleCalculation
{
    static void Main()
    {
        const double pi = 3.14;
        Console.Write("请输入圆的半径:");
        int n = int.Parse(Console.ReadLine());
        double circumference = 2 * pi * n;
        double area = pi * n * n;
        Console.WriteLine($"半径为 {n} 的圆的周长为:{circumference:F2}");
        Console.WriteLine($"半径为 {n} 的圆的面积为:{area:F2}");
    }
}

练习 2:两个变量值交换(两种方法)

改编题目:编写一个 C# 程序,实现两个整数变量值的交换,分别使用临时变量和不使用临时变量两种方法,并输出交换后的结果

using System;

class VariableSwap
{
    static void Main()
    {
        // 方法一:使用临时变量
        int a = 8, b = 19;
        int temp = a;
        a = b;
        b = temp;
        Console.WriteLine($"使用临时变量交换后,a={a}, b={b}");

        // 方法二:不使用临时变量
        a = 8;
        b = 19;
        a = a + b;
        b = a - b;
        a = a - b;
        Console.WriteLine($"不使用临时变量交换后,a={a}, b={b}");
    }
}

练习 3:输入 3 个数,从小到大输出

改编题目:编写一个 C# 程序,让用户输入 3 个整数,然后将这 3 个数从小到大排序并输出。

using System;

class SortThreeNumbers
{
    static void Main()
    {
        Console.Write("请您输入 3 个整数,用空格区分开:");
        string[] input = Console.ReadLine().Split(' ');
        int a = int.Parse(input[0]);
        int b = int.Parse(input[1]);
        int c = int.Parse(input[2]);

        if (a > b)
        {
            int temp = a;
            a = b;
            b = temp;
        }
        if (a > c)
        {
            int temp = a;
            a = c;
            c = temp;
        }
        if (b > c)
        {
            int temp = b;
            b = c;
            c = temp;
        }

        Console.WriteLine($"从小到大排序为:{a} {b} {c}");
    }
}

练习 4:根据学生成绩输出等级

改编题目:编写一个 C# 程序,让用户输入一个 0 - 100 之间的学生成绩,根据成绩输出对应的等级(60 分以下为不及格,60 - 69 为合格,70 - 79 为良,80 - 89 为优,90 以上为超神)。

using System;

class GradeEvaluation
{
    static void Main()
    {
        Console.Write("请输入学生成绩(0 - 100):");
        int score = int.Parse(Console.ReadLine());

        if (score < 60)
        {
            Console.WriteLine("不及格");
        }
        else if (score >= 60 && score <= 69)
        {
            Console.WriteLine("合格");
        }
        else if (score >= 70 && score <= 79)
        {
            Console.WriteLine("良");
        }
        else if (score >= 80 && score <= 89)
        {
            Console.WriteLine("优");
        }
        else
        {
            Console.WriteLine("超神");
        }
    }
}

练习 5:求 0 - 100 之间所有偶数和奇数的和

改编题目:编写一个 C# 程序,计算 0 - 100 之间所有偶数的和以及所有奇数的和,并分别输出结果。

using System;

class EvenOddSum
{
    static void Main()
    {
        int evenSum = 0;
        int oddSum = 0;

        for (int i = 0; i <= 100; i++)
        {
            if (i % 2 == 0)
            {
                evenSum += i;
            }
            else
            {
                oddSum += i;
            }
        }

        Console.WriteLine("0 - 100 之间所有偶数的和为:" + evenSum);
        Console.WriteLine("0 - 100 之间所有奇数的和为:" + oddSum);
    }
}

练习 6:求 10 的阶乘

改编题目:编写一个 C# 程序,计算 10 的阶乘并输出结果。

using System;

class FactorialCalculation
{
    static void Main()
    {
        int result = 1;
        for (int i = 1; i <= 10; i++)
        {
            result *= i;
        }
        Console.WriteLine("10 的阶乘为:" + result);
    }
}

练习 7:反向输出数字

改编题目:编写一个 C# 程序,让用户输入一个整数,然后将该整数反向输出。

using System;

class ReverseNumber
{
    static void Main()
    {
        Console.Write("请输入一个整数:");
        int num = int.Parse(Console.ReadLine());
        int reversed = 0;
        while (num != 0)
        {
            reversed = reversed * 10 + num % 10;
            num /= 10;
        }
        Console.WriteLine("反向输出的数字为:" + reversed);
    }
}

练习 8:输出指定形状

改编题目:编写一个 C# 程序,在屏幕上输出如下形状:

*
**
***
****
*****
******
using System;

class ShapeOutput1
{
    static void Main()
    {
        for (int i = 1; i <= 6; i++)
        {
            for (int j = 0; j < i; j++)
            {
                Console.Write("*");
            }
            Console.WriteLine();
        }
    }
}

练习 10:单循环输出指定形状

改编题目:编写一个 C# 程序,使用单循环在屏幕上输出如下形状:

*
**
***
****
*****
******
using System;

class ShapeOutputSingleLoop
{
    static void Main()
    {
        string stars = "";
        for (int i = 1; i <= 6; i++)
        {
            stars += "*";
            Console.WriteLine(stars);
        }
    }
}

练习 11:输出指定对称形状

改编题目:编写一个 C# 程序,在屏幕上输出如下形状:

*
***
*****
*******
*********
*******
*****
***
*
using System;

class SymmetricShapeOutput
{
    static void Main()
    {
        int maxStars = 9;
        for (int i = 1; i <= maxStars; i += 2)
        {
            for (int j = 0; j < (maxStars - i) / 2; j++)
            {
                Console.Write(" ");
            }
            for (int k = 0; k < i; k++)
            {
                Console.Write("*");
            }
            Console.WriteLine();
        }
        for (int i = maxStars - 2; i >= 1; i -= 2)
        {
            for (int j = 0; j < (maxStars - i) / 2; j++)
            {
                Console.Write(" ");
            }
            for (int k = 0; k < i; k++)
            {
                Console.Write("*");
            }
            Console.WriteLine();
        }
    }
}

练习 12:打印 9 * 9 乘法表

改编题目:编写一个 C# 程序,打印 9 * 9 乘法表。

using System;

class MultiplicationTable
{
    static void Main()
    {
        for (int i = 1; i <= 9; i++)
        {
            for (int j = 1; j <= i; j++)
            {
                Console.Write($"{j} * {i} = {i * j}\t");
            }
            Console.WriteLine();
        }
    }
}

练习 13:找出 100 到 999 之间的水仙花数(两种方法)

改编题目:编写一个 C# 程序,找出 100 到 999 之间的所有水仙花数,分别使用单循环和嵌套循环两种方法。

using System;

class NarcissisticNumbersSingleLoop
{
    static void Main()
    {
        for (int num = 100; num < 1000; num++)
        {
            int hundreds = num / 100;
            int tens = (num / 10) % 10;
            int units = num % 10;
            if (hundreds * hundreds * hundreds + tens * tens * tens + units * units * units == num)
            {
                Console.WriteLine(num);
            }
        }
    }
}

C# 代码(嵌套循环):

using System;

class NarcissisticNumbersNestedLoop
{
    static void Main()
    {
        for (int i = 1; i <= 9; i++)
        {
            for (int j = 0; j <= 9; j++)
            {
                for (int k = 0; k <= 9; k++)
                {
                    int num = i * 100 + j * 10 + k;
                    if (i * i * i + j * j * j + k * k * k == num)
                    {
                        Console.WriteLine(num);
                    }
                }
            }
        }
    }
}

练习 14:组成不重复的三位数

改编题目:编写一个 C# 程序,使用 1、2、3、4 四个数字,找出能组成多少个不相同且无重复数字的三位数,并输出这些三位数。

using System;

class ThreeDigitNumbers
{
    static void Main()
    {
        int count = 0;
        for (int i = 1; i <= 4; i++)
        {
            for (int j = 1; j <= 4; j++)
            {
                if (j == i) continue;
                for (int k = 1; k <= 4; k++)
                {
                    if (k == i || k == j) continue;
                    int num = i * 100 + j * 10 + k;
                    Console.WriteLine(num);
                    count++;
                }
            }
        }
        Console.WriteLine("能组成的不相同且无重复数字的三位数共有:" + count + " 个");
    }
}

练习 15:歌星大赛打分计算平均分

改编题目:编写一个 C# 程序,模拟歌星大赛打分过程。假设有 100 个评委给选手打分,分值在 1 - 100 之间,去掉一个最高分和一个最低分后,计算剩余 98 个分数的平均分作为选手的最后得分。

using System;

class SingerCompetitionScore
{
    static void Main()
    {
        Random random = new Random();
        int[] scores = new int[100];
        for (int i = 0; i < 100; i++)
        {
            scores[i] = random.Next(1, 101);
        }

        int maxScore = scores[0];
        int minScore = scores[0];
        int totalScore = 0;

        foreach (int score in scores)
        {
            if (score > maxScore) maxScore = score;
            if (score < minScore) minScore = score;
            totalScore += score;
        }

        totalScore = totalScore - maxScore - minScore;
        double averageScore = (double)totalScore / 98;

        Console.WriteLine("选手的最后得分是:" + averageScore);
    }
}

练习 16:可乐兑换问题

改编题目:已知 3 个可乐瓶可以换一瓶可乐,现在有 364 瓶可乐,编写一个 C# 程序,计算一共可以喝多少瓶可乐,最后剩下几个空瓶。

using System;

class ColaExchange
{
    static void Main()
    {
        int totalCola = 364;
        int emptyBottles = 364;

        while (emptyBottles >= 3)
        {
            int exchangedCola = emptyBottles / 3;
            totalCola += exchangedCola;
            emptyBottles = emptyBottles % 3 + exchangedCola;
        }

        Console.WriteLine("一共可以喝 " + totalCola + " 瓶可乐,剩下 " + emptyBottles + " 个空瓶。");
    }
}

练习 17:兔子繁殖问题

改编题目:有一对兔子,从出生后第 3 个月起,每个月都生一对兔子;小兔子长到第三个月后,每个月又生一对兔子。假如兔子都不死,编写一个 C# 程序,计算第 1 到第 20 个月里,每个月的兔子总数。

using System;

class RabbitReproduction
{
    static void Main()
    {
        int[] rabbits = new int[20];
        rabbits[0] = 1;
        rabbits[1] = 1;

        for (int i = 2; i < 20; i++)
        {
            rabbits[i] = rabbits[i - 1] + rabbits[i - 2];
        }

        for (int i = 0; i < 20; i++)
        {
            Console.WriteLine($"第 {i + 1} 个月的兔子总数为:{rabbits[i]} 对");
        }
    }
}

练习 18:百钱百鸡问题

改编题目:编写一个 C# 程序,解决百钱百鸡问题。已知公鸡 5 元一只,母鸡 3 元一只,小鸡 1 元 3 只,现在有 100 元钱要买 100 只鸡,找出所有可能的购买方案并输出。
C# 代码:

using System;

class HundredMoneyHundredChickens
{
    static void Main()
    {
        for (int rooster = 0; rooster <= 20; rooster++)
        {
            for (int hen = 0; hen <= 33; hen++)
            {
                int chick = 100 - rooster - hen;
                if (chick % 3 == 0 && rooster * 5 + hen * 3 + chick / 3 == 100)
                {
                    Console.WriteLine($"公鸡:{rooster} 只,母鸡:{hen} 只,小鸡:{chick} 只");
                }
            }
        }
    }
}

练习 19:输出一个 120 - 245 之间的随机数

改编题目:编写一个 C# 程序,模拟抽奖活动,每次运行程序时,从 120 到 245 这个区间内随机抽取一个幸运号码并输出。
using System;

class RandomNumberInRange
{
    static void Main()
    {
        Random random = new Random();
        int luckyNumber = random.Next(120, 246);
        Console.WriteLine($"本次抽奖的幸运号码是: {luckyNumber}");
    }
}

练习 20:猜数字游戏

设计一个 C# 程序实现猜数字游戏。程序会随机生成一个 0 到 50 之间的整数,玩家需要猜测这个数字。每次猜测后,程序会提示玩家猜大了、猜小了还是猜对了,直到玩家猜对为止。同时,记录玩家猜测的次数并在猜对后输出。

using System;

class GuessTheNumberGame
{
    static void Main()
    {
        Random random = new Random();
        int secretNumber = random.Next(0, 51);
        int guess;
        int attempts = 0;

        Console.WriteLine("我心里想了一个 0 到 50 之间的数字,你可以开始猜啦!");

        do
        {
            Console.Write("请输入你猜测的数字: ");
            guess = int.Parse(Console.ReadLine());
            attempts++;

            if (guess < secretNumber)
            {
                Console.WriteLine($"你猜小了,这个数字比 {guess} 大。");
            }
            else if (guess > secretNumber)
            {
                Console.WriteLine($"你猜大了,这个数字比 {guess} 小。");
            }
            else
            {
                Console.WriteLine($"恭喜你,猜对了!这个数字就是 {secretNumber}。你一共用了 {attempts} 次猜测。");
            }
        } while (guess != secretNumber);
    }
}

练习 21:初始化数组并倒序输出

改编题目:编写一个 C# 程序,创建一个包含 10 个元素的整数数组,使用随机数为数组元素赋值(范围为 1 - 100),然后将数组元素倒序排列并输出。
using System;

class ReverseRandomArray
{
    static void Main()
    {
        int[] array = new int[10];
        Random random = new Random();

        // 用随机数初始化数组
        for (int i = 0; i < array.Length; i++)
        {
            array[i] = random.Next(1, 101);
        }

        // 倒序数组
        Array.Reverse(array);

        // 输出倒序后的数组
        Console.WriteLine("倒序后的数组元素为:");
        foreach (int num in array)
        {
            Console.Write(num + " ");
        }
        Console.WriteLine();
    }
}

练习 22:初始化数组并乱序输出(两种方法)

改编题目:在 C# 中,创建一个包含 10 个元素的数组,元素值为 0 到 10,然后使用两种不同的方法将数组元素打乱顺序并输出。
using System;

class ShuffleArray
{
    static void Main()
    {
        int[] array = new int[10];
        for (int i = 0; i < array.Length; i++)
        {
            array[i] = i;
        }

        // 方法一:使用 Random 类交换元素
        int[] shuffledArray1 = (int[])array.Clone();
        Random random = new Random();
        for (int i = shuffledArray1.Length - 1; i > 0; i--)
        {
            int j = random.Next(i + 1);
            int temp = shuffledArray1[i];
            shuffledArray1[i] = shuffledArray1[j];
            shuffledArray1[j] = temp;
        }

        Console.WriteLine("方法一乱序后的数组:");
        foreach (int num in shuffledArray1)
        {
            Console.Write(num + " ");
        }
        Console.WriteLine();

        // 方法二:使用 List 和 Random 类
        System.Collections.Generic.List<int> list = new System.Collections.Generic.List<int>(array);
        int[] shuffledArray2 = new int[list.Count];
        for (int i = 0; i < shuffledArray2.Length; i++)
        {
            int index = random.Next(list.Count);
            shuffledArray2[i] = list[index];
            list.RemoveAt(index);
        }

        Console.WriteLine("方法二乱序后的数组:");
        foreach (int num in shuffledArray2)
        {
            Console.Write(num + " ");
        }
        Console.WriteLine();
    }
}

练习 23:一维数组奇数偶数分区

改编题目:编写一个 C# 程序,创建一个包含 20 个元素的一维数组,使用随机数(范围 1 - 100)初始化数组。然后将数组中的奇数元素移到数组左边,偶数元素移到数组右边,并输出分区后的数组。
using System;

class OddEvenPartition
{
    static void Main()
    {
        int[] array = new int[20];
        Random random = new Random();

        // 用随机数初始化数组
        for (int i = 0; i < array.Length; i++)
        {
            array[i] = random.Next(1, 101);
        }

        // 分区操作
        int left = 0;
        int right = array.Length - 1;
        while (left < right)
        {
            while (left < right && array[left] % 2 != 0)
            {
                left++;
            }
            while (left < right && array[right] % 2 == 0)
            {
                right--;
            }
            if (left < right)
            {
                int temp = array[left];
                array[left] = array[right];
                array[right] = temp;
            }
        }

        // 输出分区后的数组
        Console.WriteLine("分区后的数组:");
        foreach (int num in array)
        {
            Console.Write(num + " ");
        }
        Console.WriteLine();
    }
}

练习 24:数组排序(选择、冒泡、插入)

改编题目:编写一个 C# 程序,创建一个包含 10 个随机整数(范围 1 - 100)的数组,分别使用选择排序、冒泡排序和插入排序算法对数组进行排序,并输出排序后的数组。
using System;

class ArraySorting
{
    static void Main()
    {
        int[] array = new int[10];
        Random random = new Random();

        // 用随机数初始化数组
        for (int i = 0; i < array.Length; i++)
        {
            array[i] = random.Next(1, 101);
        }

        // 选择排序
        int[] selectionSorted = (int[])array.Clone();
        for (int i = 0; i < selectionSorted.Length - 1; i++)
        {
            int minIndex = i;
            for (int j = i + 1; j < selectionSorted.Length; j++)
            {
                if (selectionSorted[j] < selectionSorted[minIndex])
                {
                    minIndex = j;
                }
            }
            int temp = selectionSorted[i];
            selectionSorted[i] = selectionSorted[minIndex];
            selectionSorted[minIndex] = temp;
        }

        Console.WriteLine("选择排序后的数组:");
        foreach (int num in selectionSorted)
        {
            Console.Write(num + " ");
        }
        Console.WriteLine();

        // 冒泡排序
        int[] bubbleSorted = (int[])array.Clone();
        for (int i = 0; i < bubbleSorted.Length - 1; i++)
        {
            for (int j = 0; j < bubbleSorted.Length - i - 1; j++)
            {
                if (bubbleSorted[j] > bubbleSorted[j + 1])
                {
                    int temp = bubbleSorted[j];
                    bubbleSorted[j] = bubbleSorted[j + 1];
                    bubbleSorted[j + 1] = temp;
                }
            }
        }

        Console.WriteLine("冒泡排序后的数组:");
        foreach (int num in bubbleSorted)
        {
            Console.Write(num + " ");
        }
        Console.WriteLine();

        // 插入排序
        int[] insertionSorted = (int[])array.Clone();
        for (int i = 1; i < insertionSorted.Length; i++)
        {
            int key = insertionSorted[i];
            int j = i - 1;
            while (j >= 0 && insertionSorted[j] > key)
            {
                insertionSorted[j + 1] = insertionSorted[j];
                j--;
            }
            insertionSorted[j + 1] = key;
        }

        Console.WriteLine("插入排序后的数组:");
        foreach (int num in insertionSorted)
        {
            Console.Write(num + " ");
        }
        Console.WriteLine();
    }
}

练习 25:二维数组(2 * 3)赋值(两种方法,单循环、嵌套循环)

改编题目:编写一个 C# 程序,创建一个 2 行 3 列的二维整数数组,分别使用单循环和嵌套循环的方法为数组元素赋值,赋值规则为从 1 开始依次递增,并输出数组元素。
using System;

class TwoDimensionalArrayAssignment
{
    static void Main()
    {
        int[,] array = new int[2, 3];

        // 方法一:单循环赋值
        int index = 1;
        for (int i = 0; i < array.GetLength(0); i++)
        {
            for (int j = 0; j < array.GetLength(1); j++)
            {
                array[i, j] = index++;
            }
        }

        Console.WriteLine("单循环赋值后的数组:");
        for (int i = 0; i < array.GetLength(0); i++)
        {
            for (int j = 0; j < array.GetLength(1); j++)
            {
                Console.Write(array[i, j] + " ");
            }
            Console.WriteLine();
        }

        // 方法二:嵌套循环赋值
        index = 1;
        for (int i = 0; i < array.GetLength(0); i++)
        {
            for (int j = 0; j < array.GetLength(1); j++)
            {
                array[i, j] = index++;
            }
        }

        Console.WriteLine("嵌套循环赋值后的数组:");
        for (int i = 0; i < array.GetLength(0); i++)
        {
            for (int j = 0; j < array.GetLength(1); j++)
            {
                Console.Write(array[i, j] + " ");
            }
            Console.WriteLine();
        }
    }
}

练习 26:数组内容拷贝

改编题目:编写一个 C# 程序,有一个 2 行 3 列的二维数组 arr1,其元素值为 {{1, 2, 3}, {4, 5, 6}},将该数组的元素按顺序拷贝到一个 3 行 2 列的二维数组 arr2 中,并输出 arr2 的元素。
using System;

class ArrayCopying
{
    static void Main()
    {
        int[,] arr1 = { { 1, 2, 3 }, { 4, 5, 6 } };
        int[,] arr2 = new int[3, 2];

        int row = 0;
        int col = 0;
        for (int i = 0; i < arr1.GetLength(0); i++)
        {
            for (int j = 0; j < arr1.GetLength(1); j++)
            {
                arr2[row, col] = arr1[i, j];
                col++;
                if (col == arr2.GetLength(1))
                {
                    col = 0;
                    row++;
                }
            }
        }

        Console.WriteLine("拷贝后的数组 arr2:");
        for (int i = 0; i < arr2.GetLength(0); i++)
        {
            for (int j = 0; j < arr2.GetLength(1); j++)
            {
                Console.Write(arr2[i, j] + " ");
            }
            Console.WriteLine();
        }
    }
}

练习 28:初始化特定数组(两种方法)

改编题目:在 C# 中,使用两种不同的方法初始化一个 9 行 9 列的二维数组,数组元素按照如下规律排列:
1 1 1 1 1 1 1 1 1
1 2 2 2 2 2 2 2 1
1 2 3 3 3 3 3 2 1
1 2 3 4 4 4 3 2 1
1 2 3 4 5 4 3 2 1
1 2 3 4 4 4 3 2 1
1 2 3 3 3 3 3 2 1
1 2 2 2 2 2 2 2 1
1 1 1 1 1 1 1 1 1
using System;

class SpecialArrayInitialization
{
    static void Main()
    {
        int[,] array = new int[9, 9];

        // 方法一:嵌套循环手动赋值
        for (int i = 0; i < 9; i++)
        {
            for (int j = 0; j < 9; j++)
            {
                int min = Math.Min(i, j);
                min = Math.Min(min, 8 - i);
                min = Math.Min(min, 8 - j);
                array[i, j] = min + 1;
            }
        }

        Console.WriteLine("方法一初始化后的数组:");
        for (int i = 0; i < 9; i++)
        {
            for (int j = 0; j < 9; j++)
            {
                Console.Write(array[i, j] + " ");
            }
            Console.WriteLine();
        }

        // 方法二:分层赋值
        int[,] array2 = new int[9, 9];
        for (int layer = 0; layer < 5; layer++)
        {
            for (int i = layer; i < 9 - layer; i++)
            {
                for (int j = layer; j < 9 - layer; j++)
                {
                    array2[i, j] = layer + 1;
                }
            }
        }

        Console.WriteLine("方法二初始化后的数组:");
        for (int i = 0; i < 9; i++)
        {
            for (int j = 0; j < 9; j++)
            {
                Console.Write(array2[i, j] + " ");
            }
            Console.WriteLine();
        }
    }
}

练习 29:输出杨辉三角(二维数组法)n 层

改编题目

编写一个 C# 程序,让用户输入一个正整数 n,然后使用二维数组的方法输出 n 层的杨辉三角。

using System;

class PascalTriangle
{
    static void Main()
    {
        Console.Write("请输入要输出的杨辉三角的层数: ");
        int n = int.Parse(Console.ReadLine());
        int[,] triangle = new int[n, n];

        for (int i = 0; i < n; i++)
        {
            for (int j = 0; j <= i; j++)
            {
                if (j == 0 || j == i)
                {
                    triangle[i, j] = 1;
                }
                else
                {
                    triangle[i, j] = triangle[i - 1, j - 1] + triangle[i - 1, j];
                }
            }
        }

        Console.WriteLine("杨辉三角:");
        for (int i = 0; i < n; i++)
        {
            for (int k = 0; k < n - i - 1; k++)
            {
                Console.Write("  ");
            }
            for (int j = 0; j <= i; j++)
            {
                Console.Write(triangle[i, j].ToString().PadLeft(4));
            }
            Console.WriteLine();

结语:C#初级教程到此结束,感谢努力进步的你,愿你学习之路一路繁花。

教师职业技能训练——拟定模拟试卷(附带答案) 制定一份八年级信息科技期末考试试卷及答案 阅读详情

相关推荐

Unity3D+Vuforia的C#解密AR小游戏源码深度解析

增强现实开发中,如何让虚拟内容稳定地锚定在真实物体上,是决定交互体验的核心问题。Vuforia 作为成熟的AR引擎,其图像目标(Image Target)技术通过预先提取特征点并进行实时匹配,为卡片、海报等平面物体提供可靠的跟踪能力。而 C# 脚本则承担了状态管理、输入校验与界面切换等逻辑,两者结合能够形成完整的AR交互链路。在 Unity 3D 游戏引擎中集成 Vuforia,可以快速搭建基于图像识别的解密类小游戏,这类玩法常见于展台互动、教育游戏与实体桌游增强场景。实际开发中涉及识别方案选型、跟踪事件回

weixin_28025327的博客 212

C#小游戏——贪吃蛇~详细过程+全部代码

文章目录一、介绍1)背景2)环境3)演示游戏过程文件格式4)基本逻辑概述i 游戏主体ii 刷新iii 控制蛇的移动iiii 保存最高记录iiiii 吃食物iiiiii 记录用户的输入(很重要)二、步骤1)ControlFrm窗体2)GameFrm窗体:游戏窗体i 变量ii 窗体加载事件iii 玩家敲击键盘的事件iiii timer1 tick事件:iiiii 相关方法蛇移动的方法擦除蛇身生成食物判断是否吃到食物从磁盘文件中获取历史最高分播放音乐死之前判断是否打破了记录iiii

weixin_44996090的博客 2万+

Unity跑酷游戏开发:刚体物理与碰撞检测的实战教程

在Unity游戏开发中,物理引擎与碰撞检测是构建可交互玩法的核心基础。通过Rigidbody刚体组件可以模拟物体的运动与受力,而Trigger触发器则用于检测进入、停留与离开事件,二者结合能够高效实现角色移动、跳跃判定、子弹命中与道具收集等常见机制。掌握这些原理后,开发者可以快速搭建跑酷类游戏的完整逻辑链。本文以一个期末跑酷游戏为例,详细讲解使用刚体控制自动前进、基于Trigger实现跳板限定跳跃、子弹射击障碍物、能量包计分以及音效挂载等关键步骤,并提供可直接复用的脚本与参数,适合Unity初学者从零做出可

weixin_27945229的博客 207

C# 期末题库(方法题)

i <= n;

weixin_52686512的博客 1383

C#上位机结合Halcon实现车牌识别:从图像定位到字符分割的完整工程方案

机器视觉技术在现代自动化产线中扮演着关键角色,其核心任务之一是从复杂场景中准确提取目标信息。车牌识别作为典型应用,依赖图像预处理、边缘检测、形态学操作与OCR字符识别等基础模块的协同工作。Halcon作为工业视觉算法库,提供了从图像采集到字符识别的完整算子链,而C#上位机则承担业务逻辑与交互界面设计。两者结合能够在保证识别效率的同时,兼顾工程部署的灵活性。本文基于Halcon与C#的集成实践,阐述车牌定位、字符分割及置信度评估的技术原理,并探讨如何通过参数调优与算法优化提升端到端识别率。面向C#上位机开发者

weixin_29044713的博客 234

基于MATLAB的瑕疵检测系统实现:图像处理与Otsu分割实战

工业视觉检测的核心在于从复杂图像中稳定提取异常区域,其技术基础源于经典的图像处理与模式识别方法。MATLAB凭借完善的图像处理工具箱和高效的矩阵运算能力,成为算法验证与原型开发的常用平台。实现瑕疵检测通常遵循图像预处理、缺陷分割、特征提取与分类输出的技术链路。预处理环节采用中值滤波抑制噪声,并结合背景均匀化消除光照干扰;分割阶段则依赖Otsu自适应阈值与形态学操作,实现缺陷区域的可靠提取;随后通过连通域分析计算面积、长宽比等判别特征,完成划痕、凹坑等不同缺陷的归类。这一方法兼顾了准确率与工程可控性,在样本不

weixin_31236101的博客 238

【C#期末课设开源】超炫酷!基于WinForms的雷霆战机小游戏(附完整源码+详细注释)

基于C# WinForms开发的2D射击游戏,具有完整的游戏状态机系统。游戏实现了星空背景滚动、三种智能敌机(快速机/追踪机/重装机)、粒子爆炸特效和武器升级系统等核心功能。采用GDI+绘图技术实现60FPS流畅动画,通过碰撞检测、血量系统和难度递增机制增强游戏性。项目结构清晰,包含游戏对象基类、敌机派生类、粒子特效类等面向对象设计,适合作为C#课程设计参考。游戏提供主菜单、游戏进行和结束三种状态,支持键盘控制战机移动射击,具备分数统计和生命值显示功能。

weixin_61215802的博客 612

基于人脸关键点检测与几何特征的发型推荐系统实现

计算机视觉中的人脸关键点检测是实现诸多智能应用的基础技术,通过定位眉毛、眼睛、鼻尖、下颌等68个特征点,可精确测量人脸几何结构。这些几何特征(如脸长宽比、颧骨宽度、下颌角宽度)为轻量级规则引擎提供了可靠数据源,无需复杂深度学习模型即可完成脸型分类。该技术在多类交互场景中具有实用价值,如个性化推荐、虚拟试妆等。以发型推荐为例,利用dlib和OpenCV搭建从人脸检测到发型匹配的完整流水线,通过肤色检测估计发际线,结合几何比例判定圆脸、方脸、长脸等脸型,并基于标签体系输出推荐结果。工程实践中还涉及阈值微调、侧脸

weixin_28223453的博客 181

期末知识点复习

简述移动,刚体,碰撞器的作用与关系:碰撞器 提供物理边界,是碰撞检测和物理交互的前提;Update()每帧执行一次;简述制作预制体的方法:1拖拽法:在Hierarchy面板选中已制作完成的对象,拖入Project.2菜单法:右键点击Project面板空白,选create,prefab,再将Hierarchy面板中的目标拖入。transform的属性position(位置),Rotate(旋转),Translate(移动);场景是游戏的具体关卡 ,界面载体,是一个独立的可编辑空间,二者是包含与被包含的关系。

hdabfa的博客 339

YOLOv7部署:OpenCV DNN与ONNXRuntime对比解析

深度学习模型从训练到落地,需借助ONNX等中间表示打破框架壁垒。推理引擎的算子支持、预处理差异、后处理策略直接影响模型性能与精度。本文聚焦YOLOv7在OpenCV DNN与ONNXRuntime上的部署,剖析模型导出、letterbox预处理、NMS实现及边缘设备优化等关键环节,助力开发者规避坐标偏移、算子不兼容等典型问题。

weixin_29089057的博客 274

PostgreSQL向量数据插件--pgvector安装(附PostgreSQL安装)

本文为本人在安装pgvector中踩过的坑,已找到解决方法,现向大家分享。

m0_62627802的博客 2万+

基于python+django+mysql+Nanodet检测模型的水稻虫害检测系统

基于机器学习的水稻病虫害自动识别系统是一个非常完整的机器学习实践项目,内附从安装到部署详细教程。目前,人工智能技术在农业领域的普及应用,还存在着数据共享不足、算法门槛过高、算力垄断、实验与应用环境差距过大等问题。所以,本文基于云计算技术与人工智能机器学习学习的计算机视觉技术,开发了一套跨平台、易使用的水稻病虫害自动识别系统,大幅降低了人工智能技术使用门槛,使农业从业人员也可享受智能技术红利,促进智慧农业发展。运行环境:python3.7/mysql8.0。

Timi2019的博客 2159

小程序选项卡以及swiper套用(跨页面)

选项卡tab和swpier之间的套用 其实我之前写过一篇选项卡的切换demo,大家阔以参考一下 小程序多个选项卡切换 那今天写这个demo呢,是因为项目需求,所以仅供参考。 我是拿到了home.wxml的数组下标, 通过url传参的方式去将这个id传到下一个页面, 下一个页面接收以后再将id赋值给对应的tabI或者currentId(swiper 的下标) 实现上一个页面进来以后直接进入对应的页...

Rechal_Mei的博客 3597

基于C#的外星人入侵游戏项目

本项目是基于C# WinForms开发的2D射击游戏,作为《面向对象程序设计》课程的实践作业。游戏实现了战斗机操控、敌机生成、双向射击、道具系统等核心玩法,完整运用面向对象四大特性:通过类继承体系实现代码复用;利用封装隐藏实现细节;借助多态实现敌机差异化行为;采用抽象定义统一接口。技术实现上使用Timer控件驱动游戏循环、AABB碰撞检测、泛型集合管理动态对象,系统采用三层架构设计,运行稳定流畅。项目不仅达成了课程教学目标,更通过实战开发培养了面向对象思维和WinForms开发能力。

2501_94444606的博客 454

[南大ICS-PA2] 字符串处理函数和printf实现

[南大ICS-PA2] 程序、运行时环境与AM 字符串处理函数和printf实现

qq_42474104的博客 2987

我的老款Intel MacBook Pro,如何用OpenVINO把本地大模型推理速度提升10倍?

本文详细介绍了如何在老款Intel MacBook Pro上使用OpenVINO工具包将本地大模型推理速度提升10倍。通过对比Ollama CPU原生、Transformers原生和OpenVINO优化三种方案,展示了OpenVINO在性能优化上的显著优势,并提供了从环境配置到模型转换、性能调优的完整实战指南。

weixin_28694295的博客 300

Unity C#脚本与组件交互实战:从核心原理到高频考点解析

在Unity游戏开发中,脚本与组件的交互是实现游戏逻辑的核心技术。其基本原理是通过C#脚本作为自定义组件,获取并操控其他内置组件(如Transform、Rigidbody)的属性与行为,从而驱动游戏对象(GameObject)产生动态响应。这项技术的核心价值在于将程序逻辑与引擎的实体组件系统高效结合,是实现角色控制、物理模拟、碰撞检测等游戏功能的基石。典型的应用场景包括玩家移动、敌人AI、UI交互以及各类游戏机制的实现。本文聚焦于**C#脚本**与**组件交互**这两个关键概念,通过大量即拿即用的**代码示

weixin_30357231的博客 339

【已解决】App unavailable Unfortunately, Claude is only available in certain countries and regions

App unavailable Unfortunately, Claude is only available in certain countries and regions right now. We will soon publish a list of supported locations on our website.

weixin_43941438的博客 3万+

C#实现MySQL数据库数据的备份与恢复

这几天一直在做学校的C#期末项目,其中有一个功能就是数据的备份与恢复,在百度了一番之后,只找到了适用于SQL Server的备份SQL语句 BACKUP DATABASE database_name TO DISK = 'physical_device_name' [ WITH { DIFFERENTIAL | COPY_ONLY | { COMPRESSION | NO_COMPRE

Lumia的博客 7729

最新Docker GPU支持全解析:为什么nvidia-smi能用但PyTorch找不到CUDA?

本文深入解析了Docker容器中nvidia-smi命令可用但PyTorch无法调用CUDA的根本原因。关键在于默认配置仅暴露了GPU的utility管理能力,而CUDA计算所需的compute能力未被激活。通过正确设置NVIDIA_DRIVER_CAPABILITIES环境变量为compute,utility,并配合--gpus参数,即可解决此问题,确保AI训练等任务顺利进行。

convnet3designer的博客 239

一文读懂5G网络整体架构(接入网+承载网+核心网)

接入网重构分级(分工更细、效率更高)、承载网三段化升级(管道更宽、更智能)、核心网服务化云化(管理更灵活、成本更低)最终实现“成本最优、资源灵活、场景适配”,才能支撑自动驾驶、工业互联网、智慧城市、VR/AR等各种新场景,真正走进我们的生活。

鲸落寰宇 428

C#作业

先总结一下我这几个星期的学习情况。        这几个星期我在慕课上学习《博弈论》,每周一节课,现在已经上到了第五周。每节课除了要听完课程之外,还会有检测。每次检测是5分,全部检测占据总成绩的百分之四十。这几次检测成绩都在4分左右。当然还有百分之十的课后讨论,和百分之五十的期末成绩,这个就是我学习慕课的基本介绍。        通过这几周的学习我对博弈论有了初步的认识,知道我博弈存在我们学习

u013264343的专栏 929

【Unity小游戏】整整一个周末写一款《皇室战争 玩法》 的 即时战斗类 游戏Demo。两万多字游戏制作过程+解析

Unity游戏制作,本篇文章介绍了复刻皇室战争玩法的一个自制小游戏,共有该游戏的两万字教程加制作过程,欢迎品尝! 世界上没有绝对的公平,如果我们起点就比别人第一步,那就更需要比别人努力了。

努力前行,总会成为自己心中的那道光 12万+

银行ATM的功能模拟(课程设计)

QUKUAN.qukuan:取款功能的实现,先读取YE文件,然后将用户输入的数据进行判断,若不符合取款要求(取款金额为100的倍数)则报错,若取款金额大于余额则报错,同时注册新事件BigMoneyArgs,当取款金额大于10000时则触发该事件(预警效果)。//没有文件就创建文件。//没有文件就创建文件。DAIKUAN.daikuan:贷款功能的实现,首先读取YE文件,然后将用户输入的数据进行判断,若不符合贷款要求(取款金额为100的倍数)则报错,其余则成功贷款,将贷款后的金额写入YE文件中。

weixin_48579084的博客 1007

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain&#39;s apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath(&#39;DeepLearnToolbox&#39;));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand(&#39;state&#39;,0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W&#39;); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand(&#39;state&#39;,0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = &#39;sigm&#39;;%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, &#39;Too big error&#39;);```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand(&#39;state&#39;,0)sae = saesetup([784 100]);sae.ae{1}.activation_function = &#39;sigm&#39;;sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)&#39;)% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;;nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, &#39;Too big error&#39;);```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x&#39;,28,28,60000))/255;test_x = double(reshape(test_x&#39;,28,28,10000))/255;train_y = double(train_y&#39;);test_y = double(test_y&#39;);%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you&#39;ll get around 1.2% errorrand(&#39;state&#39;,0)cnn.layers = { struct(&#39;type&#39;, &#39;i&#39;) %input layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 6, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 2) %sub sampling layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 12, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, &#39;Too big error&#39;);```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, &#39;Too big error&#39;);%% ex2 neural net with L2 weight decayrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex3 neural net with dropoutrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex4 neural net with sigmoid activation functionrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex5 plotting functionalityrand(&#39;state&#39;,0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = &#39;softmax&#39;; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand(&#39;state&#39;,0)nn = nnsetup([784 20 10]); nn.output = &#39;softmax&#39;; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

C#手写俄罗斯方块:WinForms+GDI+游戏循环与状态机实战

俄罗斯方块是理解游戏开发核心原理的经典教学载体,其背后涵盖有限状态机(FSM)建模、网格坐标系运算、帧同步渲染与输入响应机制等基础能力。通过纯C# WinForms + GDI+实现,可深入掌握游戏主循环控制、双缓冲绘制优化、键盘状态轮询、碰撞检测与消行逻辑等硬核技能。相比Unity或WPF方案,该路径剥离框架抽象,直面像素级渲染、内存布局与CPU缓存行为,特别适合夯实C#桌面开发与实时交互逻辑功底,广泛应用于教学实训、技术面试准备及底层图形编程能力验证场景。

weixin_30420305的博客 602

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

上一篇: C#初级教程(6)——函数:从基础到实践
下一篇: C#中级教程(1)——解锁 C# 编程的调试与错误处理秘籍
Unity黑马王子
博客等级 码龄4年 1846粉丝 181原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值