簡介:本章要求,了解結(jié)構(gòu)化程序的算法描述掌握C語言中數(shù)據(jù)的輸入/輸出方法順序結(jié)構(gòu)程序設(shè)計(jì),本章重點(diǎn)C程序中數(shù)據(jù)的輸入/輸出方法,順序、選擇、循環(huán)分支,一、什么是算法,算法是解決一個問題采取的方法和步驟的描述。,,1.有窮性算法須在執(zhí)行有窮多個計(jì)算步驟后終止2.確定性算法的每個步驟必須都是精確定義的、無二義性的;3.有效性算法中的每一個步驟必須有效地執(zhí)行,并能得到確定結(jié)果;4.輸入一個算法中可以沒有輸入,也可以有一個或多個輸入信息5.輸出一個算法應(yīng)有一個或多個輸出,算法的特性,(一)自然語言與偽代碼表示算法自然語言就是指人們?nèi)粘J褂玫恼Z言,可以是漢語、英語或其它語言。偽代碼是用介于自然語言和計(jì)算機(jī)語言之間的文字和符號(包括數(shù)學(xué)符號)來描述算法。,二、算法的表示,例的偽代碼表示如下BEGIN(算法開始)輸入A,B,CIFAB則A→MAX否則B→MAXIFCMAX則C→MAXPRINTMAXEND算法結(jié)束,例輸入三個數(shù),然后輸出其中最大的數(shù)。算法可以寫成1輸入A,B,C。2若AB,則MAX←A;否則MAX←B。3若CMAX,則MAX←C。4輸出MAX,MAX即為最大數(shù)。,結(jié)構(gòu)化程序的算法描述,1.常用的流程符號L起止框表示算法的開始和結(jié)束。L處理框表示初始化或運(yùn)算賦值等操作。L輸入輸出框表示數(shù)據(jù)的輸入輸出操作。L判斷框表示根據(jù)一個條件成立與否,決定執(zhí)行兩種不同操作中的其中一個。L流程線表示流程的方向。,,,(二)用流程圖表示算法,,,,,用流程圖表示如下圖所示,例輸入三個數(shù),然后輸出其中最大的數(shù)。,(三)用NS流程圖表示算法,C語言中實(shí)現(xiàn)順序結(jié)構(gòu)的語句賦值語句、變量聲明語句、符號常量聲明語句等。,三、賦值語句,賦值語句是由賦值表達(dá)式再加分號構(gòu)成的表達(dá)式語句。其一般形式為變量表達(dá)式,1.賦值符“”右邊的表達(dá)式可以又是一個賦值表達(dá)式因此,下述形式是正確的變量變量表達(dá)式其展開之后的一般形式為變量變量表達(dá)式,例如ABCDE5按照賦值運(yùn)算符的右結(jié)合性,因此實(shí)際上等效于E5DECDBCAB,2注意變量說明中給變量賦初值和賦值語句的區(qū)別。給變量賦初值是變量說明的一部分,賦初值后的變量與其后的其它同類變量之間仍必須用逗號間隔,而賦值語句則必須用分號結(jié)尾。3在變量說明中,不允許連續(xù)給多個變量賦初值。如下述說明是錯誤的INTABC5;必須寫為INTA5,B5,C5而賦值語句允許連續(xù)賦值。4注意賦值表達(dá)式和賦值語句的區(qū)別。賦值表達(dá)式是一種表達(dá)式,它可以出現(xiàn)在任何允許表達(dá)式出現(xiàn)的地方,而賦值語句則不能。下述語句是合法的IFXY50ZX下述語句是非法的IFXY50ZX說明右邊的表達(dá)式可以是變量、常量、函數(shù)調(diào)用等表達(dá)式。,5.語句中的“”稱為賦值號,它不同于數(shù)學(xué)中的等號,如AA1在數(shù)學(xué)中是不成立的,但在程序設(shè)計(jì)中表示取變量A單元中的值,將其加1后,仍然放回到A變量的存儲單元。6、賦值符號“”左邊一定只能是變量名,不能是常量、符號常量、表達(dá)式。,例如ZXY是合法的。下面的賦值語句都是錯的5X/左邊是常量/SINX20/左邊是函數(shù)調(diào)用,即是表達(dá)式/,7.賦值符號“”兩邊的數(shù)據(jù)類型一般要求應(yīng)一致。如果兩邊的類型不同,則以左邊變量或?qū)ο髮傩缘臄?shù)據(jù)類型為基準(zhǔn),如果右邊表達(dá)式結(jié)果的數(shù)據(jù)類型能夠轉(zhuǎn)換成左邊變量或?qū)ο髮傩缘臄?shù)據(jù)類型,則先強(qiáng)制轉(zhuǎn)換后,賦值給左邊的變量。若都是數(shù)值型,但精度不同,強(qiáng)制轉(zhuǎn)換成左邊變量的數(shù)據(jù)精度。,例如,有定義INTXFLOATYX35415926/取其整數(shù)賦值給X,X的值為3/Y123/將整數(shù)123轉(zhuǎn)換實(shí)數(shù)1230,賦值給Y,執(zhí)行后,Y的值是1230(小數(shù)點(diǎn)補(bǔ)六個0)/,數(shù)據(jù)輸入/輸出的概念,,內(nèi)存,RAM,,從鍵盤將數(shù)據(jù)輸入,,從數(shù)據(jù)文件讀入,將數(shù)據(jù)輸出到屏幕,,,將數(shù)據(jù)輸出到文件,數(shù)據(jù)輸入/輸出是相對計(jì)算機(jī)內(nèi)存,在C語言中所有的數(shù)據(jù)輸入/輸出都是由庫函數(shù)完成的。因此都是函數(shù)語句。在C語言中使用庫函數(shù)時(shí),要使用預(yù)編譯命令I(lǐng)NCLUDE將相關(guān)的頭文件(H)包含到用戶源文件中。使用形式INCLUDE“頭文件”或INCLUDE,說明1標(biāo)準(zhǔn)輸入/輸出頭文件是STDIOH2PRINTF和SCANF函數(shù)不需要頭包含文件3常用的輸入輸出函數(shù)有PRINTFSCANFPUTCHARGETCHAR,,四、數(shù)據(jù)格式輸入-SCANF函數(shù),SCANF的功能從鍵盤上輸入數(shù)據(jù),該輸入數(shù)據(jù)按指定的輸入格式被賦給相應(yīng)的輸入項(xiàng)。函數(shù)一般格式為SCANF“控制字符串“,輸入項(xiàng)地址列表;控制字符串規(guī)定數(shù)據(jù)的輸入格式,其內(nèi)容由格式說明和普通字符兩部分組成。輸入項(xiàng)地址列表由一個或多個變量地址組成,各變量地址之間用逗號“,”分隔。SCANF中各變量要加地址操作符,表示如下,控制字符串的兩個組成部分格式說明和普通字符。,,1格式說明格式說明規(guī)定輸入項(xiàng)中的變量以何種類型的數(shù)據(jù)格式被輸入,形式是各個格式字符及其意義見表33。,各修飾符是可選的,這些修飾符是(1)字段寬度(2)L和H可與D、O、X一起使用,L表示輸入數(shù)據(jù)為長整數(shù),H表示輸入數(shù)據(jù)為短整數(shù)。(3)字符表示按規(guī)定格式輸入但不賦予相應(yīng)變量,作用是跳過相應(yīng)的數(shù)據(jù)。,例SCANF“”,SCANF“3DM“,/注意3D的作用/PRINTF“\NXD,YD\N“,X,Y},2普通字符普通字符包括空格、轉(zhuǎn)義字符和可打印字符。1空格在有多個輸入項(xiàng)時(shí),一般用空格或回車作為分隔符,若以空格作分隔符,則當(dāng)輸入項(xiàng)中包含字符類型時(shí),可能產(chǎn)生非預(yù)期的結(jié)果,2可打印字符,例如SCANF“DC“,當(dāng)輸入為1,2,Q即A1,B2,CHQ若輸入為12Q除A1正確賦值外,對B與CH的賦值都不能正確賦值。這些不打印字符應(yīng)是輸入數(shù)據(jù)分隔符,SCANF在讀入時(shí)自動去除與可打印字符相同的字符。,使用SCANF函數(shù)還必須注意以下幾點(diǎn)1SCANF函數(shù)中沒有精度控制。如SCANF“52F”,是非法的。(2)在輸入多個數(shù)值數(shù)據(jù)時(shí),若格式控制串中沒有非格式字符作輸入數(shù)據(jù)之間的間隔則可用空格或回車作間隔(3)如果格式控制串中有非格式字符則輸入時(shí)也要輸入該非格式字符。例如SCANF“D,D,D“,其中用非格式符“,”作間隔符,故輸入時(shí)應(yīng)為5,6,7又如SCANF“AD,BD,CD“,則輸入應(yīng)為A5,B6,C7,五、數(shù)據(jù)格式輸出PRINTF函數(shù),格式化輸出函數(shù)PRINTF功能按控制字符串規(guī)定的格式,向輸出設(shè)備輸出各輸出項(xiàng)其基本格式為PRINTF(“控制字符串”,輸出項(xiàng)列表)輸出項(xiàng)可以是常量、變量、表達(dá)式,其類型與個數(shù)必須與控制字符串中格式字符的類型、個數(shù)一致、當(dāng)有多個輸出項(xiàng)時(shí),各項(xiàng)之間用逗號分隔??刂谱址筛袷秸f明和普通字符兩部分組成。,1.格式說明一般格式為格式字符規(guī)定了輸出項(xiàng)的輸出格式,常用格式字符見表32,1字段寬度修飾符該修飾符用于確定數(shù)據(jù)輸出的寬度、精度、小數(shù)位數(shù)、對齊方式等,用于產(chǎn)生更規(guī)范整齊的輸出,下表列出了字段寬度修飾符。,例如VOIDMAIN{INTA123FLOATX12345678PRINTF“,52F\N“,A,XPRINTF“,21F\N“,A,X}程序的運(yùn)行結(jié)果如下,說明當(dāng)指定寬度小于數(shù)據(jù)的實(shí)際寬度時(shí),對整數(shù),按該數(shù)的實(shí)際寬度輸出。對浮點(diǎn)數(shù),相應(yīng)小數(shù)位的數(shù)四舍五入。若度寬小于等于浮點(diǎn)數(shù)整數(shù)部分的寬度,則該浮點(diǎn)數(shù)按實(shí)際位數(shù)輸出,但小數(shù)位數(shù)仍遵守寬度修飾符給出的值。,(2)對齊方式修飾符一般的輸出數(shù)據(jù)為右對齊格式,加“”號,變?yōu)椤白髮R”方式。,例如VOIDMAIN{INTI123FLOATA1234567PRINTF“M4F\N“,I,APRINTF“6D4F\N“,I,APRINTF“M104F\N“,I,A}程序運(yùn)行結(jié)果如圖所示,(3)L和H可以與輸出格式字符D、F、U等連用,以說明是用LONG型或SHORT型格式輸出數(shù)據(jù),如%HD短整型%LF雙精度型%LD長整型%HU無符號短整型,2.普通字符普通字符包括可打印字符和轉(zhuǎn)義字符。可打印字符是一些說明字符,這些字符按原樣顯示在屏幕上轉(zhuǎn)義字符是不可打印的字符,它們其實(shí)是一些控制字符,控制產(chǎn)生特殊的輸出效果。常用的有“\T”,“\N”,其中\(zhòng)T為水平制表符,作用是跳到下一個水平制表位,“\N”為回車換行符,遇到“\N”,顯示自動換到新的一行。,,例如VOIDMAIN{INTI123LONGN456FLOATA1234567,Y205PRINTF“D4D\TA74F\N\TNLD\N“,I,A,NPRINTF“Y52F\N“,Y},程序運(yùn)行的輸出結(jié)果,【注意】,(1)輸出項(xiàng)從右向左計(jì)算后,按格式說明的順序、類型和要求對應(yīng)輸出。格式說明和輸出項(xiàng)的個數(shù)類型應(yīng)相同,如不匹配系統(tǒng)不能正確輸出①格式說明的個數(shù)少于輸出項(xiàng)個數(shù),多余的輸出項(xiàng)將不輸出;②格式說明的個數(shù)多于輸出項(xiàng)個數(shù),多余的格式說明將輸出隨機(jī)的值。③整型數(shù)據(jù)按F輸出或者實(shí)型數(shù)據(jù)按D輸出,均出現(xiàn)輸出錯誤結(jié)果。,(2)格式字符除X(表示輸出的十六進(jìn)制數(shù)用大寫字母輸出)、E(表示輸出的指數(shù)E用大寫字母E輸出)、G(表示若選用指數(shù)形式輸出,則用大寫字母E輸出)外,必須是小寫字母。如D不能寫成D。(3)若想輸出字符“”,則在格式字符串中用連續(xù)兩個表示。如PRINTF“F”,10/4則輸出0250000,【注意】,試編寫求梯形面積的程序,數(shù)據(jù)由鍵盤輸入。分析設(shè)梯形上底為A,下底為B,高為H面職為S,則SA+BH÷2,程序如下VOIDMAIN{FLOATA,B,H,SPRINTF“PLEASEINPUTA,B,H“SCANF“FFF“,S05ABHPRINTF“A63FB63FH63F\N“,A,B,HPRINTF“S84F\N“,S},六、字符數(shù)據(jù)非格式輸入/輸出函數(shù),1.字符輸入函數(shù)GETCHARGETCHAR函數(shù)的格式GETCHARGETCHAR函數(shù)的作用從系統(tǒng)的輸入設(shè)備鍵盤輸入一個字符。從功能角度來看,SCANF函數(shù)可以完全代替GETCHAR函數(shù)。,例CHARC1則C1GETCHAR可使用等價(jià)語句SCANF“C“,,說明(1)GETCHAR函數(shù)一次只能返回一個字符,即調(diào)用一次只能輸入一個字符。(2)程序第一次執(zhí)行GETCHAR函數(shù)時(shí),系統(tǒng)暫停等待用戶輸入,直到按回車鍵結(jié)束,如果用戶輸入了多個字符,則該函數(shù)只取第一個字符,多余的字符(包括換行符\N)存放在鍵盤緩沖區(qū)中,如果程序再一次執(zhí)行GETCHAR函數(shù),則程序就直接從鍵盤緩沖區(qū)讀入,直到讀完后,如果還有GETCHAR函數(shù)才會暫停,再次等待用戶輸入。,2.字符輸出函數(shù)PUTCHARPUTCHAR函數(shù)的格式PUTCHARCH該函數(shù)的功能是向顯示器終端輸出一個字符。其中,CH可以是一個字符變量或常量,也可以是一個轉(zhuǎn)義字符。說明(1)PUTCHAR函數(shù)只能用于單個字符的輸出,且一次只能輸出一個字符。(2)從功能角度PRINTF函數(shù)可以完全代替PUTCHAR函數(shù),其等價(jià)形式PRINTF“C“,CH。,例輸入一個字符,回顯該字符并輸出其ASCII碼值。INCLUDEVOIDMAIN{CHARCH1,CH2CH1GETCHARCH2GETCHARPUTCHARCH1PUTCHARCH2PRINTF“C\NC“,CH1,CH2},程序運(yùn)行后,若CH1、CH2分別得到字符A、B,應(yīng)輸入AB,如果輸入A,則實(shí)際上CH1被賦值為字符A,CH2被賦值為字符換行符\N,,【例316】從鍵盤上輸入一個英文小寫字母,編程輸出該字母所對應(yīng)的ASCII碼和所對應(yīng)的大寫字母,,【分析】在ASCII字符集中,大寫字母AZ是連續(xù)的(ASCII值從6590),小寫字母AZ也是連續(xù)的(ASCII值從97122)。因此每對字母的ASCII碼值差是相同的,都是32,即AA、BB、CC、、ZZ都是32。所以將小寫字母的ASCII碼值減去32,則得到的是所對應(yīng)的大寫字母ASCII碼值。同理,將大寫字母的ASCII碼值加上32,則得到的是所對應(yīng)的小寫字母ASCII碼值。,上機(jī)內(nèi)容第2章課后習(xí)題(其中讀程序?qū)戇\(yùn)行結(jié)果題要上機(jī)驗(yàn)證)P44例315,例317,例318,例319,例320,
下載積分: 4 賞幣
上傳時(shí)間:2024-01-06
頁數(shù): 35
大?。?0.53(MB)
子文件數(shù):