C#程序設(shè)計(jì)教程(第2版)-第4章-結(jié)構(gòu)化程序設(shè)計(jì)ppt課件_第1頁
C#程序設(shè)計(jì)教程(第2版)-第4章-結(jié)構(gòu)化程序設(shè)計(jì)ppt課件_第2頁
C#程序設(shè)計(jì)教程(第2版)-第4章-結(jié)構(gòu)化程序設(shè)計(jì)ppt課件_第3頁
C#程序設(shè)計(jì)教程(第2版)-第4章-結(jié)構(gòu)化程序設(shè)計(jì)ppt課件_第4頁
C#程序設(shè)計(jì)教程(第2版)-第4章-結(jié)構(gòu)化程序設(shè)計(jì)ppt課件_第5頁
已閱讀5頁,還剩69頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、第4章 結(jié)構(gòu)化程序設(shè)計(jì),內(nèi)容提要: 結(jié)構(gòu)化程序的三種基本結(jié)構(gòu) 算法、流程圖、 if語句、 分支語句 循環(huán)語句、跳轉(zhuǎn)語句 異常處理的概念 try/catch語句、throw語句和finally語句 目的要求: 理解算法的概念 掌握 if語句、switch分支語句、循環(huán)語句和異常處理語句的含義 重點(diǎn)難點(diǎn): if語句、循環(huán)語句和異常處理語句,4.1 結(jié)構(gòu)化程序設(shè)計(jì)的概念 4.1.1結(jié)構(gòu)化程序設(shè)計(jì)的概念及算法的概念 結(jié)構(gòu)化程序設(shè)計(jì)方法,是比較廣泛使用的程序設(shè)計(jì)方 法。 用這種方法編制的程序具有結(jié)構(gòu)清晰,可讀性強(qiáng),易 查錯(cuò)等特點(diǎn)。 結(jié)構(gòu)化程序設(shè)計(jì)有三種基本結(jié)構(gòu),即:順序結(jié)構(gòu)、選擇 結(jié)構(gòu)、循環(huán)結(jié)構(gòu)。每種基

2、本結(jié)構(gòu)可以包含若干條語句,程序設(shè)計(jì)的主要步驟: 分析問題。 確定算法。 (3) 畫出程序流程圖。 (4) 編寫程序。 (5) 調(diào)試程序。 (6) 建立健全的文檔資料。 最關(guān)鍵的是第2個(gè)步驟,即“算法設(shè)計(jì)”。 所謂“算法”,粗略地講,是為解決一個(gè)特定問題而采取的確定的有限 的步驟,4.1.2 流程圖 流程圖(Flowchart),亦稱框圖,它是用一些幾何框圖、流向線和文字說明表示各種類型的操作。 計(jì)算機(jī)算法可以用流程圖來表示,4.2 順序結(jié)構(gòu) 4.2.1 順序結(jié)構(gòu)的概念: 有些簡單的程序是按程序語句的編寫順序依次執(zhí)行的,這種結(jié)構(gòu)稱為順序結(jié)構(gòu),例:編寫程序計(jì)算圓的周長和面積,using Syste

