学校规定晚上熄灯后不准发出声音。昨天晚上,熄灯后几个哥们还在唱歌,谁都没注意到查寝的老师来了,老师吼了句:是谁在唱歌!一哥们马上接道:温暖了寂寞…第二天全寝室去政教处接受教育。
========================手动分割线==========================
在编写程序过程中,可能需要多次执行同一块代码。一般情况下,语句是顺序执行的:函数中的第一个语句先执行,接着是第二个语句,依此类推。
编程语言提供了允许更为复杂的执行路径的多种控制结构。
循环语句允许我们多次执行一个语句或语句组,下面是大多数编程语言中循环语句的一般形式:
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,大家一起探讨!
版权声明:本文为博主原创文章,转载请附上原文出处链接和本声明