2018-11-22循环结构

循环结构
要么痛苦的坚持游戏结束 可能会升级
要么结束游戏继续的痛苦 可能有遗憾
知识点
(1) . while
(2) . break语句
(3) . do-while
(4) . for
(5) . foreach
(6) . 程序调试
一、 问题
 实际生活中的循环:打印100份试卷
 李四这次考试又粗心了,爸爸让他写1000遍“下次考试一定要细心”.(复印纸加三根笔)
如何编程实现上面的问题?
Console.WriteLine("下次考试一定要细心");
Console.WriteLine("下次考试一定要细心");
Console.WriteLine("下次考试一定要细心");
……
二、 While循环
(一) 语法
while(循环条件)
{
循环体;
}
(二) 执行过程
程序运行到while处,首先判断while所带的循环条件是否成立,如果成立,也就是为true,则执行大括号中的循环体,
当循环体执行完成一遍后,继续回到循环条件进行判断,如果成立,则执行,如果不成立,则跳出while循环。
每个循环都有那么一行代码,能够改变循环条件,使之终有一天不再成立,如果程序中没有那么一行代码能够改变循环条件,那么我称之为这种循环叫做死循环。
特点:先判断,再执行,有可能一次都不执行。
(三) 流程图

(四) 注意事项
在写while循环的时候,一定要分析出循环体和循环条件。
(五) 解决实际问题
int i=0;
while(i<1000)
{
Console.WriteLine(“我下次一定要超越他”);
i++;
}
(六) while循环的练习
(1) . 打印10次"欢迎您来到宁波教育学院学习"
(2) . 求1-100之间的所有整数和,求1-100之间所有偶数和
int i = 1;
int sum = 0;
while (i <= 100)
{
if (i % 2 == 0)
{
sum += i;//sum=sum+i;
}
i++;
}
Console.WriteLine(sum);
Console.ReadKey();
(3) . 作业1:输入班级人数,然后依次输入学员成绩,计算班级学员的平均成绩和总成绩
Console.WriteLine("请输入班级人数");
int count = Convert.ToInt32(Console.ReadLine());
int i = 0;//声明一个循环变量,记录循环的次数
int sum = 0;//定义总成绩
while (i < count)
{
Console.WriteLine("请输入第{0}个学员的成绩", i + 1);
try
{
int score = Convert.ToInt32(Console.ReadLine());
//将每一个学员的成绩累加到总成绩中
sum += score;
i++;
}
catch
{
Console.WriteLine("输入有误,请重新输入");
}
}
Console.WriteLine("{0}个人的班总成绩是{1}平均成绩是{2}", count, sum, sum / count);
Console.ReadKey();
(4) . 2006年培养学员80000人,每年增长25%,请问按此增长速度,到哪一年培训学员人数将达到20万人?
int year = 2006;
double people = 80000;
while (people <= 200000)
{
//每年增长25%
people = 1.25;
year++;
}
Console.WriteLine("到{0}年的时候,人数将达到20万",year);
Console.ReadKey();
(5) . 作业2:编写程序,估计一个职员在65岁退休之前能赚到多少钱。用年龄和超始薪水作为输入,并假设职员每年工资增长5%。
/
*
* 估计一个职员在65岁退休之前能赚到多少钱。
* 用年龄和超始薪水作为输入,并假设职员每年工资增长5%
* 循环条件:小于等65
* 循环体:工资之和
* 每年增加5%
* */
Console.WriteLine("请输入你现在的工资");
string str_salar = Console.ReadLine();
Console.WriteLine("请输入你的年龄");
string str_age = Console.ReadLine();

        double salar=0;
        int age = 0;
        double sum = salar;


        bool flag = true;

        try
        {
            salar = Convert.ToDouble(str_salar);
            age = Convert.ToInt32(str_age);
            flag = true;
        }
        catch
        {
            Console.WriteLine("你输入的格式错误");
            flag = false;
        }

        if (flag)
        { 
            while (age <= 65)
            {
                salar *= 1.05;
                sum += salar;
                age++;
            }
            Console.WriteLine("你到65岁退休之前的工资和是:{0}", sum);
        }
        Console.WriteLine("程序执行完毕");
        Console.ReadKey();

