簡單程序設(shè)計_第1頁
簡單程序設(shè)計_第2頁
簡單程序設(shè)計_第3頁
簡單程序設(shè)計_第4頁
簡單程序設(shè)計_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第三章 簡單程序設(shè)計3.1 流程結(jié)構(gòu)和語句1 . 三種流程結(jié)構(gòu)順序結(jié)構(gòu),選擇結(jié)構(gòu),循環(huán)結(jié)構(gòu)程序在邏輯上執(zhí)行的流程。l 順序結(jié)構(gòu):按語句在源程序中出現(xiàn)的次序依次執(zhí)行;l 選擇結(jié)構(gòu):根據(jù)一定的條件有選擇地執(zhí)行或不執(zhí)行某些語句。l 循環(huán)結(jié)構(gòu):在一定條件下重復(fù)執(zhí)行相同的語句。所有的流程控制都是由語句實現(xiàn)的,且任何一個表達(dá)式都可作為一個語句使用,成之為表達(dá)式語句2. 表達(dá)式語句任何表達(dá)式通過在其末尾加一個“;”,可使表達(dá)式成為一個語句,形式為:表達(dá)式;其中“;”是C語句的組成部分,表示一個語句結(jié)束。表達(dá)式語句能夠獨立出現(xiàn)在程序中,而表達(dá)式則不能獨立出現(xiàn)。例如:x=y+1 是表達(dá)式x=y+1; 是語句習(xí)慣

2、上把賦值表達(dá)式語句如:x=y+1;新為賦值語句。函數(shù)調(diào)用也是表達(dá)式,因此:printf(“hellow”)是表達(dá)式;printf(“hellow”);是語句,習(xí)慣上稱為輸出語句。scanf(“%d%d”,&x,&y);函數(shù)調(diào)用表達(dá)式語句(輸入語句)3. C的語句概述C的一個“說明”也必須以分號結(jié)束,也稱為語句,因此C的語句分說明語句和執(zhí)行語句兩類。說明語句可以出現(xiàn)在程序中任何塊(函數(shù)或復(fù)合語句)的外面稱為外部說明或塊內(nèi)稱為局部說明(在執(zhí)行語句的前面)。外部說明必須放在一個源程序文件中所有函數(shù)定義的外面;局部說明包括類型定義、變量和函數(shù)說明,其作用是描述程序中被處理數(shù)據(jù)(變量或函

3、數(shù))的名稱和類型供解釋程序使用。執(zhí)行語句只能出現(xiàn)在函數(shù)體內(nèi)且處于局部說明的后面,執(zhí)行語句完成對數(shù)據(jù)的處理和對程序流程的控制。常用的程序結(jié)構(gòu)為:常量說明類型說明變量說明 /*外部說明*/返回類型 函數(shù)名(參數(shù)表) 變量說明 /*局部說明*/ 執(zhí)行語句C的執(zhí)行語句共有六種:l 表達(dá)式語句l 復(fù)合語句l 標(biāo)號語句l 選擇語句(if和switch)l 循環(huán)語句(while,for,do-while)l 轉(zhuǎn)移語句(break,continue,goto,return)3.2標(biāo)準(zhǔn)的文件輸入與輸出函數(shù)一個C的源程序要能夠從外部設(shè)備(文件)輸入數(shù)據(jù)并將執(zhí)行(或處理)的結(jié)果輸出到外部設(shè)備上。C語言的輸入和輸出操

