2018-11-08

循環結構

要么痛苦的堅持游戲結束 可能會升級

要么結束游戲繼續的痛苦 可能有遺憾

知識點

(1) . while

(2) . break語句

(3) . do-while

(4) . for

(5) . foreach

(6) . 程序調試

一、 問題

l 實際生活中的循環:打印100份試卷

l 李四這次考試又粗心了,爸爸讓他寫1000遍“下次考試一定要細心”.(復印紙加三根筆)

如何編程實現上面的問題?

Console.WriteLine("下次考試一定要細心");

Console.WriteLine("下次考試一定要細心");

Console.WriteLine("下次考試一定要細心");

……

二、 While循環

(一) 語法

while(循環條件)

{

循環體;

}

(二) 執行過程

程序運行到while處,首先判斷while所帶的循環條件是否成立,如果成立,也就是為true,則執行大括號中的循環體,

當循環體執行完成一遍后,繼續回到循環條件進行判斷,如果成立,則執行,如果不成立,則跳出while循環。

每個循環都有那么一行代碼,能夠改變循環條件,使之終有一天不再成立,如果程序中沒有那么一行代碼能夠改變循環條件,那么我稱之為這種循環叫做死循環。

特點:****先判斷,再執行,有可能一次都不執行。

(三) 流程圖

[圖片上傳失敗...(image-a49dfd-1542156970391)]

(四) 注意事項

在寫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循環。

(五) 流程圖

[圖片上傳失敗...(image-db581d-1542156970388)]

(六) 解決問題

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();

(七) 練習

1. 要求用戶輸入用戶名和密碼,只要不是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();

2. 不斷要求用戶輸入一個數字,然后打印這個數字的二倍,當用戶輸入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();

3. 不斷要求用戶輸入一個數字(假定用戶輸入的都是正整數),當用戶輸入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();

r:b\DTkS?

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容