循环控制

  循环控制

1. 循环: 反复不停的做同1件事情.
 a. 现实生活中的循环在反复不停的做什么事情?
 b. 现实生活中的循环一定会有停止的那1刻.


 2. 在代码中.我们会有这样的需求: 同1段代码反复不停的执行指定的次数.
 a. 实现的方式
1) 简单粗暴的方式: 那就是复制粘贴
 缺点: 代码冗余. 修改维护极度不方便.
 2) 循环结构: 将1段代码进行反复不停的执行指定的次数.
 代码简洁 并且 修改维护方便.

 3. 循环结构
 while循环结构 do-while循环结构 for循环结构
 他们都是来将1段代码进行反复不停的执行指定的次数,唯一的区别仅仅是语法上的区别.

 4. while循环结构.
 a. 语法.
 while(bool表达式)
 {
 需要被反复不停的执行的代码;
 循环体;
 }

             int i = 0;  //循环增量 用来记录循环的次数.
            while (i<5)
            { 
                Console.WriteLine("我爱北京天安门");
                i++;
            }

 


 bool表达式: 比较表达式 逻辑表达式 bool类型的变量 bool类型的常量
 b. 执行步骤.
 第1步: 计算bool表达式的结果.
 1.1 如果结果为true。就执行循环体.循环体执行完毕之后.跳回第1步继续执行.
 1.2 如果结果为false。级结束while循环结构 继续往下执行.

 简单的说下:
 判断条件 如果为true 就执行循环体 执行完毕之后 再判断 直道条件为false的时候结束循环.

 5. 我们在写循环的时候,一定要避免死循环.
 如果1个循环是死循环 那么循环后面的代码永远不会被执行到.


 6. 要写循环的话 你必须确定如下两点:
 a. 那1段代码是需要被反复不停的执行的. 循环体.
 b. 循环结束的条件. 没有特殊的理由千万不要写1个死循环.

------------------------------------------------------循环的常用算法---------------------------------------------------------------

 

1. 循环的应用之一: 循环体确定. 循环的次数也确定
 实现的步骤:
 a. 定义1个int类型的循环增量i 并赋默认值为0 该变量用来记录循环的次数.
 b. while循环的条件写上 i<次数
 c. 在循环体中一定要记得 将循环增量i的值自增.

 eg:
 int i = 0;
 while(i<次数)
 {
 循环体;
 i++;
 }

 为什么这么写我们的循环就可以执行指定的次数.
 因为循环的条件表达式中 有循环增量i参与. 而i变量的值 每循环1次都会发生变化.
 前面几次的变化循环条件的结果都是true 当最后1次变化的时候 循环条件的值就变为false了.

 写循环的技巧:
 如何确定循环体: 那你就试着写代码.要实现功能 不用循环该如何实现.
 你在复制的代码 就是要被反复不停的执行的代码 就是你要找的循环体嘛.

 一定要注意: 循环增量的值不要忘记更改. 如果不改循环增量的值 只要第1次循环可以进入 那么这个循环就是1个死循环.


2. 循环应用之二: 循环体确定 循环的次数不确定. 但是我清楚循环结束的条件.
 实现的步骤.
 a. 先写1次循环体.
 b. 在写1个while循环 循环中放入我们的循环体. 循环的条件: 写上要再来1次的条件.
 c. 在循环体中一定要改 参与 循环条件表达式的变量的值 否则如果第1次可以进入循环 那么这个循环就会是1个死循环.

 eg:
 循环体;
 while(再次进入循环的条件)
 {
 循环体;
 一定要记得更改参与循环条件表达式的变量的值.
 }

         //请写1个程序 要求输入用户名. 只要不是admin 要求用户重新输入. 
            //接收用户输入用户名 的操作. 需要反复不停的执行,

            Console.WriteLine("请输入用户名:");
            string userName = Console.ReadLine();
            //需不需要继续输入? 当userName的值不为"admin"的时候 重新输入.
            while(userName!="admin")//== !=
            {
                 Console.WriteLine("请输入用户名:");
                userName = Console.ReadLine();
            }

            Console.WriteLine("OVER");

 



 注意:对于这种循环. 我们清楚的是循环结束的条件. 但是我们在while后面写的是循环继续的条件. 写的是循环结束的反面的条件.
 要么循环条件直接就写上反向的条件.
 要么就把结束的条件写上 然后再反1下.

 补充:
 我们的建议是在循环之前 先写1次循环体 。
为什么我们要先写1次循环体呢? 是因为我们要保证我们的循环无论如何至少要执行1次.
 那如果是这个目的的话 我们就可以简单1点.
 在写条件的时候 保证这个条件第一次是成立的 可以进去执行循环体.

 

 3. 循环应用之三: 遍历指定范围的数.
 循环结构的作用:将同1段代码进行反复不停的执行指定的次数.
 实现步骤.
 要将n-m之间的每1个整数打印出来.

 a. 定义1个循环增量i 并赋默认值为n;
 b. while循环的条件是 i<=m
 c. 在循环体中 循环增量i 就是我们想要遍历的数据.
 切记: 要在循环体后面更改循环增量的值 i++;

 int i = n;
 while(i<=m)
 {
 循环增量i就是我们要遍历的数据;
 i++;
 }

//将100-200之间的整数打印出来.
            int i = 100;
            while (i < 201)
            {
                Console.WriteLine(i);
                i++;
            }

 


 4. 循环应用之四: 找出指定范围中符合特定条件的数.
 实现步骤.
 a. 遍历这个范围中的每1个整数.
 b. 判断遍历出来的这个数是不是符合特定条件的.

