2018-11-22循環(huán)結(jié)構(gòu)

循環(huán)結(jié)構(gòu)
要么痛苦的堅持游戲結(jié)束 可能會升級
要么結(jié)束游戲繼續(xù)的痛苦 可能有遺憾
知識點(diǎn)
(1) . while
(2) . break語句
(3) . do-while
(4) . for
(5) . foreach
(6) . 程序調(diào)試
一、 問題
? 實(shí)際生活中的循環(huán):打印100份試卷
? 李四這次考試又粗心了,爸爸讓他寫1000遍“下次考試一定要細(xì)心”.(復(fù)印紙加三根筆)
如何編程實(shí)現(xiàn)上面的問題?
Console.WriteLine("下次考試一定要細(xì)心");
Console.WriteLine("下次考試一定要細(xì)心");
Console.WriteLine("下次考試一定要細(xì)心");
……
二、 While循環(huán)
(一) 語法
while(循環(huán)條件)
{
循環(huán)體;
}
(二) 執(zhí)行過程
程序運(yùn)行到while處,首先判斷while所帶的循環(huán)條件是否成立,如果成立,也就是為true,則執(zhí)行大括號中的循環(huán)體,
當(dāng)循環(huán)體執(zhí)行完成一遍后,繼續(xù)回到循環(huán)條件進(jìn)行判斷,如果成立,則執(zhí)行,如果不成立,則跳出while循環(huán)。
每個循環(huán)都有那么一行代碼,能夠改變循環(huán)條件,使之終有一天不再成立,如果程序中沒有那么一行代碼能夠改變循環(huán)條件,那么我稱之為這種循環(huán)叫做死循環(huán)。
特點(diǎn):先判斷,再執(zhí)行,有可能一次都不執(zhí)行。
(三) 流程圖

(四) 注意事項(xiàng)
在寫while循環(huán)的時候,一定要分析出循環(huán)體和循環(huán)條件。
(五) 解決實(shí)際問題
int i=0;
while(i<1000)
{
Console.WriteLine(“我下次一定要超越他”);
i++;
}
(六) while循環(huán)的練習(xí)
(1) . 打印10次"歡迎您來到寧波教育學(xué)院學(xué)習(xí)"
(2) . 求1-100之間的所有整數(shù)和,求1-100之間所有偶數(shù)和
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) . 作業(yè)1:輸入班級人數(shù),然后依次輸入學(xué)員成績,計算班級學(xué)員的平均成績和總成績
Console.WriteLine("請輸入班級人數(shù)");
int count = Convert.ToInt32(Console.ReadLine());
int i = 0;//聲明一個循環(huán)變量,記錄循環(huán)的次數(shù)
int sum = 0;//定義總成績
while (i < count)
{
Console.WriteLine("請輸入第{0}個學(xué)員的成績", i + 1);
try
{
int score = Convert.ToInt32(Console.ReadLine());
//將每一個學(xué)員的成績累加到總成績中
sum += score;
i++;
}
catch
{
Console.WriteLine("輸入有誤,請重新輸入");
}
}
Console.WriteLine("{0}個人的班總成績是{1}平均成績是{2}", count, sum, sum / count);
Console.ReadKey();
(4) . 2006年培養(yǎng)學(xué)員80000人,每年增長25%,請問按此增長速度,到哪一年培訓(xùn)學(xué)員人數(shù)將達(dá)到20萬人?
int year = 2006;
double people = 80000;
while (people <= 200000)
{
//每年增長25%
people = 1.25;
year++;
}
Console.WriteLine("到{0}年的時候,人數(shù)將達(dá)到20萬",year);
Console.ReadKey();
(5) . 作業(yè)2:編寫程序,估計一個職員在65歲退休之前能賺到多少錢。用年齡和超始薪水作為輸入,并假設(shè)職員每年工資增長5%。
/
*
* 估計一個職員在65歲退休之前能賺到多少錢。
* 用年齡和超始薪水作為輸入,并假設(shè)職員每年工資增長5%
* 循環(huán)條件:小于等65
* 循環(huán)體:工資之和
* 每年增加5%
* */
Console.WriteLine("請輸入你現(xiàn)在的工資");
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("程序執(zhí)行完畢");
        Console.ReadKey();

