Administrator
发布于 2025-09-22 / 15 阅读
0
0

C#4.3练习题: While循环结构语句

1. 猜数字游戏

// 程序随机生成1-100的数字,用户猜测,直到猜对为止
Random random = new Random();
int target = random.Next(1, 101);
int guess = 0;
int attempts = 0;
​
Console.WriteLine("猜数字游戏开始!数字在1-100之间");
​
while (guess != target)
{
    Console.Write("请输入你的猜测: ");
    guess = int.Parse(Console.ReadLine());
    attempts++;
    
    if (guess > target)
        Console.WriteLine("太大了!");
    else if (guess < target)
        Console.WriteLine("太小了!");
}
​
Console.WriteLine($"恭喜!你用了{attempts}次猜对了数字{target}");

2. 密码验证系统

// 用户输入密码,直到输入正确为止(正确密码为"123456")
string correctPassword = "123456";
string inputPassword = "";
int maxAttempts = 3;
int attempts = 0;
​
while (inputPassword != correctPassword && attempts < maxAttempts)
{
    Console.Write("请输入密码: ");
    inputPassword = Console.ReadLine();
    attempts++;
    
    if (inputPassword != correctPassword)
    {
        Console.WriteLine($"密码错误!还剩{maxAttempts - attempts}次机会");
    }
}
​
if (inputPassword == correctPassword)
    Console.WriteLine("登录成功!");
else
    Console.WriteLine("密码错误次数过多,账户已锁定!");

3. 简易计算器

// 持续接收用户输入进行计算,直到用户输入"exit"
string input = "";
double result = 0;
​
Console.WriteLine("简易计算器(输入'exit'退出)");
​
while (input != "exit")
{
    Console.Write("请输入表达式 (如: 5 + 3): ");
    input = Console.ReadLine();
    
    if (input == "exit") break;
    
    try
    {
        string[] parts = input.Split(' ');
        if (parts.Length == 3)
        {
            double num1 = double.Parse(parts[0]);
            string op = parts[1];
            double num2 = double.Parse(parts[2]);
            
            switch (op)
            {
                case "+": result = num1 + num2; break;
                case "-": result = num1 - num2; break;
                case "*": result = num1 * num2; break;
                case "/": result = num2 != 0 ? num1 / num2 : double.NaN; break;
                default: Console.WriteLine("不支持的操作符"); continue;
            }
            
            Console.WriteLine($"结果: {result}");
        }
    }
    catch
    {
        Console.WriteLine("输入格式错误!");
    }
}

4. 数字反转

// 输入一个整数,将其各位数字反转输出
Console.Write("请输入一个整数: ");
int number = int.Parse(Console.ReadLine());
int reversed = 0;
int temp = Math.Abs(number);
​
while (temp > 0)
{
    int digit = temp % 10;
    reversed = reversed * 10 + digit;
    temp /= 10;
}
​
if (number < 0) reversed = -reversed;
Console.WriteLine($"反转后的数字: {reversed}");

5. 斐波那契数列生成器

// 生成斐波那契数列,直到超过指定值
Console.Write("请输入最大值: ");
int maxValue = int.Parse(Console.ReadLine());
int a = 0, b = 1;
​
Console.WriteLine("斐波那契数列:");
Console.Write($"{a} {b} ");
​
while (true)
{
    int next = a + b;
    if (next > maxValue) break;
    
    Console.Write($"{next} ");
    a = b;
    b = next;
}

6. 质数判断器

// 判断输入的数字是否为质数,可连续判断
string input = "";
​
while (input != "quit")
{
    Console.Write("请输入一个数字(输入'quit'退出): ");
    input = Console.ReadLine();
    
    if (input == "quit") break;
    
    if (int.TryParse(input, out int number) && number > 1)
    {
        bool isPrime = true;
        int i = 2;
        
        while (i <= Math.Sqrt(number))
        {
            if (number % i == 0)
            {
                isPrime = false;
                break;
            }
            i++;
        }
        
        Console.WriteLine($"{number} {(isPrime ? "是" : "不是")}质数");
    }
    else
    {
        Console.WriteLine("请输入大于1的整数!");
    }
}

7. 数字各位数求和

