循環(huán)結(jié)構(gòu)
要么痛苦的堅(jiān)持游戲結(jié)束 可能會(huì)升級(jí)
要么結(jié)束游戲繼續(xù)的痛苦 可能有遺憾
知識(shí)點(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í)行大括號(hào)中的循環(huán)體,
當(dāng)循環(huán)體執(zhí)行完成一遍后泳秀,繼續(xù)回到循環(huán)條件進(jìn)行判斷,如果成立檩赢,則執(zhí)行偶房,如果不成立小渊,則跳出while循環(huán)。
每個(gè)循環(huán)都有那么一行代碼,能夠改變循環(huán)條件肃续,使之終有一天不再成立,如果程序中沒有那么一行代碼能夠改變循環(huán)條件邮偎,那么我稱之為這種循環(huán)叫做死循環(huán)钢猛。
特點(diǎn):先判斷,再執(zhí)行壶愤,有可能一次都不執(zhí)行征椒。
(三) 流程圖
(四) 注意事項(xiàng)
在寫while循環(huán)的時(shí)候,一定要分析出循環(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:輸入班級(jí)人數(shù),然后依次輸入學(xué)員成績瓢省,計(jì)算班級(jí)學(xué)員的平均成績和總成績
Console.WriteLine("請輸入班級(jí)人數(shù)");
int count = Convert.ToInt32(Console.ReadLine());
int i = 0;//聲明一個(gè)循環(huán)變量摹量,記錄循環(huán)的次數(shù)
int sum = 0;//定義總成績
while (i < count)
{
Console.WriteLine("請輸入第{0}個(gè)學(xué)員的成績", i + 1);
try
{
int score = Convert.ToInt32(Console.ReadLine());
//將每一個(gè)學(xué)員的成績累加到總成績中
sum += score;
i++;
}
catch
{
Console.WriteLine("輸入有誤荆永,請重新輸入");
}
}
Console.WriteLine("{0}個(gè)人的班總成績是{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í)候佛掖,人數(shù)將達(dá)到20萬",year);
Console.ReadKey();
(5) . 作業(yè)2:編寫程序,估計(jì)一個(gè)職員在65歲退休之前能賺到多少錢拴魄。用年齡和超始薪水作為輸入匹中,并假設(shè)職員每年工資增長5%。
/*
* 估計(jì)一個(gè)職員在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("你輸入的格式錯(cuò)誤");
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)滿足某個(gè)條件的時(shí)候站玄,跳出循環(huán)。
(二) 演示:
int i = 0;
while (i < 10)
{
Console.WriteLine("歡迎來到寧波教育學(xué)院學(xué)習(xí)");
i++;
break;//跳出循環(huán)
}
Console.ReadKey();
(三) 練習(xí):提示用戶輸入用戶名和密碼 admin 888888 最多讓用戶輸入3次 如果3次都不會(huì) 則退出登錄程序
/**
* 提示用戶輸入用戶名和密碼 admin 888888
* 最多讓用戶輸入3次 如果3次都不會(huì) 則退出登錄程序
* 循環(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("請?jiān)佥斎胗脩裘?);
userName = Console.ReadLine();
Console.WriteLine("請?jiān)佥斎朊艽a");
password = Console.ReadLine();
if (num == 2)
{
break;
}
num++;
}
if(num == 2){
Console.WriteLine("你已經(jīng)輸入錯(cuò)誤三次,請等100年后再來");
}
else
{
Console.WriteLine("登錄成功");
}
Console.ReadKey();
四齿尽、 do-while循環(huán)
(一) 實(shí)際場景
明天小蘭就要登臺(tái)演出了,老師說再把明天的演出的歌曲唱一遍,如果滿意,小蘭就可以回家了.否則就需要再練習(xí)一遍,直到老師滿意為止.(y/n)
(二) while or do-while ?
- while循環(huán)的特點(diǎn)
特點(diǎn):先判斷绵估,再執(zhí)行,有可能一次都不執(zhí)行缝左。 - 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)。
(五) 流程圖
(六) 解決問題
-
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();
do-while解決
string answer = "";
do
{
Console.WriteLine("老師,我唱的這一遍你滿意么词裤?");
answer = Console.ReadLine();
} while (answer == "no");
Console.WriteLine("Ok吼砂,放學(xué)回家");
Console.ReadKey();
(七) 練習(xí)-
要求用戶輸入用戶名和密碼帅刊,只要不是admin女揭、888888就一直提示用戶名或密碼錯(cuò)誤,請重新輸入
string name = "";
string pwd = "";
//循環(huán)體:輸入用戶名和密碼 判斷
//循環(huán)條件:輸入錯(cuò)誤
do
{
Console.WriteLine("請輸入用戶名");
name = Console.ReadLine();
Console.WriteLine("請輸入密碼");
pwd = Console.ReadLine();
if (name != "admin" || pwd != "888888")
{
Console.WriteLine("用戶名或密碼錯(cuò)誤");
}
} while (name != "admin" || name != "888888");Console.ReadKey();
不斷要求用戶輸入一個(gè)數(shù)字,然后打印這個(gè)數(shù)字的二倍境蔼,當(dāng)用戶輸入q的時(shí)候程序退出
循環(huán)體:提示用戶輸入數(shù)字 轉(zhuǎn)換 打印這個(gè)數(shù)字的2倍
循環(huán)條件:輸入的不能是q
string strNumber = "";//存儲(chǔ)的用戶的輸入
do
{
Console.WriteLine("請輸入數(shù)字");
strNumber = Console.ReadLine();//數(shù)字 q 亂七八糟
if (strNumber != "q")//數(shù)字 亂七八糟
{
try
{
int number = Convert.ToInt32(strNumber);
Console.WriteLine("這個(gè)數(shù)字的2倍是{0}", number * 2);
}
catch//輸入的是亂七八糟
{
Console.WriteLine("輸入有誤,請重新輸入");
}
}
else//==q
{
Console.WriteLine("你輸入的是q,程序退出9当ぁ!粥血!");
}
} while (strNumber != "q");
Console.ReadKey();-
不斷要求用戶輸入一個(gè)數(shù)字(假定用戶輸入的都是正整數(shù)),當(dāng)用戶輸入end的時(shí)候顯示剛才輸入的數(shù)字中的最大值
//循環(huán)體:提示用戶輸入一個(gè)數(shù)字 接收 轉(zhuǎn)換 比較的過程
//循環(huán)條件:輸入的不能是endstring strNumber = ""; int max = 0;//用來存儲(chǔ)最大值 while (strNumber != "end") { Console.WriteLine("請輸入一個(gè)數(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)(在行號(hào)前點(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)的時(shí)候,
經(jīng)常會(huì)忘記給循環(huán)變量自增廊宪,為了解決這個(gè)問題,我們有了更為簡單的一種循環(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:一般為聲明一個(gè)循環(huán)變量,用來記錄循環(huán)的次數(shù)
表達(dá)式2:一般為循環(huán)條件
表達(dá)式3:一般為能夠改變循環(huán)條件的代碼
(四) 執(zhí)行過程
在第一次循環(huán)的時(shí)候祟蚀,首先執(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í)
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();-
找出100-999間的水仙花數(shù)?
//這個(gè)百位數(shù)字 百位的立方+十位的立方+個(gè)位的立方==當(dāng)前這個(gè)百位數(shù)字
//153 1+125+27 153 i
//百位:153/100
//十位:153%100/10
//個(gè)位:153%10for (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();
-
讓用戶輸入一個(gè)數(shù)聪铺,以下面的方式顯示
Console.WriteLine("請輸入一個(gè)數(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)的嵌套
案例演示
// 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();練習(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使用:
用于循環(huán)中,退出當(dāng)前循環(huán).流程圖
舉例: 打印1-100之間所有的質(zhì)數(shù)
質(zhì)數(shù):只能被1和自身整除的數(shù)字 叫做質(zhì)數(shù)
判斷一個(gè)整數(shù)是否是質(zhì)數(shù):讓這個(gè)整數(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作用
在循環(huán)中,如果遇到continue查刻,則立即停止本次循環(huán)键兜,回到循環(huán)條件進(jìn)行判斷,如果循環(huán)條件成立穗泵,則繼續(xù)執(zhí)行循環(huán)普气。如果不成立,則跳出循環(huán)火欧。流程圖
現(xiàn)實(shí)中的例子
比如:運(yùn)動(dòng)員跑步喝水的例子
比如:我編寫代碼的時(shí)候,上個(gè)廁所,回來繼續(xù)寫代碼舉例:計(jì)算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ū)別與異同區(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();相同點(diǎn)
單獨(dú)把continue、break放到循環(huán)中沒有意義闷叉,一般跟著if語句配合著使用擦俐。
上面的代碼,不管是break還是continue握侧,都不會(huì)打印出信息蚯瞧。
八、 循環(huán)的練習(xí)
練習(xí)1:循環(huán)錄入5個(gè)人的年齡并計(jì)算平均年齡,如果錄入的數(shù)據(jù)出現(xiàn)負(fù)數(shù)或大于100的數(shù),立即停止輸入并報(bào)錯(cuò).
九品擎、 總結(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(大家觀察),