三、 break 關(guān)鍵
(一) 作用
1)、跳出switch-case語句。
2)、跳出循環(huán)
break單獨(dú)放到循環(huán)中沒意義,一般跟if配合著使用,表示當(dāng)滿足某個條件的時候,跳出循環(huán)。
(二) 演示:
int i = 0;
while (i < 10)
{
Console.WriteLine("歡迎來到寧波教育學(xué)院學(xué)習(xí)");
i++;
break;//跳出循環(huán)
}
Console.ReadKey();
(三) 練習(xí):提示用戶輸入用戶名和密碼 admin 888888 最多讓用戶輸入3次 如果3次都不會 則退出登錄程序
/**
* 提示用戶輸入用戶名和密碼 admin 888888
* 最多讓用戶輸入3次 如果3次都不會 則退出登錄程序
* 循環(huán)條件:用戶名和密碼都不正確
* 循環(huán)體:用戶輸入用戶名和密碼
* */

        Console.WriteLine("請輸入用戶名");
        string userName = Console.ReadLine();
        Console.WriteLine("請輸入密碼");
        string password = Console.ReadLine();


        int num = 1;    //用戶記錄用戶輸入的次數(shù)
        
        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("你已經(jīng)輸入錯誤三次,請等100年后再來");
        }
        else
        {
            Console.WriteLine("登錄成功");
        }           

        Console.ReadKey();

四、 do-while循環(huán)
(一) 實(shí)際場景
明天小蘭就要登臺演出了,老師說再把明天的演出的歌曲唱一遍,如果滿意,小蘭就可以回家了.否則就需要再練習(xí)一遍,直到老師滿意為止.(y/n)
(二) while or do-while ?

  1. while循環(huán)的特點(diǎn)
    特點(diǎn):先判斷,再執(zhí)行,有可能一次都不執(zhí)行。
  2. do-while循環(huán)的特點(diǎn)
    特點(diǎn):先執(zhí)行,再判斷,最少執(zhí)行一遍循環(huán)體。
    (三) do-while循環(huán)的語法
    do
    {
    循環(huán)體;
    }while(循環(huán)條件);
    (四) 執(zhí)行過程
    首先執(zhí)行do中的循環(huán)體,執(zhí)行完成后,去判斷循環(huán)條件是否成立,
    如果成立,則繼續(xù)回到do中執(zhí)行循環(huán)體,
    如果不成立,則跳出do-while循環(huán)。
    (五) 流程圖

(六) 解決問題

  1. while解決
    //循環(huán)體:小蘭唱一遍,問老師,老師回答
    //循環(huán)條件:老師不滿意

        Console.WriteLine("老師,我唱的你滿意么?");
        string answer = Console.ReadLine();
        while (answer == "no")
        {
            Console.WriteLine("老師,我再唱一遍,你滿意么?");
            answer = Console.ReadLine();
        }
    
        Console.WriteLine("OK,放學(xué)回家");
        Console.ReadKey();
    
  2. do-while解決
    string answer = "";
    do
    {
    Console.WriteLine("老師,我唱的這一遍你滿意么?");
    answer = Console.ReadLine();
    } while (answer == "no");
    Console.WriteLine("Ok,放學(xué)回家");
    Console.ReadKey();
    (七) 練習(xí)

  3. 要求用戶輸入用戶名和密碼,只要不是admin、888888就一直提示用戶名或密碼錯誤,請重新輸入
    string name = "";
    string pwd = "";
    //循環(huán)體:輸入用戶名和密碼 判斷
    //循環(huán)條件:輸入錯誤
    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. 不斷要求用戶輸入一個數(shù)字,然后打印這個數(shù)字的二倍,當(dāng)用戶輸入q的時候程序退出
    循環(huán)體:提示用戶輸入數(shù)字 轉(zhuǎn)換 打印這個數(shù)字的2倍
    循環(huán)條件:輸入的不能是q
    string strNumber = "";//存儲的用戶的輸入
    do
    {
    Console.WriteLine("請輸入數(shù)字");
    strNumber = Console.ReadLine();//數(shù)字 q 亂七八糟
    if (strNumber != "q")//數(shù)字 亂七八糟
    {
    try
    {
    int number = Convert.ToInt32(strNumber);
    Console.WriteLine("這個數(shù)字的2倍是{0}", number * 2);
    }
    catch//輸入的是亂七八糟
    {
    Console.WriteLine("輸入有誤,請重新輸入");
    }
    }
    else//==q
    {
    Console.WriteLine("你輸入的是q,程序退出?。?!");
    }
    } while (strNumber != "q");
    Console.ReadKey();

  5. 不斷要求用戶輸入一個數(shù)字(假定用戶輸入的都是正整數(shù)),當(dāng)用戶輸入end的時候顯示剛才輸入的數(shù)字中的最大值
    //循環(huán)體:提示用戶輸入一個數(shù)字 接收 轉(zhuǎn)換 比較的過程
    //循環(huán)條件:輸入的不能是end

        string strNumber = "";
        int max = 0;//用來存儲最大值
        while (strNumber != "end")
        {
            Console.WriteLine("請輸入一個數(shù)字,輸入end,我們將顯示你輸入的數(shù)字中的最大值");
            strNumber = Console.ReadLine();//數(shù)字 end  亂七八糟
            if (strNumber != "end")
            {
                try
                {
                    int number = Convert.ToInt32(strNumber);
                    if (number > max)
                    {
                        max = number;
                    }
                }
                catch
                {
                    Console.WriteLine("輸入有誤,請重新輸入");
                }
            }
            else//輸入的是end
            {
                Console.WriteLine("您剛才輸入的數(shù)字中最大值是{0}",max);
            }
        }
        Console.ReadKey();
    