4、作是通過調(diào)用C標(biāo)準(zhǔn)函數(shù)庫中的函數(shù)來實現(xiàn)的,標(biāo)準(zhǔn)函數(shù)庫是由C編譯程序提供的。以編譯后的目標(biāo)代碼形式存儲的函數(shù)的集合。用戶程序可根據(jù)需要按規(guī)定的格式調(diào)用其中的函數(shù)來完成相應(yīng)的功能。C語言中從標(biāo)準(zhǔn)輸入和輸出文件(設(shè)備)中進(jìn)行讀(寫)的四個標(biāo)準(zhǔn)函數(shù)是:格式輸出函數(shù)printf、格式輸入函數(shù)scanf、字符輸入函數(shù)getchar和字符輸出函數(shù)putchar。其他函數(shù)以后講。3.2.1字符輸入和輸出函數(shù)1. 字符輸入函數(shù)getchar 函數(shù)原型為:int getchar(void)其中int說明函數(shù)的返回值的類型,void說明函數(shù)沒有參數(shù),該函數(shù)的調(diào)用格式為:getchar()系統(tǒng)將輸出設(shè)備和輸入設(shè)備都看

5、成文件,標(biāo)準(zhǔn)輸入設(shè)備(鍵盤)和標(biāo)準(zhǔn)輸出設(shè)備(顯示器)是由字符的序列(字符流)組成的文本文件,稱為輸入流和輸出流。getchar每調(diào)用一次則從終端(鍵盤)讀取一個字符。這個字符的字符碼就是getchar的返回值(即函數(shù)值),其類型為由unsigned char 轉(zhuǎn)換的int。例如:c=getchar();執(zhí)行時鍵入字符a賦值后變量c的值為97即字符a的值。輸入文件的結(jié)束標(biāo)志稱為文件尾。DOS系統(tǒng)中鍵入ctrl+z時產(chǎn)生文件結(jié)束標(biāo)志。getchar遇到文件結(jié)束標(biāo)志時返回值EOF,EOF是在頭文件stdio.h中定義的符號常量,其值通常為-1。程序中如果要測試getchar()的值是否文件尾應(yīng)使用E

6、OF而不用-1,這樣做可使程序不依賴于某個特定環(huán)境。2. 字符輸出函數(shù)putchar函數(shù)原型為:int putchar(char ch ) putchar函數(shù)將所要輸出的字符碼轉(zhuǎn)換為unsigned char送到標(biāo)準(zhǔn)輸出設(shè)備中去,返回值是被輸出的字符,如果出錯則返回EOF,調(diào)用形式為:putchar(ch)其中ch為實際參數(shù),可以是char、short或int類型的表達(dá)式,其值是要被輸出字符的字符碼。每調(diào)用一次則將字符c輸出到標(biāo)準(zhǔn)輸出設(shè)備上。例如:int i=7;char ch;說明:(1) 下面四個語句是等價的,同為輸出一個響鈴字符:putchar(i);putchar(7);putchar

7、(07);putchar(a);(2) 下面三個語句分別輸出字符a,3和換行putchar(a”);putchar(3);putchar(n);注:putchar(3) 輸出是 而不是整數(shù)3。(3)putchar(c=getchar()>=a&&c<=z)?c-a+A:c);該語句先輸入一個字符存入變量c,如果c是小寫字母則將其轉(zhuǎn)換成大寫字母后輸出,否則直接輸出原字符。注意:凡是程序中調(diào)用了輸入、輸出庫函數(shù),必須在函數(shù)第一次調(diào)用之前寫上 include<stdio.h>或include“stdio.h”,預(yù)處理控制(對于DOS上的scanf和printf

8、可省略)。3.2.2格式輸出函數(shù)(printf)getchar和putchar函數(shù)用于輸入和輸出單個字符,輸入和輸出過程中不進(jìn)行格式上的任何轉(zhuǎn)換。printf和scanf函數(shù)在數(shù)據(jù)的輸入和輸出過程中能夠?qū)⒂嬎銠C(jī)內(nèi)部形式的數(shù)據(jù)和輸入輸出任務(wù)上的數(shù)據(jù)相互轉(zhuǎn)換,稱為格式輸出和格式輸入。1. printf函數(shù)的原型int printf(char format,args)參數(shù)的數(shù)目可變,中間用“,”分隔,是要被轉(zhuǎn)換并寫到輸出設(shè)備的數(shù)據(jù)。函數(shù)的返回值是實際輸出字符的數(shù)目。2. 調(diào)用形式printf(格式字符串,輸出參數(shù)1,輸出參數(shù)2,);調(diào)用printf函數(shù)時至少要給出第一個參數(shù),即格式字符串。格式字符串

