第04章 基本輸入、輸出和順序程序設(shè)計(jì)_第1頁
第04章 基本輸入、輸出和順序程序設(shè)計(jì)_第2頁
第04章 基本輸入、輸出和順序程序設(shè)計(jì)_第3頁
第04章 基本輸入、輸出和順序程序設(shè)計(jì)_第4頁
第04章 基本輸入、輸出和順序程序設(shè)計(jì)_第5頁
已閱讀5頁,還剩41頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

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): 寫文章有文章的結(jié)構(gòu) 建房子有房子的結(jié)構(gòu) 制造機(jī)械產(chǎn)品由機(jī)械產(chǎn)品的結(jié)構(gòu) 那么編寫程序是否有程序的結(jié)構(gòu)呢?學(xué)習(xí)的意義 程序結(jié)構(gòu)順序結(jié)構(gòu)選擇結(jié)構(gòu)循環(huán)結(jié)構(gòu)YES!本章討論第5章討論第6章討論 格式化輸出printf 格式化輸入scanf 字符數(shù)據(jù)的非格式化輸入、輸出 程序的控制結(jié)構(gòu) 順序程序設(shè)計(jì)舉例 本章小結(jié)學(xué)習(xí)目標(biāo) 掌握各種類型數(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ī)屏幕上。 說明 格式控制字符串用于指定輸出格式。它包含兩類字符: 常規(guī)字符:包括可顯示字符和用轉(zhuǎn)義字符表示的字符。 格式控制符:以%開頭的一個(gè)或多個(gè)字符,以說明輸出數(shù)據(jù)的類型、形式、長(zhǎng)度、小數(shù)位數(shù)等。其格式為:%修飾符格式轉(zhuǎn)換字符例: long int x = 0 x8AB6;

3、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) 不同類型的表達(dá)式要使用不同的格式轉(zhuǎn)換符,同一

4、表達(dá)式如果按照不同的格式轉(zhuǎn)換符來輸出,其結(jié)果可能是不一樣的。 printf (“how are you?n”); /只有一個(gè)字符串參數(shù), 輸出為:how are you?printf (“how old are you?n”, 20); /帶有兩個(gè)參數(shù),20沒有意義, 輸出為:how old are you?已 知: int a = 2;函數(shù)調(diào)用: printf(a * a = %d, a + 5 = %dn, a * a, a + 5);實(shí)際輸出: a * a = 4, a + 5 = 7 printf (5 + 3 = %d, 5 - 3 = %d, 5 * 3 = %d, 5 + 3,

5、5 - 3); 輸出結(jié)果將是:5 + 3 = 8,5 3 = 2,5 * 3 = -28710輸出隨機(jī)char ch = A;printf (ch = %c, ch); /輸出結(jié)果:ch = A (以字符形式輸出)printf (ch = %d, ch); /輸出結(jié)果:ch = 65 (以A字符的ASCII碼形式輸出) printf函數(shù)中的格式轉(zhuǎn)換字符及其含義 格式轉(zhuǎn)換符含 義對(duì)應(yīng)的表達(dá)式數(shù)據(jù)類型%d 或 %i以十進(jìn)制形式輸出一個(gè)整型數(shù)據(jù)。例如:int a = 20;printf (%d, a); /輸出20有符號(hào)整型%x,%X以十六進(jìn)制形式輸出一個(gè)無符號(hào)整型數(shù)據(jù)。例如:int a = 164

6、;printf (%x, a); /輸出a4printf (%X, a); /輸出A4無符號(hào)整型%o ( 字母o )以八進(jìn)制形式輸出一個(gè)無符號(hào)整型數(shù)據(jù)。例如:int a = 164;printf (%o, a); /輸出244無符號(hào)整型%u以十進(jìn)制形式輸出一個(gè)無符號(hào)整型數(shù)據(jù)。例如:int a = -1;printf (%u, a); /BC下輸出65535,VC下4294967295無符號(hào)整型%c輸出一個(gè)字符型數(shù)據(jù)。例如:char ch = A;printf (%c, ch); /輸出A字符型 printf函數(shù)中的格式轉(zhuǎn)換字符及其含義 格式轉(zhuǎn)換符含 義對(duì)應(yīng)的表達(dá)式數(shù)據(jù)類型%s輸出一個(gè)字符串。例

