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 } }