C#基础-循环结构-04

学校规定晚上熄灯后不准发出声音。昨天晚上,熄灯后几个哥们还在唱歌,谁都没注意到查寝的老师来了,老师吼了句:是谁在唱歌!一哥们马上接道:温暖了寂寞…第二天全寝室去政教处接受教育。



========================手动分割线==========================

在编写程序过程中,可能需要多次执行同一块代码。一般情况下,语句是顺序执行的:函数中的第一个语句先执行,接着是第二个语句,依此类推。
编程语言提供了允许更为复杂的执行路径的多种控制结构。
循环语句允许我们多次执行一个语句或语句组,下面是大多数编程语言中循环语句的一般形式:


循环结构.png

C#提供的循环的知识点常用的有:

  • for循环,for循环的嵌套
  • while循环
  • do...while循环
  • 循环控制语句
  • foreach循环
    接下来,我们逐一进行介绍不同循环类型的区别。

一、for循环

for(1;2;3){
4;
}
1:循环变量初始化
2:循环条件,条件成立,执行循环
3:循环变量增加
4:循环体,反复执行的代码
注意:1、循环次数 =(不满足循环条件的第一个循环变量 - 循环变量的初始值)/循环增量 2、for循环的执行顺序,第一次:1243,以后: 243,注意循环变量初始化只执行一次。
使用for循环打印Helloword五次

for (int i = 0; i < 5; ++i) {
       Console.WriteLine ("Helloworld");
}

打印1-5的数

for (int i = 1; i <= 5; i++) {
       Console.WriteLine (i);
}

打印5-1的数

//方法一
for (int i = 5; i > 0; i--) {
       Console.WriteLine (i);
}
//方法二
 for (int i = 1; i < 6; i++) {
       Console.WriteLine (6 - i);
 }

打印0-100之间的偶数

  //方法1:
for (int i = 0; i < 101; i += 2) {
       Console.Write (i + " ");
}
Console.WriteLine ();
//方法2:
for (int i = 0; i < 101; i++) {
      if (i % 2 == 0) {
            Console.Write (i + " ");
      }
}

计算1-100的和

int sum = 0;//用来保存每次循环后的和
for (int i = 1; i <= 100; i++) {
     //求和
     sum = sum + i;
}
Console.WriteLine ("1-100的和:" + sum);

计算1-100之间的奇数的和

int sum1 = 0;
for (int i = 1; i <= 100; i++) {
       if (i % 2 == 1) {
            sum1 = sum1 + i;
       }
}
Console.WriteLine ("1-100之间奇数的和:" + sum1);

打印1-100之间,个位数是7的数

 for (int i = 1; i <= 100; i++) {
     if (i % 10 == 7) {
         Console.WriteLine ("1-100之间个位是7的数为:" + i);
     }
}

打印1-1000之间,十位数是7的数

 for (int i = 1; i < 1000; i++) {
      if (i % 100 / 10 == 7) {
          Console.WriteLine (i + "");
      }
 }

如果遇到1-100之间凡是带7或者能过被7整除的数,输出“过”,否则输出该数

for (int i = 1; i <= 100; i++) {
      if (i % 7 == 0 || i / 10 == 7 || i % 10 == 7) {
           Console.WriteLine ("过");
      } else {
            Console.WriteLine (i);
      }
}

循环嵌套

//外层循环:控制输出的行数
for (int i = 0; i < 6; i++) {
        //内层循环控制输出的内容
        for (int j = 1; j <= 5; j++) {
              Console.Write (j + " ");
        }
       Console.WriteLine ("第{0}行", i);
}

注: 外层循环执行一次, 内层循环执行一遍
练习:通过for循环嵌套实现如下效果

 /*
   * 1
   * 1 2
   * 1 2 3
   * 1 2 3 4 
   * 1 2 3 4 5 
   */
//外层循环控制行数
for (int i = 0; i < 5; i++) {
    for (int j = 0; j <= i; j++) {
          Console.Write (j + 1 + " ");
    }
    Console.WriteLine ();
}

练习:打印如下效果

/*
  * 1 2 3
  * 1 2
  * 1
  */