三、 break 关键
(一) 作用
1)、跳出switch-case语句。
2)、跳出循环
break单独放到循环中没意义,一般跟if配合着使用,表示当满足某个条件的时候,跳出循环。
(二) 演示:
int i = 0;
while (i < 10)
{
Console.WriteLine("欢迎来到宁波教育学院学习");
i++;
break;//跳出循环
}
Console.ReadKey();
(三) 练习:提示用户输入用户名和密码 admin 888888 最多让用户输入3次 如果3次都不会 则退出登录程序
/**
* 提示用户输入用户名和密码 admin 888888
* 最多让用户输入3次 如果3次都不会 则退出登录程序
* 循环条件:用户名和密码都不正确
* 循环体:用户输入用户名和密码
* */

        Console.WriteLine("请输入用户名");
        string userName = Console.ReadLine();
        Console.WriteLine("请输入密码");
        string password = Console.ReadLine();


        int num = 1;    //用户记录用户输入的次数
        
        while (("admin"!=userName) & ("88888"!=password))
        {
            Console.WriteLine("请再输入用户名");
            userName = Console.ReadLine();
            Console.WriteLine("请再输入密码");
            password = Console.ReadLine();
            if (num == 2)
            {
                break;
            }
            num++;
        }
        if(num == 2){
            Console.WriteLine("你已经输入错误三次,请等100年后再来");
        }
        else
        {
            Console.WriteLine("登录成功");
        }           

        Console.ReadKey();

四、 do-while循环
(一) 实际场景
明天小兰就要登台演出了,老师说再把明天的演出的歌曲唱一遍,如果满意,小兰就可以回家了.否则就需要再练习一遍,直到老师满意为止.(y/n)
(二) while or do-while ?

  1. while循环的特点
    特点:先判断,再执行,有可能一次都不执行。
  2. do-while循环的特点
    特点:先执行,再判断,最少执行一遍循环体。
    (三) do-while循环的语法
    do
    {
    循环体;
    }while(循环条件);
    (四) 执行过程
    首先执行do中的循环体,执行完成后,去判断循环条件是否成立,
    如果成立,则继续回到do中执行循环体,
    如果不成立,则跳出do-while循环。
    (五) 流程图

(六) 解决问题

  1. while解决
    //循环体:小兰唱一遍,问老师,老师回答
    //循环条件:老师不满意

        Console.WriteLine("老师,我唱的你满意么?");
        string answer = Console.ReadLine();
        while (answer == "no")
        {
            Console.WriteLine("老师,我再唱一遍,你满意么?");
            answer = Console.ReadLine();
        }
    
        Console.WriteLine("OK,放学回家");
        Console.ReadKey();
    
  2. do-while解决
    string answer = "";
    do
    {
    Console.WriteLine("老师,我唱的这一遍你满意么?");
    answer = Console.ReadLine();
    } while (answer == "no");
    Console.WriteLine("Ok,放学回家");
    Console.ReadKey();
    (七) 练习

  3. 要求用户输入用户名和密码,只要不是admin、888888就一直提示用户名或密码错误,请重新输入
    string name = "";
    string pwd = "";
    //循环体:输入用户名和密码 判断
    //循环条件:输入错误
    do
    {
    Console.WriteLine("请输入用户名");
    name = Console.ReadLine();
    Console.WriteLine("请输入密码");
    pwd = Console.ReadLine();
    if (name != "admin" || pwd != "888888")
    {
    Console.WriteLine("用户名或密码错误");
    }
    } while (name != "admin" || name != "888888");

        Console.ReadKey();
    
  4. 不断要求用户输入一个数字,然后打印这个数字的二倍,当用户输入q的时候程序退出
    循环体:提示用户输入数字 转换 打印这个数字的2倍
    循环条件:输入的不能是q
    string strNumber = "";//存储的用户的输入
    do
    {
    Console.WriteLine("请输入数字");
    strNumber = Console.ReadLine();//数字 q 乱七八糟
    if (strNumber != "q")//数字 乱七八糟
    {
    try
    {
    int number = Convert.ToInt32(strNumber);
    Console.WriteLine("这个数字的2倍是{0}", number * 2);
    }
    catch//输入的是乱七八糟
    {
    Console.WriteLine("输入有误,请重新输入");
    }
    }
    else//==q
    {
    Console.WriteLine("你输入的是q,程序退出!!!");
    }
    } while (strNumber != "q");
    Console.ReadKey();

  5. 不断要求用户输入一个数字(假定用户输入的都是正整数),当用户输入end的时候显示刚才输入的数字中的最大值
    //循环体:提示用户输入一个数字 接收 转换 比较的过程
    //循环条件:输入的不能是end

        string strNumber = "";
        int max = 0;//用来存储最大值
        while (strNumber != "end")
        {
            Console.WriteLine("请输入一个数字,输入end,我们将显示你输入的数字中的最大值");
            strNumber = Console.ReadLine();//数字 end  乱七八糟
            if (strNumber != "end")
            {
                try
                {
                    int number = Convert.ToInt32(strNumber);
                    if (number > max)
                    {
                        max = number;
                    }
                }
                catch
                {
                    Console.WriteLine("输入有误,请重新输入");
                }
            }
            else//输入的是end
            {
                Console.WriteLine("您刚才输入的数字中最大值是{0}",max);
            }
        }
        Console.ReadKey();
    

