c#入門之循環(huán)語(yǔ)句使用詳解(for循環(huán)、do/while)
記得第一次學(xué)編程的時(shí)候,就聽(tīng)說(shuō)過(guò)一句話:“新手學(xué)習(xí)和掌握一門編程語(yǔ)言是很容易的,但是如果你學(xué)會(huì)了某種編程語(yǔ)言,再去學(xué)習(xí)新的語(yǔ)言,就很難掌握了”,現(xiàn)在深深地感受到了這方面的阻力。
其實(shí)流程控制、循環(huán),包括面向?qū)ο筮@些知識(shí),基本所有語(yǔ)言都是相通的,唯一的區(qū)別就在于書寫時(shí)的格式、規(guī)范不一致。而這些方面的差異,又是比較細(xì)微的,所以往往在學(xué)的時(shí)候依靠經(jīng)驗(yàn)?zāi)芎芸炖斫猓^(guò)后卻發(fā)現(xiàn)并未能使(掌)用(握)。
do / while
循環(huán)的意義,其實(shí)就是重復(fù)執(zhí)行語(yǔ)句,當(dāng)然,還會(huì)有相應(yīng)的條件判斷,不然就成死循環(huán)了。do循環(huán)其實(shí)和while循環(huán)的區(qū)別:do循環(huán)會(huì)先執(zhí)行一次循環(huán)體,才繼續(xù)判斷;而while循環(huán)會(huì)先判斷,再?zèng)Q定是否執(zhí)行循環(huán)體:
double benJ, liV, muB, liX;
int needY = 0;
Console.WriteLine("請(qǐng)輸入您的存款數(shù)額:");
benJ = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("請(qǐng)輸入存款利率:");
// +1,計(jì)算后的結(jié)果則為本金+利息,如只需要利息,則去掉+1。學(xué)好數(shù)學(xué)很重要啊
liX = Convert.ToDouble(Console.ReadLine()) / 100.0;
liV = 1 + liX;
liX = benJ * liX;
Console.WriteLine("請(qǐng)輸入預(yù)期收益額:");
do
{
muB = Convert.ToDouble(Console.ReadLine());
if (muB <= benJ)
{
Console.WriteLine("預(yù)期收益額低于本金,請(qǐng)輸入高于本金的收益額:");
}
} while (muB <= benJ);
while (benJ < muB)
{
benJ *= liV;
++needY;
}
Console.WriteLine("每年利息 {3},存入 {0} year{4},您的本金和利息之和 {1} 能夠達(dá)到預(yù)期的目標(biāo) {2}。", needY, benJ, muB, liX, needY > 1 ? "s" : "");
if (needY == 0) Console.WriteLine("高起點(diǎn),低目標(biāo),其實(shí),您根本沒(méi)必要存款到銀行~");
Console.ReadKey();
這兒遇到個(gè)很不錯(cuò)的do循環(huán)的應(yīng)用場(chǎng)景:使用do循環(huán)判斷用戶輸入的內(nèi)容是否滿足條件,如果沒(méi)有,則重復(fù)執(zhí)行,直到滿足條件才退出循環(huán)(do循環(huán)的while結(jié)尾處需要添加 ; 號(hào))。示例還應(yīng)用了前面學(xué)習(xí)的三元運(yùn)算符 ? ,根據(jù)條件判斷結(jié)果,格式前面的字符串。
for
for循環(huán)比較適合于指定次數(shù)的應(yīng)用,在使用時(shí),需初始化一個(gè)作為計(jì)數(shù)器的變量值(可放在for語(yǔ)句中聲明,但在循環(huán)體外就不能訪問(wèn)該計(jì)數(shù)器變量了):
for (int i = 1; i <= 10; i++)
{
Console.WriteLine("{0}", i);
}
聲明了for的計(jì)數(shù)器變量后,使用 ; 號(hào)隔開(kāi),接著添加條件判斷的表達(dá)式(應(yīng)涉及計(jì)數(shù)器變量) i <= 10,繼續(xù)使用 ; 號(hào)隔開(kāi),添加對(duì)計(jì)數(shù)器變量的操作 i++(不用 ; 號(hào)結(jié)尾)。嘗試把i++去掉,放在循環(huán)體內(nèi),也是可行的。
書上舉了一個(gè)例子,用for循環(huán)打印出mandelbrot集,呵呵,雖然看懂代碼的邏輯結(jié)構(gòu)了,但是算法完全看不懂,就不貼上來(lái)了。不過(guò),還是延伸閱讀了一下mandelbrot集的創(chuàng)始人:本華·曼德博,以及一個(gè)數(shù)學(xué)構(gòu)造:碎形(fractal)?;它c(diǎn)時(shí)間閱讀了一些資料,感謝前人,致敬。
當(dāng)然,示例的重要性不言而喻,試著回想當(dāng)年學(xué)basic寫的《九九乘法表》,在C#中簡(jiǎn)單做了一個(gè)。原理是相同的,主要注意細(xì)節(jié):
int i, k;
for(i = 1; i < 10; i++)
{
Console.Write("{0}: ", i);
for(k = 1;k <= i; k++)
{
Console.Write("{0}x{1}={2} " ,k, i, i * k);
}
Console.WriteLine("\n");
}
Console.ReadKey();
這種for循環(huán)嵌套的方式,在實(shí)現(xiàn)橫、縱向循環(huán)(輸出、控制)是很有用的,之前在做excel VBA的時(shí)候,經(jīng)常會(huì)用到。
循環(huán)的中斷
以前一直沒(méi)記住,倒底是該用break還是用continue,不過(guò)下面這個(gè)例子,倒是很形象地描述清楚了:
int i = 1;
while (i <= 10)
{
if (i == 6)
break;
Console.WriteLine("{0}", i++);
}
for (i = 1; i <= 10; i++)
{
if ( i % 2 == 0)
continue;
Console.WriteLine("{0}",i);
}
Console.ReadKey();
其實(shí)兩個(gè)都可以叫中斷,只不過(guò):break是中斷當(dāng)前的循環(huán)體(退出循環(huán)體),而continue是中斷循環(huán)體的當(dāng)次循環(huán)(不會(huì)退出循環(huán)體)。
相關(guān)文章
使用C#實(shí)現(xiàn)簡(jiǎn)單的線性回歸的代碼詳解
最近注意到了NumSharp,想學(xué)習(xí)一下,最好的學(xué)習(xí)方式就是去實(shí)踐,因此從github上找了一個(gè)用python實(shí)現(xiàn)的簡(jiǎn)單線性回歸代碼,然后基于NumSharp用C#進(jìn)行了改寫,需要的朋友可以參考下2024-01-01C#關(guān)于System.Collections空間詳解
這篇文章主要介紹了C#關(guān)于System.Collections空間,需要的朋友可以參考下2014-07-07C#實(shí)現(xiàn)學(xué)生管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)學(xué)生管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08unity AudioSource播放完聲音后要執(zhí)行的函數(shù)或條件操作
這篇文章主要介紹了unity AudioSource播放完聲音后要執(zhí)行的函數(shù)或條件操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-04-04C#判斷訪問(wèn)來(lái)源是否為搜索引擎鏈接的方法
這篇文章主要介紹了C#判斷訪問(wèn)來(lái)源是否為搜索引擎鏈接的方法,實(shí)例分析了C#解析URL來(lái)源的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-03-03C#實(shí)現(xiàn)的Windows剪貼板監(jiān)視器功能實(shí)例【附demo源碼下載】
這篇文章主要介紹了C#實(shí)現(xiàn)的Windows剪貼板監(jiān)視器功能,結(jié)合實(shí)例形式分析了C#實(shí)現(xiàn)剪貼板監(jiān)視功能所涉及的相關(guān)Windows API函數(shù)與使用技巧,需要的朋友可以參考下2016-08-08