//外层循环控制行数
for (int i = 0; i < 3; i++) {
    for (int j = 1; j < 4 - i; j++) {
         Console.Write (j + " ");
     }
     Console.WriteLine ("第{0}行", i + 1);
}

练习:打印如下效果

/*
  * 3
  * 3 2 
  * 3 2 1
  */
//外层循环控制行数
for (int i = 0; i < 3; i++) {
    for (int j = 0; j <= i; j++) {
         Console.Write (3 - j + " ");
     }
     Console.WriteLine ();
}

练习:打印如下效果

/*
  * 3 2 1
  * 3 2
  * 3
  */
//外层循环控制行数
for (int i = 0; i < 3; i++) {
    for (int j = 3; j > i; j--) {
         Console.Write (j + " ");
     }
     Console.WriteLine ();
}

练习:实现九九乘法表

//外层循环控制行数
for (int i = 1; i <= 9; i++) {
      for (int j = 1; j <= i; j++) {
            Console.Write ("{0}x{1}={2} ", j, i, i * j);
             //如果想实现对齐,可以使用下面的语句
              //Console.Write ("{0}x{1}={2}\t", j, i, i * j);
        }
         Console.WriteLine ();
}

二、while循环

while格式:
while(条件表达式){
循环体;
}
执行顺序: 先判断循环条件, 成立, 执行循环体, 不成立,循环结束
打印10次helloworld

int a = 10;
while (a >= 0) {
      Console.WriteLine ("Helloword");
       a--;
} 

计算10-100之间的偶数和

int s = 10, sum = 0;
while (s <= 100) {
      if (s % 2 == 0) {
            sum += s;
       }
       s++;
}
Console.WriteLine ("sum = {0}", sum);       

随机生成20个[10, 100]的数, 并求最大值, 最小值, 平均值

int k = 0, max = 10, mi = 100, sum = 0;
Random random = new Random ();
while (k < 20) {
     //产生随机数
      int temp = random.Next (10, 101);
      Console.Write ("{0} ", temp);
     //最大值
      max = max < temp ? temp : max;
     //最小值
      mi = mi < temp ? mi : temp;
     //求和
      sum += temp;
      k++;
}
Console.WriteLine ("最大值:{0}", max);
Console.WriteLine ("最小值:{0}", mi);
Console.WriteLine ("平均值:{0}", sum / 20.0);

三、do....while

格式:
do {
//循环体
} while(条件表达式);
执行顺序: 先执行循环体, 再执行条件判断, 如果成立,继续循环体, 不成立, 循环结束
注: 至少执行一次循环体
输出10遍Helloworld

int b = 10;
do {
      Console.WriteLine ("Helloword");
      b--;
} while(b >= 0);

逢7过, 100以内

int k = 1;
do {
     if (k % 7 == 0 || k % 10 == 7 || k / 10 == 7) {
           Console.WriteLine ("过");
     } else {
           Console.WriteLine (k);
     }
     k++;
} while (k <= 100);

补充知识点:随机数

//实例化一个随机数对象
Random random = new Random ();
//产生一个0-3之间的随机数,注意:不包括3
int a = random.Next (3);
Console.WriteLine (a);

小练习:

//练习:产生随机数
Random ran = new Random ();
//定义一个存储随机数的变量
int value = 0;
//(1)获取[0,9)之间的随机数
value = ran.Next (9);
Console.WriteLine (value);
//(2)获取[0,20)之间的随机数
value = ran.Next (20);
Console.WriteLine (value);
//(3)获取[20,30)之间的随机数
value = ran.Next (20, 30);
Console.WriteLine (value);

总结:生成随机数的公式:如果Next后面放入一个参数a,默认返回[0,a)之间的随机数,如果放入两个参数a和b,那么随机数的取值范围时 [a,b)
练习:随机生成10个数,范围是22~33之间,并输出

 //1、实例化随机数对象
Random ran = new Random ();
//定义一个循环变量
int i = 10;
while (i > 0) {
  //2、生成随机数
    int random = ran.Next (22, 34);
    Console.WriteLine (random);
  //循环变量
    i--;
}

//使用do..while
do {
     //2、生成随机数
     int random = ran.Next (22, 34);
     Console.WriteLine (random);
     i--;
} while(i > 0);    