五、 程序调试(演示S)
设置断点(在行号前点击空白处)
单步运行(F11逐语句调试)
观察变量(鼠标放在变量名上观察)
F10逐过程调试
六、 for循环
(一) 问题情景
连续输出100次"我下次一定细心".
(二) while循环解决
int i = 0;
while (i < 10)
{
Console.WriteLine("我下次一定细心");
i++;
}
我们在使用while循环或者do-while循环的时候,
经常会忘记给循环变量自增,为了解决这个问题,我们有了更为简单的一种循环,
叫做for循环,for循环专门处理已知循环次数的循环。
(三) for循环的语法
for(表达式1;表达式2;表达式3)
{
循环体;
}
表达式1:一般为声明一个循环变量,用来记录循环的次数
表达式2:一般为循环条件
表达式3:一般为能够改变循环条件的代码
(四) 执行过程
在第一次循环的时候,首先执行表达式1,再执行表达式2,然后跳过表达式3.直接执行循环体,
执行完循环体之后,执行表达式3,执行表达式2,循环体,表达式3,表达式2,循环体。。。。。
直到表达式2不成立之后,跳出for循环。
(五) 流程图

(六) for循环解决问题
for (int i = 0; i < 10; i++)
{
Console.WriteLine("我下次一定细心");
}
(七) 练习

  1. for循环的正序和倒序输出1-10
    //1 - 10
    for (int i = 1; i <= 10; i++)
    {
    Console.WriteLine(i);
    }
    Console.ReadKey(); ////10-1
    for (int i = 10; i >= 1; i--)
    {
    Console.WriteLine(i);
    }
    Console.ReadKey();

  2. 找出100-999间的水仙花数?
    //这个百位数字 百位的立方+十位的立方+个位的立方==当前这个百位数字
    //153 1+125+27 153 i
    //百位:153/100
    //十位:153%100/10
    //个位:153%10

        for (int i = 100; i <= 999; i++)
        {
            int bai = i / 100;
            int shi = i % 100 / 10;
            int ge = i % 10;
            if (bai * bai * bai + shi * shi * shi + ge * ge * ge == i)
            {
                Console.WriteLine(i);
            }
        }
        Console.ReadKey();
    
  3. 让用户输入一个数,以下面的方式显示

        Console.WriteLine("请输入一个数字");
        int num = Convert.ToInt32(Console.ReadLine());
        for (int i = 0; i <=num ; i++)
        {
            Console.WriteLine("{0}+{1}={2}", i, num - i, num);
        }
    

