【c#基础】4. 流程控制-练习题27道
1、(使用while)编写一个程序,允许用户最多尝试 3 次输入密码。如果用户在 3 次尝试内输入正确的密码,提示“登录成功”;否则,提示“密码错误”,如果超过三次还没有输入正确,提示”登录失败,账号已锁定“。假定密码为"123456"。
int count = 0;
while (true) {
Console.WriteLine();
Console.WriteLine("请输入密码:");
string s= Console.ReadLine();
count++;
if (s == "123456")
{
Console.WriteLine("登录成功");
break;
}
else {
if (count < 3)
{
Console.WriteLine("密码错误");
}
else {
Console.WriteLine("登录失败,账号已锁定");
break;
}
}
2、(使用while)小明今年130CM,假设他每年身高增长5%,使用循环计算他需要几年长到180CM以上?
double height = 130;
int year2 = 0;
while (height <= 180)
{
year2++;
height = height * 1.05;
}
Console.WriteLine(year2); //7
3、使用 while 循环,判断用户输入的数字是否为素数。素数是指只能被 1 和它本身整除的数字。
#region
//while 循环
int a = 13;
int b = 2;
bool isSu = true;
while (b < a)
{
if (a % b == 0)
{
isSu = false;
break;
}
b++;
}
if (!isSu) { Console.WriteLine("不是素数"); }
else { Console.WriteLine("是素数"); }
//for 循环
int a1 = 13;
bool isSuShu = true;
for (int i = 2; i < a1; i++)
{
if (a1 % 2 == 0)
{
isSuShu = false;
break;
}
}
if (!isSuShu) { Console.WriteLine("不是素数"); }
else { Console.WriteLine("是素数"); }
#endregion
4、让用户输入一系列数字,直到用户输入 0 为止。然后程序计算这些数字的平均值并输出。
#region
int sum = 0;
double average = 0;
while (true)
{
Console.Write("输入数字:");
int num2 = int.Parse(Console.ReadLine());
count1++;
sum += num2;
if (num2 == 0)
{
average = sum / (count1 - 1);
break;
}
}
Console.WriteLine("平均值为:" + average);
#endregion.
5、用户每次输入一个数字,程序将这些数字相加。程序在总和超过 100 时结束,并打印总和。
#region
int sum1 = 0;
while (sum1 <= 100)
{
Console.Write("输入一个数字");
int aa = int.Parse(Console.ReadLine());
sum1 += aa;
}
Console.WriteLine(sum1);
#endregion
6、(使用do while) 用户输入多个学生的成绩,输入负数时结束输入。程序计算并输出所有有效成绩的平均分.
#region
int count2 = 0;
double sum2 = 0;
double grade;
double average2 = 0;
do
{
Console.Write("输入成绩:");
grade = double.Parse(Console.ReadLine());
if (grade >= 0)
{
count2++;
sum2 += grade;
}
} while (grade >= 0);
average2 = sum2 / count2;
Console.WriteLine("平均分:" + average2);
#endregion
7 、要求用户输入多个整数,直到输入为 0 为止。最后统计并输出:输入了多少个正数;输入了多少个负数。
#region
int countNum = 0; //统计正数个数
int countNum1 = 0; //统计负数个数
while (true)
{
Console.Write("输入整数:");
int bb = int.Parse(Console.ReadLine());
if (bb > 0) countNum++; //统计正数个数
if (bb < 0) countNum1++; //统计负数个数
if (bb == 0) break;
}
Console.WriteLine($"输入的正数个数:{countNum},输入的负数个数:{countNum1}");
#endregion
8、(使用do while) 用户输入一个正整数 n,程序输出斐波那契数列的前 n 项
#region
int n1 = 0; // 第一个数
int n2 = 1; // 第二个数
int next; // 下一个数
int i1 = 2; // 从第3项开始 // 0 1 1 2 3 5 8 13 21 34
int count4 = 10; // 输出项数
Console.Write(n1 + " " + n2 + " ");
do
{
next = n1 + n2;
Console.Write(next + " ");
n1 = n2;
n2 = next;
i1++;
} while (i1 < count4);
#endregion
9、(使用do while) 用户输入一个取款金额,要求金额必须是 100 的倍数,直到输入正确。
#region
int money;
do
{
Console.Write("请输入取款金额:");
money = int.Parse(Console.ReadLine());
} while (money % 100 != 0);
#endregion
10、计算0-100之间的奇数和、偶数和?
#region
int oddSum = 0; //奇数和
int evenSum = 0; //偶数和
for (int i = 0; i < 101; i++)
{
if (i % 2 == 0) evenSum += i;
else oddSum += i;
}
Console.WriteLine($"奇数和:{oddSum},偶数和:{evenSum}");
#endregion
11、获取100之间能够被5整除的所有的数?
#region
for (int i = 0; i < 101; i++)
{
if (i % 5 == 0) Console.Write(i + " ");
}
#endregion
12、计算10 * 9 * 8 ... *1的结果?
#region
int productSum = 1; //乘积和
string s = "";
for (int i = 10; i >= 1; i--)
{
s += i == 10 ? $"{i}" : $"*{i}"; // i等于10时,s=$"{i}",其它等于 $"*{i}"
productSum *= i;
}
Console.WriteLine(s + "=" + productSum); //10*9*8*7*6*5*4*3*2*1=3628800
#endregion
13、目标是搬砖500个,第一次搬砖1个,后面因为更加熟练,每次递增一倍,1 2 4 8 16 32 64 128 256..,搬砖500个需要多少次?
#region
//for 循环
int total = 0; // 搬砖数量
int count = 0; // 搬砖次数
for (int i = 0; total <= 500; i++)
{
count++;
total += (int)Math.Pow(2, i);
}
Console.WriteLine(count); //9
//while 循环
int totalBrick = 0; // 搬砖数量
int countBrick = 0; // 搬砖次数
int brick = 1; // 本次要搬的数量,第一次是1,之后每次翻倍
while (totalBrick <= 500)
{
countBrick++;
totalBrick += brick;
brick *= 2;
}
Console.WriteLine(countBrick); //9
#endregion
14、有一个学校,现在有8个人,每年学院增长23%,几年后学员可以达到100人?
#region
// while循环
int year = 0; // 计数器
double num = 8; //学校人数
while (num <= 100)
{
year++;
num *= 1.23;
}
Console.WriteLine(year);
//for 循环
double num1 = 8;
double year1 = 0;
for (int i = 0; num1 <= 100; i++)
{
year1++;
num1 = num1 * 1.23;
}
Console.WriteLine(year1);
#endregion
15、用户输入10个数字,计算10个数字的总和、平均值
#region
int tenSum = 0;
double tenAverage;
int count5 = 0;
while (count5 < 10)
{
Console.Write("请输入数字:");
int cc = int.Parse(Console.ReadLine());
count5++;
tenSum += cc;
}
tenAverage = (double)tenSum / count5;
Console.WriteLine("和:" + tenSum + ",平均数:" + tenAverage);
#endregion
16、一间房子,现在满足以下条件:3人一张桌子余2人;5人一张桌子余4人;7人一张桌子余6人;9人一张桌子余8人;11人正好凑满,问有多少人?
#region
int n = 1;
while (true)
{
if (n % 3 == 2 && n % 5 == 4 && n % 7 == 6 && n % 9 == 8 && n % 11 == 0)
{
Console.WriteLine(n);
break;
}
n++;
}
#endregion
17、获取从2000年到2024年,中间有多少个闰年?
#region
int countYear = 0;
for (int i = 2000; i < 2025; i++)
{
if ((i % 4 == 0 && i % 100 != 0) || i % 400 == 0)
{
countYear++;
}
}
Console.WriteLine(countYear); //7
#endregion
18、 鸡兔同笼:假设有鸡和兔一共35只,有94只腿,问鸡和兔各有几只?
#region
for (int i = 0; i <= 35; i++)
{
if (i * 2 + (35 - i) * 4 == 94)
{
Console.WriteLine("鸡的数量:" + i + ",兔的数量" + (35 - i));
}
}
#endregion
19、50以内最大的三个素数之和
#region
int primeSum = 0;
int countPrime = 0;
for (int number=49;number>=2;number--) {
bool isPrime = true;
for (int i = 2; i < number; i++) {
isPrime = false;
break;
}
// 当为素数时,加和
if (isPrime) {
primeSum += number;
countPrime++;
}
// 满足三个时,退出循环
if (countPrime == 3) {
break;
}
}
Console.WriteLine(primeSum);
// 将数据添加到列表里面,然后取最后三个数据
List<int> list = new List<int>();
for (int i = 2; i < 50; i++)
{
bool isPrime = true;
for (int j = 2; j < i; j++)
{
if (i % j == 0)
{
isPrime = false;
break;
}
}
if (isPrime)
{
list.Add(i);
}
}
int sum3 = 0;
for (int i = list.Count - 1; i > list.Count - 4; i--)
{
sum3 += list[i];
}
Console.WriteLine(sum3);
#endregion
20、循环输入商品编号和购买数量,系统自动计算每种商品的价钱(单价X数量),并累加总金额。当输入n时结账(假设享受8折优惠),结账时,根据折扣计算应付金额,输入实付金额,并找零。
#region
Console.WriteLine("**********************************");
Console.WriteLine("请选择购买的商品编号:");
Console.WriteLine("1.T恤 2.网球鞋 3.网球拍");
Console.WriteLine("**********************************");
double totalPrice = 0;
while (true)
{
Console.WriteLine();
Console.Write("请输入商品编号:");
int goodsNum = int.Parse(Console.ReadLine());
Console.Write("请输入购买数量:");
int buyNum = int.Parse(Console.ReadLine());
double price = 0;
string goodsName = "";
switch (goodsNum)
{
case 1:
price = 245;
goodsName = "T恤";
break;
case 2:
price = 570;
goodsName = "网球鞋";
break;
case 3:
price = 600;
goodsName = "网球拍";
break;
default:
break;
}
double currentPrice = buyNum * price; //当次价格
totalPrice += currentPrice;
Console.WriteLine($"{goodsName}:¥{price} 数量:{buyNum} 合计:¥{currentPrice}");
Console.Write("是否继续(y/n:)");
string s1 = Console.ReadLine();
if (s1 == "n") { break; }
}
Console.WriteLine();
Console.WriteLine("折扣:0.8");
Console.WriteLine("应付金额:" + totalPrice * 0.8);
Console.Write("实付金额:");
double money = double.Parse(Console.ReadLine());
Console.WriteLine("找钱:" + (money - totalPrice * 0.8));
/*
Console.WriteLine("**********************************");
Console.WriteLine("请选择购买的商品编号:");
Console.WriteLine("1.T恤 2.网球鞋 3.网球拍");
Console.WriteLine("**********************************");
double totalPrice = 0; //总价格
double currentPrice = 0; //当次价格
while (true)
{
Console.WriteLine();
Console.Write("请输入商品编号:");
int goodsNum = int.Parse(Console.ReadLine());
Console.Write("请输入购买数量:");
int buyNum = int.Parse(Console.ReadLine());
double price = 0;
string goodsName = "";
if (goodsNum == 1)
{
price = 245;
goodsName = "T恤";
currentPrice = buyNum * price;
}
else if (goodsNum == 2)
{
price = 570;
goodsName = "网球鞋";
currentPrice = buyNum * price;
}
else if (goodsNum == 3) {
price = 600;
goodsName = "网球拍";
currentPrice = buyNum * price;
}
totalPrice += currentPrice; //每次价格进行累加
Console.WriteLine($"{goodsName} ¥{price} 数量:{buyNum} 合计:¥{currentPrice}");
Console.Write("是否继续(y/n:)"); // n时 退出循环
string s = Console.ReadLine();
if (s == "n") { break; }
}
Console.WriteLine();
Console.WriteLine("折扣:0.8");
Console.WriteLine("应付金额:" + totalPrice * 0.8);
Console.Write("实付金额:");
double money = double.Parse(Console.ReadLine());
Console.WriteLine("找钱:" + (money - totalPrice * 0.8));
*/
#endregion
21、使用goto ,允许玩5次 ,猜大了或者猜小了、 猜对了对应的提示, 不合法输入的提示 、不在1-100的提示
Random random = new Random();
int result = random.Next(1, 101);
Console.WriteLine(result);
int count = 0; //次数
inputNum:
if (count>=5)
{
Console.WriteLine("输入次数已经用完了");
return;
}
Console.WriteLine("请输入要猜的数字");
string str = Console.ReadLine();
bool isSuccess = int.TryParse(str, out int num); //num转换成功的数字
if (!isSuccess) // 输入的数字不合法
{
Console.WriteLine("输入数字不合法");
goto inputNum; //重复执行
}
if (!(num>=1&&num<=100))// 数字不在1-100之间
{
Console.WriteLine("请输入一个1-100之间数字");
goto inputNum;
}
count++;
if (num < result)
{
Console.WriteLine("猜小了");
goto inputNum;
}
else if (num > result)
{
Console.WriteLine("猜大了");
goto inputNum;
}
else
{
Console.WriteLine("猜对了");
}
22、求 1 - 1000 以内所有的完美数。(一个正整数,等于它所有真因子(不含自身)之和)
#region
// 6:真因子 {1,2,3}, 1 + 2 + 3 = 6
for (int i = 1; i <=1000; i++)
{
int sum = 0; // 初始化为0
for (int j = 1; j < i; j++) {
if (i % j == 0) {
sum+=j;
}
}
if(sum==i) Console.WriteLine(i); // 6 28 496
}
#endregion
23、百钱百鸡:100块钱可以买多少只公鸡,多少只母鸡,多少只小鸡?公鸡五块钱一只,母鸡三块钱一只,小鸡一块钱三只。
#region
// i:公鸡数量 j:母鸡数量 小鸡数量:k
for (int i = 0; i <= 20; i++) {
for (int j = 0; j <=33; j++) {
int k = 100 - i - j; //小鸡数量
if (i * 5 + j * 3+k/3==100 && k%3==0){
Console.WriteLine($"公鸡:{i},母鸡:{j},小鸡:{k}"); // 4
}
}
}
#endregion
24、把一张1元的钞票换成5分,2分和1分的硬币,要求每种至少一枚,并且所换硬币数不超过30枚。请问,有哪几种换法?
#region
// i:5分 j:2分 k:1分
int count1 = 0;
for (int i = 1; i <20; i++) {
for (int j = 1; j < 50; j++) {
int k = 100 - i * 5 - j * 2;
if (i + j + k <= 30 && k>=1) {
count1++;
Console.WriteLine($"5分:{i},2分:{j},1分:{k}");
}
}
}
Console.WriteLine(count1); //20
#endregion
25、一共150元,牙刷2元,牙膏5元,香皂3元,花光150元,一共有多少种方式,并列举?
#region
int count2 = 0;
for (int i = 0; i <=75; i++)
{
for (int j = 0; j <=30; j++)
{
if ((150 - 2 * i - 5 * j)>=0 && (150- 2 * i - 5 * j) %3==0) {
count2++;
int k = (150 - 2 * i - 5 * j )/ 3;
// Console.WriteLine($"牙刷:{i},牙膏:{j},香皂:{k}");
}
}
}
Console.WriteLine(count2); //401
#endregion
26. 编写程序实现功能,计算100至1000之间有多少个数,其各位数字之和是7
#region
int count = 0;
for (int i = 100; i <1000; i++)
{
int ge = i % 10;
int shi= i %10/100;
int bai = i /100;
if (ge + shi + bai == 7) {
count++;
}
}
Console.WriteLine(count);
#endregion
27、基数为2 ,次数为5,结果为22222 ,通过数学运算得到的?
#region
int s=0;
for (int i = 0; i < 5; i++) {
s += 2 * (int)Math.Pow(10, i);
}
Console.WriteLine(s);
#endregion
更多推荐



所有评论(0)