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 | 三等奖 |
程序运行示例:
抽奖中...
恭喜你获得:二等奖
要求:
- 使用
switch或if - 使用随机数决定奖品
练习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 道递进式随机数练习(带完整答案)”,学生做起来会非常有参与感,比如:
- 随机密码生成器
- 随机点奶茶
- 随机吃什么
- 老虎机小游戏
- 大乐透模拟器
非常适合 中职课堂气氛。