循環
day05 2018.01.08 周一
-------------------------------------------------------
關鍵字
雙重for
上午
數組
一維數組
二維數組
方法
OOP 4-5
string
內存
集合IO
--------------------------------------------------------
中止循環
1. break
1) swich..case
2) break : 中止循環
3)break 是如何中止的?
循環執行過程中,遇到 break 語句時,中止循環
循環下面的其它語句。
4) break 會和 if 語句配合使用;
5) while ,do while ,for中都可以
練習1:
int x = 2;
do
{
x++;//x=x+1; //3 4
//如果x是偶數,中止循環
if( x % 2 == 0 )
{
//遇到break會執行循環結束大括號下面的語句
break ;
}
Console.WriteLine( x );//3
}while ( x > 2 && x <= 4 );
Console.WriteLine( x );
答案:
3
4
代碼詳見:DAY05_02_Break_Continue ---BreakDemo1.cs
2)觀察下列代碼的功能是什么?
int sum = 0 ; //求和
for ( int i = 0 ; i <= 100 ; i++ )
{
if( sum > 2000 )
{
Console.WriteLine( i );
break ;
}
分析得出,i=63時,sum+63=2016,然后往下遇到 for的結束
會返回到i++,i變成了64,然后判斷滿足<=100,執行循環體
當再次判斷sum與2000關系時,2016>2000,所以執行if代碼
打印i的值為64,遇到 break 跳出循環。
sum += i ; //累加
}
Console.WriteLine( "for循環執行結束" );
功能: 求0到100以內所有數字的和,當和大於2000
時,提前結束循環了(提前中止循環)
代碼詳見:DAY05_02_Break_Continue --- LianXi2.cs
2) continue 中止循環
coninue用於結束本次循環,繼續執行下一次循環。
含義是:
遇到 continue 時,continue下面的語句不再執行,
會執行下一次循環。
總結:關於 break 和 continue
1) 相同點: 用於中止循環
2)不同點:
循環中一遇到 break,整個循環都中止了
循環中遇到 continue,只是表示一輪的結束,
它還會繼續下一次循環,只是continue下面的其它
語句不再執行。
3)使用場景:
1) break 一般是和總和或總乘積變量做比較
if ( sum > 2000 )
break ;
2) contiue 更多的是對一組數據進行判斷時
這組數組中某一個或幾個不滿足條件時,做
其它處理。然后繼續遍歷剩下的其它數據。
比如:打印50以內所有的偶數.循環體中可
使用if語句進行判斷,如果是奇數,直接cotinue
進行下一個數字比較。
練習: 打印50以內所有的偶數.
要求:使用 continue 關鍵字實現。
代碼詳見:DAY05_02_Break_Continue --- LianXi1.cs
練習:
打印10以內的所有數字,但是3 和 8 兩個數字不會打印。
要求:使用 continue 關鍵字實現。
使用for循環完成 或 使用 while 循環完成。
-------------------------------------------------------
循環嵌套
1. 循環嵌套含義?
在一個 循環中包含另外一個循環。
外層循環,內層循環
//外層循環,由i構成
for (int i = 0 ; )
{
//內層循環,由j 構成
for( int j = 0 ; )
{
}
}
2. 循環嵌套的層數?
任意層,常用的嵌套層,2層
3. 哪種循環嵌套哪種?
三種可以任意嵌套
4. 雙重 for 循環
1.數組排序
2.打印規律性圖形
for ( int i = 0 ; i< ??? ; i++ )
{
for( int j = 0 ; j < ??? ; j++ )
{
Console.Write("*");
}
Console.WriteLine();
}
練習:九九乘法表
*******
*******
*******
*******
*
**
***
****
*****
******
*******
*********
********
*******
******
*****
****
***
**
*
*
***
*****
***
*
for ( )
{
for ()
{
}
}
中午作業1:斷點測試 LianXi2.cs中Test2()和Test3()
方法的執行,分析while循環中continue跳到哪里?
中午作業2:打印以下圖形
1)**********
for( int i = 0 ; i < 10 ; i++ )
{
Console.Write("*");//在一行上打印
}
Console.WriteLine(); //換行
2)
*******
*******
*******
*******
*******
寫法:
外層for循環,控制行數(一共的行數)
for ( int i = 0 ; i < 5; i++ )
{
//內層for循環,控制列數(每一行打印的*數量)
for ( int j = 0 ; j < 7 ; j++ )
{
Console.Write("*");
}
Console.WriteLine();//換行
}
---------------------------------------------------------
說明:總結的打印多種圖形的類在:PrintShape.cs 類中
--------------------------------------------------------
補充:
在嵌套的循環中,也只可以使用 break 和 continue ,
還是跳出循環,但跳出的是所在的循環,並不能直接
跳出最外層的循環.
例如:
int sum = 0 ;
for ( int i = 1 ; i <= 5 ; i++ )
{
for( int j = 1 ; j < 10 ; j++ )
{
if( j % 2 == 0 )
{
break ;
}
Console.Write( j + "\t");
}
Console.WriteLine();
sum += i ;
}
Console.WriteLine( sum );
說明:總結的打印多種圖形的類在:PrintShape.cs 類中
補充2:
死循環
下午
循環的使用場景:
1. 如果遇到至少需要執行一次的需求或功能,選擇do while
2. 如果需要或完成的功能,可以翻譯為"當滿足...條件,做
...事情時",要使用while循環完成;
也可以理解為,不能明確知道循環次數時,只能使用while
3. 使用for循環完成的功能,大部分都使用while替代,
但是while完成的功能,for並不一定能完成。
for對一組規律數據操作:求和,求階乘,求指定范圍
內的數據
如:求1+2+3+4+...100的和
如:求100以內所有偶數
如:求1000以內所有水仙花數(三位 各位的三次方相加等於數本身)
1000以內所有的水仙花數:153 370 371 407
四葉玫瑰
五角星數
...
如:求100以內所有質數(素數)
............
--------------------------------------------------------
數組
1. 數組概念
數組是內存中一塊區域,
這塊區域可以存儲多個同一類型的數據
這些數據都擁有同樣的名字
通過每個數據的下標標識來區分(0,1,2,3,4,....)
這塊區域是連續。
2. 數組的定義
基本語法:[]
數據類型[] 數組名;
如:數據類型可以是13種值類型,自定義定義的類型
如:定義一個int類型的數組,年齡數據ages
int[] ages ;
如:float類型,存儲多個小球移動速度 moveSpeeds
float[] moveSpeeds ;
3. 數組的初始化(賦值)
int[] ages ; //定義
ages = { 21,23,25,20 };
靜態:int[] ages = { 21, 23 , 25 , 20 };
1) { }
2) 只能一條語句
3)何時使用靜態初始化?
明確已知數組中存儲元素的個數,且明確
已知每個元素的值
動態:new
基本語法 :
數據類型[] 數組名 ;
數組名 = new 數組類型[60];
或:數據類型[] 數組名 = new 數組類型[60]
如: 使用 動態初始化來構建一個數組,nums
存儲100個float類型的數據;
float[] nums ;
nums = new float[20];
或: float[] nums = new float[20];
說明:
1) new 用於動態初始化
2) 何時使用動態初始化?
已知存儲了多個數組,但是不明確知道每個數據
的值是多少?
3) 數組動態初始化,每個元素都是有默認值的:
整數,0
小數,0.0
布爾, false
.....
4. 數組元素,數組長度,數組中的元素的值默認
基本語法:
數組名[下標標識]
注:下標標識是一個整數,從0開始,1,2,3,4,5,
如:int[] ages = { 21, 23, 25 };
第一個元素: ages[0]
第二個元素: ages[1]
Console.WritLine( ages[1]);
練習
1) 定義一個表示角色年齡的數組,類型int,roleAges ,
存儲的角色的年齡值:45,67,91,89 ,10
使用靜態初始化方式來完成。
2) 定義一個表示角色身高的數組,數組的類型 float
數組的名字 roleHeights ,存儲 5個角色的身高,
要求:使用動態初始化完成。
3) roleHeights 中的每個元素及元素的值
-------------------------------------------------------
練習2:理解數組元素,數組元素的值,下標
int[] numbers = new int[3] ;
1) 數組名為: numbers
2)數組長度為:3
3)數組的類型為:int
4)數組中有幾個元素:3個
5)數組中的第二個元素如何表示:numbers[1]
6)numbers[1] 這個元素來說,這個元素的下標是多少?1
解釋:[]中寫的具體數字就是下標值,下標值從0開始
第一個元素的下標為0,最后一個元素的下標為:
數組長度-1,如果長度為3,減-1,為 2
7)如果要打印數組中最后一個元素的值和第一個元素中存儲
的具體數字,如何表示?
Console.WriteLine( numbers[0] );//0
Console.WriteLine( numbers[2] ) ;//0
5. 數組的遍歷(挨個查看每個具體值)
有至少3種方法:
方法1:直接利用數組元素的下標
ages[0]
ages[1]
.....
如果想查看結果,可以將其放到打印語句中
但是這種方法重載代碼太多,太繁瑣
方法2:使用標准的for循環
for ( int i = 0 ;i < 數組名.Length ; i++)
{
Console.WriteLine( ages[i] )
}
方法3:當然,也可以使用while,do while,只是相比
不如for循環結構簡單,請嘗試使用while或
do while 來完成。
方法4:foreach 循環
foreach(數組類型 變量名 in 數組名)
{
Console.WriteLine( 變量名 );
}
6. 數組(復制,插入,刪除,.....)
day05作業
1.猜數字游戲
首先會由程序自動生成指定區間范圍內任意一個隨機數,
[0, 10) 之間的某個數字,然后由控制台提示用戶通過
控制台輸入0-10范圍內用戶自己猜測的數字:
“請輸入您猜測的數字(范圍在0-10之間):”,
然后由程序自動根據用戶猜測的數字判斷猜測結果:
如果輸入的數字大於系統數字,控制台則提示:“您猜測的數字偏小了...”;
如果輸入的數字小於系統數字,控制台則提示:“您猜測的數字偏大了”;
否則,輸入的數字和系統輸入應該正好相等,控制台提示“太棒了,恭喜您猜對了...”
需要注意的是,如果第一次沒有猜對了,就應該在輸出猜測結果后,
讓用戶繼續進行下一次輸入數字猜測數字的操作,
並且對猜測結果進行繼續判斷;
如果第二次還是沒有猜,就應該繼續讓用戶輸入數據,
然后再由系統判斷,如此一來,會發現程序現在有許多需要反復執行的代碼
自然,就需要使用循環語句來完成。
同樣,用戶在猜測過程中,如果想中止循環,也可以.當用戶輸入-1時,表示終止循環.
另外,打印最后結果時,還要打印出猜測的次數.
2.(必做題)
鍵盤輸入5個學生的年齡,然后求年齡總和,
平均年齡。
要求,動態初始化數組表示學生年齡的數組。
3.網站驗證碼 (選做題)
現有一組字符,要求從這組字符中隨機取出4位作為網站 驗證碼。
注:這一組字符串是由 26個大寫字母,26個小寫字母10個數字構成的char類型的數組,數組名為codes。
要求:從codes數組中隨機取出4位.作為網站驗證碼,要求 這4位驗證碼放在數組中
考查: char 類型數組的定義及初始化、隨機數的操作.
提示:聲明並初始化數組
產生一個隨機數,隨機數范圍,int index = new Random().Next (codes.Length)
for循環遍歷數組,取出index位置上的那個字符