7、如:printf (my name is %s, wangjinghua); /輸出my name is wangjinghua字符串%f以十進(jìn)制小數(shù)形式輸出一個(gè)浮點(diǎn)型數(shù)據(jù)。例如:float f = -12.3;printf (%f, f); /輸出-12.300000浮點(diǎn)型%e,%E以指數(shù)形式輸出一個(gè)浮點(diǎn)型數(shù)據(jù)。例如:float f = 1234.8998;printf (%e, f); /輸出1.234900e+003printf (%E, f); /輸出1.234900E+003浮點(diǎn)型%g,%G按照%f或%e中輸出寬度比較短的一種格式輸出。浮點(diǎn)型%p以主機(jī)的格式顯示指針,即變量的地址。例

8、如:int a = 2;printf (“%p”, &a); /BC下輸出FFD8, VC下 0012FF7C指針類型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:無符號(hào)整數(shù),表示輸出整數(shù)的最小域?qū)挘凑计聊坏亩嗌俑瘢?。若?shí)際寬度超過了width,則按照實(shí)際寬度輸出。 .precision:無符號(hào)整數(shù),表示至少要輸出precision位。若整數(shù)的位數(shù)大于precision,則按照實(shí)際位數(shù)輸出,否則在左邊的空位上補(bǔ)0

9、。 字母l:如果在d的前面有字母l(long),表示要輸出長(zhǎng)整型數(shù)據(jù)。 字母h:如果在d的前面有字母h(short),表示要輸出短整型數(shù)據(jù)。 說明:%- + 0 width .precision l h d輔助格式控制字符(修飾符) 【例】有符號(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, a);

10、 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, L); printf (L=%hd-(L=%hd)n, L); 12345678901234567

11、890a=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=%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ù)的輸出 無符號(hào)整數(shù)的輸出 一般形式: :表示可

12、選項(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或0X所占的位數(shù)。 其它字段的含義與前面介紹的相同。 說明:%- # 0 width .precision l h u | o | x | X輔助格式控制字符(修飾符) 2. 實(shí)數(shù)的輸出 一般形式: :表示可選項(xiàng),可缺省。 | :表示互斥關(guān)系。 #:必須輸出小數(shù)點(diǎn)。 .pr

13、ecision:規(guī)定輸出實(shí)數(shù)時(shí),小數(shù)部分的位數(shù)。 l:輸出double型數(shù)據(jù)(缺省時(shí)也是輸出double型數(shù)據(jù))。 L:輸出long double型數(shù)據(jù)。 其它字段的含義與前面介紹的相同。 說明:%- + # 0 width .precision l | L f | e | E | g | G輔助格式控制字符(修飾符) 【例】實(shí)數(shù)的格式化輸出 #include void main ( ) double f = 2.5e5; printf ( 12345678901234567890n); printf (f=%15f-(f=%15f)n, f); printf (f=%015f-(f=%015

14、f)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); 12345678901234567890f= 250000.000000-(f=%15f)f=00250000.000000-(f=%015f)f=250000 -(f=%-15.0f)f= 250000.-(f=%#15.0f)f= +250000.0000-(f=%+15.4f)f= 2.50

15、00E+005-(f=%#15.4E)運(yùn)行結(jié)果:3. 字符和字符串的輸出 一般形式: :表示可選項(xiàng),可缺省。 .precision:表示只輸出字符串的前precision個(gè)字符。 其它字段的含義與前面介紹的相同。 說明: 輸出字符: %- 0 width c 輔助格式控制字符(修飾符) 輸出字符串: %- 0 width .precision s 輔助格式控制字符(修飾符) 【例】字符及字符串的格式化輸出 #include void main ( ) char ch = A; printf ( 12345678901234567890n); printf (ch=%c-(ch=%c)n, ch

16、); 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-(st=%06.3s)n, CCNU); 12345678901234567890ch=A-(ch=%c)ch= A-(ch=%4c)ch=A -(ch=%-4c)ch=000A-(ch=%04c)st=CCNU-(st=%s)st=

