第三章順序結構程序設計(人民郵電 管銀枝主篇)_第1頁
第三章順序結構程序設計(人民郵電 管銀枝主篇)_第2頁
第三章順序結構程序設計(人民郵電 管銀枝主篇)_第3頁
第三章順序結構程序設計(人民郵電 管銀枝主篇)_第4頁
第三章順序結構程序設計(人民郵電 管銀枝主篇)_第5頁
已閱讀5頁,還剩93頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、第三章 順序結構程序設計2022-3-103 3.1 .1 程序設計方法程序設計方法 3.3 3.3 字符的輸入與輸出字符的輸入與輸出3.5 3.5 圖形模式下的輸入與輸出圖形模式下的輸入與輸出本章內(nèi)容本章內(nèi)容3.2 3.2 數(shù)據(jù)的輸入與輸出數(shù)據(jù)的輸入與輸出3.4 3.4 字符串處理字符串處理3.6 3.6 順序結構程序設計順序結構程序設計3.7 3.7 本章小結本章小結 一個程序有很多條語句組成,要完成一個程序有很多條語句組成,要完成不同的功能,程序可以通過順序結構、選不同的功能,程序可以通過順序結構、選擇結構、循環(huán)結構三種程序結構來實現(xiàn)。擇結構、循環(huán)結構三種程序結構來實現(xiàn)。本章介紹最簡單的

2、順序結構程序設計方法。本章介紹最簡單的順序結構程序設計方法。3.1 程序設計方法程序設計方法 判定判定20002500年之間的每一年是否為年之間的每一年是否為閏年,并輸出該年是否為閏年的信息。面閏年,并輸出該年是否為閏年的信息。面對該任務我們應該如何才能編寫出程序?對該任務我們應該如何才能編寫出程序? 顯然我們無法直接寫出程序,而是應該首先顯然我們無法直接寫出程序,而是應該首先分析解決該問題的方法與步驟,這也稱為算法,分析解決該問題的方法與步驟,這也稱為算法,然后才能將算法用程序進行實現(xiàn)。然后才能將算法用程序進行實現(xiàn)。 對于這個問題,解決的思路是對對于這個問題,解決的思路是對20002500年

3、之間的每一個年份進行條件判斷,判斷閏年的年之間的每一個年份進行條件判斷,判斷閏年的條件為:條件為: (1)年份能被)年份能被4整除,但不能被整除,但不能被100整除整除 (2)年份能被)年份能被100整除,同時也能被整除,同時也能被400整除整除設設year為被檢測的年份,具體算法如下:為被檢測的年份,具體算法如下:第一步:第一步:2000 year第二步:若第二步:若year不能被不能被4整除,則輸出整除,則輸出“year不是閏年不是閏年”,然后轉到第六步;然后轉到第六步;第三步:若第三步:若year能被能被4整除但不能被整除但不能被100整除,則輸出整除,則輸出“year是閏年是閏年”,然

4、后轉到第六步;,然后轉到第六步;第四步:若第四步:若year能被能被100整除又能被整除又能被400整除,則輸出整除,則輸出“year是閏年是閏年”,否則輸出,否則輸出“year不是閏年不是閏年”,然后轉到,然后轉到第六步;第六步;第五步:輸出第五步:輸出“year不是閏年不是閏年”第六步:第六步:year+1 year第七步:當?shù)谄卟剑寒攜ear2500時,返回第二步繼續(xù)執(zhí)行,否則結束時,返回第二步繼續(xù)執(zhí)行,否則結束。3.1.1 程序設計的步驟程序設計的步驟程序設計的一般步驟:程序設計的一般步驟:(1)設計數(shù)據(jù)結構:數(shù)據(jù)結構是指對數(shù)據(jù)的描述,也就是指)設計數(shù)據(jù)結構:數(shù)據(jù)結構是指對數(shù)據(jù)的描述,

5、也就是指在程序中要指定數(shù)據(jù)的類型和數(shù)據(jù)的組織形式。通過分析在程序中要指定數(shù)據(jù)的類型和數(shù)據(jù)的組織形式。通過分析要解決的任務,確定輸入數(shù)據(jù)和輸出數(shù)據(jù),進而可確定數(shù)要解決的任務,確定輸入數(shù)據(jù)和輸出數(shù)據(jù),進而可確定數(shù)據(jù)結構;據(jù)結構;(2)設計算法:算法是指計算機解決問題所依據(jù)的操作方法)設計算法:算法是指計算機解決問題所依據(jù)的操作方法和步驟,這些操作包括加、減、乘、除等運算,并按順序、和步驟,這些操作包括加、減、乘、除等運算,并按順序、選擇、循環(huán)三種基本結構組成。根據(jù)確定的數(shù)據(jù)結構,確選擇、循環(huán)三種基本結構組成。根據(jù)確定的數(shù)據(jù)結構,確定解決問題的方法,即完成任務的步驟,也就確定了算法。定解決問題的方法

6、,即完成任務的步驟,也就確定了算法。(3)編寫程序:根據(jù)確定的數(shù)據(jù)結構和算法,使用選定的計)編寫程序:根據(jù)確定的數(shù)據(jù)結構和算法,使用選定的計算機語言編寫程序代碼;算機語言編寫程序代碼;(4)調(diào)試程序:將編寫好的程序代碼輸入到計算機中,對程)調(diào)試程序:將編寫好的程序代碼輸入到計算機中,對程序進行測試并修正,直到程序符合任務要求為止。序進行測試并修正,直到程序符合任務要求為止。3.1.2算法的表示算法的表示1、用自然語言表示算法、用自然語言表示算法 自然語言即是人們?nèi)粘J褂玫恼Z言,它可以是漢語、英語或其它國語言?!纠纠?-1】寫出求12345的值的步驟原始解題步驟:原始解題步驟:步驟1:先求12