9、式是用“”括起來的字符串;輸出參數(shù)1,輸出參數(shù)n是n個表達(dá)式,可以為任何基本類型,也可以是指針或枚舉類型(較少使用)。輸出數(shù)據(jù)項的數(shù)目任意,末尾 加“;” 表示printf函數(shù)通常作為語句使用。printf函數(shù)將參數(shù)的值按格式字符串規(guī)定的格式從內(nèi)部形式轉(zhuǎn)換成外部字符形式并輸出設(shè)備,返回值是實際輸出字符的數(shù)目。例如: printf("%d%8.3f",i,x);參數(shù)中的格式為"%d %8.3f"。i和x是要輸出的數(shù)據(jù)%d表示i要用十進(jìn)制整數(shù)形式輸出,寬度為數(shù)據(jù)實際寬度。%8.3f表示x要用小數(shù)形式浮點數(shù)格式輸出,輸出總寬度為8個字符,其中小數(shù)部分保留3位,

10、若i=15,X=-8.2 該語句輸出為 15 -8.2003. 格式字符串格式字符串包含兩種字符:普通字符和用于轉(zhuǎn)換說明的字符,普通字符照原樣輸出,轉(zhuǎn)換說明用于說明數(shù)據(jù)輸出格式。其形式為:%域?qū)掁D(zhuǎn)換字符一個轉(zhuǎn)換說明以%開頭。域?qū)挷糠质强蛇x的,用于指定輸出數(shù)據(jù)的寬度。每個轉(zhuǎn)換說明對應(yīng)于一個輸出參數(shù),該參數(shù)被轉(zhuǎn)換成由轉(zhuǎn)換說明規(guī)定的數(shù)據(jù)格式后輸出。普通字符通常用作輸出提示信息,它可以與轉(zhuǎn)換說明交替出現(xiàn),例如printf("i=%d,x=%8.3fn",i,x);輸出為:i=15,x= -8.200ANSI C的轉(zhuǎn)換字符及其規(guī)定的輸出格式見教材p44。注:如果%后面是一個%字符,則

11、標(biāo)準(zhǔn)C無此定義,將它作為普通字符輸出。在%和轉(zhuǎn)換字符之間可以加域?qū)捳f明,用于指定輸出時的對齊方向、輸出數(shù)據(jù)的域?qū)挾?、小?shù)部分的位數(shù)等要求。用于域?qū)捳f明的字符列于下表中,域?qū)捳f明可以是其中之一或多個字符的組合。 表3.1 printf域?qū)捳f明字符域?qū)捳f明符號意 義-(減號)+空格0(零)#m(正整數(shù)).(小數(shù)點)n(正整數(shù))hlL在指定的區(qū)域內(nèi)以左對齊方式輸出(默認(rèn)右對齊) 輸出正值時前面冠以符號 + 輸出的第一個字符不是符號時,要輸出一個空格作參照 在域?qū)挿秶鷥?nèi)用前導(dǎo)0填補(bǔ)空位 對于o格式輸出前導(dǎo)0,對于x或X格式要輸出0x或0X前綴,對于g或G格式不刪除尾部零。 指出輸出數(shù)據(jù)的最小寬度。如果