17、CCNU-(st=%6s)st=000CCN-(st=%06.3s)運(yùn)行結(jié)果:4. 輔助格式控制符(修飾符)小結(jié) 修飾符功 能例 子width輸出數(shù)據(jù)域?qū)?,?shù)據(jù)長(zhǎng)度width,補(bǔ)空格;否則按實(shí)際輸出%4d:表示輸出至少占4格.precision對(duì)于整數(shù):表示至少要輸出precision位,當(dāng)數(shù)據(jù)長(zhǎng)度小于precision,左邊補(bǔ)0%6.4d:表示至少要輸出4位數(shù)對(duì)于實(shí)數(shù):指定小數(shù)點(diǎn)后位數(shù)(四舍五入)%6.2f:表示輸出2位小數(shù)對(duì)于字符串:表示只輸出字符串的前precision個(gè)字符%.3s:表示輸出字符串前3個(gè)字符輸出數(shù)據(jù)在域內(nèi)左對(duì)齊(缺省右對(duì)齊)%-16d:表示輸出數(shù)據(jù)左對(duì)齊+輸出有符號(hào)正數(shù)

18、時(shí),在其前面顯示正號(hào)(+)%+d:表示輸出整數(shù)的正負(fù)號(hào)0輸出數(shù)值時(shí),指定左邊不使用的空格自動(dòng)填0%08X:表示輸出十六進(jìn)制無符號(hào)整數(shù),不足8位時(shí)左補(bǔ)04. 輔助格式控制符(修飾符)小結(jié) 修飾符功 能例 子#對(duì)于無符號(hào)數(shù):在八進(jìn)制和十六進(jìn)制數(shù)前顯示前導(dǎo)0,0 x或0X%#X:表示輸出的十六進(jìn)制前顯示前導(dǎo)0X對(duì)于實(shí)數(shù):必須輸出小數(shù)點(diǎn)%#10.0f:表示輸出的浮點(diǎn)數(shù)必須輸出小數(shù)點(diǎn)h在d、o、x、u前,指定輸出為短整型數(shù)%hd:表示輸出短整型數(shù)l在d、o、x、u前,指定輸出為long int型%ld:表示輸出長(zhǎng)整型數(shù)在e、f、g前,指定輸出精度為double型(缺省也為double)%lf:表示輸出為

19、double型數(shù)L在e、f、g前,指定輸出精度為long double型%Lf:表示輸出為long double型數(shù)此外,在使用printf函數(shù)時(shí)還要注意以下幾點(diǎn): 格式控制字符串后面表達(dá)式的個(gè)數(shù)一般要與格式控制字符串中的格式控制符的個(gè)數(shù)相等。 格式轉(zhuǎn)換符中,除了X、E、G以外,其它均為小寫。 表達(dá)式的實(shí)際數(shù)據(jù)類型要與格式轉(zhuǎn)換符所表示的類型相符,printf函數(shù)不會(huì)進(jìn)行不同數(shù)據(jù)類型之間的自動(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

20、f = 2; printf (a = %d, b = %dn, f, b); printf (a = %f, b = %dn, a, b); printf (a = %ld, b = %dn, 120, b);a = 2.000000, b = 100a = 10.000000, b = 100a = 120, b = 100期望的運(yùn)行結(jié)果:a = 0, b = 0a = 0.000000, b = -192a = 6553720, b = -28770實(shí)際的運(yùn)行結(jié)果(BC3.1下):a = 0, b = 1073741824a = 0.000000, b = 2012780960a = 12

21、0, b = 100實(shí)際的運(yùn)行結(jié)果(VC6.0下):Why?輸出float型數(shù)據(jù)f,卻使用了%d, a的不正常輸出會(huì)影響到下一個(gè)表達(dá)式的正常輸出 輸出int型數(shù)據(jù)a,卻使用了%f , a的不正常輸出會(huì)影響到下一個(gè)表達(dá)式的正常輸出 輸出int型數(shù)據(jù)120,卻使用了%ld。 在BC3.1下,因?yàn)檎秃烷L(zhǎng)整型所占內(nèi)存單元的大小不同(整型占2字節(jié),長(zhǎng)整型占4字節(jié)),整型不會(huì)自動(dòng)轉(zhuǎn)換成長(zhǎng)整型,所以不會(huì)正常輸出120,同時(shí)也會(huì)影響到下一個(gè)表達(dá)式的輸出。 但在VC6.0下,因?yàn)檎秃烷L(zhǎng)整型所占內(nèi)存單元的大小相同(均占4字節(jié)),且都是整型數(shù)據(jù),數(shù)據(jù)類型基本是相同的,所以輸出的結(jié)果正確 如何修改?printf

22、(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ù)格式控制字符串的控制下,接受用戶的鍵盤輸入,并將輸入的數(shù)據(jù)依此存放在變量1、變量2、變量n中 。 int a;scanf (%d, &a); 取地址運(yùn)算符(與按位“與”同符號(hào)),只能作用于變量! 格式控制