五、 程序調(diào)試(演示S)
設(shè)置斷點(diǎn)(在行號前點(diǎn)擊空白處)
單步運(yùn)行(F11逐語句調(diào)試)
觀察變量(鼠標(biāo)放在變量名上觀察)
F10逐過程調(diào)試
六、 for循環(huán)
(一) 問題情景
連續(xù)輸出100次"我下次一定細(xì)心".
(二) while循環(huán)解決
int i = 0;
while (i < 10)
{
Console.WriteLine("我下次一定細(xì)心");
i++;
}
我們在使用while循環(huán)或者do-while循環(huán)的時候,
經(jīng)常會忘記給循環(huán)變量自增,為了解決這個問題,我們有了更為簡單的一種循環(huán),
叫做for循環(huán),for循環(huán)專門處理已知循環(huán)次數(shù)的循環(huán)。
(三) for循環(huán)的語法
for(表達(dá)式1;表達(dá)式2;表達(dá)式3)
{
循環(huán)體;
}
表達(dá)式1:一般為聲明一個循環(huán)變量,用來記錄循環(huán)的次數(shù)
表達(dá)式2:一般為循環(huán)條件
表達(dá)式3:一般為能夠改變循環(huán)條件的代碼
(四) 執(zhí)行過程
在第一次循環(huán)的時候,首先執(zhí)行表達(dá)式1,再執(zhí)行表達(dá)式2,然后跳過表達(dá)式3.直接執(zhí)行循環(huán)體,
執(zhí)行完循環(huán)體之后,執(zhí)行表達(dá)式3,執(zhí)行表達(dá)式2,循環(huán)體,表達(dá)式3,表達(dá)式2,循環(huán)體。。。。。
直到表達(dá)式2不成立之后,跳出for循環(huán)。
(五) 流程圖

(六) for循環(huán)解決問題
for (int i = 0; i < 10; i++)
{
Console.WriteLine("我下次一定細(xì)心");
}
(七) 練習(xí)

  1. for循環(huán)的正序和倒序輸出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間的水仙花數(shù)?
    //這個百位數(shù)字 百位的立方+十位的立方+個位的立方==當(dāng)前這個百位數(shù)字
    //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. 讓用戶輸入一個數(shù),以下面的方式顯示

        Console.WriteLine("請輸入一個數(shù)字");
        int num = Convert.ToInt32(Console.ReadLine());
        for (int i = 0; i <=num ; i++)
        {
            Console.WriteLine("{0}+{1}={2}", i, num - i, num);
        }
    

