高級(jí)程序語(yǔ)言設(shè)計(jì)基本輸入、輸出和順序程序設(shè)計(jì).ppt
《高級(jí)程序語(yǔ)言設(shè)計(jì)基本輸入、輸出和順序程序設(shè)計(jì).ppt》由會(huì)員分享,可在線閱讀,更多相關(guān)《高級(jí)程序語(yǔ)言設(shè)計(jì)基本輸入、輸出和順序程序設(shè)計(jì).ppt(45頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、第4章:基本輸入輸出和順序程序設(shè)計(jì),學(xué)習(xí)的意義,程序?qū)?shù)據(jù)的處理流程: 程序的主要功能就是對(duì)數(shù)據(jù)的處理,其整個(gè)流程主要包括數(shù)據(jù)的輸入、數(shù)據(jù)的處理、數(shù)據(jù)的輸出。,數(shù)據(jù)處理,,數(shù)據(jù)輸入,,,數(shù)據(jù)輸出,,C程序中如何實(shí)現(xiàn)數(shù)據(jù)輸入?,C程序中如何實(shí)現(xiàn)數(shù)據(jù)輸出?,程序的結(jié)構(gòu): 寫(xiě)文章有文章的結(jié)構(gòu) 建房子有房子的結(jié)構(gòu) 制造機(jī)械產(chǎn)品由機(jī)械產(chǎn)品的結(jié)構(gòu) 那么編寫(xiě)程序是否有程序的結(jié)構(gòu)呢?,學(xué)習(xí)的意義,YES!,,本章討論,,第5章討論,,第6章討論,格式化輸出printf 格式化輸入scanf 字符數(shù)據(jù)的非格式化輸入、輸出 程序的控制結(jié)構(gòu) 順序程序設(shè)計(jì)舉例 本章小結(jié),學(xué)習(xí)目標(biāo),掌握各種類(lèi)型數(shù)據(jù)的格式化
2、輸入輸出方法; 掌握字符數(shù)據(jù)的非格式化輸入輸出方法; 理解三種程序控制結(jié)構(gòu)的流程圖; 學(xué)會(huì)簡(jiǎn)單順序程序的設(shè)計(jì); 養(yǎng)成良好的程序設(shè)計(jì)習(xí)慣;,學(xué)習(xí)內(nèi)容,4.1 格式化輸出printf,一般格式,printf (格式控制字符串,表達(dá)式1,表達(dá)式2,,表達(dá)式n);,功能,按照“格式控制字符串”的要求,將表達(dá)式1,表達(dá)式2,,表達(dá)式n的值顯示在計(jì)算機(jī)屏幕上。,說(shuō)明,格式控制字符串用于指定輸出格式。它包含兩類(lèi)字符: 常規(guī)字符:包括可顯示字符和用轉(zhuǎn)義字符表示的字符。 格式控制符:以%開(kāi)頭的一個(gè)或多個(gè)字符,以說(shuō)明輸出數(shù)據(jù)的類(lèi)型、形式、長(zhǎng)度、小數(shù)位數(shù)等。其格式為:,%修飾符格式轉(zhuǎn)換字符,例: long in
3、t x = 0 x8AB6; printf (“The Value of x is %ldn”, x);,常規(guī)字符,常規(guī)字符 (轉(zhuǎn)義符),格式控制符 (修飾符),格式控制符 (格式轉(zhuǎn)換符),printf使用時(shí)的注意事項(xiàng),(1) 格式控制字符串可以不包含任何格式控制符。 (2) 當(dāng)格式控制字符串中既含有常規(guī)字符,又包含有格式控制符時(shí),則表達(dá)式的個(gè)數(shù)應(yīng)與格式控制符的個(gè)數(shù)一致。此時(shí),常規(guī)字符原樣輸出,而格式控制符的位置上輸出對(duì)應(yīng)的表達(dá)式的值,其對(duì)應(yīng)的順序是:從左到右的格式控制符對(duì)應(yīng)從左到右的表達(dá)式。 (3) 如果格式控制字符串中格式控制符的個(gè)數(shù)多于表達(dá)式的個(gè)數(shù),則余下的格式控制符的值將是不確定
4、的。 (4) 不同類(lèi)型的表達(dá)式要使用不同的格式轉(zhuǎn)換符,同一表達(dá)式如果按照不同的格式轉(zhuǎn)換符來(lái)輸出,其結(jié)果可能是不一樣的。,printf (“how are you?n”); //只有一個(gè)字符串參數(shù), 輸出為:how are you? printf (“how old are you?n”, 20); //帶有兩個(gè)參數(shù),20沒(méi)有意義, 輸出為:how old are you?,char ch = A; printf (ch = %c, ch); //輸出結(jié)果:ch = A (以字符形式輸出) printf (ch = %d, ch); //輸出
5、結(jié)果:ch = 65 (以A字符的ASCII碼形式輸出),printf函數(shù)中的格式轉(zhuǎn)換字符及其含義,printf函數(shù)中的格式轉(zhuǎn)換字符及其含義,1. 整數(shù)的輸出,有符號(hào)整數(shù)的輸出,一般形式:, :表示可選項(xiàng),可缺省。 :表示輸出的數(shù)據(jù)左對(duì)齊,缺省時(shí)是右對(duì)齊。 :輸出正數(shù)時(shí),在數(shù)的前面加上號(hào)。 數(shù)字0:右對(duì)齊時(shí),如果實(shí)際寬度小于width,則在左邊的空位補(bǔ)0。 width:無(wú)符號(hào)整數(shù),表示輸出整數(shù)的最小域?qū)挘凑计聊坏亩嗌俑瘢?。若?shí)際寬度超過(guò)了width,則按照實(shí)際寬度輸出。 .precision:無(wú)符號(hào)整數(shù),表示至少要輸出precision位。若整數(shù)的位數(shù)大于precision,則
6、按照實(shí)際位數(shù)輸出,否則在左邊的空位上補(bǔ)0。 字母l:如果在d的前面有字母l(long),表示要輸出長(zhǎng)整型數(shù)據(jù)。 字母h:如果在d的前面有字母h(short),表示要輸出短整型數(shù)據(jù)。,說(shuō)明:,【例】有符號(hào)整數(shù)的格式化輸出,#include void main ( ) int a = 123; long L = 65537; printf ( 12345678901234567890n); printf (a=%d--------(a=%%d)n, a); printf (a=%6d-----(a=%%6d)n, a); printf (a=%+6d-----(a=%%+6d)n,
7、a); printf (a=%-6d-----(a=%%-6d)n, a); printf (a=%-06d-----(a=%%-06d)n, a); printf (a=%+06d-----(a=%%+06d)n, a); printf (a=%+6.6d----(a=%%+6.6d)n, a); printf (a=%6.6d-----(a=%%6.6d)n, a); printf (a=%-6.5d-----(a=%%-6.5d)n, a); printf (a=%6.4d-----(a=%%6.4d)n, a); printf (L=%ld------(L=%%ld)n
8、, L); printf (L=%hd----------(L=%%hd)n, L); ,12345678901234567890 a=123--------(a=%d) a= 123-----(a=%6d) a= +123-----(a=%+6d) a=123 -----(a=%-6d) a=123 -----(a=%-06d) a=+00123-----(a=%+06d) a=+000123----(a=%+6.6d) a=000123-----(a=%6.6d) a=00123 -----(a=%-6.5d) a= 0123-----(a=%6.4d) L=65537------(L=
9、%ld) L=1----------(L=%hd),運(yùn)行結(jié)果:,,L是一長(zhǎng)整型數(shù)65537,其值為十六進(jìn)制0X00010001,所以要將其轉(zhuǎn)換成短整型,即取低16位0 x0001,將其輸出,故輸出為1。,Why?,1. 整數(shù)的輸出,無(wú)符號(hào)整數(shù)的輸出,一般形式:, :表示可選項(xiàng),可缺省。 | :表示互斥關(guān)系。 # :表示當(dāng)以八進(jìn)制形式輸出數(shù)據(jù)(%o)時(shí),在數(shù)字前輸出0;當(dāng)以十六進(jìn)制形式輸出數(shù)據(jù)(%x或%X)時(shí),在數(shù)字前輸出0 x或0X。 .precision的含義與前面介紹的相同,但要注意,在TC和BC下,precision所指定的位數(shù)也包含了0 x或0X所占的位數(shù),可在VC下,則不包含0 x
10、或0X所占的位數(shù)。 其它字段的含義與前面介紹的相同。,說(shuō)明:,【例】無(wú)符號(hào)整數(shù)的格式化輸出,#include void main ( ) int a = -1; unsigned u = 32767; unsigned long L = -32768; printf (a=%d, a=%u---(a=%%d, a=%%u)n, a, a); printf (a=%hx, a=%X---(a=%%hx, a=%%X)n, a, a); printf (u=%o, u=%X------(u=%%o, u=%%X)n, u, u); printf (u=%#010X---------(u=%%#0
11、10X)n, u); printf (u=%#10.10X------- (u=%%#10.10X)n, u); printf (L=%lX----------- (L=%%lX)n,L); printf (L=%-#14.10X----- (L=%%-#14.10X)n, L); ,a=-1, a=65535---(a=%d, a=%u) a=ffff, a=FFFF---(a=%hx, a=%X) u=77777, u=7FFF------(u=%o, u=%X) u=0X00007FFF---------(u=%#010X) u=0X00007FFF-------(u=
12、%#10.10X) L=FFFF8000-----------(L=%lX) L=0X00008000 -----(L=%-#14.10X),運(yùn)行結(jié)果(在BC3.1下):,a=-1, a=4294967295---(a=%d, a=%u) a=ffff, a=FFFFFFFF---(a=%hx, a=%X) u=77777, u=7FFF------(u=%o, u=%X) u=0X00007FFF---------(u=%#010X) u=0X0000007FFF-------(u=%#10.10X) L=FFFF8000-----------(L=%lX) L=0X00FFFF8000 -
13、----(L=%-#14.10X),運(yùn)行結(jié)果(在VC6.0下):,2. 實(shí)數(shù)的輸出,一般形式:, :表示可選項(xiàng),可缺省。 | :表示互斥關(guān)系。 #:必須輸出小數(shù)點(diǎn)。 .precision:規(guī)定輸出實(shí)數(shù)時(shí),小數(shù)部分的位數(shù)。 l:輸出double型數(shù)據(jù)(缺省時(shí)也是輸出double型數(shù)據(jù))。 L:輸出long double型數(shù)據(jù)。 其它字段的含義與前面介紹的相同。,說(shuō)明:,【例】實(shí)數(shù)的格式化輸出,#include void main ( ) double f = 2.5e5; printf ( 12345678901234567890n); printf (f=%15f--------(f=%
14、%15f)n, f); printf (f=%015f--------(f=%%015f)n, f); printf (f=%-15.0f--------(f=%%-15.0f)n, f); printf (f=%#15.0f--------(f=%%#15.0f)n, f); printf (f=%+15.4f--------(f=%%+15.4f)n, f); printf (f=%15.4E--------(f=%%15.4E)n, f); ,12345678901234567890 f= 250000.000000--------(f=%15f) f=00250000.000
15、000--------(f=%015f) f=250000 --------(f=%-15.0f) f= 250000.--------(f=%#15.0f) f= +250000.0000--------(f=%+15.4f) f= 2.5000E+005--------(f=%#15.4E),運(yùn)行結(jié)果:,3. 字符和字符串的輸出,一般形式:, :表示可選項(xiàng),可缺省。 .precision:表示只輸出字符串的前precision個(gè)字符。 其它字段的含義與前面介紹的相同。,說(shuō)明:,【例】字符及字符串的格式化輸出,#include void main ( ) char ch = A;
16、printf ( 12345678901234567890n); printf (ch=%c-----------(ch=%%c)n, ch); printf (ch=%4c--------(ch=%%4c)n, ch); printf (ch=%-4c--------(ch=%%-4c)n, ch); printf (ch=%04c--------(ch=%%04c)n, ch); printf (st=%s--------(st=%%s)n, CCNU); printf (st=%6s------(st=%%6s)n, CCNU); printf (st=%06.3s----
17、--(st=%%06.3s)n, CCNU); ,12345678901234567890 ch=A-----------(ch=%c) ch= A--------(ch=%4c) ch=A --------(ch=%-4c) ch=000A--------(ch=%04c) st=CCNU--------(st=%s) st= CCNU------(st=%6s) st=000CCN------(st=%06.3s),運(yùn)行結(jié)果:,4. 輔助格式控制符(修飾符)小結(jié),4. 輔助格式控制符(修飾符)小結(jié),此外,在使用printf函數(shù)時(shí)還要注意以下幾點(diǎn): 格式控制字符串后面表達(dá)式的個(gè)數(shù)一般
18、要與格式控制字符串中的格式控制符的個(gè)數(shù)相等。 格式轉(zhuǎn)換符中,除了X、E、G以外,其它均為小寫(xiě)。 表達(dá)式的實(shí)際數(shù)據(jù)類(lèi)型要與格式轉(zhuǎn)換符所表示的類(lèi)型相符,printf函數(shù)不會(huì)進(jìn)行不同數(shù)據(jù)類(lèi)型之間的自動(dòng)轉(zhuǎn)換。象整型數(shù)據(jù)不可能自動(dòng)轉(zhuǎn)換成浮點(diǎn)型數(shù)據(jù),浮點(diǎn)型數(shù)據(jù)也不可能自動(dòng)轉(zhuǎn)換成型數(shù)數(shù)據(jù),【例】錯(cuò)誤的格式化輸出,#include void main ( ) int a = 10, b = 100; float f = 2; printf (a = %d, b = %dn, f, b); printf (a = %f, b = %dn, a, b); printf (a = %ld, b = %dn, 1
19、20, b); ,Why?,如何修改?,printf (a = %f, b = %dn, f, b); printf (a = %f, b = %dn, (float)a, b); printf (a = %ld, b = %dn, 120L, b); 或 printf (a = %d, b = %dn, 120, b);,,4.2 格式化輸入scanf,一般格式,scanf (“格式控制字符串”,變量1的地址,變量2的地址, ,變量n的地址);,功能,第一個(gè)參數(shù)格式控制字符串的控制下,接受用戶的鍵盤(pán)輸入,并將輸入的數(shù)據(jù)依此存放在變量1、變量2、、變量n中 。,格式控制符與后續(xù)參數(shù)中的變量地址
20、的對(duì)應(yīng)關(guān)系,scanf函數(shù)的格式控制符,%* width l | h Type,一般形式:,說(shuō)明:, :表示可選項(xiàng),可缺省。|表示互斥關(guān)系。 width:指定輸入數(shù)據(jù)的域?qū)挘隹崭窕虿豢赊D(zhuǎn)換字符則結(jié)束。 Type:各種格式轉(zhuǎn)換符(參照printf)。 *:抑制符,輸入的數(shù)據(jù)不會(huì)賦值給相應(yīng)的變量。 l:用于d、u、o、x|X前,指定輸入為long型整數(shù);用于e|E、f前,指定輸入為double型實(shí)數(shù)。 h:用于d、u、o、x|X前,指定輸入為short型整數(shù)。,使用scanf函數(shù)注意事項(xiàng),(1) 如果相鄰兩個(gè)格式控制符之間,不指定數(shù)據(jù)分隔符(如逗號(hào)、冒號(hào)等),則相應(yīng)的兩個(gè)輸入數(shù)據(jù)之間,至少用一個(gè)
21、空格分隔,或者用Tab鍵分隔,或者輸入一個(gè)數(shù)據(jù)后,按回車(chē),然后再輸入下一個(gè)數(shù)據(jù)。 (2) 格式控制字符串中出現(xiàn)的常規(guī)字符(包括轉(zhuǎn)義字符),務(wù)必原樣輸入。 (3) 為改善人機(jī)交互性,同時(shí)簡(jiǎn)化輸入操作,在設(shè)計(jì)輸入操作時(shí),一般先用printf( )函數(shù)輸出一個(gè)提示信息,再用scanf( )函數(shù)進(jìn)行數(shù)據(jù)輸入 。 (4) 當(dāng)格式控制字符串中指定了輸入數(shù)據(jù)的域?qū)抴idth時(shí),將讀取輸入數(shù)據(jù)中相應(yīng)的width位,但按需要的位數(shù)賦給相應(yīng)的變量,多余部分被舍棄。,例如: scanf (%d%d, 假設(shè)給num1輸入12,給num2輸入36,則正確的輸入操作為: 1236 或者 12 36
22、使用“”符號(hào)表示按回車(chē)鍵操作,在輸入數(shù)據(jù)操作中的作用是,通知系統(tǒng)輸入操作結(jié)束。,例如: scanf (%d:%d:%d, 假設(shè)給h輸入12,給m輸入30,給s輸入10,正確的輸入操作為: 12:30:10,例如: scanf (num1=%d, num2=%dn, 假設(shè)給num1輸入12,給num2輸入36,正確的輸入操作為: num1=12,num2=36n,例如: 將scanf (num1=%d, num2=%dn, ,例如: scanf (%3c%3c, 假設(shè)輸入abcdefg,則系統(tǒng)將讀取的“abc”中的a賦給變量ch1;將讀取的def中的d賦給變量ch
23、2。,使用scanf函數(shù)注意事項(xiàng),(5) 當(dāng)格式控制字符串中含有抑制符*時(shí),表示本輸入項(xiàng)對(duì)應(yīng)的數(shù)據(jù)讀入后,不賦給相應(yīng)的變量(該變量由下一個(gè)格式指示符輸入)。 (6) 使用格式控制符%c輸入單個(gè)字符時(shí),空格和轉(zhuǎn)義字符均作為有效字符被輸入。 (7) 輸入數(shù)據(jù)時(shí),遇到以下情況,系統(tǒng)認(rèn)為該數(shù)據(jù)結(jié)束: 遇到空格,或者回車(chē)鍵,或者Tab鍵。 遇到輸入域?qū)挾冉Y(jié)束。例如“%3d”,只取3列。 遇到非法輸入。比方說(shuō),在輸入數(shù)值數(shù)據(jù)時(shí),遇到字母等非數(shù)值符號(hào)。 (8) 當(dāng)一次scanf調(diào)用需要輸入多個(gè)數(shù)據(jù)項(xiàng)時(shí),如果前面數(shù)據(jù)的輸入遇到非法字符,并且輸入的非法字符不是格式控制字符串中的常規(guī)字符,那么,這種非法輸入將影響
24、后面數(shù)據(jù)的輸入,導(dǎo)致數(shù)據(jù)輸入失敗。,例如: scanf (%2d%*2d%3d, 假設(shè)輸入123456789 輸出結(jié)果為:num1=12, num2=567。,例如: scanf (%c%c%c, 假設(shè)輸入:ABC,則系統(tǒng)將字母A賦值給ch1,空格賦值給ch2,字母B賦值給ch3。,例如: scanf (%d, a); 如果輸入為:12a3,a的值將是12。,例如: scanf (%d,%d, 如果輸入為:12a34,那么a的值將是12,b的值將無(wú)法預(yù)測(cè)。 正確的輸入是:12,34,【例】數(shù)據(jù)的格式化輸入 輸入一學(xué)生的學(xué)號(hào)(8位數(shù)字)、生日(年-月-日
25、)、性別(M:男,F(xiàn):女)及三門(mén)功課(語(yǔ)文、數(shù)學(xué)、英語(yǔ))的成績(jī),現(xiàn)要求計(jì)算該學(xué)生的總分和平均分,并將該學(xué)生的全部信息輸出(包括總分、平均分)。,#include void main ( ) unsigned long no; //學(xué)號(hào) unsigned int year, month, day; //生日(年、月、日) unsigned char sex; //性別 float chinese, math, english; //語(yǔ)文、數(shù)學(xué)、英語(yǔ)成績(jī) float total, average; //總分、平均分 printf (input the student
26、s NO: ); scanf (%8ld, ,printf (input the students Scores(chinese, math, english): ); scanf (%f,%f,%f, ,假設(shè)輸入 : input the students NO:20040101 input the students Birthday(yyyy-mm-dd):1987-9-8 input the students Sex(M/F):M input the students Scores(chinese, math, english):90,80,90,輸出結(jié)果 : ===NO=======bi
27、rthday==sex==chinese==math==english==total==average 20040101 1987-09-08 M 90.0 80.0 90.0 260.0 86.7,4.3 字符數(shù)據(jù)的非格式化輸入、輸出,1. 字符數(shù)據(jù)的非格式化輸入,int getchar ( void ); //應(yīng)包含的.h文件為stdio.h,與輸入字符數(shù)據(jù)有關(guān)的常用庫(kù)函數(shù)主要有: getchar、getc、getche、getch等。,getchar,功能:從鍵盤(pán)讀一字符 返值:正常,返回讀取字符的ASCII碼值;出錯(cuò),返回EOF(-1)。 說(shuō)明:以回車(chē)符為輸入結(jié)束條件;輸入多個(gè)
28、字符時(shí),返回第一個(gè)字符的值;輸入字符回顯。,【例】利用getchar輸入字符,#include #include void main ( ) char ch1, ch2; int a; ch1 = getchar ( ); ch2 = getchar ( ); scanf (%d, ,int getc ( FILE *stream ); //應(yīng)包含的.h文件為stdio.h,getc,功能:從流文件stream中讀取一個(gè)字符信息,它的返回值是所讀取字符的ASCII碼。 返值:正常,返回讀取字符的ASCII碼值;出錯(cuò),返回EOF(-1)。 說(shuō)明:該函數(shù)帶有一個(gè)參數(shù)stream,它是一文件指針(
29、第12章介紹),表示流文件,當(dāng)流文件是stdin時(shí),getc函數(shù)的功能與getchar函數(shù)的功能完全相同。也就是說(shuō),gtec(stdin)與getchar( )是等價(jià)的。,int getche ( void ); //應(yīng)包含的.h文件為conio.h,getche,功能:與getchar的功能基本相同 。 返值:正常,返回讀取字符的ASCII碼值;出錯(cuò),返回EOF(-1)。 說(shuō)明:直接從鍵盤(pán)獲取鍵值,不等待用戶按回車(chē)鍵;輸入字符回顯。,getch,int getch ( void ); //應(yīng)包含的.h文件為conio.h,功能:與getche的功能基本相同 。 返值:正常,返回讀取字符的AS
30、CII碼值;出錯(cuò),返回EOF(-1)。 說(shuō)明:直接從鍵盤(pán)獲取鍵值,不等待用戶按回車(chē)鍵;輸入字符不回顯。,【例】getch與getche的差異,#include #include void main ( ) char ch1, ch2; printf (please press two keyn); ch1 = getche ( ); //回顯 ch2 = getch ( ); //不回顯 printf (nyouve pressed %c and %cn, ch1, ch2); ,與輸入字符數(shù)據(jù)有關(guān)的庫(kù)函數(shù)功能比較:,2. 字符數(shù)據(jù)的非格式化輸出,int putchar ( int c );
31、 //應(yīng)包含的.h文件為stdio.h,與輸出字符數(shù)據(jù)有關(guān)的常用庫(kù)函數(shù)主要有: putchar、putc、puts等。,putchar,功能:在顯示器上輸出字符c。 返值:正常,返回字符的代碼值;出錯(cuò),返回EOF(-1)。 說(shuō)明:該函數(shù)帶有一個(gè)參數(shù)c,它為要顯示字符的ASCII碼值,有一個(gè)int型返回值 。,putc,int putc ( int c, FILE *stream ); //應(yīng)包含的.h文件為stdio.h,功能:將字符c輸出到流文件stream。如果流文件為stdout,則功能與putchar完全相同,所以putc(c, stdout)等價(jià)于putchar(c)
32、返值:正常,返回字符的代碼值;出錯(cuò),返回EOF(-1)。,puts,int puts ( char *string ); //應(yīng)包含的.h文件為stdio.h,功能:將字符串string的所有字符輸出到屏幕上,輸出時(shí)將自動(dòng)回車(chē)換行。,【例】利用字符輸出函數(shù)輸出字符,#include void main ( ) int a = 65; char b = B; putchar (a); //不自動(dòng)回車(chē) putchar (n); puts (“is as good as ”); //自動(dòng)回車(chē) putc (b, stdout); ,4.4 程序的控制結(jié)構(gòu),1. 算法的基本概念,程序 =
33、數(shù)據(jù)結(jié)構(gòu) + 算法。 算法:簡(jiǎn)而言之,就是解決問(wèn)題的方法與步驟。 程序設(shè)計(jì)語(yǔ)言:是程序開(kāi)發(fā)工具,即是將算法轉(zhuǎn)化為程序的開(kāi)發(fā)工具。 程序:算法的具體實(shí)現(xiàn)。,學(xué)習(xí)C語(yǔ)言,不僅要熟練掌握其語(yǔ)言本身的特點(diǎn)、語(yǔ)法規(guī)則等意外,更重要的就是掌握分析問(wèn)題、解決問(wèn)題的方法,就是鍛煉分析、分解,最終歸納整理出算法的能力。,2. 設(shè)計(jì)算法舉例,【例1】輸入三個(gè)數(shù),然后輸出其中最大的數(shù) 。 總體思路: 首先,得先有個(gè)地方裝這三個(gè)數(shù),我們定義三個(gè)變量A、B、C,將三個(gè)數(shù)依次輸入到、B、C中,另外,再準(zhǔn)備一個(gè)MAX裝最大數(shù)。 由于計(jì)算機(jī)一次只能比較兩個(gè)數(shù),我們首先把A與B比,大的數(shù)放入MAX中,再把MAX與
34、C比,又把大的數(shù)放入MAX中。 最后,把MAX輸出,此時(shí)MAX中裝的就是、、C三數(shù)中最大的一個(gè)數(shù)。 具體步驟: (1) 輸入A、B、C。 (2) A與B中大的一個(gè)放入MAX中。 (3) 把C與MAX中大的一個(gè)放入MAX中。 (4) 輸出MAX,MAX即為最大數(shù)。 其中的(2)、(3)兩步仍不明確,無(wú)法直接轉(zhuǎn)化為程序語(yǔ)句,可以繼續(xù)細(xì)化: (2) 把A與B中大的一個(gè)放入MAX中,若A B,則MAX A;否則MAX B。 (3) 把C與MAX中大的一個(gè)放入MAX中,若C MAX,則MAX C。,算法最后可以寫(xiě)成: (1) 輸入A,B,C。 (2) 若A B,則MAX A;否則MA
35、XB。 (3) 若C MAX,則MAX C。 (4) 輸出MAX,MAX即為最大數(shù),2. 設(shè)計(jì)算法舉例,【例2】猴子吃桃問(wèn)題:有一堆桃子不知數(shù)目,猴子第一天吃掉一半,覺(jué)得不過(guò)癮,又多吃了一只,第二天照此辦理,吃掉剩下桃子的一半另加一個(gè),天天如此,到第十天早上,猴子發(fā)現(xiàn)只剩一只桃子了,問(wèn)這堆桃子原來(lái)有多少個(gè)? 總體思路: 假設(shè)第一天開(kāi)始時(shí)有a1只桃子,第二天有a2只,,第9天有a9只,第10天是a10只,在a1,a2,,a10中,只有a10 = 1是知道的,現(xiàn)要求a1,而我們可以看出,a1,a2,,a10之間存在一個(gè)簡(jiǎn)單的關(guān)系: a9 = 2 * ( a10 + 1 ) a8 = 2
36、 * ( a9 + 1 ) a1 = 2 * ( a2 + 1 ) 也就是:ai = 2 * ( ai+1 + 1) i = 9,8,7,6,,1 這就是此題的數(shù)學(xué)模型。 再考察上面從a9,a8直至a1的計(jì)算過(guò)程,這其實(shí)是一個(gè)遞推過(guò)程,這種遞推的方法在計(jì)算機(jī)解題中經(jīng)常用到。另一方面,這九步運(yùn)算從形式上完全一樣,不同的只是ai的下標(biāo)而已。由此,我們引入循環(huán)的處理方法,并統(tǒng)一用a0表示前一天的桃子數(shù),a1表示后一天的桃子數(shù)。,算法最后可以寫(xiě)成: (1) a1 = 1 第10天的桃子數(shù),a1的初值 i = 9 計(jì)數(shù)器初值為9 (2) a0 = 2 * ( a1+ 1 )
37、 計(jì)算當(dāng)天的桃子數(shù) (3) a1 = a0 將當(dāng)天的桃子數(shù)作為下一次計(jì)算的初值 (4) i = i - 1 (5) 若i = 1,轉(zhuǎn)(2) (6) 輸出a0的值 其中(2) (5)步為循環(huán),3. 流程圖與算法的結(jié)構(gòu)化描述,流程圖,_____常見(jiàn)流程圖符號(hào),,3. 流程圖與算法的結(jié)構(gòu)化描述,算法的結(jié)構(gòu)化描述,4.5 順序程序設(shè)計(jì)舉例,【例1】任意從鍵盤(pán)輸入一個(gè)三位整數(shù),要求正確地分離出它的個(gè)位、十位和百位數(shù),并分別在屏幕上輸出。 程序設(shè)計(jì)的分析: 本例要求設(shè)計(jì)一個(gè)從三位整數(shù)中分離出它的個(gè)位、十位和百位數(shù)的算法。例如,輸入的是456,則輸出的分別是4、5、6,最低位數(shù)字可用對(duì)10
38、求余的方法得到,如456%10=6,最高位的百位數(shù)字可用對(duì)100整除的方法得到,如456/10=4,中間位的數(shù)字既可通過(guò)將其變換為最高位后再整除的方法得到,如(456-4*100)/10=5,也可通過(guò)將其變換為最低位再求余的方法得到,如(456/10)%10=5。 根據(jù)以上的分析,這個(gè)程序應(yīng)這樣設(shè)計(jì): (1) 定義一個(gè)整型變量x,用于存放用戶輸入的一個(gè)三位整數(shù);再定義三個(gè)整型變量b0、b1、b2,用于存放計(jì)算后個(gè)位、十位和百位數(shù)。 (2) 調(diào)用scanf函數(shù)輸入該三位整數(shù)。 (3) 利用上述計(jì)算方法計(jì)算該數(shù)的個(gè)位、十位和百位數(shù)。 (4) 輸出計(jì)算后的結(jié)果。,#include void
39、 main ( ) int x, b0, b1, b2; //變量定義 printf (please input an integer x: ); //提示用戶輸入一個(gè)整數(shù) scanf (%d, //輸出結(jié)果 ,具體程序如下:,4.5 順序程序設(shè)計(jì)舉例,程序設(shè)計(jì)的分析: 求一個(gè)字母的前驅(qū)字母并不是簡(jiǎn)單地減1就可以了,比如,a的前驅(qū)是z就不能通過(guò)減1來(lái)實(shí)現(xiàn)。在沒(méi)有學(xué)會(huì)條件控制之前,我們可以利用取余操作的特性,即任何一個(gè)整數(shù)除以26(26個(gè)字母)的余數(shù)只能在025之間。我們可以以z為參考點(diǎn),首先求出輸入的字符ch(假設(shè)是w)與z之間的字符偏移數(shù)n=z-ch=z-w=3,而(
40、n+1)%26=4則是ch(字母w)的前驅(qū)字母相對(duì)于z的偏移數(shù),z-(n+1)%26=122-4=118(即字母v)就是ch(字母w)的前驅(qū)字母。如下圖所示,求一個(gè)字母的后繼也不是簡(jiǎn)單地加1就行,比如,z的后繼是a就不能通過(guò)加1來(lái)實(shí)現(xiàn)。此時(shí),可以a為參考點(diǎn),首先求出輸入的字符ch(假設(shè)是w)與a之間的字符偏移數(shù)n=ch-a=w-a=22,而(n+1)%26=23則是ch(字母w)的后繼字母相對(duì)于a的偏移數(shù),a+(n+1)%26=97+23=120(即字母x)就是ch(字母w)的后繼字母。 根據(jù)以上分析,這個(gè)程序應(yīng)這樣設(shè)計(jì): (1) 定義三個(gè)字符型變量,分別用于接受用戶輸入的字符及用于存放其
41、前驅(qū)和后繼字符。 (2) 調(diào)用getche函數(shù)獲取用戶輸入的字母,回顯。 (3) 求得該字母的前驅(qū)字母和后繼字母,并輸出其結(jié)果。,#include #include void main ( ) char ch, ch1, ch2; //變量定義 ch = getche(); //讀取一字符 putchar(n); //換行 ch1 = z - (z - ch + 1) % 26; //求前驅(qū)字符 ch2 = a + (ch - a + 1) % 26; //求后繼字符 printf(ch1 = %c, ch2 = %cn,ch1,ch2); //顯示結(jié)果 ,具體程序如下:,
42、本章小結(jié),本章的主要內(nèi)容包含如下幾個(gè)方面: (1) 格式化輸入、輸出庫(kù)函數(shù)的使用。重點(diǎn)介紹了格式化輸入函數(shù)printf和格式化輸出函數(shù)scanf的功能及使用方法,其中格式控制字符串是我們要重點(diǎn)關(guān)注的地方,格式化輸入和輸出可以按照某種輸入輸出格式來(lái)進(jìn)行。 (2) 字符的非格式化輸入、輸出庫(kù)函數(shù)的使用。 (3) 算法的基本概念。簡(jiǎn)單地說(shuō),算法是求解某個(gè)問(wèn)題的方法,程序是算法通過(guò)編程語(yǔ)言書(shū)寫(xiě)出來(lái)的表現(xiàn)形式。算法是程序的靈魂,語(yǔ)言只是算法的實(shí)現(xiàn)工具。所以我們學(xué)習(xí)C語(yǔ)言不僅要學(xué)會(huì)C語(yǔ)言的語(yǔ)法特點(diǎn),各種函數(shù)的使用方法等,更重要的是掌握分析問(wèn)題、解決問(wèn)題的方法,就是鍛煉分析、分解,最終歸納整理出算法的能力。 (4) 程序的控制結(jié)構(gòu)。任何復(fù)雜的算法都可以由順序結(jié)構(gòu)、選擇(分支)結(jié)構(gòu)和循環(huán)結(jié)構(gòu)這三種基本結(jié)構(gòu)組成。由此構(gòu)成了程序的三種控制結(jié)構(gòu),這三種控制結(jié)構(gòu)在程序中相互嵌套,從而構(gòu)造出各種各樣的程序。,本章小結(jié),習(xí)題:P104P107 1、2、3(1)、 3(4)、 3(6),
- 溫馨提示:
1: 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2023年六年級(jí)數(shù)學(xué)下冊(cè)6整理和復(fù)習(xí)2圖形與幾何第7課時(shí)圖形的位置練習(xí)課件新人教版
- 2023年六年級(jí)數(shù)學(xué)下冊(cè)6整理和復(fù)習(xí)2圖形與幾何第1課時(shí)圖形的認(rèn)識(shí)與測(cè)量1平面圖形的認(rèn)識(shí)練習(xí)課件新人教版
- 2023年六年級(jí)數(shù)學(xué)下冊(cè)6整理和復(fù)習(xí)1數(shù)與代數(shù)第10課時(shí)比和比例2作業(yè)課件新人教版
- 2023年六年級(jí)數(shù)學(xué)下冊(cè)4比例1比例的意義和基本性質(zhì)第3課時(shí)解比例練習(xí)課件新人教版
- 2023年六年級(jí)數(shù)學(xué)下冊(cè)3圓柱與圓錐1圓柱第7課時(shí)圓柱的體積3作業(yè)課件新人教版
- 2023年六年級(jí)數(shù)學(xué)下冊(cè)3圓柱與圓錐1圓柱第1節(jié)圓柱的認(rèn)識(shí)作業(yè)課件新人教版
- 2023年六年級(jí)數(shù)學(xué)下冊(cè)2百分?jǐn)?shù)(二)第1節(jié)折扣和成數(shù)作業(yè)課件新人教版
- 2023年六年級(jí)數(shù)學(xué)下冊(cè)1負(fù)數(shù)第1課時(shí)負(fù)數(shù)的初步認(rèn)識(shí)作業(yè)課件新人教版
- 2023年六年級(jí)數(shù)學(xué)上冊(cè)期末復(fù)習(xí)考前模擬期末模擬訓(xùn)練二作業(yè)課件蘇教版
- 2023年六年級(jí)數(shù)學(xué)上冊(cè)期末豐收?qǐng)@作業(yè)課件蘇教版
- 2023年六年級(jí)數(shù)學(xué)上冊(cè)易錯(cuò)清單十二課件新人教版
- 標(biāo)準(zhǔn)工時(shí)講義
- 2021年一年級(jí)語(yǔ)文上冊(cè)第六單元知識(shí)要點(diǎn)習(xí)題課件新人教版
- 2022春一年級(jí)語(yǔ)文下冊(cè)課文5識(shí)字測(cè)評(píng)習(xí)題課件新人教版
- 2023年六年級(jí)數(shù)學(xué)下冊(cè)6整理和復(fù)習(xí)4數(shù)學(xué)思考第1課時(shí)數(shù)學(xué)思考1練習(xí)課件新人教版