23、符與后續(xù)參數(shù)中的變量地址的對(duì)應(yīng)關(guān)系 已 知: int a , b;函數(shù)調(diào)用: scanf (%d%d, &a , &b);假設(shè)輸入: 1020 變量的值: a的值是10,b的值是20 scanf函數(shù)的格式控制符 %* width l | h Type 一般形式: 說明: :表示可選項(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

24、前,指定輸入為short型整數(shù)。 使用scanf函數(shù)注意事項(xiàng) (1) 如果相鄰兩個(gè)格式控制符之間,不指定數(shù)據(jù)分隔符(如逗號(hào)、冒號(hào)等),則相應(yīng)的兩個(gè)輸入數(shù)據(jù)之間,至少用一個(gè)空格分隔,或者用Tab鍵分隔,或者輸入一個(gè)數(shù)據(jù)后,按回車,然后再輸入下一個(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)的變量

25、,多余部分被舍棄。 例如: scanf (%d%d, &num1, &num2); 假設(shè)給num1輸入12,給num2輸入36,則正確的輸入操作為: 1236 或者 12 36 使用“”符號(hào)表示按回車鍵操作,在輸入數(shù)據(jù)操作中的作用是,通知系統(tǒng)輸入操作結(jié)束。例如: scanf (%d:%d:%d, &h, &m, &s); 假設(shè)給h輸入12,給m輸入30,給s輸入10,正確的輸入操作為: 12:30:10 例如: scanf (num1=%d, num2=%dn, &num1, &num2); 假設(shè)給num1輸入12,給num2輸入36,正確的輸入操作為: num1=12,num2=36n例如:

26、 將scanf (num1=%d, num2=%dn, &num1, &num2); 改為: printf (num1=); scanf (%d, &num1); printf (num2=); scanf (%d, &num2);例如: scanf (%3c%3c, &ch1, &ch2); 假設(shè)輸入abcdefg,則系統(tǒng)將讀取的“abc”中的a賦給變量ch1;將讀取的def中的d賦給變量ch2。 使用scanf函數(shù)注意事項(xiàng) (5) 當(dāng)格式控制字符串中含有抑制符*時(shí),表示本輸入項(xiàng)對(duì)應(yīng)的數(shù)據(jù)讀入后,不賦給相應(yīng)的變量(該變量由下一個(gè)格式指示符輸入)。 (6) 使用格式控制符%c輸入單個(gè)字符時(shí),空

27、格和轉(zhuǎn)義字符均作為有效字符被輸入。 (7) 輸入數(shù)據(jù)時(shí),遇到以下情況,系統(tǒng)認(rèn)為該數(shù)據(jù)結(jié)束: 遇到空格,或者回車鍵,或者Tab鍵。 遇到輸入域?qū)挾冉Y(jié)束。例如“%3d”,只取3列。 遇到非法輸入。比方說,在輸入數(shù)值數(shù)據(jù)時(shí),遇到字母等非數(shù)值符號(hào)。 (8) 當(dāng)一次scanf調(diào)用需要輸入多個(gè)數(shù)據(jù)項(xiàng)時(shí),如果前面數(shù)據(jù)的輸入遇到非法字符,并且輸入的非法字符不是格式控制字符串中的常規(guī)字符,那么,這種非法輸入將影響后面數(shù)據(jù)的輸入,導(dǎo)致數(shù)據(jù)輸入失敗。例如: scanf (%2d%*2d%3d, &num1, &num2); printf (num1=%d, num2=%dn, num1, num2); 假設(shè)輸入12

28、3456789 輸出結(jié)果為:num1=12, num2=567。 例如: scanf (%c%c%c, &ch1, &ch2, &ch3); 假設(shè)輸入:ABC,則系統(tǒng)將字母A賦值給ch1,空格賦值給ch2,字母B賦值給ch3。 例如: scanf (%d, a); 如果輸入為:12a3,a的值將是12。例如: scanf (%d,%d, &a, &b); 如果輸入為:12a34,那么a的值將是12,b的值將無法預(yù)測(cè)。 正確的輸入是:12,34 【例】數(shù)據(jù)的格式化輸入 輸入一學(xué)生的學(xué)號(hào)(8位數(shù)字)、生日(年-月-日)、性別(M:男,F(xiàn):女)及三門功課(語文、數(shù)學(xué)、英語)的成績(jī),現(xiàn)要求計(jì)算該學(xué)生的