练习: 随机生成20个[6, 66]的数, 并求最大值

int max = 0;
Random random = new Random ();
for (int i = 0; i < 20; i++) {
     int num = random.Next (6, 67);
     Console.Write ("{0} ", num);
     max = max < num ? num : max;
}
Console.WriteLine ("max = {0}", max);    

练习: 随机生成15个[8, 88]的数, 并求最小值

Random random = new Random ();
int min = 88;
for (int i = 0; i < 15; i++) {
      int temp = random.Next (8, 89);
      Console.Write ("{0} ", temp);
       min = min > temp ? temp : min;
}
Console.WriteLine ("min = {0}", min);

练习: 输入一个正整数, 逆向输出它

Console.WriteLine ("输入一个正整数:");
int num = int.Parse (Console.ReadLine ());
while (num != 0) {
      Console.Write (num % 10);
      num /= 10;
}

练习: 输入一个正整数, 输出它的位数

Console.WriteLine ("输入一个正整数:");
int num = int.Parse (Console.ReadLine ());
int count = 0;
do {
     num /= 10;
     count++;
} while (num != 0);
Console.WriteLine ("{0}位数", count);

四、循环控制语句

1、 break 语句:终止循环或switch的语句,程序将执行紧接着循环或switch的下一条语句。
break:跳出本层循环,通常与if结合使用

for (int i = 0; i < 5; i++) {
     if (i < 3) {
         Console.WriteLine ("Hello world!");
         break;
     }
}

注意:break是跳出离它最近的那层循环,如下代码,if条件满足时,内层循环会结束,外层循环继续执行

for (int i = 0; i < 5; i++) {
      for (int j = 0; j < 6; j++) {
           if (j < 3) {
              Console.WriteLine ("Hello world!");
              break;
           }
      }
 }

2、 continue 语句:引起跳出主体剩余的部分,立即重新开始测试条件。
continue:结束本次循环,开始下次循环
如下代码,j为3时,不打印j的值,但是会继续打印后面的值

for (int i = 0; i < 5; i++) {
   for (int j = 0; j < 5; j++) {
       if (j == 3) {
            continue;
       }
       Console.Write (j + " ");
    }
    Console.WriteLine ();
}

五、foreach循环

foreach循环可以迭代数组或者一个集合对象,后续我们会有专门针对C#数组和集合的讲解,到时候会再详细涉及foreach的使用,本节先进行了解
foreach格式:
foreach(数据类型 变量名 in 数组名)
{
//语句块;
}
执行顺序:循环运行的过程:每一次循环时,从集合中取出一个新的元素值。放到只读变量中去,如果括号中的整个表达式返回值为 true,foreach 块中的语句就能够执行。
一旦集合中的元素都已经被访问到,整个表达式的值为 false,控制流程就转入到 foreach 块后面的执行语句。
foreach 语句仅能用于数组、字符串或集合类数据类型。

循环总结:

在后续编程过程中,我们要实现的逻辑基本都是由分支、循环组成,所以针对分支和循环的知识点是必须要掌握的,尤其是二者的结合。
for循环:多使用在明确循环次数的循环,而且是以后常用的循环结构,重点是掌握循环的嵌套。
while循环:多用于不明确循环次数的循环中,知道循环的结束的标识,先判断条件,再执行循环体。
do...while循环:多用于不明确循环次数的循环中,知道循环结束的标识,先执行循环体,再判断循环条件是否满足,无论条件是否满足,循环体都要执行一次。
break与continue
break:结束本层循环,循环终止,终止的是离他最近的循环
continue:结束本次循环,continue后的循环体代码就不再执行,继续执行下一次循环。
循环的四部分:
1、循环变量的初始化
2、循环条件的判断
3、循环增量
4、循环体

注:编程没有捷径,看是没用的,只有动手多敲,动脑多想,逐步积累才行,千万必要眼高手低,简单的东西不代表你就能正确无误地做出来。

本次讲解就到这里,有关技术问题请小伙伴们添加QQ群:941928511,大家一起探讨!
版权声明:本文为博主原创文章,转载请附上原文出处链接和本声明

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容