

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、本章要求:,了解結構化程序的算法描述掌握C語言中數據的輸入/輸出方法順序結構程序設計,本章重點: C程序中數據的輸入/輸出方法,順序、選擇、循環(huán)(分支),一、什么是算法,算法是解決一個問題采取的方法和步驟的描述 。,,1.有窮性:算法須在執(zhí)行有窮多個計算步驟后終止 2.確定性:算法的每個步驟必須都是精確定義的、無二義性的; 3.有效性:算法中的每一個步驟必須有效地執(zhí)行,并能得到確定結果; 4.輸入:一個算法中
2、可以沒有輸入,也可以有一個或多個輸入信息 5.輸出:一個算法應有一個或多個輸出,算法的特性:,(一)自然語言與偽代碼表示算法 自然語言就是指人們日常使用的語言,可以是漢語、英語或其它語言。 偽代碼是用介于自然語言和計算機語言之間的文字和符號(包括數學符號)來描述算法。,二、算法的表示,例的偽代碼表示如下:Begin(算法開始) 輸入 A,B,C IF A>B 則 A→Max 否則 B→Max
3、IF C>Max 則 C→MaxPrint MaxEnd (算法結束),例: 輸入三個數,然后輸出其中最大的數。算法可以寫成:(1) 輸入A,B,C。(2) 若A>B,則MAX ← A;否則MAX←B。(3) 若C>MAX,則MAX← C。(4) 輸出MAX,MAX即為最大數。,結構化程序的算法描述:,1.常用的流程符號l 起止
4、框:表示算法的開始和結束。l 處理框:表示初始化或運算賦值等操作。l 輸入輸出框:表示數據的輸入輸出操作。l 判斷框:表示根據一個條件成立與否,決定執(zhí)行兩種不同操作中的其中一個。l
5、60; 流程線:表示流程的方向。,,,(二)用流程圖表示算法,,,,,用流程圖表示如下圖所示:,例: 輸入三個數,然后輸出其中最大的數。,(三)用N—S流程圖表示算法,C語言中實現順序結構的語句:賦值語句、變量聲明語句、符號常量聲明語句等。,三、賦值語句,賦值語句是由賦值表達式再加分號構成的表達式語句。 其一般形式為: 變量=表達式;,1.賦值符“=”右邊的
6、表達式可以又是一個賦值表達式因此,下述形式是正確的:變量=(變量=表達式);其展開之后的一般形式為:變量=變量=…=表達式;,例如:a=b=c=d=e=5;按照賦值運算符的右結合性,因此實際上等效于: e=5; d=e; c=d; b=c; a=b;,2.注意變量說明中給變量賦初值和賦值語句的區(qū)別。給變量賦初值是變量說明的一部分,賦初值后的變量與其后的其它同類變量之間仍必須用逗號間隔,而賦值語句則必須用分號結尾。3.在變量說明中
7、,不允許連續(xù)給多個變量賦初值。 如下述說明是錯誤的:int a=b=c=5; 必須寫為 int a=5,b=5,c=5; 而賦值語句允許連續(xù)賦值。 4.注意賦值表達式和賦值語句的區(qū)別。賦值表達式是一種表達式,它可以出現在任何允許表達式出現的地方,而賦值語句則不能。下述語句是合法的:if((x=y+5)>0) z=x; 下述語句是非法的:if((x=y+5;)>0) z=x; 說明:右邊的表達式
8、可以是變量、常量、函數調用等表達式。,5.語句中的“=”稱為賦值號,它不同于數學中的等號,如A=A+1在數學中是不成立的,但在程序設計中表示取變量A單元中的值,將其加1后,仍然放回到A變量的存儲單元 。6、賦值符號“=”左邊一定只能是變量名,不能是常量、符號常量、表達式。,例如:z=x+y; 是合法的。下面的賦值語句都是錯的:5=x; /* 左邊是常量 */sin(x)=20; /*
9、左邊是函數調用,即是表達式 */,7.賦值符號“=”兩邊的數據類型一般要求應一致。 如果兩邊的類型不同,則以左邊變量或對象屬性的數據類型為基準,如果右邊表達式結果的數據類型能夠轉換成左邊變量或對象屬性的數據類型,則先強制轉換后,賦值給左邊的變量。若都是數值型,但精度不同,強制轉換成左邊變量的數據精度。,例如,有定義 int x; float y;x=3.5415926; /* 取其整數賦值給x,x的值為3 */y=
10、123; /* 將整數123轉換實數123.0,賦值給y,執(zhí)行后,y的值是123.0 (小數點補六個0)*/,數據輸入/輸出的概念,,內存,RAM,,從鍵盤將數據輸入,,從數據文件讀入,將數據輸出到屏幕,,,將數據輸出到文件,數據輸入/輸出是相對計算機內存,在C語言中所有的數據輸入/輸出都是由庫函數完成的。 因此都是函數語句。在C語言中使用庫函數時,要使用預編譯命令#include 將相關的頭文件(*.h)包含到用戶源文件中。使用形
11、式: #include “頭文件” 或 #include ,說明:1. 標準輸入/輸出頭文件是:stdio.h 2. printf() 和 scanf()函數不需要頭包含文件 3.常用的輸入輸出函數有: printf() scanf() putchar() getchar(),,四、數據格
12、式輸入——scanf()函數,scanf()的功能:從鍵盤上輸入數據,該輸入數據按指定的輸入格式被賦給相應的輸入項。函數一般格式為: scanf("控制字符串",輸入項地址列表);控制字符串規(guī)定數據的輸入格式,其內容由格式說明和普通字符兩部分組成。輸入項地址列表由一個或多個變量地址組成,各變量地址之間用逗號“,”分隔。scanf()中各變量要加地址操作符,表示如下: &變量名,scan
13、f("%d,%d,%c",&a,&b,&ch);,控制字符串的兩個組成部分:格式說明和普通字符。,,1. 格式說明格式說明規(guī)定輸入項中的變量以何種類型的數據格式被輸入,形式是: %[] 各個格式字符及其意義見表3-3。,各修飾符是可選的,這些修飾符是:(1)字段寬度(2) l和h:可與d、o、x一起使用,l表示輸入數據為長整數,h表示輸入數據為短整數。(3)字符
14、*:表示按規(guī)定格式輸入但不賦予相應變量,作用是跳過相應的數據。,例:scanf(“%3d”,&a);輸入123456,按寬度3輸入一個整數123賦給變量a。,例:scanf("%ld%hd",&x,&i);x按長整型讀入,i按短整數讀入。,例如:scanf(“%d%*d%d”,&x,&y,&z);執(zhí)行該語句,若輸入為“123 ” 結果為x=1,y=3,z未賦值,2被跳
15、過。,/* EX3-11.C */#include main(){ int x,y; scanf("%2d%*3d%4d",&x,&y ); /*注意%*3d的作用*/ printf("\nx=%d,y=%d \n",x,y);},2.普通字符普通字符包括空格、轉義字符和可打印字符。(1)空格在有多個輸入項時,一般用空格或回車作為分隔符,若以空格作分隔符,
16、則當輸入項中包含字符類型時,可能產生非預期的結果,(2)可打印字符,例如:scanf("%d%c",&a,&ch); 輸入32 q期望a=32,ch=q,但實際上,分隔符空格被讀入并賦給ch。,例如:scanf("%d,%d,%c",&a,&b,&ch);當輸入為:1,2,q 即:a=1,b=2,ch=q若輸入為1 2 q 除a=1正
17、確賦值外,對b與ch的賦值都不能正確賦值。這些不打印字符應是輸入數據分隔符,scanf在讀入時自動去除與可打印字符相同的字符。,使用scanf函數還必須注意以下幾點: (1) scanf函數中沒有精度控制 。 如: scanf(“%5.2f”,&a); 是非法的。(2) 在輸入多個數值數據時,若格式控制串中沒有非格式字符作輸入數據之間的間隔則可用空格或回車作間隔.(3)如果格式控制串中有
18、非格式字符則輸入時也要輸入該非格式字符。 例如: scanf("%d,%d,%d",&a,&b,&c); 其中用非格式符“ , ”作間隔符,故輸入時應為: 5,6,7 又如: scanf("a=%d,b=%d,c=%d",&a,&b,&c); 則輸入應為
19、a=5,b=6,c=7,五、 數據格式輸出——printf()函數,格式化輸出函數printf()功能:按控制字符串規(guī)定的格式,向輸出設備輸出各輸出項其基本格式為:printf(“控制字符串”,輸出項列表)輸出項可以是常量、變量、表達式,其類型與個數必須與控制字符串中格式字符的類型、個數一致、當有多個輸出項時,各項之間用逗號分隔??刂谱址筛袷秸f明和普通字符兩部分組成。,1.格式說明一般格式為:%[]格式字符規(guī)定了輸出項的輸
20、出格式,常用格式字符見表3-2,(1) 字段寬度修飾符該修飾符用于確定數據輸出的寬度、精度、小數位數、對齊方式等,用于產生更規(guī)范整齊的輸出,下表列出了字段寬度修飾符。,例如:void main(){ int a=123; float x=12.345678; printf("%5d, %5.2f\n",a,x); printf("%2d, %2.1f\n
21、",a,x);} 程序的運行結果如下:,說明:當指定寬度小于數據的實際寬度時,對整數,按該數的實際寬度輸出。對浮點數,相應小數位的數四舍五入。若度寬小于等于浮點數整數部分的寬度,則該浮點數按實際位數輸出,但小數位數仍遵守寬度修飾符給出的值。,(2)對齊方式修飾符一般的輸出數據為右對齊格式,加“-”號,變?yōu)椤白髮R”方式。,例如:void main(){ int i=123; float a=12.345
22、67; printf("%6d%10.4f\n",i,a); printf("%-6d%10.4f\n",i,a); printf("%6d%-10.4f\n",i,a); }程序運行結果如圖所示:,(3)l和h可以與輸出格式字符d、f、u等連用,以說明是用long型或short型格式輸出數據,如:%hd 短整型%lf 雙精度型%ld 長整型
23、%hu 無符號短整型,2.普通字符普通字符包括可打印字符和轉義字符。可打印字符是一些說明字符,這些字符按原樣顯示在屏幕上轉義字符是不可打印的字符,它們其實是一些控制字符,控制產生特殊的輸出效果。常用的有“\t”,“\n”,其中\(zhòng)t為水平制表符,作用是跳到下一個水平制表位, “\n”為回車換行符,遇到“\n”,顯示自動換到新的一行。,,例如:void main(){ int i=123; long n=456;
24、float a=12.34567,y=20.5; printf("%d=4d\ta=%7.4f\n\tn=%ld\n",i,a,n); printf("y=%5.2f%%\n",y);},程序運行的輸出結果:,【注意】,(1)輸出項從右向左計算后,按格式說明的順序、類型和要求對應輸出。格式說明和輸出項的個數類型應相同,如不匹配系統不能正確輸出①格式說明的個數少于輸出項個數,多余的輸出
25、項將不輸出;②格式說明的個數多于輸出項個數,多余的格式說明將輸出隨機的值。③整型數據按%f 輸出或者實型數據按%d 輸出,均出現輸出錯誤結果。,(2)格式字符除X(表示輸出的十六進制數用大寫字母輸出)、E(表示輸出的指數e用大寫字母E輸出)、G(表示若選用指數形式輸出,則用大寫字母E輸出)外,必須是小寫字母。如%d不能寫成%D。(3)若想輸出字符“%”,則在格式字符串中用連續(xù)兩個%表示。如:printf(“%f%%”,1.0/4)
26、; 則輸出:0.250000%,【注意】,試編寫求梯形面積的程序,數據由鍵盤輸入。分析:設梯形上底為A,下底為B,高為H面職為S,則S=(A+B)*H÷2,程序如下:void main() { float a,b,h,s; printf("please input a,b,h:"); scanf("%f%f%f",&a,
27、&b,&h); s=0.5*(a+b)*h; printf("a=%6.3f b=%6.3f h=%6.3f\n",a,b,h); printf("s=%8.4f\n",s); },六、字符數據非格式輸入/輸出函數,1.字符輸入函數——getchar()getchar()函數的格式: getchar(); ge
28、tchar()函數的作用:從系統的輸入設備鍵盤輸入一個字符。從功能角度來看,scanf()函數可以完全代替getchar()函數。,例:char c1;則c1=getchar();可使用等價語句: scanf("%c",&c1);,說明:(1)getchar()函數一次只能返回一個字符,即調用一次只能輸入一個字符。(2)程序第一次執(zhí)行getchar()函數時,系統暫停等待用戶輸入,直到按回車鍵結束,
29、如果用戶輸入了多個字符,則該函數只取第一個字符,多余的字符(包括換行符'\n')存放在鍵盤緩沖區(qū)中,如果程序再一次執(zhí)行getchar()函數,則程序就直接從鍵盤緩沖區(qū)讀入,直到讀完后,如果還有getchar()函數才會暫停,再次等待用戶輸入。,2.字符輸出函數——putchar( )putchar()函數的格式: putchar(ch);該函數的功能是向顯示器終端輸出一個字符。其中,ch可以是一個字符變量或常量,
30、也可以是一個轉義字符。說明:(1)putchar()函數只能用于單個字符的輸出,且一次只能輸出一個字符。(2)從功能角度printf()函數可以完全代替putchar()函數,其等價形式:printf("%c",ch)。,例輸入一個字符,回顯該字符并輸出其ASCII碼值。#include void main(){char ch1,ch2;ch1=getchar();ch2=getchar();put
31、char(ch1);putchar(ch2);printf("%c\n%c",ch1,ch2);},程序運行后,若ch1、ch2分別得到字符A、B,應輸入AB,如果輸入A,則實際上ch1被賦值為字符A,ch2被賦值為字符換行符'\n',,【例3-16】 從鍵盤上輸入一個英文小寫字母,編程輸出該字母所對應的ASCII碼和所對應的大寫字母,,【分析】在ASCII字符集中,大寫字母A~Z是連續(xù)的(A
32、SCII值從65~90),小寫字母a~z也是連續(xù)的(ASCII值從97~122)。因此每對字母的ASCII碼值差是相同的,都是32,即'a'-'A'、'b'-'B'、'c'-'C'、…、'z'-'Z'都是32。所以將小寫字母的ASCII碼值減去32,則得到的是所對應的大寫字母ASCII碼值。同理,將大寫字母的A
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論