7、,得到12的結果:2步驟2:將步驟1的結果乘以3,得到123的結果:6步驟3:將步驟2的結果乘以4,得到1234的結果:24步驟4:將步驟3的結果乘以5,得到12345的結果:120用計算機算法表示:用計算機算法表示:第一步:使k=1第二步:使w=2第三步:k=kw,結果仍放在k中第四步:使w的值加1(w+1w),第五步:如果w的值不大于5,再返回執(zhí)行步驟3、步驟4;否則結束最后得到12345的結果:120【例【例3-2】輸入三個數(shù),然后輸出其中最大的數(shù)。分析:分析: 該算法中,要設四個變量分別用于存放這三個數(shù)及三個數(shù)中的最大的數(shù)。比較是兩兩進行的。設輸入的三個數(shù)分別為A、B、C,最大的數(shù)放在

8、MAX中,算法可表示如下:第一步:輸入A、B、C的值第二步:將A、B進行比較,把大的數(shù)放入MAX中第三步:將C與MAX比較,把大的數(shù)放入MAX中第四步:輸出MAX,算法結束2、用傳統(tǒng)流程圖表示算法、用傳統(tǒng)流程圖表示算法 流程圖流程圖是指用規(guī)定的圖形符號、指定線和文字說明表示各種操作的圖形,用圖形表示算法,直觀形象,能比較清楚地顯示各種操作,因此被廣泛使用。傳統(tǒng)流程圖的特點傳統(tǒng)流程圖的特點: 傳統(tǒng)流程圖是一種很好的表示算法的工具,它采用流程線指出執(zhí)行順序,用它表示的算法比較直觀。但由于流程圖中有流程線的存在,使得算法的執(zhí)行可以在框內(nèi)任意跳轉,大大降低了流程圖的可讀性和可理解性。傳統(tǒng)流程圖常用的符

9、號為四框一線和連接符具體如下表所示:【例【例3-3】編寫程序,將輸入的兩個數(shù)存儲起來,要求交換后實現(xiàn)輸出。 程序清單為:main() int x1,x2,Temp; printf(input x1,x2n); scanf(%d%d,&x1,&x2 ); /*鍵盤輸入兩個數(shù)分別賦予x1,x2變量*/ Temp=x1 ; x1=x2; x2=Temp; printf(after:nx1=%d,x2=%dn,x1,x2); 3、用、用NS流程圖表示算法流程圖表示算法NS圖圖是一種新的流程圖形式,在這種流程圖中,完全去掉了帶箭頭的流程線,所有的算法寫在一個矩形框內(nèi),在該矩形框內(nèi)還可以包

10、含其它從屬于它的框。 NS圖很適用于表示結構化程序的算法。NS圖表示算法的優(yōu)點:(1)比文字描述更加直觀、形象,易于理解;(2)比傳統(tǒng)流程圖緊湊易畫;(3)廢除流程線,整個算法結構是由各個基本結構按順序組成的。 NS圖的上下順序就是執(zhí)行時的順序?!纠纠?-4】編寫程序,鍵盤輸入兩個數(shù)存儲起來,要求交換后實現(xiàn)輸出。程序清單為:main() int x1,x2,Temp; printf(input x1,x2n); scanf(%d%d,&x1,&x2 ); /*鍵盤輸入兩個數(shù)分別賦予x1,x2變量*/ Temp=x1 ; x1=x2; x2=Temp; printf(after

11、:x1=%dx2=%dn,x1,x2); 4、用偽代碼表示算法、用偽代碼表示算法 偽代碼是指用漢字、英文或中英文混用來表示算法的一種方式。使用偽代碼表示算法時,關鍵字必須用小寫字母表示,每條指令占一行,指令后不跟任何符號(C語言中的語句是以“;”為結束的,這里不用) 3.1.3三種基本程序結構三種基本程序結構1、順序結構、順序結構 順序結構是指按書寫順序依次執(zhí)行的算法結構,它是構成算法的最基本的結構。順序結構的算法表示如下: 用傳統(tǒng)流程圖表示如下:用傳統(tǒng)流程圖表示如下: 用用NS圖表示如下:圖表示如下:AB操作操作A操作操作B選擇結構選擇結構是指根據(jù)條件是否成立來執(zhí)行不同語句的結構。選擇結構分

12、二分支結構和多分支結構兩種。(1)二分支選擇結構 二分支選擇結構是指根據(jù)給定的條件是否成立而決定選擇執(zhí)行A框還是B框。這里的條件一般是一個關系表達式或邏輯表達式。 無論條件是否成立,都只能執(zhí)行A框中的內(nèi)容或B框中的內(nèi)容之一,不可能既執(zhí)行A框中的內(nèi)容又執(zhí)行B框中的內(nèi)容。 A框或B框中的內(nèi)容可以有一個是空的,即條件不成立(或條件成立時)不執(zhí)行任何操作。二分支選擇結構的流程圖的表示:PAB真假PBA真假2、選擇(分支)結構、選擇(分支)結構(2)多分支選擇結構)多分支選擇結構 圖4-7else if語句流程圖表達式1下一語句語句1表達式2表達式3表達式m語句2語句3語句m語句n真真真假假假假真假3、

13、循環(huán)結構、循環(huán)結構 循環(huán)結構又稱為重復結構,即反復執(zhí)行某一部分的操作。反復執(zhí)行的部分稱為循環(huán)體。循環(huán)結構是程序中的一種重要結構,也是三種基本結構中較復雜的一種結構。C語言中提供了多種用于實現(xiàn)循環(huán)結構的語句,可以組成各種不同形式的循環(huán)結構。 循環(huán)結構的兩類主要形式:當型循環(huán)與直到型循環(huán)。功能:功能: 先判斷條件是否成立,若條件成立則執(zhí)行循環(huán)體,然后重新去判斷條件是否成立,若條件成立則繼續(xù)執(zhí)行循環(huán)體,如此反復直到條件不成立為止。當型循環(huán)結構的傳統(tǒng)流程圖和NS圖表示如下:(1)當型循環(huán)()當型循環(huán)(while型)結構:型)結構:條件PA假真當條件P為真A功能:功能: 先執(zhí)行循環(huán)體,再去判斷條件是否成

