C#基础篇三流程控制2

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

posted @ 2015-01-17 17:20  枫伶忆  阅读(336)  评论(0编辑  收藏  举报