29、總分和平均分,并將該學(xué)生的全部信息輸出(包括總分、平均分)。#include void main ( ) unsigned long no; /學(xué)號(hào) unsigned int year, month, day; /生日(年、月、日) unsigned char sex; /性別 float chinese, math, english; /語文、數(shù)學(xué)、英語成績(jī) float total, average; /總分、平均分 printf (input the students NO: ); scanf (%8ld, &no); printf (input the students Birthday

30、(yyyy-mm-dd): ); scanf (%4d-%2d-%2d, &year, &month, &day); fflush (stdin); /清除鍵盤緩沖區(qū) printf (input the students Sex(M/F): ); scanf (%c, &sex); printf (input the students Scores(chinese, math, english): ); scanf (%f,%f,%f, &chinese, &math, &english); total = chinese + math + english; /計(jì)算總分 average = t

31、otal / 3; /計(jì)算平均分 printf (n=NO=birthday=sex=chinese=math= english=total=averagen); printf (%08ld %4d-%02d-%02d %c %-5.1f %-5.1f %-5.1f %-5.1f %-5.1fn, no, year, month, day, sex, chinese, math, english, total, average);假設(shè)輸入 :input the students NO:20040101input the students Birthday(yyyy-mm-dd):1987-9-

32、8input the students Sex(M/F):Minput the students Scores(chinese, math, english):90,80,90輸出結(jié)果 :=NO=birthday=sex=chinese=math=english=total=average20040101 1987-09-08 M 90.0 80.0 90.0 260.0 86.74.3 字符數(shù)據(jù)的非格式化輸入、輸出 1. 字符數(shù)據(jù)的非格式化輸入int getchar ( void ); /應(yīng)包含的.h文件為stdio.h 與輸入字符數(shù)據(jù)有關(guān)的常用庫函數(shù)主要有: getchar、getc、ge

33、tche、getch等。 getchar 功能:從鍵盤讀一字符 返值:正常,返回讀取字符的ASCII碼值;出錯(cuò),返回EOF(-1)。 說明:以回車符為輸入結(jié)束條件;輸入多個(gè)字符時(shí),返回第一個(gè)字符的值;輸入字符回顯。【例】利用getchar輸入字符 #include #include void main ( ) char ch1, ch2; int a; ch1 = getchar ( ); ch2 = getchar ( ); scanf (%d, &a); printf (ch1 = %c, ch2 = %cn, ch1, ch2); printf (a = %dn, a);ch1 = 1,

34、 ch2 = 2a = 34運(yùn)行結(jié)果(假設(shè)輸入為:1234): int getc ( FILE *stream ); /應(yīng)包含的.h文件為stdio.h getc 功能:從流文件stream中讀取一個(gè)字符信息,它的返回值是所讀取字符的ASCII碼。 返值:正常,返回讀取字符的ASCII碼值;出錯(cuò),返回EOF(-1)。 說明:該函數(shù)帶有一個(gè)參數(shù)stream,它是一文件指針(第12章介紹),表示流文件,當(dāng)流文件是stdin時(shí),getc函數(shù)的功能與getchar函數(shù)的功能完全相同。也就是說,getc(stdin)與getchar( )是等價(jià)的。int getche ( void ); /應(yīng)包含的.h

35、文件為conio.h getche 功能:與getchar的功能基本相同 。 返值:正常,返回讀取字符的ASCII碼值;出錯(cuò),返回EOF(-1)。 說明:直接從鍵盤獲取鍵值,不等待用戶按回車鍵;輸入字符回顯。 getch int getch ( void ); /應(yīng)包含的.h文件為conio.h 功能:與getche的功能基本相同 。 返值:正常,返回讀取字符的ASCII碼值;出錯(cuò),返回EOF(-1)。 說明:直接從鍵盤獲取鍵值,不等待用戶按回車鍵;輸入字符不回顯。 【例】getch與getche的差異 #include #include void main ( ) char ch1, ch2