14、立,若不成立再去執(zhí)行循環(huán)體,直到條件成立為止。 (或先執(zhí)行循環(huán)體,再去判斷條件是否成立,若成立再去執(zhí)行循環(huán)體,直到條件不成立為止。)直到型循環(huán)結構的傳統(tǒng)流程圖和NS圖如下:(2)直到型結構:)直到型結構:A條件P真假A直到條件P為真循環(huán)結構一般包含以下四個部分:初始化部分:為循環(huán)變量及各種有關變量賦初值;循環(huán)體:重復執(zhí)行的部分;修改部分:修改循環(huán)變量的值,為下一次重復執(zhí)行做準備;判斷檢查部分:判斷檢查循環(huán)變量的值,是否已超過循環(huán)變量的終值,若未超過則繼續(xù)重復執(zhí)行循環(huán)體,否則結束。 4、三種基本結構的共同點、三種基本結構的共同點(1)只有一個入口,不得從結構外隨意轉入結構中某點;(2)只有一個出

15、口,不得從結構內(nèi)某個位置隨意轉出(跳出);(3)結構中的每一個部分都有機會被執(zhí)行到(沒有“死語句”;(4)結構內(nèi)不存在“死循環(huán)”(無休止的循環(huán));(5)三種基本結構中的塊A或塊B可以是一個簡單的操作語句或復合語句,也可以是3個基本結構之一,即三種基本結構可以嵌套。3.2 數(shù)據(jù)的輸入和輸出數(shù)據(jù)的輸入和輸出任務提出:求一元二次方程 的根。任務分析: 本任務要求首先從鍵盤輸入一元二次方程的三個系數(shù)a,b,c的值。為方便,假設輸入的a,b,c作為一元二次方程的三個系數(shù)能滿足一元二次方程有二個實根的條件,即 這樣一來就不用去判別該一元二次方程是否有實根了。22 2 2#include #include

16、main() float a,b,c,disc,x1,x2,p,q; scanf(a=%f,b=%f,c=%f,&a,&b,&c); disc=b*b-4*a*c; p=-b/(2*a); q=sqrt(disc)/(2*a); x1=p+q; x2=p-q; printf(nx1=%5.2fnx2=%5.2fn,x1,x2);所謂輸入就是從計算機外部向輸入設備(如鍵盤、磁盤、光盤、掃描儀等)輸入數(shù)據(jù);而輸出就是從計算機向外部輸出設備(如顯示屏、打印機、磁盤等)輸出數(shù)據(jù)。在前面已對C程序作了簡單的介紹,C語言本身并不提供輸入輸出語句,輸入輸出是由系統(tǒng)編寫好的庫函數(shù)來完成

17、的,如 printf函數(shù)和scanf函數(shù)等。這里的printf和scanf不是C語言中的關鍵字,而只是函數(shù)名。它們本身不是C語言的組成部分。C語言庫中有一批標準輸入輸出庫函數(shù),詳見附錄。 C提供的庫函數(shù)以庫的形式存放在擴展名為“.h”的磁盤文件中,這種磁盤文件稱為 “頭文件”。在使用C語言庫函數(shù)時,在Turboc下要用預編譯命令“#include”將有關的“頭文件”包含到用戶的源程序中。如使用標準輸入輸出函數(shù)時,要包含“stdio.h”文件;使用數(shù)學函數(shù)時,要包含“math.h”文件;使用字符函數(shù)時要包含“string.h”文件等。 考慮到printf函數(shù)和scanf函數(shù)使用頻繁,系統(tǒng)允許在使

18、用這兩個函數(shù)時可不加“# include”命令。說明: 不同的運行環(huán)境會有些差別,如在Win_Tc下使用字符串的輸入函數(shù)(gets)、輸出函數(shù)(puts)則可省略“# include”命令。有關包含的預編譯命令的知識將在第七章作介紹。3.2.1 printf( )(格式輸出函數(shù))1printf()函數(shù)的功能:2printf()函數(shù)的調(diào)用格式printf()函數(shù)的調(diào)用格式:printf(格式控制字符串,輸出表列);例如:printf(%d,%dn,a,b);(1)printf()函數(shù)的調(diào)用格式中函數(shù)的調(diào)用格式中“格式控制字符串格式控制字符串”的說明的說明printf()函數(shù)中“格式控制字符串”是

19、由雙引號括起來的字符串,用于指定輸出格式。它可由以下3部分組成。 格式說明。格式說明。格式說明由“%”字符開始,在“%”后面跟有各種格式字符,以說明輸出數(shù)據(jù)的格式。其功能是將輸出的數(shù)據(jù)按指定的類型、形式、長度、小數(shù)位等格式輸出。格式字符分為整型、實型、字符型等。如 “%d”表示按十進制整型輸出,“%f”表示按實型數(shù)據(jù)輸出6位小數(shù),“%c”表示按字符型輸出等。C語言中提供的格式字符如下表所示:格式字符和附加說明字符l、m、n的具體用法見課本表3-3所示:另外,格式說明中,在%和格式字符間可以插入附加說明字符。printf的附加說明字符有l(wèi)、m、n。其中字母“l(fā)”用于長整型,可加在格式符d、o、x

20、、u的前面;字母“m”用來說明數(shù)據(jù)輸出時的寬度;字母“n”對實數(shù)表示輸出n位小數(shù),對字符串則表示截取的字符個數(shù);字符“-”用來說明輸出的數(shù)字或字母是靠左還是靠右對齊。例如:%4d:表示輸出列寬為4的整型數(shù),不夠4位右對齊。 %-10d:表示輸出列寬為10的整型數(shù),不夠10位左對齊。%7.2f:表示輸出列寬為7的浮點數(shù),其中小數(shù)位為2,整數(shù)為4,小數(shù)點占一位,不夠7位右對齊。%8.5s:表示列寬為8,顯示5個字符的字符串。字符串不夠8位右對齊。%ld: 表示輸出長整型(long)整數(shù)。說明:如果字符串的長度或整型數(shù)位數(shù)超過說明的列寬,則按其實際長度輸出。但對浮點數(shù),若整數(shù)部分超過了說明的整數(shù)位寬

21、度,將按實際整數(shù)位輸出;若小數(shù)部分位數(shù)超過了說明的小數(shù)位寬度,則按說明的列寬以四舍五入輸出。如: a=12,b=123,c=1234,d=12345則執(zhí)行語句:printf(a=%4d,b=%-4d,c=%4d,d=%4dn,a,b,c,d); 結果為:a= 12,b=123 ,c=1234,d=12345如: char c=a;printf(%cn,c); 輸出結果為字符“a”。又如,語句:printf(%s,%3s,%7.2s,%-5.3sn,china,china,china,china);則輸出結果為:china,china, ch,chi 。 除了x、e、g這3個格式字符既可用小寫也

22、可用大寫字母外,其他格式符必須用小寫字母表示,如“%d”不能寫成“%D”等。 格式符d可用i代替,d和i在作為格式字符使用時,兩者作用一致。 上面介紹的d、o、x、u、c、f、e、g等字符,如用在“%”后面則作為格式字符,如不在“%”后面則僅僅是一個普通字符而已。如有語句:printf(“t=%fs,y=%fg”,t,y);(t=10,y=100)則第1個格式字符為“%f ”,不包含其后的“s”;第2個格式字符為“%f”,同樣也不包含其后的“g”。其他字符如前所屬,應原樣輸出。若想輸出字符“%”,則應在“格式控制字符串”中用兩個連續(xù)的%表示。例如:printf(%f%n,1.0/3.0);此時

23、輸出結果為:0.333333%。在使用在使用printf()函數(shù)時,還應注意以下幾點函數(shù)時,還應注意以下幾點:例:格式輸出函數(shù)的應用。main() int a=65,b=97,c; char c1=A,c2=a; printf(%d,%d,%d,a,b,a+b) printf(a=%d,b=%d,c=%d,a,b,a+b); printf(c1=%c,c2=%c,c1,c2); printf(%d,%d,c1,c2); printf(%c,%c,a,b);例:格式輸出函數(shù)應用。main() int n1=45; long int n2=45; float f1=123.456; char c1

24、=a;printf(n1=%d,n1=%o,n1=%x,n1=%un,n1,n1,n1,n1); printf(f1=%f,f1=%9.2f,f1=%-9.2fn,f1,f1,f1); printf(c1=%c,c1=%3c,c1=%-3c,c1=%dn,c1,c1,c1,c1);3.2.2 scanf()(格式輸入函數(shù))1scanf()函數(shù)的功能scanf( )函數(shù)的功能從鍵盤按照“格式控制字符串”中規(guī)定的格式輸入若干個數(shù)據(jù),按“變量地址表列”中變量的順序,依次存入對應的變量中。在格式控制字符串中若有普通的字符,則輸入時原樣輸入。例如:scanf(%d,%c,%f,&n,&p

25、,&x);4使用scanf()函數(shù)的說明在使用scanf()函數(shù)時,還應注意以下幾點。 若scanf函數(shù)中的“格式控制字符串”中除了格式字符外還有其他字符,則在輸入數(shù)據(jù)時應輸入與這些字符相同的字符。例如:如:scanf(%d,%d,&a,&b);輸入時應按如下形式輸入:3,4如若為:scanf(%d %d,&a,&b);輸入時應按如下形式輸入:3 4如為:scanf(a=%d,b=%d,&a,&b);則輸入時應按如下形式輸入:a=3,b=4如為:scanf(%d:%d,&a,&b);則輸入時應按如下形式輸入:3:4請注意以

26、上的scanf語句的不同用法在輸入數(shù)據(jù)時的區(qū)別。例:格式輸入函數(shù)的使用一。要求給變量a、b、c分別賦值2、3、4,給變量x、y、x分別賦值5、6、7。main() int a,b,c,x,y,z; scanf(%d,%d,%d,&a,&b,&c); scanf(x=%d,y=%d,z=%d,&x,&y,&z); printf(%d,%d,%dn,a,b,c); printf(x=%d,y=%d,z=%dn,x,y,z);(2)可以指定輸入數(shù)據(jù)所占的列數(shù),系統(tǒng)自動按它截取所需數(shù)據(jù)。如:scanf(%3d,%2d,&a,&b);若輸入

27、:12345則系統(tǒng)自動將123賦給變量a,45 賦給變量b。(3)對實型數(shù)據(jù),輸入時不能規(guī)定其精度。如: scanf(%6.3f,&x);是不合法的。(4)輸入數(shù)據(jù)時,遇以下情況視該數(shù)據(jù)輸入結束。 遇空格、回車或“Tab”鍵; 按指定的寬度結束,如前面所舉的“%3d”,只取3列; 遇到非法輸入,比如在輸入數(shù)值型數(shù)據(jù)時遇到字母即為非法輸入。(5)在輸入字符數(shù)據(jù)時,若格式控制字符串中無非格式字符,則認為所有輸入的字符均為有效字符(包括空格字符等)。如:scanf(%c%c%c,&a,&b,&c);輸入為:def回車,則把d賦給a,把e賦給b,把f賦給c。若輸入為:d

28、ef回車(d后有一空格),則把d賦給a,把空格賦給b,把e賦給c。如果在格式控制字符串中加入空格作為間隔,則輸入時各數(shù)據(jù)之間可加空格。如:scanf(%c %c %c,&a,&b,&c);(在前兩個%C后各有一個空格)。輸入為:d e f回車(d、e后各有一空格),則把d賦給a,把e賦給b,把f賦給c。若只輸defbc,結果是將前面3個分別輸給a,b,c例:格式輸入函數(shù)的使用二main( ) char c1,c2; int n1,n2; float f1,f2; scanf(%c%c,&c1,&c2); scanf(%d,%d,&n1,&

29、n2); scanf(%f,%f,&f1,&f2); printf(c1=%c,c2=%cn,c1,c2); printf(n1=%d,n2=%dn,n1,n2); printf(f1=%7.2f,f2=%7.2fn,f1,f2); 字符的輸入和輸出任務提出:從鍵盤輸入大寫字母,然后輸出對應的小寫字母。任務分析:本題要求從鍵盤輸入一個字符,然后將此字符轉換成小寫字母后輸出。在前面已講過可用格式輸入函數(shù)scanf()來實現(xiàn)輸入,用格式輸出函數(shù)printf()來實現(xiàn)輸出。這里用另一種方法實現(xiàn)。3 3. .3 3 #include stdio.hmain() char c1,c2;

30、c1=getchar( ); printf(%c,%dn,c1,c1); c2=c1+32; printf(%c,%dn,c2,c2); 前面介紹的格式輸入輸出函數(shù),可以用來輸入和輸出各種基本類型的數(shù)據(jù),如整型、短整型、長整型、無符號數(shù)、單精度數(shù)、雙精度數(shù)、字符串等。但有時只需用來輸入輸出單個字符,為此,C語言提供了專門用于單個字符的輸入輸出函數(shù):字符輸入函數(shù)getchar()和字符輸出函數(shù)putchar(),這是最簡單也是最容易理解的函數(shù)。 相關知識3.3.1 putchar()函數(shù)(字符輸出函數(shù))putchar()函數(shù)的功能是向終端輸出一個字符或字符變量的值。函數(shù)調(diào)用格式為:putchar

31、(C);其中參數(shù)C可以為字型變量、整型變量、字符常量或整型表達式。當C為字符變量或常量時,它輸出參數(shù)C的值;當C為整型變量或整型表達式時,它輸出ASCII值為參數(shù)C的字符。例如:char x=A;putchar(A); /* 輸出大寫字母A */putchar(x); /* 輸出字符變量x的值 */在Turbo C中使用本函數(shù)要用文件包含命令: #include 。例:輸出單個字符#include main() char a,b,c; a=A; b=B; c=C; putchar(a); putchar(b); putchar(c);#include 程序運行結果為程序運行結果為: :ABBC

32、ABBCX Xmain( ) int a=65; char b=B; p u t c h a r ( a ) ; putchar(65+1); putchar(b); putchar(B+1); putchar(n); putchar(X);包含函數(shù)包含函數(shù)putcharputchar的頭文件的頭文件等價于等價于printf(“%c”,a);3.3.2 getchar()函數(shù)(字符輸入函數(shù))函數(shù)(字符輸入函數(shù))函數(shù)調(diào)用格式函 數(shù) 功 能getch();將鍵盤讀取的字符放入緩沖區(qū),鍵盤輸入的字符不顯示在屏幕上getchar();將鍵盤讀取的字符放入緩沖區(qū),鍵盤輸入的字符會顯示在屏幕上函數(shù)的返回值

33、就是從輸入設備得到的一個字符。接收該函數(shù)值時,可以用字符變量或整型變量。通常把輸入的字符賦給一個字符變量,構成賦值語句。1使用getch()函數(shù)輸入字符后,輸入的字符不會顯示在屏幕上。2用字符輸入函數(shù)接收字符時,并不是從鍵盤輸入一個字符后立即響應,而是將輸入的內(nèi)容先讀入緩沖區(qū),待輸入結束后再一并執(zhí)行。 函數(shù)函數(shù)getchar將回車鍵作為一個字符讀入。將回車鍵作為一個字符讀入。如果程序中有兩個以上函數(shù)如果程序中有兩個以上函數(shù)getchar時,應時,應該一次性輸入所需字符,最后再按回車鍵,該一次性輸入所需字符,最后再按回車鍵,如上例所示。如上例所示。特別提示例:輸入單個字符 #include ma

34、in( ) char c; c=getchar( ); putchar(c); putchar(getchar( );#include /*說明函數(shù)說明函數(shù)getchar的原型包含在那個文件中的原型包含在那個文件中*/void main() char a, b; a=getchar(); b=getchar(); printf(a=%cta=%dtb=%ctb=%dn,a,a,b,b); 從鍵盤輸入字符從鍵盤輸入字符, , 該字符該字符的的ASCIIASCII編碼值賦給編碼值賦給a a程序運行情況如下:程序運行情況如下:13 a=1a=49b=3b=51 例:字符輸入輸出函數(shù)的使用main()

35、 char c1,c2; c3=X; c1=getchar( ); c2=getchar( ); putchar(c1); putchar(c2); putchar(c3); 字符串處理 C語言提供了豐富的字符串處理函數(shù),大致可分為字符串的輸入、輸出、連接、復制、比較等,它們均包含在頭文件“string.h”中。有關字符串的比較將在第4章中介紹,下面主要介紹其他幾個常用的字符串處理函數(shù)。3 3. .4 4 3.4.1 字符串輸出函數(shù)字符串輸出函數(shù)puts()的格式為:puts(字符數(shù)組);功能:向顯示器輸出字符串(輸出完畢,自行換行)。說明:字符數(shù)組必須以0結束。例如,若有程序段:puts(A

36、BCDE);puts(abcde);則運行后的輸出結果為:ABCDEabcde3.4.2 字符串輸入函數(shù)字符串輸入函數(shù)gets()的格式: gets(str);其中的參數(shù)str是地址運算符,一般是數(shù)組名或后面要講到的指針變量。功能:從鍵盤輸入一字符串放入字符數(shù)組中,以回車結束。并自動加0。用語句用語句“scanf(%s,s);”為字符數(shù)組為字符數(shù)組s輸入數(shù)據(jù)時,輸入數(shù)據(jù)時,遇遇空格鍵或回車鍵時結束輸入空格鍵或回車鍵時結束輸入。但所讀入的字符串中不包含。但所讀入的字符串中不包含空格鍵或回車鍵,空格鍵或回車鍵,何時自動添加何時自動添加0 1)以字符串初始化時以字符串初始化時 如:如:static

37、char c =”I am happy”; 或:或:static char c =”I am happy”; 2) 以以%s輸入字符串時輸入字符串時 scanf(“%s”,c); 3)用用gets接收字符串時接收字符串時例:從鍵盤輸入“中國歡迎您!”字樣,并在屏幕上顯示出來。#include #include main( ) char str20; printf(請輸入:); gets(str); puts(str);v 調(diào)用格式: strcpy(字符數(shù)組名1,字符串2); v 功能:將字符串2復制到字符數(shù)組1中,返回被復制的字符串。v 字符串2可以是字符數(shù)組名、字符串常量或字符指針變量。字符