//请用户输入两个整数  1  20  那你就将两个数之间的整数打印出来.
            //如果第1个数比第2个数大 就提示错误.
            Console.WriteLine("请输入第1个数:");
            int min = int.Parse(Console.ReadLine());
            Console.WriteLine("请输入第2个数:");
            int max = int.Parse(Console.ReadLine());
            if (min > max)
            {
               Console.WriteLine("输入错误,第1个数不能比第2个数大.");
            }
            else
            {
                //我们将min-max中的每1个整数打印出来.
                int i = min;
               while (i <= max)
                {
                    Console.WriteLine(i);
                    i++;
                }
            }

 



 eg: 请n-m之间的符合特定条件的数:
 int i = n;
while(i<=m)
 {
 判断i是不是符合特定条件 如果符合打印出来.
 i++;
 }


 5. 循环应用之五: 求累加和 平均值.
 求1堆数的累加和.
 先准备1个桶变量 用来存储累加和.
 然后遍历这1堆数中的每1个数. 将遍历出来的数 往 桶中累加.
 遍历完毕后 桶 变量中的数据 就是这堆数的累加和.

 eg. 求n-m之间的所有的整数的累加和.
 int sum = 0;
 int i = n;
 while(i<=m)
 {
 sum+=i;
 i++:
 }
 循环完毕以后 sum中的值 就是n-m之间的整数的累加和.

  //请写1个程序  算出1-10之间的所有的数的累加和.

            int sum = 0;//"桶变量" 用来存储累加和.
            int i = 1;
            while (i <= 10)
            {
                sum += i;
                i++;
            }
            Console.WriteLine(sum);

  



 6.循环应用之六:求最大值和最小值.
 找1堆数中的最大值:
 a. 声明1个擂台变量.
 b. 遍历这堆数中的每1个数. 将遍历出来的数和擂台变量中的数进行比较
 如果比的过就上去.
 c. 遍历完成以后,这个擂台变量中存储的就是这堆数中的最值.

//从控制台输入10个数 要把最大的那个数找出来. 
            int i = 0;
            int max = int.MinValue;
            while (i < 10)
            {
                Console.WriteLine("请输入第{0}个数:",i+1);
                int num = int.Parse(Console.ReadLine());
               if (num > max)
                {
                    max = num;
                }
                i++;
            }

             Console.WriteLine(max);

 





 7.循环应用之七: 穷举
 1个1个的试.

//有1个数 这个数至少是2. 这个数除以2余数为1 除以3余数也为1 除以4余数1.

            int num = 2;

            while (num % 2 != 1 || num % 3 != 1 || num % 4 != 1)
            {
               num++;
            }
            Console.WriteLine(num);

 




8. 循环应用之八:计数

   //请统计1-100之内有多个数 可以被8整除.
            int i = 1;
            int j = 0;
            while (i <= 100)
            {
                if (i % 8 == 0)
                {
                    j++;               
                } 
                i++;
            }
            Console.WriteLine(j);

 



 9. break关键字.
 a. break可以用在switch-case中. 代表立即结束整个switch结构.
 b. break还可以用在循环体中. 代表立即结束当前所在的循环. 如果循环体的后面还有代码的话 不会执行.

 break的作用可以结束循环.

 break的应用场合.
 对于循环体确定,循环次数不确定,但是循环结束的条件确定的循环.
 我们十分清楚的是 循环结束的条件. 但是在写条件的时候 要写循环继续的条件.
 推荐的方式.
 a. 先来1个"死"循环.
 b. 在循环体中 判断循环是否应该结束.

            int i = 0;
            while (i < 5)
            {
               Console.WriteLine(i);
                if (i == 2)
                {
                    break;
                }
                Console.WriteLine("A"); 
                i++; 
            }

 



 10. continue 是1个关键字. 用在循环体中.
 在循环体中如果遇到continue 表示立即结束本次循环,准备进入下次循环,
 如果后面还有循环体的代码 不会执行.

 

  int i = 0;
            while (i < 5)
            {
              
                i++;
                if (i == 2)
                {
                    continue;
                }
                Console.WriteLine(i);
               
            }
            Console.WriteLine("OVER");

 

---------------------------------------------------经典题目----------------------------------------------------

//请将1000-5000之间的符合条件的数打出来.
            //各位数之和等于5的整数.  1004   1+0+0+4  1013
            //   1987/1000   1987%1000 /100        

            int i = 1000;
            while (i <= 5000)
            {
                //要判断i 的各位数之和是否等于5
                int qian = i / 1000;
                int bai = i % 1000 / 100;
                int shi = i % 1000 % 100 / 10;
                int ge = i % 10;
                if (qian + bai + shi + ge == 5)
                {
                    Console.WriteLine(i);
                }
                i++;
            }
 //请用户从控制台输入用户名和密码 只要不是admin 888888 就重新输入.
            //当输入3次都没有输入正确的话 那么就不给输入了.
            //循环体: 接收用户的用户名和密码. 循环的次数:最多3次  结束的条件: 输入用户名和密码正确
            string userName = "";
            string pwd = "";
            int i = 0;
            //用户名或密码不正确  并且 循环的次数小于3次
            while ((userName != "admin" || pwd != "888888") && i<3)
            {
                Console.WriteLine("请输入用户名:");
                userName = Console.ReadLine();
                Console.WriteLine("请输入密码:");
                pwd = Console.ReadLine();
                i++;
            }

 

 

 

posted @ 2014-06-08 01:09  海域公園  阅读(225)  评论(0编辑  收藏  举报