36、; printf (please press two keyn); ch1 = getche ( ); /回顯 ch2 = getch ( ); /不回顯 printf (nyouve pressed %c and %cn, ch1, ch2);please press two keyayouve pressed a and b運(yùn)行結(jié)果(假設(shè)依次按下a鍵和b鍵): 庫函數(shù)名功 能函數(shù)原型所在頭文件getchar接受一字符輸入,以回車鍵結(jié)束,回顯stdio.hgetc從輸入流中接受一字符,以回車鍵結(jié)束,回顯stdio.hgetche接受一字符輸入,輸入字符后就結(jié)束,回顯conio.hgetch接

37、受一字符輸入,輸入字符后就結(jié)束,不回顯conio.h與輸入字符數(shù)據(jù)有關(guān)的庫函數(shù)功能比較: 2. 字符數(shù)據(jù)的非格式化輸出int putchar ( int c ); /應(yīng)包含的.h文件為stdio.h 與輸出字符數(shù)據(jù)有關(guān)的常用庫函數(shù)主要有: putchar、putc、puts等。 putchar 功能:在顯示器上輸出字符c。 返值:正常,返回字符的代碼值;出錯(cuò),返回EOF(-1)。 說明:該函數(shù)帶有一個(gè)參數(shù)c,它為要顯示字符的ASCII碼值,有一個(gè)int型返回值 。 putc int putc ( int c, FILE *stream ); /應(yīng)包含的.h文件為stdio.h 功能:將字符c輸

38、出到流文件stream。如果流文件為stdout,則功能與putchar完全相同,所以putc(c, stdout)等價(jià)于putchar(c) 返值:正常,返回字符的代碼值;出錯(cuò),返回EOF(-1)。 putsint puts ( char *string ); /應(yīng)包含的.h文件為stdio.h 功能:將字符串string的所有字符輸出到屏幕上,輸出時(shí)將自動(dòng)回車換行。 【例】利用字符輸出函數(shù)輸出字符 #include void main ( ) int a = 65; char b = B; putchar (a); /不自動(dòng)回車 putchar (n); puts (“is as good

39、 as ”); /自動(dòng)回車 putc (b, stdout); Ais as good asB運(yùn)行結(jié)果: 4.4 程序的控制結(jié)構(gòu) 1. 算法的基本概念 程序 = 數(shù)據(jù)結(jié)構(gòu) + 算法。 算法:簡(jiǎn)而言之,就是解決問題的方法與步驟。 程序設(shè)計(jì)語言:是程序開發(fā)工具,即是將算法轉(zhuǎn)化為程序的開發(fā)工具。 程序:算法的具體實(shí)現(xiàn)。 學(xué)習(xí)C語言,不僅要熟練掌握其語言本身的特點(diǎn)、語法規(guī)則等意外,更重要的就是掌握分析問題、解決問題的方法,就是鍛煉分析、分解,最終歸納整理出算法的能力。 2.算法設(shè)計(jì)舉例 【例1】輸入三個(gè)數(shù),然后輸出其中最大的數(shù) 。 總體思路: 首先,得先有個(gè)地方裝這三個(gè)數(shù),我們定義三個(gè)變量A、B、C,

40、將三個(gè)數(shù)依次輸入到、B、C中,另外,再準(zhǔn)備一個(gè)MAX裝最大數(shù)。 由于計(jì)算機(jī)一次只能比較兩個(gè)數(shù),我們首先把A與B比,大的數(shù)放入MAX中,再把MAX與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)兩步仍不明確,無法直接轉(zhuǎn)化為程序語句,可以繼續(xù)細(xì)化: (2) 把A與B中大的一個(gè)放入MAX中,若A B,則MAX A;否則MAX B。 (3) 把C與MAX中大的一個(gè)放入M

