404 Not Found

404 Not Found


nginx

实战:数组与方法综合

冒泡排序

目标:实现冒泡排序算法,对整数数组进行升序排列,展示排序前后的结果。

要求

示例

CSHARP
int[] numbers = { 64, 34, 25, 12, 22, 11, 90, 5 };

Console.WriteLine("排序前: " + string.Join(", ", numbers));

int swapCount = 0;

for (int i = 0; i < numbers.Length - 1; i++)
{
    bool swapped = false;
    for (int j = 0; j < numbers.Length - 1 - i; j++)
    {
        if (numbers[j] > numbers[j + 1])
        {
            (numbers[j], numbers[j + 1]) = (numbers[j + 1], numbers[j]);
            swapped = true;
            swapCount++;
        }
    }
    if (!swapped) break;
}

Console.WriteLine("排序后: " + string.Join(", ", numbers));
Console.WriteLine($"交换次数: {swapCount}");
▶ 试一试
TEXT
排序前: 64, 34, 25, 12, 22, 11, 90, 5
排序后: 5, 11, 12, 22, 25, 34, 64, 90
交换次数: 20

学生成绩统计

目标:使用数组存储学生成绩,通过方法计算平均分、最高分、最低分及高于平均分的人数。

要求

示例

CSHARP
int[] scores = { 85, 92, 78, 60, 95, 88, 72, 66, 91, 83 };

double average = CalcAverage(scores);
int max = CalcMax(scores);
int min = CalcMin(scores);
int aboveAvg = CountAbove(scores, average);

Console.WriteLine($"成绩列表: {string.Join(", ", scores)}");
Console.WriteLine($"平均分: {average:F1}");
Console.WriteLine($"最高分: {max}");
Console.WriteLine($"最低分: {min}");
Console.WriteLine($"高于平均分人数: {aboveAvg}");

double CalcAverage(int[] arr)
{
    double sum = 0;
    foreach (int s in arr) sum += s;
    return sum / arr.Length;
}

int CalcMax(int[] arr)
{
    int max = arr[0];
    foreach (int s in arr) if (s > max) max = s;
    return max;
}

int CalcMin(int[] arr)
{
    int min = arr[0];
    foreach (int s in arr) if (s < min) min = s;
    return min;
}

int CountAbove(int[] arr, double threshold)
{
    int count = 0;
    foreach (int s in arr) if (s > threshold) count++;
    return count;
}
▶ 试一试
TEXT
成绩列表: 85, 92, 78, 60, 95, 88, 72, 66, 91, 83
平均分: 81.0
最高分: 95
最低分: 60
高于平均分人数: 5

待办事项列表

目标:使用字符串数组实现一个简易待办事项列表,支持添加、删除和查看功能。

要求

示例

CSHARP
string[] todos = new string[10];
int count = 0;

AddItem("学习C#数组");
AddItem("完成练习题");
AddItem("复习方法与参数");
ListAll();
RemoveItem(1);
ListAll();

void AddItem(string item)
{
    if (count >= todos.Length)
    {
        Console.WriteLine("⚠️ 待办列表已满,无法添加。");
        return;
    }
    todos[count] = item;
    count++;
    Console.WriteLine($"已添加: {item}");
}

void RemoveItem(int index)
{
    if (index < 0 || index >= count)
    {
        Console.WriteLine("⚠️ 无效索引,删除失败。");
        return;
    }
    string removed = todos[index];
    for (int i = index; i < count - 1; i++)
    {
        todos[i] = todos[i + 1];
    }
    todos[count - 1] = null;
    count--;
    Console.WriteLine($"已删除: {removed}");
}

void ListAll()
{
    Console.WriteLine("--- 待办列表 ---");
    if (count == 0)
    {
        Console.WriteLine("(空)");
        return;
    }
    for (int i = 0; i < count; i++)
    {
        Console.WriteLine($"{i}. {todos[i]}");
    }
}
▶ 试一试
TEXT
已添加: 学习C#数组
已添加: 完成练习题
已添加: 复习方法与参数
--- 待办列表 ---
0. 学习C#数组
1. 完成练习题
2. 复习方法与参数
已删除: 完成练习题
--- 待办列表 ---
0. 学习C#数组
1. 复习方法与参数

简易文本分析器

目标:对输入文本进行词频统计,使用 StringBuilder 拼接结果,通过方法封装各项分析功能。

要求

示例

CSHARP
string text = "CSharp is a powerful programming language and programming is fun";

int wordCount = CountWords(text);
int charCount = CountChars(text);
string longest = FindLongestWord(text);

var report = BuildReport(text, wordCount, charCount, longest);
Console.WriteLine(report);

int CountWords(string input)
{
    if (string.IsNullOrWhiteSpace(input)) return 0;
    string[] words = input.Split(' ', StringSplitOptions.RemoveEmptyEntries);
    return words.Length;
}

int CountChars(string input)
{
    return input.Length;
}

string FindLongestWord(string input)
{
    if (string.IsNullOrWhiteSpace(input)) return "";
    string[] words = input.Split(' ', StringSplitOptions.RemoveEmptyEntries);
    string longest = words[0];
    foreach (string w in words)
    {
        if (w.Length > longest.Length) longest = w;
    }
    return longest;
}

StringBuilder BuildReport(string input, int words, int chars, string longestWord)
{
    var sb = new StringBuilder();
    sb.AppendLine("===== 文本分析报告 =====");
    sb.AppendLine($"原文: {input}");
    sb.AppendLine($"单词数: {words}");
    sb.AppendLine($"字符数: {chars}");
    sb.AppendLine($"最长单词: {longestWord} ({longestWord.Length}字符)");
    sb.Append("===== 分析结束 =====");
    return sb;
}
▶ 试一试
TEXT
===== 文本分析报告 =====
原文: CSharp is a powerful programming language and programming is fun
单词数: 10
字符数: 60
最长单词: programming (11字符)
===== 分析结束 =====

❓ 常见问题

Q 冒泡排序中 if (!swapped) break 有什么作用?
A 如果某一轮没有发生交换,说明数组已经有序,提前结束排序以节省时间。
Q 待办列表删除元素后为什么要前移数组?
A 数组是连续存储的,删除中间元素后需要将后面元素前移填补空位,否则会出现 null 间隙。
Q StringBuilder 和直接用 + 拼接字符串有什么区别?
A StringBuilder 在内存中复用同一缓冲区,避免每次拼接都创建新字符串对象,大量拼接时性能更优。
Q StringSplitOptions.RemoveEmptyEntries 有什么用?
A Split 默认会保留空字符串条目,加上此选项可自动移除连续分隔符产生的空项。

📖 小节

📝 作业

  1. 修改冒泡排序为降序排列,并输出每轮排序后的中间结果
  2. 为学生成绩统计添加一个方法,返回所有不及格(低于60分)的成绩索引列表
  3. 为待办列表添加"标记完成"功能,已完成的项显示时在前面加上 [✓]
  4. 为文本分析器添加词频统计功能,输出每个单词的出现次数
Web-Tutorial.com

Web-Tutorial 技术团队

由多位开发者共同维护的编程教程平台。每篇教程由对应领域的开发者编写和审核,确保内容准确可靠。如发现任何问题,欢迎向我们反馈。

100%

🙏 帮我们做得更好

我们是刚上线的编程教程站,几个人的小团队,精力有限。页面虽经检查,难免还有疏漏——链接失效、排版错乱、内容有误、语言生硬……

如果您发现了,麻烦告诉我们,我们会在收到反馈后第一时间进行修复,再次感谢您的光临 🙏