3、m; class Circle static void Main( ) const double PI= 3.141; double R, L, S; Console.Write(請(qǐng)輸入圓的半徑值:); R=double.Parse(Console.ReadLine( ); L=2*PI*R; S=PI*R*R; Console.WriteLine(圓的周長為:0,L); Console.WriteLine(圓的面積為:0 ,S);,4.2.2 順序結(jié)構(gòu)的實(shí)例,Parse( )方法: 主要用于將數(shù)字的字符串表示形式轉(zhuǎn)換為它的等效的其他基本數(shù)字類型。 例:string s=“18”; int a

4、=int.Parse(s)-10; /a=8 int b=a+int.Parse(Console.ReadLine(,練習(xí): 1.下列程序運(yùn)行后,輸出的結(jié)果是( )。 double x=17.9; int y=3; y=(int)x%5; Console.WriteLine(y); 2. 若x=10, y=20, z=0,則表達(dá)式 “(m=(xy)?x:y)z)?m:z”的值為(,4.3 選擇結(jié)構(gòu) 4.3.1 選擇結(jié)構(gòu)的概念 選擇結(jié)構(gòu),是一種常用的主要基本結(jié)構(gòu),是計(jì)算機(jī)根據(jù)所給定選擇條件為真與否,而決定從各實(shí)際可能的不同操作分支中執(zhí)行某一分支的相應(yīng)操作,4.3.2 條件語句 1if語句 語法形

5、式: if (表達(dá)式) 語句; 說明:如果表達(dá)式的值為true,則執(zhí)行后面if語句所控制的語句;如果表達(dá)式的值為false,則不執(zhí)行if語句控制的語句,而直接跳轉(zhuǎn)執(zhí)行后面的語句。 注意:如果if語句塊中只有一條語句,則大括號(hào)“ ”可以省略,編程:計(jì)算下面公式中的b的值。 2a+1 (a 100) b= a (a 100,using System; class value static void Main( ) Console.Write(請(qǐng)輸入a的值:); int a=int.Parse(Console.ReadLine(); int b=a; if(a=100) b=2*a+1; Conso

6、le.WriteLine(b=0,b);,編程:輸入三個(gè)數(shù),將它們從大到小排序 int a, b, c, t=0; Console.Write(“請(qǐng)輸入第一個(gè)數(shù):”); a= int.Parse(Console.ReadLine(); Console.Write(“請(qǐng)輸入第二個(gè)數(shù):”); b= int.Parse(Console.ReadLine(); Console.Write(“請(qǐng)輸入第三個(gè)數(shù):”); c= int.Parse(Console.ReadLine(); if (a =b t = a; a = b; b = t; if (a =c t = a; a = c; c = t; if

7、 (b =c t = b; b = c; c = t; Console.WriteLine(“排序結(jié)果為: 0,1,2”,a,b,c,2ifelse語句 語法: if (表達(dá)式) 語句塊1; else 語句塊2; 說明:如果表達(dá)式的值為true,則執(zhí)行if語句所控制的語句塊1;如果表達(dá)式的值為false,則執(zhí)行else語句所控制的語句塊2,例:輸入一個(gè)數(shù),對(duì)該數(shù)進(jìn)行四舍五入。 using System; class Value static void Main( ) Console.WriteLine(“請(qǐng)輸入a的值:”); double a=double.Parse(Console.Read

8、Line( ); int b; if(a-(int)a=0.5) b=(int)a+1; else b=(int)a; Console.WriteLine(0進(jìn)行四舍五入后的值為:1 ,a,b);,在ifelse語句中可以嵌套使用多層ifelse語句,如: if (表達(dá)式1) if(表達(dá)式2) if(表達(dá)式3) 語句1; else 語句2; else 語句3; else 語句4; 在使用這種結(jié)構(gòu)時(shí),要注意else和if的配對(duì)關(guān)系,其原則是:從第1個(gè)else開始,一個(gè)else總和它上面離它最近的可配對(duì)的if配對(duì),例: int a=int.Parse(Console.ReadLine( ); if

9、 (a0) if (a100) a=a-50; else a=a+10; /這個(gè)else與if (a100)相配 else a=-a; / 這個(gè)else與if (a0)相配 Console.WriteLine(“a=”,a,練習(xí): 1.若int m, n, r; 則以下正確的是( ) Aif (mn) r-; Bif (m= =n) r-; Cif (!m) r-; Dif (m=n) r-; 2. 程序改錯(cuò)。 if(x=1) y+=5; else; y+=10,思考與練習(xí) 1.為鐵路編寫計(jì)算運(yùn)費(fèi)的程序。假設(shè)鐵路托運(yùn)行李,規(guī)定每張客票托運(yùn)費(fèi)的計(jì)算方法是: 行李重量不超過 50 kg時(shí),每千克0

10、.25元;超過 50 kg而不超過 100 kg時(shí),其超過部分每千克0.35元;超過 100 kg時(shí),其超過部分每千克0.45元。 (編寫完整的程序,上機(jī)實(shí)現(xiàn)) 分析:托運(yùn)費(fèi)的分段函數(shù)是什么,答:設(shè)行李重量為w公斤,應(yīng)付托運(yùn)費(fèi)為x元,則托運(yùn)費(fèi)的分段函數(shù)是: (1)w100時(shí),x=0.25*50+0.35*50+0.45*(w-100,double w,x=0; Console.Write(“請(qǐng)輸入重量”); w = double.Parse(Console.ReadLine() if (w 50,不能寫成: 50w=100,3else if語句 else if語句是if語句和ifelse語句的

11、組合,其一般形式如下: if (表達(dá)式1) 語句1; else if (表達(dá)式2) 語句2; else if (表達(dá)式n-1) 語句n-1; else 語句n,例:編寫一個(gè)實(shí)現(xiàn)如下函數(shù)值的程序 -1, x0,using System; class Test static void Main( ) Console.Write(“請(qǐng)輸入x的值: ); double x=double.Parse(Console.ReadLine( ); int y; if (x0) y=1; else if (x=0) y=0; else y=-1; Console.WrteLine(“Y=0“,y);,4.3.3

12、 分支語句 格式:switch(表達(dá)式) case 常量表達(dá)式1: 語句1; break; case 常量表達(dá)式2: 語句2; break; default: 語句n; break;,注意: C#要求每個(gè)case后使用break語句或跳轉(zhuǎn)語句goto。所有常量表達(dá)式的值不能相同,編程:查詢學(xué)生姓名,輸入一個(gè)字符,如輸入“k”時(shí),顯示Kate;輸入“m”時(shí),顯示Mary;輸入“r”時(shí),顯示Rose;輸入“T”時(shí),顯示Tom ;輸入其他字符時(shí),顯示Other Students,Console.Write(“Enter a character:); char Name=(char)Console.R

13、ead(); switch(Name) case k: Console.WriteLine(Kate.); break; case m: Console. WriteLine(Mary.); break; case r: Console. WriteLine(Rose.); break; case T: Console. WriteLine(Tom.); break; default: Console.WriteLine(Other students. ); break;,例: using System; class Demo public static void Main() Console

14、.Write(enter i=); int i=int.Parse(Console.ReadLine(); switch(i) case 1: case 2: case 3: Console.WriteLine(“i is 1,2 or 3.); break; case 4: Console.WriteLine( i is 4. ); break;,注意:在C#中,兩個(gè)或更多的case語句可以共用同一程序代碼,思考與練習(xí) 1. 以下程序運(yùn)行時(shí),輸出結(jié)果是什么? int y = 1,x; if (y!=0) x = 5; else if y 0 x = 4; else x = 3; Consol

15、e.WriteLine(x=0“, x,x=3,4.4 循環(huán)結(jié)構(gòu) 循環(huán)是指在指定的條件下多次重復(fù)執(zhí)行一組語句。被重復(fù)執(zhí)行的一組語句稱為循環(huán)體。 采用循環(huán)結(jié)構(gòu)可以解決一些按一定規(guī)則重復(fù)執(zhí)行的問題。例如,統(tǒng)計(jì)一個(gè)班幾十名學(xué)生,甚至全校幾千名學(xué)生的學(xué)期成績,如求平均分、不及格人數(shù)等。 4.4.1 循環(huán)結(jié)構(gòu)的概念 循環(huán)結(jié)構(gòu)按其循環(huán)體是否嵌套從屬的子循環(huán)結(jié)構(gòu),可分為單循環(huán)結(jié)構(gòu)和多重循環(huán)結(jié)構(gòu),4.4.2 while語句和dowhile語句 1while語句 語法格式: while (條件表達(dá)式) 循環(huán)體,using System; class Sumw static void Main( ) int n=

16、1; while (n6) Console.WriteLine(“n=0”, n); n+;,例:寫出下列程序的運(yùn)行結(jié)果,結(jié)果,例:使用while語句,編程計(jì)算1+2+1000,using System; class Sumw static void Main( ) int i=1, sum=0; while (i=1000) sum+=i; i+; Console.WriteLine(“1+2+1000=0”,sum);,思考與練習(xí) (1)如果要實(shí)現(xiàn) sum=1+2+3+10 , 怎樣修改程序? (2)如果要實(shí)現(xiàn) sum=30+31+32+50 , 怎樣修改程序,while(i=10,int

17、 i = 30; While(i=50,using System; class Value static void Main( ) int i=10; long x=1; while (i0) x*=i; i-; Console.WriteLine(“10!=0”, x);,例:使用while語句,編程計(jì)算10的階乘值,1. 下列程序所計(jì)算的數(shù)學(xué)式是( ) int a=0, i=2; while(i100) a+=i; i+=2; A. a=1+2+4+98 B. a=1+2+4+100 C. a=2+4+6+98 D. a=2+4+6+100,練習(xí),例:寫出下列程序的運(yùn)行結(jié)果。 using

18、System; class example static void Main( ) int i=1,j,s=0; while(i=3) j=1; while(j=2) s+; j+; i+; Console.WriteLine(“s=0”, s);,循環(huán)語句允許嵌套,即while語句里面還可以再套while語句,1.以下程序段的循環(huán)次數(shù)為( ) int i=0, j=0; while(i3) while(j2) j+; i+;,練習(xí),2do-while語句 語法格式: do 循環(huán)體; while(條件表達(dá)式,dowhile執(zhí)行過程 while執(zhí)行過程,例:寫出下列程序的運(yùn)行結(jié)果。 using

19、System; class TestDoWhile static void Main( ) int x, y=0; do x=y+; Console.WriteLine(x); while(y5);,結(jié)果,using System; class EvenSum static void Main( ) int i=5, esum=0; do esum+=5; i+=5; while(i=100); Console.WriteLine(esum=0 , esum);,例:編程利用do-while語句實(shí)現(xiàn)100以內(nèi)的能被5整除的數(shù)累加,using System; class Sum static v

20、oid Main( ) int i=1, j; long m, sum=0; do m=1; j=1; do m*=j; j+; while(j=i); sum+=m; i+; while (i=10); Console.WriteLine(“1!+2!+10!=0”, sum);,例:使用do-while語句,編程計(jì)算1!+2!+10,練習(xí): 1.while語句循環(huán)結(jié)構(gòu)和do.while語句循環(huán)結(jié)構(gòu)的區(qū)別在于( ) Awhile語句的執(zhí)行效率較高 Bdo.while語句編寫程序較復(fù)雜 C無論條件是否成立,while語句都要執(zhí)行一次循環(huán)體 Ddo.while循環(huán)是先執(zhí)行循環(huán)體,后判斷條件表達(dá)式

21、是否成 立,而while語句是先判斷條件表達(dá)式,再?zèng)Q定是否執(zhí)行循環(huán) 體,4.4.3 for語句和foreach語句 1for語句 語法格式: for(表達(dá)式1;表達(dá)式2;表達(dá)式3) 循環(huán)體;,例:使用for循環(huán)語句,編程輸出120的每個(gè)奇數(shù)的平方,using System; class square static void Main( ) int s; for (int i=1;i20;i+=2) s=i*i; Console.Write(0t , s);,結(jié)果,for語句的幾點(diǎn)說明: (1) 如果對(duì)循環(huán)變量在for語句前已賦初值,則在for語句中可省略表達(dá)式1,但要保留其后的分號(hào)。 . in

22、t i=1; for( ;i=20;i+),2)for語句可以省略表達(dá)式2,即不判斷表達(dá)式條件是否成立,循環(huán)將一直進(jìn)行下去,但應(yīng)保留表達(dá)式2后面的分號(hào)。此時(shí),需要在循環(huán)體中添加跳出循環(huán)的控制語句。 例: for(int i=1; ;i+) s=i*i; Console.WriteLine(0t , s); if (i=10) break;,3) for中可以省略表達(dá)式3。此時(shí)應(yīng)在循環(huán)體中添加改變循環(huán)變量值的語句,以結(jié)束循環(huán)。 例: for( int i=1; i=10; ) s=i*i; Console.WriteLine(0t , s); i+;,3) for語句中的3個(gè)表達(dá)式可同時(shí)省略。

23、int i=1; for( ; ; ) s=i*i; Console.WriteLine(0t , s); i+; if (i=10) break;,using System; class Test static void Main( ) int i=1; long m=1; for(i=1;i=10;i+) m*=i; Console.WriteLine(0!=1,i-1,m);,編程:用for語句輸出10!的值,結(jié)果,for循環(huán)語句也可以嵌套。 例:利用for循環(huán)嵌套語句,求1!+2!+3!+.+10!的和,using System; class MultiSum static void

24、Main( ) long s=0, m=1; for (int i=1; i=10; i+) m=1; for (int j=1;j=i; j+) m*=j; s=s+m; Console.WriteLine(1!+2!+3!+.+10!=0 , s);,結(jié)果,2foreach語句 foreach語句用于列舉集合中的每一個(gè)元素,并且通過執(zhí)行循環(huán)體對(duì)每一個(gè)元素進(jìn)行操作。foreach語句只能對(duì)集合中的元素進(jìn)行循環(huán)操作。 foreach語句的一般語法格式如下: foreach (數(shù)據(jù)類型 標(biāo)識(shí)符 in 表達(dá)式) 循環(huán)體,using System; class Test static void Ma

25、in( ) double Array=16,12,31,8,21; int intArray=1,2,3; foreach(int i in intArray) Console.WriteLine(Arrayi );,例:寫出下列程序段的結(jié)果,結(jié)果,練習(xí): 1以下程序段的循環(huán)次數(shù)為( ) int a=new int 1,2,3 ,4,5; foreach(int i in a) Console.WriteLine(t); A0 B4 C5 D6 2. 以下程序運(yùn)行后,變量a的值為( ) int a=100; for(int j=10;j0;j-=2) a-=j*3; A100 B16 C13

26、D10,4.4.4 跳轉(zhuǎn)語句 在C#中還可以用跳轉(zhuǎn)語句來改變程序的執(zhí)行順序。 1break語句 在switch語句中,break用來使程序流程跳出switch語句,繼續(xù)執(zhí)行switch后面的語句;在循環(huán)語句中,break用來從當(dāng)前所在的循環(huán)內(nèi)跳出。 語法格式: break,using System; class Prime static void Main() Console.Write(輸入n的值:); int i=1,n; n=int.Parse(Console.ReadLine(); while(+in) if(n%i=0) Console.WriteLine(0不是素?cái)?shù),n); bre

27、ak; if(i=n) Console.WriteLine(0是素?cái)?shù),n);,編程: 任意給定一個(gè)整數(shù)n,判定其是否為素?cái)?shù)(即只能被1和自身整除,2. continue語句 continue語句用于循環(huán)語句中。continue語句并不是跳出當(dāng)前的循環(huán),它只是終止一次循環(huán),接著進(jìn)行下一次循環(huán)是否執(zhí)行的判定。 語法格式: continue,1. int x=0,y=0; 2. for(int i=1;i10;i+) do Console.Write(i+ “ ”); if (i%2=0) x=x+1; continue; if (x%2!=0) Console.WriteLine( ); cont

28、inue; y=y+1; while(x=10); Console.WriteLine(“y=0”,y,寫出下列程序段的運(yùn)行結(jié)果,結(jié)果,結(jié)果,using System; class Output public static void Main() for(int j=1;j=100;j+) if(j%7!=0) continue; Console.Write(“0t”,j);,用continue語句編程:輸出100以內(nèi)所有能被7整除的數(shù),3goto語句 C#中,goto語句是無條件跳轉(zhuǎn)語句。當(dāng)程序流程遇到goto語句時(shí),就跳到它指定的位置。 操作時(shí),goto需要一個(gè)標(biāo)簽,標(biāo)簽是后跟冒號(hào)(:)的

29、合法的C#標(biāo)識(shí)符,標(biāo)簽放在goto語句要跳轉(zhuǎn)到的那一條語句的前面。 例如: end: a=i+8 語法格式: goto 標(biāo)簽; 例:goto end; 標(biāo)簽必須和goto用在同一個(gè)方法中,例: using System; class Test static void Main() goto H; W:Console.WriteLine(“world”); goto X; H: Console.Write(“world”); goto W; X:Console.WriteLine(“Good bye!”);,注意:goto語句這種無條件跳轉(zhuǎn)程序執(zhí)行流程的功 能,破壞了程序的可讀行,在現(xiàn)在的程序設(shè)

30、 計(jì)中,已不提倡使用goto語句,異常:就是程序運(yùn)行時(shí)發(fā)生的錯(cuò)誤或某種意想不到的狀態(tài)。如溢出、被零除、數(shù)組下標(biāo)超出界限以及內(nèi)存不夠等。 通過使用C#異常處理系統(tǒng)就可以處理這些錯(cuò)誤。 C#為常見的程序錯(cuò)誤定義了許多標(biāo)準(zhǔn)的異常,如除0錯(cuò)誤(divide-by-zero)、訪問越界(index-out-of-range)等。 例如:當(dāng)企圖除以0(即除數(shù)是0)時(shí),就會(huì)產(chǎn)生一個(gè)DivideByZeroException異常,4.5.1 異常處理的概念,4.5 異常處理,C#通常在兩種情況下產(chǎn)生異常: (1)在C#語句和表達(dá)式的處理過程中激發(fā)了某個(gè)異常的 條件,使得操作無法正常結(jié)束,引發(fā)異常。 (2)th

31、row語句拋出異常,例如:當(dāng)企圖除以0(即除數(shù)是0)時(shí),就會(huì)產(chǎn)生一個(gè)DivideByZeroException異常,using System; class NotHandled static void Main() int a=0, b=5; Console.WriteLine(Before exception is generated. ); /產(chǎn)生除0異常 b=b/a;,當(dāng)程序有異常發(fā)生時(shí),C#運(yùn)行系統(tǒng)會(huì)捕獲到它,這時(shí)C#運(yùn)行系統(tǒng)報(bào)告錯(cuò)誤,并結(jié)束程序。 例如:using System; class NotHandled public static void Main() int nums=

32、new int4; Console.WriteLine(“Before exception is generated.”); /產(chǎn)生數(shù)組越界訪問異常 nums 7=10; 當(dāng)發(fā)生數(shù)組越界錯(cuò)誤時(shí),程序停止執(zhí)行,并顯示如下錯(cuò)誤信息,捕獲異常并處理的好處是不用把那些令人討厭的系統(tǒng)默認(rèn)的異常消息提示給用戶,而且能使產(chǎn)生異常的應(yīng)用程序能夠繼續(xù)執(zhí)行。 在C#中用四個(gè)關(guān)鍵字:try、catch、throw、finally來管理C#異常處理,4.5.2 異常的處理,使用try和catch語句來捕獲異常 異常處理的核心是try和catch。但這兩個(gè)關(guān)鍵字得配合使用,不可以單獨(dú)用 catch。 當(dāng)try中的一個(gè)異常被拋出時(shí),它被相應(yīng)的catch語句捕獲,該語句然后處理異常,例如:using System; class ExcDemo1 public static void Main() int nums=new int4; try Console.WriteLine(Befor

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論