41、AX中,若C MAX,則MAX C。 算法最后可以寫成: (1) 輸入A,B,C。 (2) 若A B,則MAX A;否則MAXB。 (3) 若C MAX,則MAX C。 (4) 輸出MAX,MAX即為最大數(shù) 3. 算法的描述方法 自然語言描述如前面表示的那樣,自然語言就是人們?nèi)粘J褂玫恼Z言,可以是漢語、英語,或其他語言。優(yōu)點(diǎn):用自然語言表示通俗易懂;缺點(diǎn):(1) 文字冗長(zhǎng),容易出現(xiàn)歧義性。自然語言表示的含義往往不太嚴(yán)格,要根據(jù)上下文才能判斷其正確含義。假如有這樣一句話:“張先生對(duì)李先生說他的孩子考上了大學(xué)”。請(qǐng)問是張先生的孩子考上了大學(xué)還是李先生的孩子考上了大學(xué)呢?光從這句話本身難以判斷。(2

42、) 用自然語言來描述包含分支和循環(huán)的算法,不很方便。因此,除了那些很簡(jiǎn)單的問題以外,一般不用自然語言描述算法。 3. 算法的描述方法 流程圖流程圖是一種傳統(tǒng)的算法表示法,利用幾何圖形的框來代表各種不同性質(zhì)的操作,用流程線來指示算法的執(zhí)行方向。由于其簡(jiǎn)單直觀,所以應(yīng)用廣泛,特別是在早期語言設(shè)計(jì)階段,只有通過流程圖才能簡(jiǎn)明地表述算法,流程圖成為程序員們交流的重要手段,直到結(jié)構(gòu)化的程序設(shè)計(jì)語言出現(xiàn),對(duì)流程圖的依賴才有所降低 起止框判斷框輸入、輸出框注釋框處理框連接點(diǎn)流程線_常見流程圖符號(hào)【例2】的算法的流程圖開 始i = 9a1 = 1i 1i = i - 1a0 = 2*(a1+1)a1 = a0

43、輸出a0結(jié) 束T【例1】的算法的流程圖MAX AMAX BA B輸入A, B, C開 始MAX C輸出MAX結(jié) 束C MAXTTFF3. 算法的描述方法 偽碼描述偽碼是指介于自然語言和計(jì)算機(jī)語言之間的一種代碼,是幫助程序員制定算法的智能化語言,它不能在計(jì)算機(jī)上運(yùn)行,但是使用起來比較靈活,無固定格式規(guī)范,只要寫出來自己或別人能看懂即可,由于它與計(jì)算機(jī)語言比較接近,因此易于轉(zhuǎn)換為計(jì)算機(jī)程序。用偽碼描述【例1】的算法 input A, B, C if A B then MAX = A else MAX = B if C MAX then MAX = C print MAX 用偽碼描述【例2】的算法

44、i = 9 a1 = 1 LOOP: while i 1 a0 = 2 * (a1 + 1) a1 = a0 i = i1 goto LOOP print a0 4. 算法的基本結(jié)構(gòu) (1) 順序結(jié)構(gòu)ABCA條件ABTF(2) 分支結(jié)構(gòu)條件TF(3) 循環(huán)結(jié)構(gòu)ATF條件A條件TF4.5 順序程序設(shè)計(jì)舉例 【例1】任意從鍵盤輸入一個(gè)三位整數(shù),要求正確地分離出它的個(gè)位、十位和百位數(shù),并分別在屏幕上輸出。 程序設(shè)計(jì)的分析: 本例要求設(shè)計(jì)一個(gè)從三位整數(shù)中分離出它的個(gè)位、十位和百位數(shù)的算法。例如,輸入的是456,則輸出的分別是4、5、6,最低位數(shù)字可用對(duì)10求余的方法得到,如456%10=6,最高位的百

45、位數(shù)字可用對(duì)100整除的方法得到,如456/10=4,中間位的數(shù)字既可通過將其變換為最高位后再整除的方法得到,如(456-4*100)/10=5,也可通過將其變換為最低位再求余的方法得到,如(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 main ( ) int x, b0, b1, b2;

46、/變量定義 printf (please input an integer x: ); /提示用戶輸入一個(gè)整數(shù) scanf (%d, &x); /輸入一個(gè)整數(shù) b2 = x / 100; /用整除方法計(jì)算最高位 b1 = (x - b2 * 100) / 10; /計(jì)算中間位 b0 = x % 10; /用求余數(shù)法計(jì)算最低位 printf (bit2 = %d, bit1 = %d, bit0 = %dn, b2, b1, b0); /輸出結(jié)果 具體程序如下:please input an integer x: 456bit2 = 4, bit1 = 5, bit0 = 6 運(yùn)行結(jié)果: 4.5 順序程序設(shè)計(jì)舉例 【例2】小寫字母轉(zhuǎn)盤(如下圖所示)。 這個(gè)程序要求用戶輸入一個(gè)小寫字母字符,求出該字母字符的前驅(qū)和后繼字符,例如,c字符的前驅(qū)和后繼分別是b和d,a字符的前驅(qū)和后繼分別是z和b,z字符的前驅(qū)和后繼分別是y和a。 abcdefzyx. 程序設(shè)計(jì)的分析: 求一個(gè)字母的前驅(qū)字母

溫馨提示

  • 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)論