using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace P01ReviewAndWhile
{
class Program
{
static void Main(string[] args)
{
//Reg();
MulLoop();
Console.ReadLine();
}
#region 9.2 多重循环练习:注册 void Reg()
//9.2 多重循环练习:注册,要求用户填写 用户名,如果用户名错误,则提示用户名出错,并要求重新输入用户名;
// 要求用户填写 用户密码,如果用户密码错误,则提示用户密码出错,并要求重新输入用户密码;
//错误条件:1.不能为空; 2.用户名和密码不能相同;
static void Reg()
{
string strName = "";
string strPwd = "";
while (true)
{
//1.循环检查用户输入的名称不能为空
do
{
Console.WriteLine("请输入用户名:");
strName = Console.ReadLine();
if (strName == "")
{
Console.WriteLine("用户名不能为空,请重新输入!");
Console.WriteLine("**************************");
}
} while (strName == "");
//2.循环检查用户输入的密码不能为空
do
{
Console.WriteLine("请输入用户密码:");
strPwd = Console.ReadLine();
if (strPwd == "")
{
Console.WriteLine("用户密码不能为空,请重新输入!");
Console.WriteLine("**************************");
}
} while (strPwd == "");
//3.询问用户是否要继续注册
Console.WriteLine("注册成功~~~您是否要继续注册呢?(y/n)");
string strIsContinue = Console.ReadLine();
if (strIsContinue != "y")
{
break;
}
Console.WriteLine("**************************");
}
Console.WriteLine("退出成功~~~!");
}
#endregion
#region 9.1 多重循环的 退出 void MulLoop()
/// <summary>
/// 9.1 多重循环的 退出
/// </summary>
static void MulLoop()
{
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 3; j++)
{
Console.Write("☆");
if (j == 1)
{
i = 4;//如果想【退出 外部的大循环】,只能 直接满足 外部大循环的 循环条件!
break;//注意:此处的break 是退出了 最近的一个循环(也就是 里面这个循环)
}
}
Console.WriteLine("");
Console.WriteLine("****************************");
}
}
#endregion
#region 9.0 多重循环 练习题 打指定高宽的 长方形
/// <summary>
/// 9.0 多重循环 练习题 打指定高宽的 长方形
/// </summary>
static void PrintRec()
{
Console.WriteLine("请输入 你要打的 长方形的 高:");
int height = int.Parse(Console.ReadLine());
Console.WriteLine("请输入 你要打的 长方形的 宽:");
int width = int.Parse(Console.ReadLine());
//多重循环(嵌套循环)
//1.打印行 (按照用户 输入的 height 来打印 height 行)
for (int row = 0; row < height; row++)
{
//2.打印每一行里的 星星(按照 用户输入的 width 来打印 width个 星星)
for (int low = 0; low < width; low++)
{
Console.Write("☆");
}
//1.1每打印完一行 星星,就 打印一个换行
Console.Write("\n");
}
}
#endregion
#region 练习题 要求 在控制台屏幕上 打出 一行 ************************
/// <summary>
/// 练习题 要求 在控制台屏幕上 打出 一行 ************************
/// </summary>
static void PrintStar()
{
//1.先接受用户 要打的星星个数
Console.WriteLine("请输入您要打的星星的个数:");
int num = int.Parse(Console.ReadLine());
//2.循环 要求的个数,每次循环打出 1个 *
for (int i = 0; i < num; i++)
{
Console.Write("*");
}
}
#endregion
#region 8.0 while 循环 void While()
/// <summary>
/// 8.0 while 循环
/// </summary>
static void While()
{
//标识位:标识 用户是否登录成功了~~
bool isOk = false;
//1. while 循环 是 先判断,满足条件 时 才执行!
//while(true)的时候才执行循环体代码
// while (!isOk) 之所以 取反 的原因,是因为 只有 isOk=false 代表 没有登录时,才执行循环体;
// 但while(false)不会执行循环体;所以需要把while(!false),相当于while(true),才执行循环体代码
while (!isOk)//如果用户没有登录成功,则 执行循环体 代码!
{
Console.WriteLine("请输入用户名:");
string strName = Console.ReadLine();
Console.WriteLine("请输入您的密码:");
string strPwd = Console.ReadLine();
if (strName == "admin" && strPwd == "123")
{
Console.WriteLine("登录成功啊~~~~");
isOk = true;
}
}
}
#endregion
#region 7.0 do while 循环
/// <summary>
/// 7.0 do while 循环
/// </summary>
static void DoWhile()
{
int i = 0;
//1.0 do while循环 的特点: 不管条件如何,先执行一次再说!
do
{
//1.1做到 第 5 个的时候,休息一下
if (i == 4)
{
Console.WriteLine("休息一下~~~~");
i++;
continue;
}
//1.2做到 第19个的时候,做不下去了,停止循环
if (i == 18)
{
Console.WriteLine("做不下去了~~~~");
break;
}
Console.WriteLine("做第【{0}】个仰卧起坐~~~", i + 1);
i++;
}
while (i < 20);//while 中必须 是 bool值 或 bool条件表达式,如果是true的话,则继续循环;如果是false的话,则退出循环
//for (int a = 0; a < 20; a++)
//{
// Console.WriteLine("做第【{0}】个仰卧起坐~~~", a + 1);
//}
}
#endregion
#region 6.0 for循环 void ForLoop()
/// <summary>
/// 6.0 循环
/// </summary>
static void ForLoop()
{
/* 6.1for循环:指定要循环的次数
* 执行顺序:
* a.第一次执行时,先创建变量int times = 0
* b.判断条件 times <= 5,如果条件满足(true)
* b1.执行方法体代码
* b2.执行 条件值改变 times++
*
* c.再重复执行 b,知道 条件不满足时(false),退出循环
*/
for (int times = 0; times <= 5; times++)
{
//Console.WriteLine("老师,我跑了一个圈~~~");
}
//6.1.1 break 跳出 循环
//for (int i = 0; i < 12; i++)
//{
// Console.WriteLine("我吃了{0}个包子", i + 1);
// if (i == 4)
// {
// Console.WriteLine("吃了5个包子了,第6个实在吃不下了~~~!");
// break;//退出本层循环,当代码运行到 break时,会自动退出 离break最近的 循环
// }
//}
//6.1.2 continue 跳出 本次循环
for (int i = 0; i < 12; i++)
{
if (i == 4)
{
Console.WriteLine("考~第5个包子里竟然有半条虫~~~!扔掉~!");
continue;//退出 本次循环,continue代码后面的 不执行了,直接进入到 下一次循环,(直接跳到 i++去了!)
}
Console.WriteLine("我吃了{0}个包子", i + 1);
}
}
#endregion
#region 6.1 题目:要求用户输入年龄(0-100之间)
/// <summary>
/// 题目:要求用户输入年龄(0-100之间),如果不符合条件,则要求重新输入(一共给3次重新输入的机会,如果都没成功,则退出程序!)如果成功了,则显示用户年龄
/// </summary>
static void LoopForEx()
{
/*再回首看”循环“:重复的 在满足某些条件的 情况下 做同样的事情
*/
//1.使用for循环 循环 3 次
for (int i = 0; i < 3; i++)
{
Console.WriteLine("请输入您的年龄:");
int age = int.Parse(Console.ReadLine());
if (age > 0 && age <= 100)
{
Console.WriteLine("您的年龄是正常值~~~应该是地球人~~!:0");
i = 2;//此处因为已经 接收了 符合条件的 年龄,所以,不需要再循环了;
// 我们就在此 把 循环条件i改成2,接下来会执行 for循环里的 i++,然后再判断 i是否<3,那么因为i=i+1=3了,所以不满足条件,最后直接退出循环
}
else
{
Console.WriteLine("您的年龄有点怪~~~正常人是 0-100,请重新再来~~~");
}
}
}
#endregion
#region 6.2 循环题目:登录练习 +void Login()
/// <summary>
/// 6.2 循环题目:登录练习
/// </summary>
static void Login()
{
/*6.2 循环题目:登录练习
* a.接收用户名和密码,如果用户名和密码 等于 admin 和 123,则提示登录成功;否则一直提示登录失败
* b.登录成功后,要求用户输入 自己银行里的存款金额;
* c.要求用户输入年龄,如果年龄 在 0-20之间,发给 用户奖金 : 存款金额 * 0.2
* 在 21-30之间,发给 用户奖金 : 存款金额 * 0.4
* 在 31-100之间,发给 用户奖金 : 存款金额 * 0.6
* 注意:年龄必须在 0 - 100 之间的整数
*/
string strName = "";
string strPwd = "";
//1.接收用户名和密码
//for (; ; )//注意:for()里的 ;号不能省略,其它的都能省略
while(true)
{
Console.WriteLine("请输入您的用户名:");
strName = Console.ReadLine();
Console.WriteLine("请输入您的密码:");
strPwd = Console.ReadLine();
if (strName == "admin" && strPwd == "123")
{
Console.WriteLine("登录成功~~~");
break;//退出 循环
}
else {
Console.WriteLine("用户名或密码有误,请重新输入~");
Console.WriteLine("----------------------------");
}
}
//2.输入年龄
Console.WriteLine("请输入您的年龄:");
int age = Convert.ToInt32(Console.ReadLine());
//3.输入您现有的存款金额
Console.WriteLine("请输入您的 存款金额,我们将会给您发放 对应的 奖金:");
decimal money = decimal.Parse(Console.ReadLine());
//4.根据年龄 发放不同的 奖金
decimal jiangJin = 0m;
if (age > 0 && age <= 20)
{
jiangJin = money * 0.2m;
}
else if (age > 21 && age <= 30)
{
jiangJin = money * 0.4m;
}
else if (age > 31 && age <= 100)
{
jiangJin = money * 0.6m;
}
Console.WriteLine("恭喜您获得了【{0}】的奖金~~~", jiangJin);
}
#endregion
#region 5.0 三元运算符 ?: +void ThreeYuanOpe()
/// <summary>
/// 5.0 三元运算符 ?:
/// </summary>
static void ThreeYuanOpe()
{
Console.WriteLine("请输入您的狗狗的年龄:");
int age = Convert.ToInt32(Console.ReadLine());
string hornorName = "";
if (age > 15)
{
hornorName = "英雄老狗~~";
}
else
{
hornorName = "小狗狗~~";
}
Console.WriteLine("狗狗荣誉名:" + hornorName);
/*三元运算符:
* ? 号前面 一定是一个 bool表达式(最终返回bool值的表达式)
* 如果 ?前的 bool表达式 返回 true,那么就把 : 号前面的 值 返回给 =前面的变量 honorName2
* false,那么就把 : 号后面的 值 返回
* 注意:可以用来 替代 简单的 if else
*/
string honorName2 = age > 15 && age < 22 ? "英雄老狗" : "小狗狗";
}
#endregion
#region 4.0 常用的字符串转义符
/// <summary>
/// 4.0 常用的字符串转义符
/// </summary>
static void TransferChar()
{
//1.引号转移符 \" \n 换行转移符 \t退格符 \\反斜杠转义(就输出一个\字符)
string strMsg = "\t小白,我\"爱\"你~!\n你信吗\\n?~~";
Console.WriteLine(strMsg);
}
#endregion
#region 3.0 逻辑运算符 void LogicOperation()
/// <summary>
/// 3.0 逻辑运算符
/// </summary>
static void LogicOperation()
{
Console.WriteLine("请输入您的年龄:");
int age = int.Parse(Console.ReadLine());
//if (age > 0 )
//{
// if (age < 110)
// {
// Console.WriteLine("您的年龄正常,恭喜您来到罪恶的人世间~~~!");
// Console.WriteLine(age);
// }
//}
//1.0 逻辑与 && ,用来连接 两个 结果为bool值的表达式
// 执行顺序:由左到右,一旦遇到 一个 表达式的bool值 为 false的话,则整个 都为 false,而且 后面的 表达式不再执行
// 如果 age = -1,那么 age>0=false,&&符号后面的 表达式不再执行!最重要的是:整个 &&表达式 的结果 为 false
// && 表达式的返回值:只有当 整个表达式中 所有的 判断都 为 true的时候,才返回 true
// 其中任意 一个 判断 为false,那么 整个表达式 都 返回 false
if (age > 0 && age < 110)
{
Console.WriteLine("您的年龄正常,恭喜您来到罪恶的人世间~~~!");
Console.WriteLine(age);
}
//2.0 逻辑或 ||:任意 判断 为 true,整个表达式 就返回 true
// 只有当 整个 表单式中 所有判断 都为 false的事情,才回 返回 false
if (age < 10 || age > 80)
{
Console.WriteLine("因为您的年龄 <10 或者 >80岁,所以不需要买门票~~~");
}
//3.0 取反 !
bool isOk = !false;
Console.WriteLine("isOk=" + isOk);
//3.1如果和=号相连,就叫做 不等号 !=;注意:没有 不大于号 !>,没有 !<
if (age != 0)
{
}
if (!(age > 10))
{
}
if (!isOk)//如果 isOk=false,那么 !isOk = true,才能进入到 if语句中
{
Console.WriteLine("哈哈哈哈~~~");
}
if (true)
{
Console.WriteLine("123123");
}
}
#endregion
#region 1.0 交换变量
/// <summary>
/// 1.0 交换变量
/// </summary>
static void M01SwiftVar()
{
int a = 110;
int b = 120;
//1.1 定义中间变量
int x = a;//将要交换的变量之一 的值 存入 x
a = b;
b = x;//将 x里的值,存入 b
//1.2数值类型的交换算法
a = a + b;//110 + 120=230
b = a - b;//230 - 120 =110
a = a - b;//230 - 110 =120
}
#endregion
#region 2.0 自增自减.....
/// <summary>
/// 2.0 自增自减.....
/// </summary>
static void M02Self()
{
int a = 1;
a = a + 1;
//2.1自增 a++ 就相当于 a=a+1
a++;
//2.2自减
a--;// a=a-1;
//2.3 自运算 指定的 值
int b = 2;
b += 220;//相当于: b = b + 220;
b -= 220;//相当于:b = b -220;
b *= 2;//相当于:b = b * 2;
b /= 2;//相当于:b = b / 2;
b %= 2;//相当于:b = b % 2;
//2.4 关于 ++ 和 -- 的 前置 和 后置 **************
int x = 1;
//a.如果 单独使用 前置或后置运算,结果都是 自身+1
x++;
++x;
//b.如果 结合到 运算 或 赋值 语句中,则有明显的区别
//b1. 【后置】:先进行 【运算 或 赋值】,再 ++
int z = 1;
int z2 = z++;//注意:此处 先 运行的 =号,再运行的 ++
//相当于:
// int z2 = z;
// z = z + 1;
Console.WriteLine("z2=" + z2);//1
Console.WriteLine("z=" + z);//2
int z3 = 2 + z++;
Console.WriteLine("z3=" + z3);//4
Console.WriteLine("z=" + z);//2
//b2.【前置】:先进行 ++ 再【运算 或 赋值】
int o = 1;
int o2 = ++o;// o2 = 1+o;
Console.WriteLine("o2=" + o2);//2
int o3 = 2 + ++o;
Console.WriteLine("o3=" + o3);//5
//b3. 混合,拜托一定要注意符号的优先级: 前置 > 运算 和 赋值 符 > 后置
int x2 = 1;
int o4 = x2++ + 3 + ++x2; // 2 + 3 + 2
/*流程顺序:
* 1. ++x2 , x2=2
* 2. 2 + 3 + 2
* 3. o4 = 7
* 4. x2++ ,x2 =3
*/
Console.WriteLine("o4=" + o4);
}
#endregion
}
}