12、實際寬度>m,則按實際寬度;如果實際寬度<m,則左邊(左對齊時為右邊)補(bǔ)上空格或零(當(dāng)有0域?qū)捳f明字符時)。分隔域?qū)捙c精度。小數(shù)點前面可以沒有域?qū)捳f明。指出輸出數(shù)據(jù)的精度。對于e、E、f格式為小數(shù)部分的位數(shù),對于g或G格式為有效字的個數(shù),對于整數(shù)為至少應(yīng)輸出的數(shù)字的個數(shù)(添加前導(dǎo)0來滿足所需寬度)。指出輸出參數(shù)是短整型指出輸出參數(shù)是長整型指出輸出參數(shù)是高精度浮點型在域?qū)捳f明中還可以使用字符*,*代表一個整型值,這個整型值是由包含*的轉(zhuǎn)換說明對應(yīng)的參數(shù)決定的。例如: printf("%.*s",max,s);該語句執(zhí)行時從串s中打印至多max個字符。域?qū)捳f明示例見

13、教材p45注意(1):printf函數(shù)根據(jù)格式串中的轉(zhuǎn)換說明來決定輸出數(shù)據(jù)的數(shù)目和類型,如果轉(zhuǎn)換說明項數(shù)多于參數(shù)個數(shù),或參數(shù)類型不正確,則會輸出錯誤的數(shù)據(jù)(不報語法錯);如果輸出參數(shù)的數(shù)目多于轉(zhuǎn)換說明項數(shù)則多余的參數(shù)不被輸出。例. Printf(“%d%d,%d”,3,4);結(jié)果為:%d,3例:int i=-6;double x=5.7,y=123.4567; printf("%-4d,%g",i,y,x);輸出形式為:-6 ,123.457(2)printf中參數(shù)右結(jié)合,如設(shè)int i=1;則 printf("%d,%d,%d",+i,+i,+i);輸

14、出結(jié)果為4,3,2 printf("%d,%d,%d",i+,i+,i+);輸出結(jié)果為3,2,13.2.2 格式輸入函數(shù)(scanf)1.scanf函數(shù)的原型 int scanf(char *format,args) scanf函數(shù)是具有int類型返回值(返回讀入?yún)?shù)的個數(shù))的函數(shù)。第一個參數(shù)format是格式字符串,它指出輸入數(shù)據(jù)的數(shù)目、類型和格式,args為指向存放輸入數(shù)據(jù)的變量的指針,輸入?yún)?shù)的數(shù)目可變。2. scanf函數(shù)的調(diào)用格式 scanf(格式字符串,輸入?yún)?shù)1, 輸入?yún)?shù)n); scanf函數(shù)是printf函數(shù)的逆過程,它從標(biāo)準(zhǔn)輸入設(shè)備(鍵盤)讀入字符流,并

15、按照格式字符串中轉(zhuǎn)換字符規(guī)定的格式轉(zhuǎn)換成相應(yīng)類型的值后賦予由輸入?yún)?shù)所指的變量。format串可以包含如下字符: (1)空格或制表符,它們被忽略 (2)非%普通字符,它需要輸入流中有同樣的非空白字符與之匹配 (3)以%為開頭以轉(zhuǎn)換字符為結(jié)尾的轉(zhuǎn)換說明符,常見的轉(zhuǎn)換字符與printf類似 (4)在%與轉(zhuǎn)換字符之間可以有下列選項 ·賦值抑制符 ·說明最大域?qū)挼恼麛?shù) ·指出參數(shù)所指變量類型的字母 h,l或L 具體形式為:% * m l 或 h 格式字符 長度修正說明符域?qū)捯种品袷阶址cprintf中使用方式相同,把輸入數(shù)據(jù)分為整型(int *用d、o、x指定)、 字符