38、數(shù)組1可以是字符數(shù)組名或字符指針變量。1 1) 字符串拷貝函數(shù)字符串拷貝函數(shù)( (賦值賦值) )說明:說明: 字符數(shù)組字符數(shù)組1長度應長度應字符串或字符數(shù)組字符串或字符數(shù)組2的長度;的長度; 字符數(shù)組字符數(shù)組1應寫成數(shù)組名的形式應寫成數(shù)組名的形式 3.4.3 字符串連接函數(shù) 例如char a10=abcdefghi,b=happy; strcpy(a,b); v 函數(shù)應用舉例:函數(shù)應用舉例:a數(shù)組內(nèi)存原始數(shù)組內(nèi)存原始情況情況:a b c d e f g h i 0函數(shù)調(diào)用后函數(shù)調(diào)用后a、b數(shù)組內(nèi)存情況數(shù)組內(nèi)存情況:h a p p y 0 h a p p y 0 g h i 0后面的用后面的用p

39、uts或或printf的的%s都將不輸出都將不輸出【例例2 2】分析下面程序的運行結果。分析下面程序的運行結果。 #include string.h#include stdio.hmain()static char c110=abcdefghi,c2=china;strcpy(c1,c2);clrscr();puts(c1);printf(%c,c17);chinah strncpy函數(shù)函數(shù)調(diào)用格式為: 功能:將字符串2的前n個字符拷貝到字符數(shù)組1中,并在末尾加0。例如: char s120,s2=Hello World!; strncpy(s1,s2,3); printf(%s,s1); 輸

