版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第3章 輸入輸出與簡單程序設計格式化輸入方法格式化輸出方法字符數據的非格式化輸入、輸出 學習的意義 程序對數據的處理流程: 程序的主要功能就是對數據的處理,其整個流程主要包括數據的輸入、數據的處理、數據的輸出。數據處理數據輸入數據輸出C程序中如何實現數據輸入?C程序中如何實現數據輸出? 程序的結構: 寫文章有文章的結構 建房子有房子的結構 制造機械產品由機械產品的結構 那么編寫程序是否有程序的結構呢?學習的意義 程序結構順序結構選擇結構循環(huán)結構YES!本章討論第5章討論第6章討論 格式化輸出printf 格式化輸入scanf 字符數據的非格式化輸入、輸出 程序的控制結構 順序程序設計舉例 本章
2、小結學習目標 掌握各種類型數據的格式化輸入輸出方法; 掌握字符數據的非格式化輸入輸出方法; 理解三種程序控制結構的流程圖; 學會簡單順序程序的設計; 養(yǎng)成良好的程序設計習慣; 學習內容 格式化輸出printf P53printf (格式控制字符串,表達式1,表達式2,表達式n); 按照“格式控制字符串”的要求,將表達式1,表達式2,表達式n的值顯示在計算機屏幕上。 格式控制字符串可以包含如下三類字符: 常規(guī)字符:會原樣顯示在屏幕上,起注釋作用。 格式控制符:以%開頭的一個或多個字符,以說明輸出數據的類型、形式、長度、小數位數等。 轉義字符:如n(回車換行)等,用于對輸出控制。%修飾符格式轉換字
3、符例: long int x = 0 x8AB6; printf (“The Value of x is %ldn”, x);常規(guī)字符轉義符格式控制符(修飾符)格式控制符(格式轉換符) printf使用時的注意事項(1) 格式控制字符串可以不包含任何格式控制符。(2) 當格式控制字符串中既含有常規(guī)字符,又包含有格式控制符時,則表達式的個數應與格式控制符的個數一致。此時,常規(guī)字符原樣輸出,而格式控制符的位置上輸出對應的表達式的值,其對應的順序是:從左到右的格式控制符對應從左到右的表達式。(3) 如果格式控制字符串中格式控制符的個數多于表達式的個數,則余下的格式控制符的值將是不確定的。(4) 不同
4、類型的表達式要使用不同的格式轉換符,同一表達式如果按照不同的格式轉換符來輸出,其結果可能是不一樣的。 printf (“how are you?n”); /只有一個字符串參數, 輸出為:how are you?printf (“how old are you?n”, 20); /帶有兩個參數,20沒有意義, 輸出為:how old are you?已 知: int a = 2;函數調用: printf(a * a = %d, a + 5 = %dn, a * a, a + 5);實際輸出: a * a = 4, a + 5 = 7 printf (5 + 3 = %d, 5 - 3 = %d,
5、 5 * 3 = %d, 5 + 3, 5 - 3); 輸出結果將是:5 + 3 = 8,5 3 = 2,5 * 3 = -28710輸出隨機char ch = A;printf (ch = %c, ch); /輸出結果:ch = A (以字符形式輸出)printf (ch = %d, ch); /輸出結果:ch = 65 (以A字符的ASCII碼形式輸出) printf函數中的格式轉換字符及其含義 格式轉換符含 義對應的表達式數據類型%d 或 %i以十進制形式輸出一個整型數據。例如:int a = 20;printf (%d, a); /輸出20有符號整型%x,%X以十六進制形式輸出一個無符
6、號整型數據。例如:int a = 164;printf (%x, a); /輸出a4printf (%X, a); /輸出A4無符號整型%o ( 字母o )以八進制形式輸出一個無符號整型數據。例如:int a = 164;printf (%o, a); /輸出244無符號整型%u以十進制形式輸出一個無符號整型數據。例如:int a = -1;printf (%u, a); /BC下輸出65535,VC下4294967295無符號整型%c輸出一個字符型數據。例如:char ch = A;printf (%c, ch); /輸出A字符型 printf函數中的格式轉換字符及其含義 格式轉換符含 義對
7、應的表達式數據類型%s輸出一個字符串。例如:printf (my name is %s, wangjinghua); /輸出my name is wangjinghua字符串%f以十進制小數形式輸出一個浮點型數據。例如:float f = -12.3;printf (%f, f); /輸出-12.300000浮點型%e,%E以指數形式輸出一個浮點型數據。例如:float f = 1234.8998;printf (%e, f); /輸出1.234900e+003printf (%E, f); /輸出1.234900E+003浮點型%g,%G按照%f或%e中輸出寬度比較短的一種格式輸出。浮點型%
8、p以主機的格式顯示指針,即變量的地址。例如:int a = 2;printf (“%p”, &a); /BC下輸出FFD8, VC下 0012FF7C指針類型1. 整數的輸出 有符號整數的輸出 一般形式: :表示可選項,可缺省。 :表示輸出的數據左對齊,缺省時是右對齊。 :輸出正數時,在數的前面加上號。 數字0:右對齊時,如果實際寬度小于width,則在左邊的空位補0。 width:無符號整數,表示輸出整數的最小域寬(即占屏幕的多少格)。若實際寬度超過了width,則按照實際寬度輸出。 .precision:無符號整數,表示至少要輸出precision位。若整數的位數大于precision,則
9、按照實際位數輸出,否則在左邊的空位上補0。 字母l:如果在d的前面有字母l(long),表示要輸出長整型數據。 字母h:如果在d的前面有字母h(short),表示要輸出短整型數據。 說明:%- + 0 width .precision l h d輔助格式控制字符(修飾符) 【例】有符號整數的格式化輸出 #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
10、=%+6d-(a=%+6d)n, 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, L); printf (L=%hd-(L=%hd)n, L
11、); 12345678901234567890a=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)運行結果:L是一長整型數65537,其值為十六進制0X00010001,所以要將其轉換成短整型,即取低16位0 x0001,將其輸出,故輸出為1。 Why?1. 整數的輸出
12、 無符號整數的輸出 一般形式: :表示可選項,可缺省。 | :表示互斥關系。 # :表示當以八進制形式輸出數據(%o)時,在數字前輸出0;當以十六進制形式輸出數據(%x或%X)時,在數字前輸出0 x或0X。 .precision的含義與前面介紹的相同,但要注意,在TC和BC下,precision所指定的位數也包含了0 x或0X所占的位數,可在VC下,則不包含0 x或0X所占的位數。 其它字段的含義與前面介紹的相同。 說明:%- # 0 width .precision l h u | o | x | X輔助格式控制字符(修飾符) 【例】無符號整數的格式化輸出 #include void mai
13、n ( ) 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=%#010X)n, u); printf (u=%#10.10X- (u=%#10.10X)n, u); printf (L=%lX- (L=%lX)n,L); printf (L=
14、%-#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=%#10.10X)L=FFFF8000-(L=%lX)L=0X00008000 -(L=%-#14.10X)運行結果(在BC3.1下):a=-1, a=4294967295-(a=%d, a=%u)a=ffff, a=FFFFFFFF-(a=%hx, a=%X)u=77777, u=7FFF-(
15、u=%o, u=%X)u=0X00007FFF-(u=%#010X)u=0X0000007FFF-(u=%#10.10X)L=FFFF8000-(L=%lX)L=0X00FFFF8000 -(L=%-#14.10X)運行結果(在VC6.0下):111111111111111111111111111111111111111111111111寬度包含0X寬度不包含0X111111110111111111111111011111110000000000000000000000001000000011111111111111110000000010000000111111111111111100000
16、000100000001111111111111111000000001000000011111111111111112. 實數的輸出 一般形式: :表示可選項,可缺省。 | :表示互斥關系。 #:必須輸出小數點。 .precision:規(guī)定輸出實數時,小數部分的位數。 l:輸出double型數據(缺省時也是輸出double型數據)。 L:輸出long double型數據。 其它字段的含義與前面介紹的相同。 說明:%- + # 0 width .precision l | L f | e | E | g | G輔助格式控制字符(修飾符) 【例】實數的格式化輸出 #include void ma
17、in ( ) double f = 2.5e5; printf ( 12345678901234567890n); printf (f=%15f-(f=%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); 12345678901234567890f= 250000.000000-(
18、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.5000E+005-(f=%#15.4E)運行結果:3. 字符和字符串的輸出 一般形式: :表示可選項,可缺省。 .precision:表示只輸出字符串的前precision個字符。 其它字段的含義與前面介紹的相同。 說明: 輸出字符: %- 0 width c 輔助格式控制字符(修飾符) 輸出字符串: %- 0 width .precision s 輔助格式控制字符(修飾符)
19、【例】字符及字符串的格式化輸出 #include void main ( ) char ch = A; 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-(st=%06
20、.3s)n, CCNU); 12345678901234567890ch=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)運行結果:4. 輔助格式控制符(修飾符)小結 修飾符功 能例 子width輸出數據域寬,數據長度width,補空格;否則按實際輸出%4d:表示輸出至少占4格.precision對于整數:表示至少要輸出precision位,當數據長度小于precision,左邊補0%6.4d:表示至少要輸出4位數對于實數:指定
21、小數點后位數(四舍五入)%6.2f:表示輸出2位小數對于字符串:表示只輸出字符串的前precision個字符%.3s:表示輸出字符串前3個字符輸出數據在域內左對齊(缺省右對齊)%-16d:表示輸出數據左對齊+輸出有符號正數時,在其前面顯示正號(+)%+d:表示輸出整數的正負號0輸出數值時,指定左邊不使用的空格自動填0%08X:表示輸出十六進制無符號整數,不足8位時左補04. 輔助格式控制符(修飾符)小結 修飾符功 能例 子#對于無符號數:在八進制和十六進制數前顯示前導0,0 x或0X%#X:表示輸出的十六進制前顯示前導0X對于實數:必須輸出小數點%#10.0f:表示輸出的浮點數必須輸出小數點h
22、在d、o、x、u前,指定輸出為短整型數%hd:表示輸出短整型數l在d、o、x、u前,指定輸出為long int型%ld:表示輸出長整型數在e、f、g前,指定輸出精度為double型(缺省也為double)%lf:表示輸出為double型數L在e、f、g前,指定輸出精度為long double型%Lf:表示輸出為long double型數此外,在使用printf函數時還要注意以下幾點: 格式控制字符串后面表達式的個數一般要與格式控制字符串中的格式控制符的個數相等。 格式轉換符中,除了X、E、G以外,其它均為小寫。 表達式的實際數據類型要與格式轉換符所表示的類型相符,printf函數不會進行不同數
23、據類型之間的自動轉換。象整型數據不可能自動轉換成浮點型數據,浮點型數據也不可能自動轉換成型數數據 【例】錯誤的格式化輸出 #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, 120, b);a = 2.000000, b = 100a = 10.000000, b = 100a = 120, b = 100期望的運行結果:a = 0, b = 0a = 0
24、.000000, b = -192a = 6553720, b = -28770實際的運行結果(BC3.1下):a = 0, b = 1073741824a = 0.000000, b = 2012780960a = 120, b = 100實際的運行結果(VC6.0下):Why?輸出float型數據f,卻使用了%d, a的不正常輸出會影響到下一個表達式的正常輸出 輸出int型數據a,卻使用了%f , a的不正常輸出會影響到下一個表達式的正常輸出 輸出int型數據120,卻使用了%ld。 在BC3.1下,因為整型和長整型所占內存單元的大小不同(整型占2字節(jié),長整型占4字節(jié)),整型不會自動轉換成
25、長整型,所以不會正常輸出120,同時也會影響到下一個表達式的輸出。 但在VC6.0下,因為整型和長整型所占內存單元的大小相同(均占4字節(jié)),且都是整型數據,數據類型基本是相同的,所以輸出的結果正確 如何修改?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);返回格式化輸入scanf P59 一般格式scanf (“格式控制字符串”,變量1的地址,變量2的地址,變量n的地址
26、); 功能 第一個參數格式控制字符串的控制下,接受用戶的鍵盤輸入,并將輸入的數據依此存放在變量1、變量2、變量n中 。 int a;scanf (%d, &a); 取地址運算符(與按位“與”同符號),只能作用于變量! 格式控制符與后續(xù)參數中的變量地址的對應關系 已 知: int a , b;函數調用: scanf (%d%d, &a , &b);假設輸入: 1020 變量的值: a的值是10,b的值是20 scanf函數的格式控制符 %* width l | h Type 一般形式: 說明: :表示可選項,可缺省。|表示互斥關系。 width:指定輸入數據的域寬,遇空格或不可轉換字符則結束。
27、Type:各種格式轉換符(參照printf)。 *:抑制符,輸入的數據不會賦值給相應的變量。 l:用于d、u、o、x|X前,指定輸入為long型整數;用于e|E、f前,指定輸入為double型實數。 h:用于d、u、o、x|X前,指定輸入為short型整數。 使用scanf函數注意事項 (1) 如果相鄰兩個格式控制符之間,不指定數據分隔符(如逗號、冒號等),則相應的兩個輸入數據之間,至少用一個空格分隔,或者用Tab鍵分隔,或者輸入一個數據后,按回車,然后再輸入下一個數據。 (2) 格式控制字符串中出現的常規(guī)字符(包括轉義字符),務必原樣輸入。 (3) 為改善人機交互性,同時簡化輸入操作,在設計
28、輸入操作時,一般先用printf( )函數輸出一個提示信息,再用scanf( )函數進行數據輸入 。 (4) 當格式控制字符串中指定了輸入數據的域寬width時,將讀取輸入數據中相應的width位,但按需要的位數賦給相應的變量,多余部分被舍棄。 例如: scanf (%d%d, &num1, &num2); 假設給num1輸入12,給num2輸入36,則正確的輸入操作為: 1236 或者 12 36 使用“”符號表示按回車鍵操作,在輸入數據操作中的作用是,通知系統(tǒng)輸入操作結束。例如: scanf (%d:%d:%d, &h, &m, &s); 假設給h輸入12,給m輸入30,給s輸入10,正確
29、的輸入操作為: 12:30:10 例如: scanf (num1=%d, num2=%dn, &num1, &num2); 假設給num1輸入12,給num2輸入36,正確的輸入操作為: num1=12,num2=36n例如: 將scanf (num1=%d, num2=%dn, &num1, &num2); 改為: printf (num1=); scanf (%d, &num1); printf (num2=); scanf (%d, &num2);例如: scanf (%3c%3c, &ch1, &ch2); 假設輸入abcdefg,則系統(tǒng)將讀取的“abc”中的a賦給變量ch1;將讀取的
30、def中的d賦給變量ch2。 使用scanf函數注意事項 (5) 當格式控制字符串中含有抑制符*時,表示本輸入項對應的數據讀入后,不賦給相應的變量(該變量由下一個格式指示符輸入)。 (6) 使用格式控制符%c輸入單個字符時,空格和轉義字符均作為有效字符被輸入。 (7) 輸入數據時,遇到以下情況,系統(tǒng)認為該數據結束: 遇到空格,或者回車鍵,或者Tab鍵。 遇到輸入域寬度結束。例如“%3d”,只取3列。 遇到非法輸入。比方說,在輸入數值數據時,遇到字母等非數值符號。 (8) 當一次scanf調用需要輸入多個數據項時,如果前面數據的輸入遇到非法字符,并且輸入的非法字符不是格式控制字符串中的常規(guī)字符,
31、那么,這種非法輸入將影響后面數據的輸入,導致數據輸入失敗。例如: scanf (%2d%*2d%3d, &num1, &num2); printf (num1=%d, num2=%dn, num1, num2); 假設輸入123456789 輸出結果為:num1=12, num2=567。 例如: scanf (%c%c%c, &ch1, &ch2, &ch3); 假設輸入:ABC,則系統(tǒng)將字母A賦值給ch1,空格賦值給ch2,字母B賦值給ch3。 例如: scanf (%d, a); 如果輸入為:12a3,a的值將是12。例如: scanf (%d,%d, &a, &b); 如果輸入為:12
32、a34,那么a的值將是12,b的值將無法預測。 正確的輸入是:12,34 【例】數據的格式化輸入 輸入一學生的學號(8位數字)、生日(年-月-日)、性別(M:男,F:女)及三門功課(語文、數學、英語)的成績,現要求計算該學生的總分和平均分,并將該學生的全部信息輸出(包括總分、平均分)。#include void main ( ) unsigned long no; /學號 unsigned int year, month, day; /生日(年、月、日) unsigned char sex; /性別 float chinese, math, english; /語文、數學、英語成績 float
33、 total, average; /總分、平均分 printf (input the students NO: ); scanf (%8ld, &no); printf (input the students Birthday(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, ma
34、th, english): ); scanf (%f,%f,%f, &chinese, &math, &english); total = chinese + math + english; /計算總分 average = total / 3; /計算平均分 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, m
35、ath, english, total, average);假設輸入 :input the students NO:20040101input the students Birthday(yyyy-mm-dd):1987-9-8input the students Sex(M/F):Minput the students Scores(chinese, math, english):90,80,90輸出結果 :=NO=birthday=sex=chinese=math=english=total=average20040101 1987-09-08 M 90.0 80.0 90.0 260.0
36、 86.7字符數據的非格式化輸入、輸出 P501. 字符數據的非格式化輸入int getchar ( void ); /應包含的.h文件為stdio.h 與輸入字符數據有關的常用庫函數主要有: getchar、getche、getch等。 getchar 功能:從鍵盤讀一字符 返值:正常,返回讀取字符的ASCII碼值;出錯,返回EOF(-1)。 說明:以回車符為輸入結束條件;輸入多個字符時,返回第一個字符的值;輸入字符回顯?!纠坷胓etchar輸入字符 #include #include void main ( ) char ch1, ch2; int a; ch1 = getchar (
37、 ); ch2 = getchar ( ); scanf (%d, &a); printf (ch1 = %c, ch2 = %cn, ch1, ch2); printf (a = %dn, a);ch1 = 1, ch2 = 2a = 34運行結果(假設輸入為:1234): int getche ( void ); /應包含的.h文件為conio.h getche 功能:與getchar的功能基本相同 。 返值:正常,返回讀取字符的ASCII碼值;出錯,返回EOF(-1)。 說明:直接從鍵盤獲取鍵值,不等待用戶按回車鍵;輸入字符回顯。 getch int getch ( void ); /應
38、包含的.h文件為conio.h 功能:與getche的功能基本相同 。 返值:正常,返回讀取字符的ASCII碼值;出錯,返回EOF(-1)。 說明:直接從鍵盤獲取鍵值,不等待用戶按回車鍵;輸入字符不回顯。 【例】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);please pre
39、ss two keyayouve pressed a and b運行結果(假設依此按下a鍵和b鍵): 庫函數名功 能函數原型所在頭文件getchar接受一字符輸入,以回車鍵結束,回顯stdio.hgetche接受一字符輸入,輸入字符后就結束,回顯conio.hgetch接受一字符輸入,輸入字符后就結束,不回顯conio.h與輸入字符數據有關的庫函數功能比較: 2. 字符數據的非格式化輸出int putchar ( int c ); /應包含的.h文件為stdio.h 與輸出字符數據有關的常用庫函數主要有: putchar、puts等。 putchar 功能:在顯示器上輸出字符c。 返值:正常,
40、返回字符的代碼值;出錯,返回EOF(-1)。 說明:該函數帶有一個參數c,它為要顯示字符的ASCII碼值,有一個int型返回值 。 putsint puts ( char *string ); /應包含的.h文件為stdio.h 功能:將字符串string的所有字符輸出到屏幕上,輸出時將自動回車換行。 【例】利用字符輸出函數輸出字符 #include void main ( ) int a = 65; char b = B; putchar (a); /不自動回車 putchar (n); puts (“is as good as ”); /自動回車 putc (b, stdout); Ais
41、 as good asB運行結果: 返回4.4 程序的控制結構 1. 算法的基本概念 程序 = 數據結構 + 算法。 算法:簡而言之,就是解決問題的方法與步驟。 程序設計語言:是程序開發(fā)工具,即是將算法轉化為程序的開發(fā)工具。 程序:算法的具體實現。 學習C語言,不僅要熟練掌握其語言本身的特點、語法規(guī)則等意外,更重要的就是掌握分析問題、解決問題的方法,就是鍛煉分析、分解,最終歸納整理出算法的能力。 2. 設計算法舉例 【例1】輸入三個數,然后輸出其中最大的數 。 總體思路: 首先,得先有個地方裝這三個數,我們定義三個變量A、B、C,將三個數依次輸入到、B、C中,另外,再準備一個MAX裝最大數。
42、由于計算機一次只能比較兩個數,我們首先把A與B比,大的數放入MAX中,再把MAX與C比,又把大的數放入MAX中。 最后,把MAX輸出,此時MAX中裝的就是、C三數中最大的一個數。 具體步驟: (1) 輸入A、B、C。 (2) A與B中大的一個放入MAX中。 (3) 把C與MAX中大的一個放入MAX中。 (4) 輸出MAX,MAX即為最大數。 其中的(2)、(3)兩步仍不明確,無法直接轉化為程序語句,可以繼續(xù)細化: (2) 把A與B中大的一個放入MAX中,若A B,則MAX A;否則MAX B。 (3) 把C與MAX中大的一個放入MAX中,若C MAX,則MAX C。 算法最后可以寫成: (1)
43、 輸入A,B,C。 (2) 若A B,則MAX A;否則MAXB。 (3) 若C MAX,則MAX C。 (4) 輸出MAX,MAX即為最大數 2. 設計算法舉例 【例2】猴子吃桃問題:有一堆桃子不知數目,猴子第一天吃掉一半,覺得不過癮,又多吃了一只,第二天照此辦理,吃掉剩下桃子的一半另加一個,天天如此,到第十天早上,猴子發(fā)現只剩一只桃子了,問這堆桃子原來有多少個? 總體思路: 假設第一天開始時有a1只桃子,第二天有a2只,第9天有a9只,第10天是a10只,在a1,a2,,a10中,只有a10 = 1是知道的,現要求a1,而我們可以看出,a1,a2,,a10之間存在一個簡單的關系: a9 =
44、 2 * ( a10 + 1 ) a8 = 2 * ( a9 + 1 ) a1 = 2 * ( a2 + 1 ) 也就是:ai = 2 * ( ai+1 + 1) i = 9,8,7,6,1 這就是此題的數學模型。 再考察上面從a9,a8直至a1的計算過程,這其實是一個遞推過程,這種遞推的方法在計算機解題中經常用到。另一方面,這九步運算從形式上完全一樣,不同的只是ai的下標而已。由此,我們引入循環(huán)的處理方法,并統(tǒng)一用a0表示前一天的桃子數,a1表示后一天的桃子數。 算法最后可以寫成: (1) a1 = 1 第10天的桃子數,a1的初值 i = 9 計數器初值為9 (2) a0 = 2 * (
45、a1+ 1 ) 計算當天的桃子數 (3) a1 = a0 將當天的桃子數作為下一次計算的初值 (4) i = i - 1 (5) 若i = 1,轉(2) (6) 輸出a0的值 其中(2) (5)步為循環(huán) 3. 流程圖與算法的結構化描述 流程圖起止框判斷框輸入、輸出框注釋框處理框連接點流程線_常見流程圖符號【例2】的算法的流程圖開 始i = 9a1 = 1i 1i = i - 1a0 = 2*(a1+1)a1 = a0輸出a0結 束T【例1】的算法的流程圖MAX AMAX BA B輸入A, B, C開 始MAX C輸出MAX結 束C MAXTTFF4.5 順序程序設計舉例 【例1】任意從鍵盤輸入
46、一個三位整數,要求正確地分離出它的個位、十位和百位數,并分別在屏幕上輸出。 程序設計的分析: 本例要求設計一個從三位整數中分離出它的個位、十位和百位數的算法。例如,輸入的是456,則輸出的分別是4、5、6,最低位數字可用對10求余的方法得到,如456%10=6,最高位的百位數字可用對100整除的方法得到,如456/10=4,中間位的數字既可通過將其變換為最高位后再整除的方法得到,如(456-4*100)/10=5,也可通過將其變換為最低位再求余的方法得到,如(456/10)%10=5。 根據以上的分析,這個程序應這樣設計: (1) 定義一個整型變量x,用于存放用戶輸入的一個三位整數;再定義三個
47、整型變量b0、b1、b2,用于存放計算后個位、十位和百位數。 (2) 調用scanf函數輸入該三位整數。 (3) 利用上述計算方法計算該數的個位、十位和百位數。 (4) 輸出計算后的結果。#include void main ( ) int x, b0, b1, b2; /變量定義 printf (please input an integer x: ); /提示用戶輸入一個整數 scanf (%d, &x); /輸入一個整數 b2 = x / 100; /用整除方法計算最高位 b1 = (x - b2 * 100) / 10; /計算中間位 b0 = x % 10; /用求余數法計算最低位 printf (bit2 = %d, bit1 = %d, bit0 = %dn, b2, b1, b0); /輸出結果 具體程序如下:please input an integer x: 456bit2 = 4, bit1 = 5, bit0 = 6 運行結果: 4.5 順序
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版門禁系統(tǒng)與能源管理系統(tǒng)對接合同4篇
- 2025年蘇人新版九年級生物上冊階段測試試卷含答案
- 2025年浙教版必修2歷史下冊階段測試試卷含答案
- 2025年湘師大新版九年級地理上冊階段測試試卷含答案
- 二零二五版木門行業(yè)市場拓展合同4篇
- 2024年度青海省公共營養(yǎng)師之四級營養(yǎng)師自我檢測試卷A卷附答案
- 2025年度校園食堂食品安全追溯承包合同3篇
- 2025年版建筑工地派駐安全管理人員合同4篇
- 2024年度陜西省公共營養(yǎng)師之四級營養(yǎng)師每日一練試卷B卷含答案
- 三方共同房產開發(fā)合作合同書(2024年版)一
- 【“凡爾賽”網絡流行語的形成及傳播研究11000字(論文)】
- ppr管件注塑工藝
- 液化氣站其他危險和有害因素辨識及分析
- 建筑工程施工安全管理思路及措施
- 高中語文教學課例《勸學》課程思政核心素養(yǎng)教學設計及總結反思
- 中國農業(yè)銀行小微企業(yè)信貸業(yè)務貸后管理辦法規(guī)定
- 初中英語-Unit2 My dream job(writing)教學課件設計
- 市政道路建設工程竣工驗收質量自評報告
- 優(yōu)秀支行行長推薦材料
- 中國版梅尼埃病診斷指南解讀
- 暨南大學《經濟學》考博歷年真題詳解(宏觀經濟學部分)
評論
0/150
提交評論