Skip to main content

3月26日 数组

str.Substring()

using System;

class SubstringFun
{
static void Main()
{
Console.WriteLine("=== 字符串艺术生成器 (Substring 演示) ===");
Console.Write("请输入一个字符串:");
string input = Console.ReadLine();

if (string.IsNullOrEmpty(input))
{
Console.WriteLine("输入无效,程序退出。");
return;
}

bool exit = false;
while (!exit)
{
Console.WriteLine("\n请选择变换方式:");
Console.WriteLine("1. 正向逐个显示");
Console.WriteLine("2. 反向显示");
Console.WriteLine("3. 跳跃显示 (取奇数位)");
Console.WriteLine("4. 随机打乱");
Console.WriteLine("5. 金字塔");
Console.WriteLine("0. 退出");
Console.Write("你的选择:");

string choice = Console.ReadLine();
Console.WriteLine();

switch (choice)
{
case "1":
ForwardStepwise(input);
break;
case "2":
ReverseString(input);
break;
case "3":
JumpDisplay(input);
break;
case "4":
RandomScramble(input);
break;
case "5":
Pyramid(input);
break;
case "0":
exit = true;
break;
default:
Console.WriteLine("无效选项,请重新输入。");
break;
}
}

Console.WriteLine("感谢使用,再见!");
}

// 1. 正向逐个显示
static void ForwardStepwise(string s)
{
Console.WriteLine("正向逐个显示:");
for (int i = 1; i <= s.Length; i++)
{
Console.WriteLine(s.Substring(0, i));
}
}

// 2. 反向显示(利用Substring从尾部开始提取)
static void ReverseString(string s)
{
Console.WriteLine("反向显示:");
string reversed = "";
for (int i = s.Length - 1; i >= 0; i--)
{
reversed += s.Substring(i, 1);
}
Console.WriteLine(reversed);
}

// 3. 跳跃显示:取所有奇数索引(0-based)的字符
static void JumpDisplay(string s)
{
Console.WriteLine("跳跃显示(取奇数位置字符):");
string result = "";
for (int i = 0; i < s.Length; i++)
{
if (i % 2 == 1) // 奇数索引
{
result += s.Substring(i, 1);
}
}
Console.WriteLine(result);
}

// 4. 随机打乱:随机选择子串并拼接
static void RandomScramble(string s)
{
Console.WriteLine("随机打乱:");
Random rand = new Random();
string scrambled = "";
// 随机提取长度不等的子串,直到原字符串所有字符都被取完(但可能有重复,这里仅为演示效果)
int remaining = s.Length;
while (remaining > 0)
{
int start = rand.Next(0, s.Length);
int length = rand.Next(1, Math.Min(s.Length - start + 1, remaining + 1));
scrambled += s.Substring(start, length);
remaining -= length;
// 为防止无限循环,简单处理:如果剩余长度>0但取不到子串,就取单个字符
if (remaining > 0 && start + length > s.Length)
{
scrambled += s.Substring(0, 1);
remaining--;
}
}
Console.WriteLine(scrambled);
}

// 5. 金字塔:每行显示从第一个字符开始,长度递增的子串
static void Pyramid(string s)
{
Console.WriteLine("金字塔:");
for (int i = 1; i <= s.Length; i++)
{
string line = s.Substring(0, i);
// 居中显示(可选)
Console.WriteLine(line.PadLeft((s.Length + line.Length) / 2));
}
}
}

下面是 5 道适合中职生的 C# 随机数练习题。题目都围绕 Random 类设计,难度 由易到稍微复杂,同时尽量 有趣、生活化,适合课堂练习或课后作业。


练习1:随机点名器

题目:

班级里有 10 名学生,编号为 1~10。 请编写程序随机抽取一名学生回答问题,并显示学生编号。

要求:

  • 使用 Random 生成随机数
  • 范围:1 ~ 10
  • 输出示例:
今天回答问题的学生是:7号同学

提示代码结构:

Random r = new Random();
int num = r.Next(1, 11);

练习2:随机生成验证码

题目:

请编写程序生成一个 4位随机数字验证码

例如:

验证码:5832

要求:

  • 每一位数字都使用随机数生成
  • 数字范围:0~9
  • 最终拼接成4位验证码

提示:

可以使用循环生成。


练习3:猜数字小游戏

题目:

电脑随机生成 1~100 的一个数字,让用户猜。

程序根据用户输入提示:

  • 猜大了
  • 猜小了
  • 猜对了

示例:

请输入你猜的数字:50
猜小了

请输入你猜的数字:80
猜大了

请输入你猜的数字:72
恭喜你猜对了!

要求:

  • 使用 Random
  • 使用 while 循环

练习4:随机抽奖系统

题目:

设计一个简单抽奖程序。

随机生成 1~3 的数字

数字奖品
1一等奖
2二等奖
3三等奖

程序运行示例:

抽奖中...
恭喜你获得:二等奖

要求:

  • 使用 switchif
  • 使用随机数决定奖品

练习5:石头剪刀布小游戏

题目:

玩家输入:

1 = 石头
2 = 剪刀
3 = 布

电脑随机出拳,判断输赢。

规则:

玩家电脑结果
石头剪刀玩家赢
剪刀玩家赢
石头玩家赢

示例:

请输入:1石头 2剪刀 3布
玩家:石头
电脑:剪刀
结果:你赢了!

要求:

  • 使用 Random
  • 使用 if 判断胜负

课堂延伸(推荐老师讲解)

讲完练习可以补充:

Random 常见写法

Random r = new Random();

//0~9
r.Next(10);

//1~10
r.Next(1,11);

//0~99
r.Next(100);

如果你愿意,我还可以帮你再设计一套 “更适合课堂讲解的 5 道递进式随机数练习(带完整答案)”,学生做起来会非常有参与感,比如:

  • 随机密码生成器
  • 随机点奶茶
  • 随机吃什么
  • 老虎机小游戏
  • 大乐透模拟器

非常适合 中职课堂气氛