40、出結果是: Hel 返回到本章目錄strncpy(字符數(shù)組名字符數(shù)組名1,字符串字符串2,長度長度n);v調(diào)用格式: strcat(字符數(shù)組名1, 字符數(shù)組名2);2)字符串連接函數(shù))字符串連接函數(shù)v函數(shù)功能函數(shù)功能: 刪去字符串刪去字符串1 1的結束標志的結束標志00,將字符串或,將字符串或字符數(shù)組字符數(shù)組2 2連同末尾的結束標記一起連接到連同末尾的結束標記一起連接到字符數(shù)組字符數(shù)組1 1尾部,返回連接以后的字符串尾部,返回連接以后的字符串。 v應用舉例v static char a20=My name is ,b10=Li ming;v strcat(a,b); 執(zhí)行執(zhí)行 strcat(a

41、,b);后后a:M yn a m eisL im in g0例:字符串連接、字符串復制函數(shù)的應用。#include #include void main() char destination25; char blank = ,c =C+,turbo =Turbo; strcpy(destination,turbo); strcat(destination,blank); strcat(destination,c); printf(%sn,destination);輸出結果是:輸出結果是:Turbo C+3 3)計算字符串長度的函數(shù))計算字符串長度的函數(shù)v調(diào)用格式:調(diào)用格式: strlen(st