16、型(char *,用c指定)、 實型(float *,用f,e指定)。在整型和實型中可再加長度修正說明符:加h(短整型)、 加l(長整型)、 加L(高精度型)、m(注意沒有n)用以指定輸入數(shù)據(jù)的寬度。輸入?yún)?shù)1至輸入?yún)?shù)n可以為簡單變量的地址或字符串變量的地址,簡單變量的地址用變量前面加取地址運(yùn)算符&表示,字符串變量的地址用字符數(shù)組名(或指向字符串變量的指針)表示。scanf函數(shù)被正確執(zhí)行時返回被轉(zhuǎn)換并賦值的數(shù)據(jù)項的數(shù)目,遇到文件尾或出錯時返回EOF。例如: int i;float x; char name10; scanf("%d %f %s",&i,&a

17、mp;x,name);輸入:25 61.37e-1program注意:n 輸入字符串時不加雙引號,因雙引號也會作為字符號的內(nèi)容。n 不能用賦值語句給數(shù)組賦值如:name="program" 因為name不是變量而是一個地址常量。n 不能將scanf(%d",&i)寫成scanf(“%d",i)也不能將scanf("%s",name)寫成scanf("%s",&name);3 .輸入形式 (1)構(gòu)成一個被轉(zhuǎn)換數(shù)據(jù)的字符序列稱為一個輸入域,輸入域為下面三種情況之一。l 以輸入流中當(dāng)前字符開始直到第一個空

18、白字符之前。l 根據(jù)轉(zhuǎn)換說明不能被轉(zhuǎn)換的字符之前。l 指定域?qū)捰猛辍]斎胗蛑g一般可用空白字符(空白、換行、制表符)隔開,整型、浮點型或字符型后的字符型數(shù)據(jù)不用空白字符分隔(注意字符型數(shù)據(jù)同樣不用單引號),在整型、浮點型或字符型后的字符串?dāng)?shù)據(jù)可以有或無空白符(因為字符串前無前導(dǎo)空白符),當(dāng)遇到空白符時表示一個字符串結(jié)束(見后面內(nèi)容)。例1 int i;char c; scanf("%d%c",&i,&c); 執(zhí)行時輸入:1234a則i被賦值1234,c為'a'.但若輸入1234 a,則i 值同上,c為' '若要讀入一個非空白字

19、符了可用下面形式:scanf("%d%1s",&i,&c);輸入:1234 a,則i為1234,c為'a'。例2 char c1,c2; scanf("%c%c",&c1,&c2);輸入:12 則c1為'1',c2為'2'例3:int day,year;char month10; scanf("%d,%s%d",&dat,month,&year);執(zhí)行時輸入:25 dec 1996輸入流還可以是時下列形式25Dec 1996(回車)但不能為

20、25 Dec1996例4Char name20; scanf(“%s”,name);執(zhí)行時輸入programming language(回車)則字符串“programming”將被賦予name。注:用gets函數(shù)時,串中可含有空格,此時以回車鍵表示輸入的結(jié)束。(2)當(dāng)鍵入回車時scanf開始執(zhí)行,當(dāng)固定格式字符串中的轉(zhuǎn)換說明項或者某個輸入域與轉(zhuǎn)換說明項不能匹配時scanf停止執(zhí)行,返回已成功匹配且被賦值的輸入數(shù)據(jù)個數(shù);當(dāng)遇到文件結(jié)尾時返回EOF。注意:當(dāng)下一次調(diào)用scanf時從上一次scanf調(diào)用以被匹配轉(zhuǎn)換的最后一個字符的后面那一個字符開始讀取。例1int i,j;float x,y;sca

21、nf(“%d%d”,&i,&j,&x);scanf(“%f”,&y);執(zhí)行時輸入12 34 56.7 89執(zhí)行第一個scanf調(diào)用時i被賦值為12,j為34,x未被賦值。Scanf返回值為2;輸入流中的56.7未被讀取,該指針處于34后面的第一個空格字符。執(zhí)行第2個scanf時,將56.7賦予y,89多余,scanf返回值為1。注意:轉(zhuǎn)換說明應(yīng)與輸入?yún)?shù)所指變量的類型一致,否則,輸入數(shù)據(jù)不是所需要的結(jié)果;轉(zhuǎn)換說明項個數(shù)也應(yīng)與輸入?yún)?shù)個數(shù)相同,如果轉(zhuǎn)換說明項個數(shù)少于輸入?yún)?shù)個數(shù),右邊多出的輸入?yún)?shù)所指變量將不被賦值,反之,數(shù)據(jù)不存放。例2int i,j; scan