// 持续输入数字,求各位数字之和,直到和为1位数
Console.WriteLine("数字各位数求和(直到结果为1位数)");
​
while (true)
{
    Console.Write("请输入一个数字(输入0退出): ");
    int number = int.Parse(Console.ReadLine());
    
    if (number == 0) break;
    
    int sum = number;
    Console.Write($"计算过程: {sum}");
    
    while (sum >= 10)
    {
        int temp = sum;
        sum = 0;
        
        while (temp > 0)
        {
            sum += temp % 10;
            temp /= 10;
        }
        
        Console.Write($" → {sum}");
    }
    
    Console.WriteLine($"\n最终结果: {sum}");
}

8. 最大公约数计算器

// 使用欧几里得算法计算两个数的最大公约数
Console.WriteLine("最大公约数计算器");
​
while (true)
{
    Console.Write("请输入第一个数字(输入0退出): ");
    int a = int.Parse(Console.ReadLine());
    if (a == 0) break;
    
    Console.Write("请输入第二个数字: ");
    int b = int.Parse(Console.ReadLine());
    
    int num1 = Math.Abs(a);
    int num2 = Math.Abs(b);
    
    while (num2 != 0)
    {
        int temp = num2;
        num2 = num1 % num2;
        num1 = temp;
    }
    
    Console.WriteLine($"{a} 和 {b} 的最大公约数是: {num1}");
}

9. 数字黑洞(6174问题)

// 任选4个数字不全相同的四位数,按特定运算最终得到6174
Console.Write("请输入一个四位数(数字不全相同): ");
int number = int.Parse(Console.ReadLine());
int count = 0;
​
while (number != 6174)
{
    // 将数字转换为数组并排序
    int[] digits = new int[4];
    int temp = number;
    
    for (int i = 0; i < 4; i++)
    {
        digits[i] = temp % 10;
        temp /= 10;
    }
    
    Array.Sort(digits);
    int asc = digits[0] * 1000 + digits[1] * 100 + digits[2] * 10 + digits[3];
    int desc = digits[3] * 1000 + digits[2] * 100 + digits[1] * 10 + digits[0];
    
    number = desc - asc;
    count++;
    Console.WriteLine($"第{count}步: {desc} - {asc} = {number}");
}
​
Console.WriteLine($"经过{count}步运算得到6174");

10. 简易银行系统

// 模拟银行账户操作
double balance = 1000; // 初始余额
bool running = true;
​
Console.WriteLine("欢迎使用简易银行系统");
​
while (running)
{
    Console.WriteLine("\n请选择操作:");
    Console.WriteLine("1. 查询余额");
    Console.WriteLine("2. 存款");
    Console.WriteLine("3. 取款");
    Console.WriteLine("4. 退出");
    Console.Write("请输入选择 (1-4): ");
    
    string choice = Console.ReadLine();
    
    switch (choice)
    {
        case "1":
            Console.WriteLine($"当前余额: {balance:C}");
            break;
            
        case "2":
            Console.Write("请输入存款金额: ");
            if (double.TryParse(Console.ReadLine(), out double deposit) && deposit > 0)
            {
                balance += deposit;
                Console.WriteLine($"存款成功!当前余额: {balance:C}");
            }
            else
            {
                Console.WriteLine("输入无效!");
            }
            break;
            
        case "3":
            Console.Write("请输入取款金额: ");
            if (double.TryParse(Console.ReadLine(), out double withdraw) && withdraw > 0)
            {
                if (withdraw <= balance)
                {
                    balance -= withdraw;
                    Console.WriteLine($"取款成功!当前余额: {balance:C}");
                }
                else
                {
                    Console.WriteLine("余额不足!");
                }
            }
            else
            {
                Console.WriteLine("输入无效!");
            }
            break;
            
        case "4":
            running = false;
            Console.WriteLine("感谢使用,再见!");
            break;
            
        default:
            Console.WriteLine("无效选择,请重新输入!");
            break;
    }
}

11. 喜马拉雅

double num = 0.01;
int times = 0;
bool result = true;
while (result)
{
   num += 0.01;
   times++;
   result =  num >= 8848 ? false : true;
}
​
Console.WriteLine(num);
Console.WriteLine(times);

这些题目涵盖了while循环的各种应用场景,包括:

  • 用户输入验证

  • 数学计算和算法

  • 游戏逻辑

  • 系统模拟

  • 条件控制循环


评论