42、r); v函數(shù)功能:函數(shù)功能: 求出字符串或字符數(shù)組中實際字符個數(shù)(不求出字符串或字符數(shù)組中實際字符個數(shù)(不包括包括00)。)。 例例char str10=“china”printf(“%d”,strlen(str); 結果為:結果為:5 (1)char s10= A, 0, B, C, 0, D;(2)char s=tb0willn;(3)char s=x69082n; strlen(s)的值分別為:(1)1;(2)3;(3)?!纠? 3】寫出程序的運行結果。寫出程序的運行結果。 #include stdio.h#include string.hvoid main() static cha

43、r st20=hello0abce0abc0;printf(%dn,strlen(st);程序運行結果:程序運行結果: 5 4)字符串比較函數(shù)字符串比較函數(shù)v 調(diào)用格式:調(diào)用格式: strcmp(s1,s2); v 函數(shù)功能函數(shù)功能: 從左到右逐個比較兩個字符串從左到右逐個比較兩個字符串s1、s2中各個字符(用中各個字符(用字符的字符的ASCII碼比較),直到出現(xiàn)不同字符或遇到結碼比較),直到出現(xiàn)不同字符或遇到結束標記為止。束標記為止。例如: strcmp( d , abc ) 結果為正整數(shù)。 strcmp( dog , door ) 結果為負整數(shù)。v 函數(shù)返回值:函數(shù)返回值: 函數(shù)值函數(shù)值=

44、0 當串當串1=串串2負整數(shù)負整數(shù) 當串當串1串串2v 函數(shù)應用舉例函數(shù)應用舉例 5) 字符串小寫函數(shù)strlwr調(diào)用格式為:功能:將字符串中的大寫字母轉換成小寫字母,其余字符不變。例如: char s1=Hello World!; printf(%sn,strlwr(s1);輸出結果是: hello world!返回到本章目錄 strlwr(字符串字符串); 6) 字符串大寫函數(shù)strupr 調(diào)用格式為:功能:將字符串中的小寫字母轉換成大寫字母,其余字符不變。 例如: char s1=Hello World!; printf(%sn,strupr(s1);輸出結果是: HELLO WORLD

45、!返回到本章目錄 strupr(字符串字符串); 圖形模式下的輸入與輸出任務提出:任務提出:任務分析: 該問題希望在同一屏幕的不同位置分別畫出4種不同的圖形,如要畫一圓,那么首先要確定圓心的位置及半徑的大?。蝗缫嬕粰E圓,則要確定橢圓的中心位置、x軸和y軸半徑;如要畫一矩形,則要確定矩形的長和寬;若是實心矩形,則還要確定用什么顏色來填充。3.53.5 在同一屏幕上的不同位置畫出4種圖形,它們分別為圓,橢圓,空心矩形和實心矩形。完成以上功能的程序清單如下完成以上功能的程序清單如下:#include #include #include /*程序中用到圖形函數(shù)程序中用到圖形函數(shù)*/main( ) i

46、nt gdriver,gmode; gdriver=DETECT; /*用于自動檢測顯示器硬件用于自動檢測顯示器硬件*/ initgraph(&gdriver,&gmode, ); /*圖形初始化圖形初始化*/ setcolor(GREEN); /*設置圖形顏色為綠色設置圖形顏色為綠色*/ circle(70,70,50); /*畫一圓環(huán),圓環(huán)顏色為綠色畫一圓環(huán),圓環(huán)顏色為綠色*/ setcolor(4); /*重新設置下面圖形的顏色為紅色重新設置下面圖形的顏色為紅色*/ ellipse(350,70,0,360,100,50); /*以以(350,70)為橢圓中心為橢圓中心,

47、100和和50為為x、y軸半徑軸半徑,角度從角度從0開始到開始到360結束畫一個完結束畫一個完整的橢圓整的橢圓*/ setcolor(GREEN); /*設置圖形顏色為綠色設置圖形顏色為綠色*/ rectangle(20,300,120,400); /*以(以(20,300)為左上角,以)為左上角,以(120,400)為右下角畫一個矩形框為右下角畫一個矩形框*/ setcolor(4); /*重新設置下面圖形的顏色為紅色重新設置下面圖形的顏色為紅色*/ rectangle(300,300,400,400); /*以(以(300,300)為左上角,以)為左上角,以(400,400)為右下角為右下

48、角畫一個矩形框畫一個矩形框*/getch();相關知識: C語言系統(tǒng)提供了兩種顯示模式,一種是字符模式,另一種是圖形模式。平時我們使用的C語言編輯界面就是在字符模式下的。在字符模式下,C語言提供了豐富的字符操作函數(shù),利用這些庫函數(shù)可以很方便地設計程序。 本節(jié)介紹圖形模式下的輸入輸出操作,包括有關屏幕操作的函數(shù)、文本窗口的定義、文本窗口顏色的設置、窗口內(nèi)文本的輸入輸出函數(shù),以及圖形模式下屏幕顏色的設置、基本圖形函數(shù)的使用等。3.5.1 文本窗口的定義1、C語言默認的文本窗口為整個屏幕,共有80列(或40列)25行的文本單元,C語言允許使用window()函數(shù)定義屏幕上的一個矩形域作為窗口。窗口定

49、義之后,有關窗口的輸入輸出函數(shù)就可以只在此窗口內(nèi)操作而不超出窗口的邊界。 window()函數(shù)的調(diào)用格式為: window(int left,int top,int right,int bottom);2、該函數(shù)的頭文件為“conio.h”,函數(shù)中的形式參數(shù)(int left,int top)是窗口左上角的坐標,(int right,int bottom)是窗口右下角的坐標,其中(left,top)和(right,bottom)是相對于整個屏幕而言的。若在一個主函數(shù)中要調(diào)用window()函數(shù),則應在該函數(shù)的前面(或本文件的開頭)加上“文件包含”命令: #include 3、C語言規(guī)定整個屏幕

50、的左上角坐標為(1,1),右下角坐標為(80,25)。并規(guī)定沿水平方向為X軸,方向朝右;沿垂直方向為Y軸,方向朝下。若window()函數(shù)中的坐標超過了屏幕坐標的界限,則窗口的定義將不起作用,但程序編譯鏈接不會出錯。例如,要定義一個窗口左上角在屏幕(20,5)處,大小為5列、5行的窗口可寫成“window(20,5,25,10);”。3.5.2 文本窗口內(nèi)的輸入輸出函數(shù)1文本窗口的輸出:文本窗口的輸出:窗口內(nèi)文本的輸出函數(shù)有3個,分別為: cprintf(格式控制字符串,輸出表列);其中的“格式控制字符串”、“輸出表列”和前面第3.2節(jié)介紹的printf()函數(shù)中的含義一樣。該函數(shù)的功能為:輸

51、出一個字符串或數(shù)值到窗口中。它與printf() 函數(shù)的用法完全一樣,所不同的就是cprintf()函數(shù)的輸出受窗口的限制,而printf()函數(shù)的輸出窗口為整個屏幕。 cputs();該函數(shù)的功能為:輸出一個字符串到窗口上,它與后面第5章將介紹的puts()函數(shù)的用法也完全一樣,只是受窗口大小限制。 putch();該函數(shù)的功能為:輸出一個字符到窗口內(nèi)。用法和第3.3節(jié)介紹的putchar()一樣。使用以上3個函數(shù),當輸出超出窗口的右邊界時會自動轉到下一行的開始處繼續(xù)輸出。當窗口內(nèi)填滿而輸出內(nèi)容沒有結束時,窗口屏幕將會自動逐行上卷直到輸出結束為止。2文本窗口的輸入窗口內(nèi)文本的輸入函數(shù)只有一個

52、,其調(diào)用格式為: getch();功能:從終端(一般為鍵盤)輸入一個字符。 以上4個窗口內(nèi)的輸入輸出函數(shù)是用于文本窗口內(nèi)的輸入輸出,它們均包含在頭文件“stdio.h” 中,使用這些函數(shù)時要用文件包含命令 #include 。3.5.3 文本窗口顏色的設置 文本窗口顏色的設置包括背景色的設置和字符顏色的設置。1設置背景顏色的函數(shù)函數(shù)名:textbackground調(diào)用的一般格式:textbackground(int color);功能:根據(jù)參數(shù)color所對應的顏色值設置背景顏色。2設置字符顏色的函數(shù)函數(shù)名:textcolor調(diào)用的一般格式:textcolor(int color);功能:根據(jù)

53、參數(shù)color所對應的顏色值設置字符顏色。使用以上兩個函數(shù)應注意以下幾點。 這兩個函數(shù)的頭文件均為“conio.h”。若在一個主函數(shù)中要調(diào)用textbackground ()函數(shù)和textcolor()函數(shù),則應在該函數(shù)的前面(或本文件的開頭)加上文件包含命令: #include 這兩個函數(shù)均為有參函數(shù),參數(shù)為顏色值,調(diào)用時可以用顏色的符號常量也可以用該顏色所對應的數(shù)值。有關顏色的定義如課本表3-5所示。說明:(1)表中的符號常量與相應的數(shù)值等價,使用其中任一個作用一樣。例如,要設置一個藍色背景可以使用以下兩種方法:textbackground(1)或textbackground(BLUE)兩

54、者沒有一點區(qū)別。(2)用textbackground()和textcolor()函數(shù)設置了窗口的背景顏色和字符顏色后,在沒有用clrscr()函數(shù)(有關該函數(shù)的說明在3.5.4小節(jié)中介紹)清除窗口之前,顏色不會改變,直到使用了clrscr()函數(shù),整個窗口和隨后輸出到窗口中的文本字符才會變成新顏色。3同時設置文本的字符顏色和背景顏色的函數(shù)函數(shù)名:textattr調(diào)用的一般格式:texttattr(int attr);功能:根據(jù)參數(shù)attr所對應的值同時設置文本的字符顏色和背景顏色。 其中參數(shù)attr的值表示顏色形式編碼的信息。具體含義如下。編碼由八位(分別為76543210)組成。字節(jié)的低四位

55、(3210)設置字符顏色(取值范圍為015),字節(jié)的46位設置背景顏色(取值范圍為07),最高位(第7位)設置字符是否閃爍。說明:(1)要設置一個藍底紅字,定義方法為:textattr(RED+(BLUE4);(2)若是設置一個閃爍的藍底紅字,則定義應為:textattr(128+RED+(BLUE4);(3)用textattr()函數(shù)時背景顏色應左移4位,才能使3位背景顏色移到正確位置。有關位的左移運算符“”等到第11章再詳細介紹。(4)textattr()函數(shù)的頭文件也為“conio.h”。若在一個主函數(shù)中要調(diào)用textattr ()函數(shù),則也應在該函數(shù)的前面(或本文件的開頭)加上文件包含

56、命令: #include 以上3個函數(shù)都是用于文本窗口的顏色設置。3.5.4 有關屏幕定位的操作1用于清除屏幕內(nèi)容的函數(shù)有: clrscr();其功能是清除當前窗口中的文本內(nèi)容,把光標定位在窗口的左上角(1,1)處。 clreol();其功能是清除當前窗口中從光標處開始到行尾的所有字符,光標位置不變。這兩個函數(shù)都是無參函數(shù)。2用來作光標定位的函數(shù): gotoxy(x,y);其功能是用來定位當前光標的位置,其中的x、y是指光標要定位處的坐標(相對于窗口而言)。當x、y超出了窗口的大小時,該函數(shù)將不起作用。例:字符模式下窗口內(nèi)容的有關操作舉例(窗口定義、顏色設置、輸入輸出、屏幕定位)。#inclu

57、de #include main()int a=1,b=2;char ch1=A,ch2;window(20,5,60,20);/*定義一窗口,左上角為(20,5),右下角為(60,20)*/textbackground(3); /*設置屏幕背景顏色為青*/textcolor(YELLOW); /*設置字符顏色為黃*/clrscr(); /*清除屏幕*/cprintf(a=%d,b=%d,ch=%cn,a,b,ch1);gotoxy(25,5); /*光標定位*/ch2=getch();putch(ch2);getch();3.5.5 基本圖形函數(shù) 基本圖形函數(shù)包括畫點、畫線及其他一些基本圖形

58、函數(shù)。它們均包括在頭文件“graphics.h”中,使用圖形函數(shù)時,應該在該源文件中使用以下的文件包含命令行: #include 或#include graphics.h1putpixel(x,y,color)(畫點函數(shù))功能:用指定的像素畫一個按color所指定的顏色的點。其中的顏色“color”的值可取表3-4中的前16個值(即取值范圍為015),而x、y是指圖形象元的坐標。在圖形模式下是按象元來定義坐標的。關于點的另外一個函數(shù)為:getpixel(x,y)功能:獲得當前點(x,y)的顏色值。2有關坐標的函數(shù) getmaxx() 功能:返回x 軸的最大值。 getmaxy() 功能:返回y

59、 軸的最大值。 getx() 功能:返回游標在x 軸的位置。 gety() 功能:返回游標在y 軸的位置。以上4個函數(shù)都是無參函數(shù)。 movto(x,y) 功能:移動游標到(x,y)點,不是畫點,在移動過程中不畫點。 moverel(x,y) 功能:移動游標從現(xiàn)行位置(x,y)到(x+dx,y+dy)的位置,在移動過程中不畫點。3有關畫線的函數(shù) line(x1,y1,x2,y2);功能:畫一條從點(x1,y1)到(x2,y2)的直線。 lineto(x,y);功能:畫一條從現(xiàn)行游標到點(x,y)的直線。 linerel(dx,dy);功能:畫一條從現(xiàn)行游標(x,y)到按相對增量確定的點(x+d

60、x,y+dy)的直線。4有關畫圓的函數(shù) circle(x,y,radius);功能:以(x,y)為圓心,以radius為半徑,畫一個圓。 arc(x,y,stangle,endangle,radius);功能:以(x,y)為圓心,以radius為半徑,從stangle開始到endangle結束(用度表示)畫一段圓弧線。5畫橢圓函數(shù)ellipse(x,y,stangle,endangle,xradius,yradius);功能:以(x,y)為橢圓中心,以xradius和yradius為x軸和y軸半徑,從角stangle開始到endangle結束畫一段圓弧線,當stangle=0,endangle=360時畫一個完整的橢圓。6畫矩形函數(shù)rectangle(x1,y1,x2,y2);功能:以(x1,y1)為左上角,以(x2,y2)為右下角畫一個矩形框。7畫一個多邊形的函數(shù)drawpoly(numpoints,x1,y1,x2,y2,xn,yn);功能:畫一個n邊形,n邊形的頂點數(shù)為numpoints,各頂點的坐標為(

溫馨提示

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

評論

0/150

提交評論