(八) for循环的嵌套

  1. 案例演示
    // int count = 0;
    for (int i = 0; i < 10; i++)
    {
    for (int j = 0; j < 10; j++)
    {
    //count++;
    Console.WriteLine("外面循环了{0}次,里面循环了{1}次",i,j);
    }
    }
    Console.ReadKey();

  2. 练习:输出九九乘法表(循环的嵌套)
    for (int i = 1; i <= 9; i++)
    {
    for (int j = 1; j <=i ; j++)
    {
    Console.Write("{0}*{1}={2}\t", i, j, i * j);
    }
    Console.WriteLine();//换行
    }
    Console.ReadKey();
    七、 break和contiune
    (一) break

  3. 使用:
    用于循环中,退出当前循环.

  4. 流程图

  5. 举例: 打印1-100之间所有的质数
    质数:只能被1和自身整除的数字 叫做质数
    判断一个整数是否是质数:让这个整数从2开始除,除到自己的前一位
    for (int i = 2; i <= 100; i++)
    {
    bool b = true;
    for (int j = 2; j < i; j++)
    {
    if (i % j == 0)//不是质数
    {
    b = false;
    break;
    }
    }
    if (b)
    {
    Console.WriteLine(i);
    }
    }
    Console.ReadKey();
    (二) Contiune

  6. 作用
    在循环中,如果遇到continue,则立即停止本次循环,回到循环条件进行判断,如果循环条件成立,则继续执行循环。如果不成立,则跳出循环。

  7. 流程图

  8. 现实中的例子
    比如:运动员跑步喝水的例子
    比如:我编写代码的时候,上个厕所,回来继续写代码

  9. 举例:计算1到100(含)之间的除了能被7整除之外所有整数的和。
    int i = 1;
    int sum = 0;
    while (i <= 100)
    {
    if (i % 7 == 0)
    {
    i++;
    continue;
    }
    sum += i;
    i++;
    }
    Console.WriteLine(sum);
    Console.ReadKey();
    (三) 二者的区别与异同

  10. 区别:
    在循环中,
    如果遇到break,则跳出当前循环。
    如果遇到continue,则立即停止本次循环,回到循环条件进行判断,如果循环条件成立,则继续执行循环。如果不成立,则跳出循环。
    int i = 0;
    while (i < 10)
    {
    // break;
    continue;
    Console.WriteLine("Hello World");
    }
    Console.ReadKey();

  11. 相同点
    单独把continue、break放到循环中没有意义,一般跟着if语句配合着使用。

上面的代码,不管是break还是continue,都不会打印出信息。
八、 循环的练习
练习1:循环录入5个人的年龄并计算平均年龄,如果录入的数据出现负数或大于100的数,立即停止输入并报错.
九、 总结
(一) 顺序结构:语句顺序执行
(二) 分支结构:语句在满足条件下执行
if, if-else, if-else if, switch-case 表1?表2 :表3(三元)
(三) 循环结构:语句在满足条件下循环执行多次
while, do-while, for foreach(数组)
(四) 跳转语句
break(跳出当前循环), continue(大家观察),

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,390评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,821评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,632评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,170评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,033评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,098评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,511评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,204评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,479评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,572评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,341评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,893评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,171评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,486评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,676评论 2 335

推荐阅读更多精彩内容

  • 循环结构 要么痛苦的坚持游戏结束 可能会升级 要么结束游戏继续的痛苦 可能有遗憾 知识点 (1) . whil...
    拾起_518阅读 340评论 0 0
  • 知识点: 注:int类型默认32位有大小范围 且第一位为符号位 0 为正 1 为负 8.4作业 A:1、风力预警系...
    cGunsNRoses阅读 1,072评论 0 0
  • 循环结构 要么痛苦的坚持游戏结束 可能会升级 要么结束游戏继续的痛苦 可能有遗憾 知识点 (1) . whil...
    c592a8530dfe阅读 400评论 0 0
  • ·客人来访,提到转型科技公司,但是想起吴军老师的话,人要知道自己能力的上限,巴菲特也说不去碰自己不懂的领域,自己应...
    小狮子cs阅读 142评论 0 0
  • 最近有人发起了一个问题,问谁是中国腿好看的女明星。 也许这个问题还真把不少人给难住了,因为太多长腿女明星了啊。所以...
    瓜姐结阅读 2,635评论 0 0