22、f(“%d%d”,&i,&j);執(zhí)行時輸入12a則i為12,j未被賦值,scanf返回值為1。(3)當(dāng)scanf的格式字符串包含有普通字符時,在輸入流中相應(yīng)位置必須有相同的字符與之匹配;對于空白字符,格式字符串的一個空白字符可以與輸入流中0個或多個連續(xù)的空白字符匹配;對于非空白字符的普通字符則要求一一對應(yīng)。設(shè)i,j,k為int類型。例1 Scanf(“%d %d %d”,&i,&j,&k);執(zhí)行是應(yīng)輸入10 20 30 其中10,20,30之間可以是一個或多個空白字符、制表符或換行符。例2 Scanf(“%d,%d,%d”,&i,&j,&

23、amp;k);執(zhí)行時應(yīng)輸入10,20,30 其中10,20,30之間必須有且僅有一個逗號。例3 Scanf(“i=%d;j=%d;k=%d”,&i,&j,&k)輸入應(yīng)輸入i=10;j=20;k=304轉(zhuǎn)換說明中的可選項scanf轉(zhuǎn)換說明中的可選項有指定域?qū)挼恼麛?shù):h、l、L、*。如果一個輸入域前面有空行,scanf全自動跳過空行直到發(fā)現(xiàn)輸入域。 指定域?qū)挼恼麛?shù):如果說明了域?qū)?,則輸入域直到域?qū)捰猛陼r為止。例1 int i,j;scanf(“%3d%d”,&i,&j);執(zhí)行時輸入1234 5678。整數(shù)123被賦值i,4被賦值j。例2 char name2

24、0scanf(“%8s”,name);若輸入abcdefghi則字符串“abcdefgh”被賦給數(shù)組name。 h,l,L:如果參數(shù)是short *(而不是int *),則轉(zhuǎn)換字符d、i、n、o、u和x的前面要加h ;如果參數(shù)是long * 則加l ;如果參數(shù)是double * (而不是float *)則轉(zhuǎn)換字符e,f和g的前面要加l;如果參數(shù)是long double *,則加L。例1 short i;long j;double x;scanf(%hd%ld”,&i,&j);scanf(“%lf”,&x);例2 long double y; scanf(“%lf”,&a

25、mp;y); *:如果指定了*,則輸入域被跳過,不賦值。*指出按轉(zhuǎn)換說明匹配相應(yīng)的輸入域。但轉(zhuǎn)換結(jié)果不被賦值給任何變量,因此稱為“虛讀”。虛讀用于從輸入流中有選擇的讀取部分內(nèi)容。例如:double v1,v2,v3;scanf(“%lf%*d%lf%*d%lf%*d”,&v1,&v2,&v3);執(zhí)行時輸入:22 33 44 55 66 11.0賦予v1,33.0賦予v2,55.0賦予v3;輸入域22,44,66被跳過。3.3 簡單程序設(shè)計舉例一個簡單的c程序僅包含一個main函數(shù)且程序流程是順序結(jié)構(gòu),程序的執(zhí)行部分通常含三種基本操作的語句,即輸入、輸出、賦值語句或用于計算的其他表達(dá)式語句。程序中出現(xiàn)的任何變量必須進(jìn)行變量說明;如果有常量最好定義成符號常量;如果需要將處理結(jié)果暫時保存還要說明所須的輔助變量。例1 從終端輸入一個字符,如果是小寫字母,則轉(zhuǎn)換成大寫后輸出,否則原樣輸出。#include <stdio.h>void main(void)int c;pintf(“intput a charctor:”);c=getcher();c>=a&&c<=z?putcher(c+A-a):putchar(c);putch

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論