(八) for循環(huán)的嵌套

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

  2. 練習(xí):輸出九九乘法表(循環(huán)的嵌套)
    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. 使用:
    用于循環(huán)中,退出當(dāng)前循環(huán).

  4. 流程圖

  5. 舉例: 打印1-100之間所有的質(zhì)數(shù)
    質(zhì)數(shù):只能被1和自身整除的數(shù)字 叫做質(zhì)數(shù)
    判斷一個整數(shù)是否是質(zhì)數(shù):讓這個整數(shù)從2開始除,除到自己的前一位
    for (int i = 2; i <= 100; i++)
    {
    bool b = true;
    for (int j = 2; j < i; j++)
    {
    if (i % j == 0)//不是質(zhì)數(shù)
    {
    b = false;
    break;
    }
    }
    if (b)
    {
    Console.WriteLine(i);
    }
    }
    Console.ReadKey();
    (二) Contiune

  6. 作用
    在循環(huán)中,如果遇到continue,則立即停止本次循環(huán),回到循環(huán)條件進(jìn)行判斷,如果循環(huán)條件成立,則繼續(xù)執(zhí)行循環(huán)。如果不成立,則跳出循環(huán)。

  7. 流程圖

  8. 現(xiàn)實(shí)中的例子
    比如:運(yùn)動員跑步喝水的例子
    比如:我編寫代碼的時候,上個廁所,回來繼續(xù)寫代碼

  9. 舉例:計算1到100(含)之間的除了能被7整除之外所有整數(shù)的和。
    int i = 1;
    int sum = 0;
    while (i <= 100)
    {
    if (i % 7 == 0)
    {
    i++;
    continue;
    }
    sum += i;
    i++;
    }
    Console.WriteLine(sum);
    Console.ReadKey();
    (三) 二者的區(qū)別與異同

  10. 區(qū)別:
    在循環(huán)中,
    如果遇到break,則跳出當(dāng)前循環(huán)。
    如果遇到continue,則立即停止本次循環(huán),回到循環(huán)條件進(jìn)行判斷,如果循環(huán)條件成立,則繼續(xù)執(zhí)行循環(huán)。如果不成立,則跳出循環(huán)。
    int i = 0;
    while (i < 10)
    {
    // break;
    continue;
    Console.WriteLine("Hello World");
    }
    Console.ReadKey();

  11. 相同點(diǎn)
    單獨(dú)把continue、break放到循環(huán)中沒有意義,一般跟著if語句配合著使用。

上面的代碼,不管是break還是continue,都不會打印出信息。
八、 循環(huán)的練習(xí)
練習(xí)1:循環(huán)錄入5個人的年齡并計算平均年齡,如果錄入的數(shù)據(jù)出現(xiàn)負(fù)數(shù)或大于100的數(shù),立即停止輸入并報錯.
九、 總結(jié)
(一) 順序結(jié)構(gòu):語句順序執(zhí)行
(二) 分支結(jié)構(gòu):語句在滿足條件下執(zhí)行
if, if-else, if-else if, switch-case 表1?表2 :表3(三元)
(三) 循環(huán)結(jié)構(gòu):語句在滿足條件下循環(huán)執(zhí)行多次
while, do-while, for foreach(數(shù)組)
(四) 跳轉(zhuǎn)語句
break(跳出當(dāng)前循環(huán)), continue(大家觀察),

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 循環(huán)結(jié)構(gòu) 要么痛苦的堅持游戲結(jié)束 可能會升級 要么結(jié)束游戲繼續(xù)的痛苦 可能有遺憾 知識點(diǎn) (1) . whil...
    拾起_518閱讀 412評論 0 0
  • 知識點(diǎn): 注:int類型默認(rèn)32位有大小范圍 且第一位為符號位 0 為正 1 為負(fù) 8.4作業(yè) A:1、風(fēng)力預(yù)警系...
    cGunsNRoses閱讀 1,166評論 0 0
  • 循環(huán)結(jié)構(gòu) 要么痛苦的堅持游戲結(jié)束 可能會升級 要么結(jié)束游戲繼續(xù)的痛苦 可能有遺憾 知識點(diǎn) (1) . whil...
    c592a8530dfe閱讀 469評論 0 0
  • ·客人來訪,提到轉(zhuǎn)型科技公司,但是想起吳軍老師的話,人要知道自己能力的上限,巴菲特也說不去碰自己不懂的領(lǐng)域,自己應(yīng)...
    小獅子cs閱讀 205評論 0 0
  • 最近有人發(fā)起了一個問題,問誰是中國腿好看的女明星。 也許這個問題還真把不少人給難住了,因?yàn)樘嚅L腿女明星了啊。所以...
    瓜姐結(jié)閱讀 3,236評論 0 0

友情鏈接更多精彩內(nèi)容