C#经典编程100道——流程控制(持续更新中)
·
顺序结构
选择结构
if结构
使用goto 允许玩5次 猜打了或者猜小了 猜对了 对应的提示 , 不合法输入的提示 不在1-100的提示
Random rnd = new();
int randomNumber = rnd.Next(1, 101);
int count = 0;
Console.WriteLine("欢迎来到猜字游戏,允许玩家玩5次");
Console.WriteLine(randomNumber);
InputNumber:
if (count >= 5)
{
Console.WriteLine("你5次机会已用完");
return;
}
Console.Write("请输入数字:");
string? inputNumber = Console.ReadLine();
if (!int.TryParse(inputNumber, out int number))
{
Console.WriteLine("输入格式错误,请输入数字");
goto InputNumber;
}
if (number < 1 || number > 100)
{
Console.WriteLine("输入数字不在范围,请输入1-100数字");
goto InputNumber;
}
if (number > randomNumber)
{
Console.WriteLine("猜大了");
count++;
Console.WriteLine($"你还有{5 - count}次机会");
goto InputNumber;
}
else if (number < randomNumber)
{
Console.WriteLine("猜小了");
count++;
Console.WriteLine($"你还有{5 - count}次机会");
goto InputNumber;
}
else
{
Console.WriteLine("猜对了");
}
switch结构
要求用户输入一个年份和月份(1-12),然后输出该月的天数(考虑闰年)
Console.Write("请输入年份:");
if (!int.TryParse(Console.ReadLine(), out int year) || year < 1)
{
Console.WriteLine("年份输入无效!");
return;
}
Console.Write("请输入月份(1-12):");
if(!int.TryParse(Console.ReadLine(), out int month) || month < 1 || month > 12)
{
Console.WriteLine("年份输入无效");
return;
}
int days;
switch (month)
{
case 4:
case 6:
case 9:
case 11:
days = 30 ;
break;
case 2:
bool isLeep = (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
days = isLeep ? 29 : 28;
break;
default:
days=31;
break;
}
Console.WriteLine($"{year}年{month}月有{days}天");
用户输入两个数字,判断两个数的大小并输出较大的数字
Console.Write("请输入第一个数字: ");
if(!int.TryParse(Console.ReadLine(),out int num1))
{
Console.WriteLine("输入格式错误,请输入第一个数字");
return;
}
Console.Write("请输入第二个数字: ");
if (!int.TryParse(Console.ReadLine(), out int num2))
{
Console.WriteLine("输入格式错误,请输入第二个数字");
return;
}// 使用 switch 语句判断较大数字
switch (num1 > num2)
{
case true:
Console.WriteLine($"较大的数字是: {num1}");
break;
case false:
Console.WriteLine($"较大的数字是: {num2}");
break;
default:
Console.WriteLine($"两者相等均为{num1}");
break;
}
循环结构
for循环
计算0-100之间的奇数和、偶数和?
int sumOdd = 0;
int sumEven = 0;
for (int i = 1; i <= 100; i += 2)
sumOdd += i;
for (int i = 0; i <= 100; i += 2)
sumEven += i;
Console.WriteLine($"奇数和为{sumOdd},偶数和为{sumEven}");
获取100之间能够被5整除的所有的数?
for (int i = 5; i <= 100; i += 5)
Console.WriteLine($"{i}能被5整除");
计算10 * 9 * 8 ... *1的结果?
StringBuilder sb = new StringBuilder();
int factorial = 1;
for (int i = 10; i >= 1; i--)
{
factorial *= i;
sb.Append(i);//拼接数字
//不是最后一位就加乘号
if (i > 1)
{
sb.Append('*');
}
}
Console.WriteLine($"{sb}={factorial}");
求 1 - 1000 以内所有的完美数,除自身以外所有因子之和等于这个数就是完美数。
StringBuilder sb = new();
for (int i = 1; i <= 1000; i++)
{
int sum = 0;
int sqrt=(int)Math.Sqrt(i);
for (int j = 1; j <= sqrt; j++)
{
if (i % j == 0)
{
int factor = i / j;
sum += j;//加上小因数
if (factor != j && factor != i)//避免重复加平方根和自身
{
sum += factor;
}
}
}
if (sum == i)
{
sb.Append($"{i} ");
}
}
Console.WriteLine($"1-1000之间的完美数是:{sb}");
while循环
目标是搬砖500个,第一次搬砖1个,后面因为更加熟练,每次递增一倍,1、2、4、8、16.32 64 128 256.., 搬砖500个需要多少次?
int total = 0;
int times = 0;
int brick = 1;//第一次搬1个
while (total < 500)
{
total += brick;
times++;
brick *= 2;//数量翻倍
}
Console.WriteLine($"搬够500个砖一共需要{total}");
有一个学校,现在有8个人,每年学院增长23%,几年后学员可以达到100人?
int years = 0;
double people = 8;
double rate = 1.23;
while (people < 100)
{
people *= rate;
years++;
}
Console.WriteLine($"需要{years}年学员人数可以达到100人");
用户输入10个数字,计算10个数字的总和、平均值?
int count = 1;
double sum = 0;
while (count <= 10)
{
Console.Write($"请输入第{count}数字");
string? input = Console.ReadLine();
//输入合法才累加
if (!double.TryParse(input, out double num))
{
Console.WriteLine("输入格式错误,请输入数字!");
}
else
{
sum += num;
count++;
}
}
//计算平均值
double avg = sum / 10;
Console.WriteLine($"总和为{sum}");
Console.WriteLine($"平均数为{avg:F2}");
让用户输入一系列数字,直到用户输入 0 为止。然后程序计算这些数字的平均值并输出?
double sum = 0;
int count = 0;
while (true)
{
Console.WriteLine("请输入数字(输入0结束)");
string? input = Console.ReadLine();
if (!double.TryParse(input, out double number))
{
Console.WriteLine("输入格式错误,请输入数字");
continue;
}
if (number == 0) break;
sum += number;
count++;
}
if (count == 0)
{
Console.WriteLine("未输入任何有效数字,无法计算平均值");
}
else
{
Console.WriteLine($"总和:{sum:F2}");
Console.WriteLine($"平均值:{sum / count:F2}");
}
使用 while 循环判断用户输入的数字是否为素数。素数是指只能被 1 和它本身整除的数字。
while (true)
{
bool isPrime = true;
Console.Write("请输入一个数字(输入非数字退出):");
string? input = Console.ReadLine();
if (!int.TryParse(input, out int num))
{
Console.WriteLine("输入无效,程序结束");
break;
}
if (num < 2)
{
isPrime = false;
}
else
{
int i = 2;
while (i * i <= num)
{
if (num % i == 0)
{
isPrime = false;
break;
}
i++;
}
}
Console.WriteLine(isPrime ? $"{num}是素数\n" : $"{num}不是素数\n");
}
3个可乐瓶可以换一瓶可乐,现在有364瓶可乐。问一共可以喝多少瓶可乐,剩下几个空瓶?
//空瓶
int num = 364;
//剩余的空瓶
int coke = 0;
//喝了多少瓶
int drink = 364;
while (num >= 3)
{
num = (num + coke) / 3;
coke= (num + coke) % 3;
drink += num;
}
Console.WriteLine($"喝了{drink}瓶,剩余{num+coke}个空瓶子");
do...while循环
(使用do while) 用户输入一个正整数 n,程序输出斐波那契数列的前 n 项
int a = 1, b = 1;
int i = 0;
int n;
do
{
Console.WriteLine("请输入一个正整数n:");
}
while (!int.TryParse(Console.ReadLine(), out n) || n <= 0);
do
{
Console.Write(a + " ");
int t = a + b;
a = b;
b = t;
i++;
}
while (i < n);
更多推荐
所有评论(0)