




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第二講 結(jié)構(gòu)化程序設(shè)計開發(fā)方法順序程序設(shè)計分支結(jié)構(gòu)程序設(shè)計循環(huán)程序設(shè)計/循環(huán)控制第二講 結(jié)構(gòu)化程序設(shè)計開發(fā)方法一、一、C程序結(jié)構(gòu)程序結(jié)構(gòu)每一個源文件由預(yù)編譯命令和若干函數(shù)組成(對每個文件分別編譯,然后連接)一般地, 一個C程序可由多個源文件組成每一個函數(shù)由說明部分和語句部分組成4.1 C4.1 C程序結(jié)構(gòu)和語句程序結(jié)構(gòu)和語句第第4 4講最簡單的講最簡單的c c程序設(shè)計程序設(shè)計順序程序設(shè)計順序程序設(shè)計C 程 序源程序文件1源程序文件i源程序文件n預(yù)編譯命令函 數(shù) 1函 數(shù) n說 明 部 分執(zhí)行部分(語句)一、一、 C程序結(jié)構(gòu)第第4 4講最簡單的講最簡單的c c程序設(shè)計程序設(shè)計順序程序設(shè)計順序程序
2、設(shè)計二、 C 程序語句1. 表達(dá)式語句表達(dá)式語句2. 控制語句控制語句3. 復(fù)合語句復(fù)合語句4. 終止程序運行語句終止程序運行語句第第4 4講最簡單的講最簡單的c c程序設(shè)計程序設(shè)計順序程序設(shè)計順序程序設(shè)計函數(shù)調(diào)用語句函數(shù)調(diào)用語句:如: printf ();賦值語句賦值語句: 如: i=i+1; i+; x+y;空語句空語句: 如:如: ;任何事情都不做。任何事情都不做。用來做被轉(zhuǎn)向點,或循環(huán)語用來做被轉(zhuǎn)向點,或循環(huán)語句中的循環(huán)體。句中的循環(huán)體。1. 表達(dá)式語句第第4 4講最簡單的講最簡單的c c程序設(shè)計程序設(shè)計順序程序設(shè)計順序程序設(shè)計2. 控制語句改變語句的執(zhí)行順序 if()else for
3、() hile() dohile() continue break sitch goto return(條件語句條件語句)(循環(huán)語句循環(huán)語句)(循環(huán)語句循環(huán)語句)(循環(huán)語句循環(huán)語句)(結(jié)束本次循環(huán)語句結(jié)束本次循環(huán)語句)(中止執(zhí)行中止執(zhí)行switch或循環(huán)語句或循環(huán)語句)(多分支選擇語句多分支選擇語句)(轉(zhuǎn)向語句轉(zhuǎn)向語句)(從函數(shù)返回語句從函數(shù)返回語句)( )表示條件, 表示語句第第4 4講最簡單的講最簡單的c c程序設(shè)計程序設(shè)計順序程序設(shè)計順序程序設(shè)計用用 括起來的一系列語句。括起來的一系列語句。 如如:if(ab) z=x+y; t=z/100; printf (%f, t);3. 復(fù)合語句
4、(語句體)復(fù)合語句中最后一個語句的分號不能忽略不寫。復(fù)合語句中最后一個語句的分號不能忽略不寫。C語言允許一行寫幾個語句,也允許一個語句拆開語言允許一行寫幾個語句,也允許一個語句拆開寫在幾行上,書寫格式無固定要求。寫在幾行上,書寫格式無固定要求。第第4 4講最簡單的講最簡單的c c程序設(shè)計程序設(shè)計順序程序設(shè)計順序程序設(shè)計4. 終止程序運行語句exit(整數(shù));第第4 4講最簡單的講最簡單的c c程序設(shè)計程序設(shè)計順序程序設(shè)計順序程序設(shè)計return 整數(shù); 賦值語句是由賦值表達(dá)式加上一個分號構(gòu)成。賦值語句是由賦值表達(dá)式加上一個分號構(gòu)成。5.2 5.2 賦值語句賦值語句C語言中的賦值號語言中的賦值號
5、“=”是一個運算符,在其他是一個運算符,在其他大多數(shù)語言中賦值號不是運算符。大多數(shù)語言中賦值號不是運算符。多數(shù)高級語言沒有多數(shù)高級語言沒有“賦值表達(dá)式賦值表達(dá)式”一概念。一概念。作為賦值表達(dá)式可以包括在其他表達(dá)式之中。作為賦值表達(dá)式可以包括在其他表達(dá)式之中。例如:例如:if(a=b)0)t=a;第第4 4講最簡單的講最簡單的c c程序設(shè)計程序設(shè)計順序程序設(shè)計順序程序設(shè)計if后面的后面的()內(nèi)是一個條件,如:內(nèi)是一個條件,如:if(x0) 在在x的位置上換上一個賦值表達(dá)式的位置上換上一個賦值表達(dá)式“a=b”,其作用是:,其作用是:先進(jìn)行賦值運算先進(jìn)行賦值運算(將將b的值賦給的值賦給a),然后判斷
6、,然后判斷a是否大是否大于于0,如大于,如大于0,執(zhí)行,執(zhí)行t=a。在。在if語句中的語句中的“a=b”不是不是賦值語句而是賦值表達(dá)式,這樣寫是合法的。賦值語句而是賦值表達(dá)式,這樣寫是合法的。如果寫成如果寫成if(a=b;)0)t=a;就錯了。;就錯了。在在if的條件中不能包含賦值語句。由此可以看到,的條件中不能包含賦值語句。由此可以看到,c把把賦值語句和賦值表達(dá)式區(qū)別開來,增加了表達(dá)式的種賦值語句和賦值表達(dá)式區(qū)別開來,增加了表達(dá)式的種類,使表達(dá)式的應(yīng)用幾乎類,使表達(dá)式的應(yīng)用幾乎“無孔不入無孔不入”,能實現(xiàn)其他,能實現(xiàn)其他語言中難以實現(xiàn)的功能語言中難以實現(xiàn)的功能.第第4 4講最簡單的講最簡單的
7、c c程序設(shè)計程序設(shè)計順序程序設(shè)計順序程序設(shè)計printf( )和scanf( )是C語言中使用得最多的一種輸出函數(shù),它可按指定的格式輸出和輸入多個不同類型的數(shù)據(jù)。4.54.5 格式式輸入輸出函數(shù)格式式輸入輸出函數(shù)上機實習(xí)第第4 4講最簡單的講最簡單的c c程序設(shè)計程序設(shè)計順序程序設(shè)計順序程序設(shè)計第第4 4講最簡單的講最簡單的c c程序設(shè)計程序設(shè)計順序程序設(shè)計順序程序設(shè)計例例2.22.2 已知圓的半徑為R(R是一個可變的量),求圓的面積和周長,用計算機求解,程序如下/* exam22.c */* 計算圓的面積和周長計算圓的面積和周長 */#includemain() float r,area,
8、s; scanf(“%f“,&r); area=3.14*r*r; s=2*3.14*r; printf(“面積面積= %f, 周長周長=%f”,area,s);1 1、注釋注釋2 2、數(shù)據(jù)說明數(shù)據(jù)說明3 3、數(shù)據(jù)輸入數(shù)據(jù)輸入4 4、數(shù)據(jù)處理、數(shù)據(jù)處理5 5、結(jié)果輸出、結(jié)果輸出第第4 4講最簡單的講最簡單的c c程序設(shè)計程序設(shè)計順序程序設(shè)計順序程序設(shè)計第第4 4講最簡單的講最簡單的c c程序設(shè)計程序設(shè)計順序程序設(shè)計順序程序設(shè)計2 2 數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)根據(jù)算法分析,至少要用到這么幾個量,年增長率、年數(shù)、第n年的總產(chǎn)值。而這幾個量中,年增長率肯定是小數(shù)(浮點)型數(shù)據(jù),年數(shù)是整數(shù)(整型),總產(chǎn)值不會
9、是整數(shù),應(yīng)為浮點數(shù)。這些數(shù)據(jù)都要放在相應(yīng)的變量變量中,并要進(jìn)行相應(yīng)的數(shù)據(jù)說明數(shù)據(jù)說明。第第4 4講最簡單的講最簡單的c c程序設(shè)計程序設(shè)計順序程序設(shè)計順序程序設(shè)計3 3 源程序代碼源程序代碼第第4 4講最簡單的講最簡單的c c程序設(shè)計程序設(shè)計順序程序設(shè)計順序程序設(shè)計第第4 4講最簡單的講最簡單的c c程序設(shè)計程序設(shè)計順序程序設(shè)計順序程序設(shè)計第第4 4講最簡單的講最簡單的c c程序設(shè)計程序設(shè)計順序程序設(shè)計順序程序設(shè)計2 2 數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)程序中要用到不同的數(shù)據(jù)數(shù)據(jù),存放頭、腳數(shù)量的變量,存放方程解(雞、兔數(shù)量)的變量,存放方程判別式的變量等。對于頭、腳的數(shù)量,肯定是整型變量,方程的解理論上講是
10、整型,但在求解方程時要進(jìn)行運算,為了避免發(fā)生錯誤,最好是用浮點數(shù)據(jù)。第第4 4講最簡單的講最簡單的c c程序設(shè)計程序設(shè)計順序程序設(shè)計順序程序設(shè)計第第4 4講最簡單的講最簡單的c c程序設(shè)計程序設(shè)計順序程序設(shè)計順序程序設(shè)計4 4 源程序代碼源程序代碼說明輸入數(shù)據(jù)的內(nèi)容第第4 4講最簡單的講最簡單的c c程序設(shè)計程序設(shè)計順序程序設(shè)計順序程序設(shè)計問題:1、從鍵盤輸入一個數(shù),如果該數(shù)為正,打印, 否則不打印;2、將考試成績不及格的學(xué)生名單打印出來;3、解一元二次方程,求出相應(yīng)的實根或復(fù)根。 對于上述或類似問題,需要進(jìn)行某種判斷,并根據(jù)不同情況進(jìn)行不同的處理,怎樣進(jìn)行程序設(shè)計?第第5 5講講 分支結(jié)構(gòu)程
11、序設(shè)計分支結(jié)構(gòu)程序設(shè)計解決辦法:1、引入新的程序結(jié)構(gòu),分支結(jié)構(gòu)分支結(jié)構(gòu), 有時也稱 判斷結(jié)構(gòu)判斷結(jié)構(gòu) 或 選擇結(jié)構(gòu)選擇結(jié)構(gòu)。2、為了和分支結(jié)構(gòu)相配合,同時還要引入 邏輯表達(dá)式的概念。3、有三種形式可進(jìn)行分支結(jié)構(gòu)的程序設(shè)計A、 if 結(jié)構(gòu)B、多重選擇結(jié)構(gòu)(switch語句)C、無條件轉(zhuǎn)移結(jié)構(gòu)(goto語句)第第5 5講講 分支結(jié)構(gòu)程序設(shè)計分支結(jié)構(gòu)程序設(shè)計 if 語句關(guān)系表達(dá)式和邏輯表達(dá)式if 語句的變形及嵌套多重選擇語句 (switch 語句)無條件轉(zhuǎn)移語句( goto 語句)本講小結(jié)本講內(nèi)容第第5 5講講 分支結(jié)構(gòu)程序設(shè)計分支結(jié)構(gòu)程序設(shè)計02cbxaxacabbxcab242, 122, 04
12、abcaibxcab242, 122, 04 由于問題簡單,只需用到一些單精度實數(shù)第第5 5講講 分支結(jié)構(gòu)程序設(shè)計分支結(jié)構(gòu)程序設(shè)計輸入方程系數(shù) a,b,c計算判別式 d=b*b-4*a*cif 判別式大于等于 0 then 計算兩個實根 定位輸出光標(biāo) 打印結(jié)果else 計算實部 計算虛部 定位輸出光標(biāo) 打印結(jié)果end program第第5 5講講 分支結(jié)構(gòu)程序設(shè)計分支結(jié)構(gòu)程序設(shè)計 #include #includemain() float a,b,d,c,x1,x2,p,q; printf( “輸入方程系數(shù)輸入方程系數(shù):” ); scanf(“%f,%f,%f”,&a,&b,&c); d=b*
13、b-4*a*c; if ( d=0) x1=(-b+sqrt(d)/(2*a); x2=(-b-sqrt(d)/(2*a); printf( “x1=%f,x2=%fn”,x1,x2); else p=-b/(2*a); q=sqrt(-d)/(2*a); printf( “x1=%f+i%f,x2=%f-i%fn”,p,q,p,q); 求平方根的函數(shù)第第5 5講講 分支結(jié)構(gòu)程序設(shè)計分支結(jié)構(gòu)程序設(shè)計例例 5.25.2 商店售貨,按購買貨物款的多少分別給予不同的商店售貨,按購買貨物款的多少分別給予不同的 優(yōu)惠折扣,編程計算實際應(yīng)付貨款。優(yōu)惠折扣,編程計算實際應(yīng)付貨款。購貨不足購貨不足250元,沒
14、有折扣;元,沒有折扣;購貨購貨250元(含元(含250元,下同),不足元,下同),不足500元,減價元,減價5%;購貨購貨500元,不足元,不足1000元,減價元,減價7.5%;購貨購貨1000元元,不足不足2000元,減價元,減價10%;購貨購貨2000元及以上,減價元及以上,減價15%;1、算法分析、算法分析: 設(shè)購物款為M,折扣為D,則D可表示為: D=0 (M250) D=0.05 (250 M500) D=0.075 (500 M1000) D=0.1 (1000 M2000) D=0.15 (2000M)第第5 5講講 分支結(jié)構(gòu)程序設(shè)計分支結(jié)構(gòu)程序設(shè)計2、源程序清單/ exam42
15、.c#includemain() float m,d,t; printf(“請輸入購物金額: ”); scanf(“%f”,&m); if ( m=250 & m=500 & m=1000 & m=2000) d=0.15; t=m*(1-d), /計算應(yīng)付 款 printf( “實際應(yīng)付款:%f”,t);輸入購物款: 249實際應(yīng)付款:249輸入購物款: 500實際應(yīng)付款:462.5第第5 5講講 分支結(jié)構(gòu)程序設(shè)計分支結(jié)構(gòu)程序設(shè)計例例 5.35.3 購物折扣程序的另一個寫法購物折扣程序的另一個寫法改寫后,程序更清晰,執(zhí)行時間更省。/ exam42.c#includemain() float
16、m,d,t; printf(“請輸入購物金額請輸入購物金額: ”); scanf(“%f”,&m); if ( m=250 & m=500 & m=1000 & m2000) d=0.1; else d=0.15; t=m*(1-d), /應(yīng)付款應(yīng)付款 printf( “實際應(yīng)付款實際應(yīng)付款:%f”,t);第第5 5講講 分支結(jié)構(gòu)程序設(shè)計分支結(jié)構(gòu)程序設(shè)計例例 5.45.4 從鍵盤輸入一字符從鍵盤輸入一字符,如果為如果為Y,則打印是則打印是,為為N,打印否打印否,其它其它 字符字符,打印輸入錯誤。打印輸入錯誤。/ exam54.c#includemain() char a; printf(“輸入
17、一個字符:”); a=getchar(); if( a=Y | a= =N ) if (a=Y) printf( “是”); else printf( “否”); else printf( “輸入數(shù)據(jù)不合要求”);演示顯示程序第第5 5講講 分支結(jié)構(gòu)程序設(shè)計分支結(jié)構(gòu)程序設(shè)計#includemain() int x,y,z; printf(“Iput x,y,z:”); scanf(“%d,%d,%d”,&x,&y,&z); if ( x0) if (y0 ) if (z0) printf( “所有數(shù)據(jù)大于零所有數(shù)據(jù)大于零!”); else printf( “只有只有X,Y大于零大于零!”);
18、else if (x=0) if (y=0) if (z=0) printf( “所有數(shù)據(jù)都為零所有數(shù)據(jù)都為零!”); else printf( “只有只有X,Y等于零等于零!”); else printf( “X 小于零小于零!”);例例 5.55.5 演示 嵌套不能太深,一般以三層為限,嵌套太深,容易出錯。嵌嵌套套演演示示程程序序第第5 5講講 分支結(jié)構(gòu)程序設(shè)計分支結(jié)構(gòu)程序設(shè)計#includemain() int x,y,z; printf(“Iput x,y,z:”); scanf(“%d,%d,%d”,&x,&y,&z); if ( x0 & y0 & z0) printf( “所有數(shù)
19、據(jù)大于零所有數(shù)據(jù)大于零!”); else if (x0 & y0) printf( “只有只有X,Y大于零大于零!”); else if (x=0 & y=0 & z=0) printf( “所有數(shù)據(jù)都為零所有數(shù)據(jù)都為零!”); else if (x=0 & y=0) printf( “只有只有X,Y等于零等于零!”); else / (x=A & ch=A & chb?a:cd?c:d ab?a:(cd?c:d)此處使用了條件運算符3 源程序代碼之二第第5 5講講 分支結(jié)構(gòu)程序設(shè)計分支結(jié)構(gòu)程序設(shè)計#includemain() int i; printf(“輸入數(shù)字 1- 7: ”); sca
20、nf(“%d”,&i); if (i=1) printf ( “Today is Monday!n”); else if (i=2) printf (“Today is Tuesday!n”); else if (i=3) printf (“Today is Wednesday !n”); else if (i=4) printf( “Today is Thursday!n”); else if (i=5) printf( “Today is Friday!n”); else if (i=6) printf( “Today is Saturday!n”); else printf( “Toda
21、y is Sunday!n”);例例 5.75.7 輸入星期中的某一天輸入星期中的某一天, ,顯示對應(yīng)的英文顯示對應(yīng)的英文此例似顯復(fù)雜,此例似顯復(fù)雜,是否有更好的是否有更好的辦法辦法?第第5 5講講 分支結(jié)構(gòu)程序設(shè)計分支結(jié)構(gòu)程序設(shè)計main() int i; printf( “輸入數(shù)字 1- 7: ”); scanf(“%d”,&i); switch(i) case 1: printf( “Today is Monday!”); case 2: printf( “Today is Tuesday!”); case 3: printf( “Today is Wednesday !”); case
22、 4: printf( “Today is Thursday!”); case 5: printf( “Today is Friday!”); case 6: printf( “Today is Saturday!”); default: printf( “Today is Sunday!”); 例例 5.8 5.8 用 switch 語句重寫打印星期程序。main() int I; printf( “輸入數(shù)字 1- 7: ”); scanf(“%d”,&i); if (i=1) printf( “Today is Monday!”); else if (i=2) printf( “Today
23、 is Tuesday!”); else if (i=3) printf( “Today is Wednesday !”); else if (i=4) printf( “Today is Thursday!”); else if (i=5) printf( “Today is Friday!”); else if (i=6) printf( “Today is Saturday!”); else printf( “Today is Sunday!”);第第5 5講講 分支結(jié)構(gòu)程序設(shè)計分支結(jié)構(gòu)程序設(shè)計要有break才等價例例 5.95.9 用 switch 語句重寫例4.4的程序main()
24、char a; printf( “輸入一個字符:” ); a=getchar(); if (a=Y | a=N ) if (a=Y) printf( “是n”); else printf( “否n”); else printf( “字符不合要求!n”);顯然,改寫后的程序更清晰,更簡短。main() char a; printf( “輸入字符:”); a=getchar(); switch (a) case Y: printf( “是n”); break; case N: printf( “否n”); break; default: printf( “字符不合要求!n”); 第第5 5講講 分
25、支結(jié)構(gòu)程序設(shè)計分支結(jié)構(gòu)程序設(shè)計例例 5.105.10 在屏幕上顯示菜單分析: 程序首先在屏幕上將功能顯示出來,用戶根據(jù)需要選擇相應(yīng)的功能,程序根據(jù)用戶的選擇執(zhí)行相應(yīng)的程序段。對于這類程序,往往是用戶輸入一個英文字母,然后程序根據(jù)字母來斷別程序該執(zhí)行什么程序段,故一般用 switch語句比較方便。第第5 5講講 分支結(jié)構(gòu)程序設(shè)計分支結(jié)構(gòu)程序設(shè)計2 2 源程序清單源程序清單switch(a)case i: printf(“調(diào)用輸入模塊!”); break;case o: printf(“調(diào)用輸出模塊!”); break;case l: printf(“調(diào)用查找模塊!”); break;case q
26、: printf(“調(diào)用退出模塊!”); break; main() int char a; printf(“請選擇:”); printf(“輸入 i ”); printf(“ 輸出 o ”); printf(“找出最長的單詞 l”); printf(“退出 q”); a=getchar();執(zhí)行選項時,要調(diào)用相應(yīng)的模塊(程序段)。由于現(xiàn)在還沒有相應(yīng)的程序,暫用一條打印語句代替。以后會用相應(yīng)程序代替第第5 5講講 分支結(jié)構(gòu)程序設(shè)計分支結(jié)構(gòu)程序設(shè)計例例 5.115.11 統(tǒng)計某班級中計算機課程中考試成績高于80分的人數(shù)。假設(shè)學(xué)生人數(shù)為 main() int i, fs, j=0;Loop: sc
27、anf(“%d”,&fs); j+; /統(tǒng)計已讀入的數(shù)據(jù)個數(shù) if (fs80) i+; printf(“%d, %d”,i,fs); if(j95 或者輸入數(shù)據(jù)完成或者輸入數(shù)據(jù)完成(i某值某值) 退出輸入;退出輸入; else go 輸入成績行輸入成績行 ; if ( fs 95) 打印字符串打印字符串“找到了!找到了!” else 打印字符串打印字符串“沒找到!沒找到!”結(jié)束程序結(jié)束程序3 3 程序偽代碼程序偽代碼第第6 6講講 循環(huán)控制循環(huán)控制main() int fs,i; i=0;Loop1: scanf(“%d”,&fs); i=i+1; if(fs95| i=10 ) goto
28、loop2; else goto loop1; loop2: if ( fs 95) printf(“FIND !”); else printf( “DO NOT FIND !”);4 4 源程序代碼之一源程序代碼之一構(gòu)成循環(huán)退出循環(huán)標(biāo)號標(biāo)號第第6 6講講 循環(huán)控制循環(huán)控制5 5 源程序代碼之二源程序代碼之二#includemain() int fs,i=1; printf(n請輸入第請輸入第 %d 個數(shù)據(jù)個數(shù)據(jù): ,i); scanf(%d,&fs); while(fs=95 & i95) printf( n找到啦找到啦!n ); else printf( n沒找到?jīng)]找到!n);注意輸入提示
29、注意輸入提示W(wǎng)hile例1循環(huán)體第第6 6講講 循環(huán)控制循環(huán)控制例例 6.26.2 將輸入的正文復(fù)制到輸出,每次一個字符將輸入的正文復(fù)制到輸出,每次一個字符1 1 算法分析算法分析 本題的含義是每次從鍵盤上輸入一個字符,然后將該字符在屏幕上輸出。因為是正文,故其結(jié)束的標(biāo)志為 要使用字符函數(shù)來接受從鍵盤輸入的字符,一般用getchar函數(shù)。第第6 6講講 循環(huán)控制循環(huán)控制2 2 源程序代碼源程序代碼 #includeint main(void) char c; printf(“input a text end of n”); c=getchar(); while(c!=EOF) putchar(
30、c); c=getchar(); 在頭文件中定義的常數(shù)(-1)While例2循環(huán)體注意輸入提示按注意輸入提示按輸入一個字符輸出一個字符第第6 6講講 循環(huán)控制循環(huán)控制#includeint main(void)char c;printf(input a text n);while(c=getchar()!=EOF) putchar(c); 請閱讀下面的程序,說明程序的功能。該程序與上面的程序功能一樣,只不過將字符輸入語句放入循環(huán)判斷條件中。在頭文件中定義的常數(shù)(-1)循環(huán)注意輸入提示注意輸入提示按按輸入一個字符輸出一個字符第第6 6講講 循環(huán)控制循環(huán)控制 比較兩種循環(huán)的用法。 從鍵盤輸入一個字
31、符Y或N,直到輸入正確為止。1 1 算法分析算法分析在程序中,經(jīng)常會遇到要求用戶輸入Y或N,以確定某種狀態(tài)。為防止用戶在無意中碰到鍵盤而輸入錯誤的字符,程序?qū)τ脩糨斎氲牟缓弦蟮淖址雎裕⒁笥脩糁匦螺斎?。為了做到上述要求,程序?qū)斎氲淖址M(jìn)行判斷,如果不合要求,則將輸入的字符忽略,并等待用戶重新輸入。顯然,要做到這一點,須用一個循環(huán)程序,當(dāng)輸入正確時,循環(huán)結(jié)束。設(shè)輸入變量為c ,則循環(huán)控制條件為!(c=Y | c=N) 或者(c!=Y & c!=N)第第6 6講講 循環(huán)控制循環(huán)控制格式1: c=getchar(); while (c!=Y & c!=N) printf( answer i
32、s Y or N“); c=getchar(); 格式2: do printf( ”Enter Y or N“); c=getchar(); while(c!=Y & c!=N);顯然,格式 2更方便!do例第第6 6講講 循環(huán)控制循環(huán)控制#includemain() int fs,i=1; do printf(請輸入第請輸入第 %d 個數(shù)據(jù)個數(shù)據(jù): ,i); scanf(%d,&fs); i+; while(fs=95 & i95) printf( n找到啦找到啦!n ); else printf( n沒找到?jīng)]找到!n);例例 6.56.5 將例例6.1用新的dowhile 語句重寫查找某班
33、級考試結(jié)果是否有高于95分的成績。do例循環(huán)體第第6 6講講 循環(huán)控制循環(huán)控制 統(tǒng)計某班級中計算機課程中考試成績高于80分的人數(shù),現(xiàn)用for 循環(huán)語句重寫該程序。 main() int fs,sum,j; sum=0; for (j=1; j80) sum=sum+1; printf(“sum=%dn“,sum); j j 加1for例循環(huán)體第第6 6講講 循環(huán)控制循環(huán)控制例例6.66.6 求數(shù)列 50011n511111611的和。 該數(shù)列中每一項的分母都有規(guī)律,后一項為前一項加5,分母的通式為: An =An-1 +5, A1 =1或: ),(n511An100210n程序第第6 6講講
34、循環(huán)控制循環(huán)控制/ exam63.c#includemain()int i;float sum=0;for(i=0;i=100;i+)sum=sum+1.0/(1+i*5);printf(%f,sum);i 加1循環(huán))100,2, 1 ,0(n511Annfor例第第6 6講講 循環(huán)控制循環(huán)控制例例 6.7 6.7 求的近似值,精確到10210n1公式為:2222121116n此類問題相對簡單,但要注意累加變量和通項的初值。該問題中,累加變量sum 的初值為0,通項 term 的初值為 1。第第6 6講講 循環(huán)控制循環(huán)控制#include#includemain()double pi,term
35、,sum;int i;sum=0.0;term=1.0;for(i=1;term0.00000000000001;i+)term=1.0/(i*i);sum=sum+term;pi=sqrt(sum*6);printf(%fn,pi);兩個相乘,其值會溢出,故得不到想要的結(jié)果循環(huán)2222121116nfor例第第6 6講講 循環(huán)控制循環(huán)控制例例 6.8 6.8 分別統(tǒng)計某班學(xué)生各科成績中高于分的人數(shù)。 學(xué)生人數(shù)為30人,課程為:數(shù)學(xué)、語文、英語、物理、生物。int n,i;n=0;for(i=1;i=80) n=n+1; / 累加大于80 分的人數(shù) printf(n=%d“,n); 先看統(tǒng)計數(shù)
36、學(xué)成績循環(huán)for例第第6 6講講 循環(huán)控制循環(huán)控制 統(tǒng)計五門課程,只需將統(tǒng)計一門課程的程序用不同的數(shù)據(jù)執(zhí)行 5 次,這可用一個循環(huán)實現(xiàn)。 / 統(tǒng)計某一門課程 n=0; for(i=0;i=80) n=n+1; printf(n=%d“,n);for(j=0;j5;j+) / 對課程循環(huán) 統(tǒng)計每門課程的成績! / 統(tǒng)計一門課程 n=0; for(i=0;i=80) n=n+1; printf(n=%d“,n); 這里,用到了二重循環(huán)。外循環(huán)內(nèi)循環(huán)for例第第6 6講講 循環(huán)控制循環(huán)控制例例 6.96.9 求自然對數(shù)的底e,取前 n 項的和。!1!21!111ne1 1 算法分析算法分析此題有兩種
37、算法:一種是直接求通項,則先求 n!,然后求1/n! , 這種方法比較簡單。求 n 階乘的程序段為f=1;for(j =1;j=n;j+) f=f*j;第第6 6講講 循環(huán)控制循環(huán)控制!1!21!111ne,則有設(shè)通項為mA1 ), 2 , 1( 101anmmaamm由于數(shù)列的第一項不能用通項表示,故將其直接放入累加變量中。程序片段為第二種求通項的公式e=1.0; a=1;for(m=1;m=n;m+) a=a*(1/m ); e=e+ a;第第6 6講講 循環(huán)控制循環(huán)控制/ 利用雙重循環(huán)計算main() int i,j,n; float e,f; printf( “Please input
38、 N: ”); scanf(“%d”,&n); e=1.0; for(i=1;i=n;i+) f=1; for(j =1;j=i;j+) f=f*j; e=e+1/f; printf( “e=%f”,e);/ 利用單重循環(huán)計算main() int i,n; float e,f; printf( “Please input N:”); scanf(“%d”,&n); e=1.0; f=1; for(i=1;i=n;i+) f=f*(1/i ); e=e+ f; printf( “e=%f”,e);2 2 源代碼源代碼!1!21!111ne第第6 6講講 循環(huán)控制循環(huán)控制Esc鍵結(jié)束,要求只顯示輸
39、出內(nèi)容。 在每行前顯示字符串“The Line No. is n”,n為1,2,3,1 算法分析此題要求從鍵盤上輸入字符并按行顯示,初一看,只要用行輸入語句就行。但仔細(xì)分析后會發(fā)現(xiàn),用行輸入語句不行。如用 gets 或 scanf 語句,則輸入的內(nèi)容會在屏幕上回顯(即輸入的內(nèi)容顯示在屏幕上),其次,這兩個語句都不能單獨捕捉到Esc鍵。因此,只能用單個字符輸入的函數(shù),但要求不要回顯,getchar函數(shù)也不行,但推測是與getchar相類似的函數(shù)。故可先調(diào)出getchar 的幫助,然后看See Also。第第6 6講講 循環(huán)控制循環(huán)控制既然是按行顯示,用字符輸入函數(shù),每輸入一個字符,立刻在屏幕上顯
40、示出來。當(dāng)接受到換行符時,轉(zhuǎn)入下一行。因此,對每一行的輸入,要用一個循環(huán),循環(huán)的控制條件就是輸入的字符不為換行符。當(dāng)輸入為換行符時,循環(huán)從頭開始。程序的結(jié)束是以接受到Esc鍵為標(biāo)志的,故而要在行輸入的外面再增加一個循環(huán),此循環(huán)的結(jié)束條件是輸入的字符為Esc鍵。行輸入的程序片段為printf(nThe Line No. is %d, i); do printf(%c, c); c=getch(); while(c!=13 & c!=27);13 return鍵ASCII碼27 Esc鍵ASCII碼getch 不回顯輸入 字符函數(shù)第第6 6講講 循環(huán)控制循環(huán)控制#include#includein
41、t main(void) int i=0; char c=0; while(c!=27) c=0; i+; printf(nThe Line No. is %d, i); do printf(%c, c); c=getch(); while(c!=13 & c!=27); printf(nThe endn);從鍵盤上輸入一個字符,不回顯Esc鍵的ASCII碼值回車符的ASCII碼值第第6 6講講 循環(huán)控制循環(huán)控制 輸入一個算式,模擬袖珍計算機的加、減、乘、除四則運算。例如:輸入10.8+0.13*100 計算結(jié)果為: 1093.000000假定計算時不考慮運算符的優(yōu)先級,也不允許有( ),而是
42、按照運算符出現(xiàn)的先后順序執(zhí)行運算。sunhui:此例也沒講。第第6 6講講 循環(huán)控制循環(huán)控制 main(void) double x,y; char op; inx: printf(input arithmetic expression:n); scanf(%lf,&x); while(op=getchar()!=n) iny: scanf(%lf,&y); switch(op) case +:x+=y; break; case -:x-=y; break; case *:x*=y; break; case /: if(y) x/=y; else printf(division is zero
43、,input y againn); goto iny; break; default: printf(illegal operator,input againn); goto inx; printf(%8.4fn,x);第第6 6講講 循環(huán)控制循環(huán)控制開始 輸入系數(shù)a,b,cd=0例例6.126.12:用流程圖描述求解一元二次方程的根x1=(-b+sqrt(d)/2x2=(-b-sqrt(d)/2輸出x1,x2p=-b/2q=sqrt(-d)/2輸出x1,x2結(jié)束TF第第6 6講講 循環(huán)控制循環(huán)控制d=b*b-4*a*c 輸入一段C語言程序(一個正文),按原來格式復(fù)制到輸出,復(fù)制過程中刪除輸入
44、程序中所有的注釋。此處注釋專指“/* */”的注釋。程序先要輸入,在C語言中,當(dāng)從鍵盤輸入時,先將輸入數(shù)據(jù)放入鍵盤緩沖區(qū)中,當(dāng)接受到回車符后,程序才開始從鍵盤緩沖區(qū)中讀數(shù)據(jù)。分析之前,首先,弄明白問題的意思。程序要求輸入一段程序(C語言),并將輸入的程序在屏幕上輸出。在輸出時將程序中的注釋(/* */)過濾,既不輸出注釋。第第6 6講講 循環(huán)控制循環(huán)控制輸出時要將注釋過濾掉,首先要判別什么內(nèi)容是注釋內(nèi)容。例: while(ab) /*while a b */ printf(“*/”);字符的類型,僅從字符本身是無法區(qū)分的。如上面的串中,字符的類型,僅從字符本身是無法區(qū)分的。如上面的串中,字符串
45、字符串while可能是普通字符串,也可能是注釋字符串。同樣,可能是普通字符串,也可能是注釋字符串。同樣,對對“*/”字符,與字符,與/*配對是注釋字符,否則就是普通字符。因配對是注釋字符,否則就是普通字符。因此,需要一個類型標(biāo)志此,需要一個類型標(biāo)志 state 。因此,字符的類型標(biāo)志可取為: 普通字符普通字符(COPY)、注釋開始注釋開始(START)、注釋字符注釋字符(COMMENT)、注釋結(jié)束注釋結(jié)束(END)。因此,在C程序中,從注釋的角度來看,字符共有四種,普普通字符通字符、注釋開始字符、注釋結(jié)束字符注釋開始字符、注釋結(jié)束字符及注釋字符注釋字符。while(ab) printf(“*/
46、”); 為普通字符,while ab 為注釋字符,/* */ 為注釋標(biāo)志字符。第第6 6講講 循環(huán)控制循環(huán)控制參照下例開始程序設(shè)計。開始時,state 置普通字符狀態(tài)。在普通字符狀態(tài),如果輸入字符不是/,則將字符原樣輸出,如果輸入字符為/,在開始注釋狀態(tài),如果輸入字符為在開始注釋狀態(tài),如果輸入字符為*,while(ab) /*while a b */ printf(“*/”); 則可能開始注釋,將state 設(shè)為注釋狀態(tài),字符 / 不輸出;第第6 6講講 循環(huán)控制循環(huán)控制參照下例開始程序設(shè)計。開始時,state 置普通字符狀態(tài)。在普通字符狀態(tài),如果輸入字符不是/,則將字符原樣輸出,如果輸入字符為/,在開始注釋狀態(tài),如果輸入字符為在開始注釋狀態(tài),如果輸入字符為*,表明注釋開始,表明注釋開始,state置為注釋狀態(tài);如果輸入字符不是置為注釋狀態(tài);如果輸入字符不是*,while(ab) /*while a b */ printf(“*/”); 則可能開始注釋,將state 設(shè)為注釋狀態(tài),字符 / 不輸
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 五年級數(shù)學(xué)(小數(shù)除法)計算題專項練習(xí)及答案
- 三年級數(shù)學(xué)(上)計算題專項練習(xí)附答案
- 二年級數(shù)學(xué)(上)計算題專項練習(xí)
- 廣東省陸豐市東海新龍中學(xué)2024-2025學(xué)年高一3月月考語文試題(原卷版+解析版)
- 2025年深度剖析企業(yè)間無效租賃合同
- 生物化學(xué)分析技術(shù)方法測試卷及答案
- 2025合同范本薪資管理協(xié)議
- 2025年健身教練職業(yè)技能考核試卷:健身教練職業(yè)成長與晉升試題
- 物流運輸貨物合同
- 2025中考語文??甲魑难侯}(10大主題+10篇范文)
- 三年級下冊語文七彩課堂
- 第7課 全球聯(lián)系的初步建立與世界格局的演變 高中歷史統(tǒng)編版(2019)必修中外歷史綱要下冊
- 《工程勘察設(shè)計收費標(biāo)準(zhǔn)》(2002年修訂本)
- 在建項目汛前安全生產(chǎn)檢查表
- 中國風(fēng)傳統(tǒng)文化家風(fēng)家訓(xùn)主題PPT模板
- 華為終端合作手機硬件測試標(biāo)準(zhǔn)-V10.4發(fā)布版本
- 外科手術(shù)基本器械及其使用
- 植被砼護(hù)坡綠化施工組織設(shè)計
- GPON組網(wǎng)與華為MA5800-X15OLT配置
- 小學(xué)四年級綜合實踐活動課件.ppt
- 通用請假條Excel表格模板
評論
0/150
提交評論