




已閱讀5頁,還剩36頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
課 程: C語言程序設計任課教師: 電子信箱:教 材: 高職高專計算機系列教材總 目 錄第1章C語言概述第2章數(shù)據(jù)類型、運算符與表達式第3章最簡單的C程序設計順序程序設計第4章選擇結(jié)構(gòu)程序設計第5章循環(huán)控制第6章數(shù)組第7章函數(shù)第8章預處理命令第9章指針第10章結(jié)構(gòu)體與共用體第11章位運算第12章文件第13章常見錯誤和程序調(diào)試第1章 C語言概述1.1 C語言出現(xiàn)的歷史背景1.2 C語言的特點1.3 簡單的C程序介紹1.4 C程序的上機步驟1.5 習題1.1 C語言出現(xiàn)的歷史背景C語言是國際上廣泛流行的計算機高級語言,既可用來寫系統(tǒng)軟件,也可用來寫應用軟件。C語言是在B語言的基礎上發(fā)展起來的,是用匯編語言寫的?,F(xiàn)在C語言已風靡全世界,成為世界上應用最廣泛的幾種計算機語言之一。1.2 C語言的特點(1) 語言簡潔、緊湊,使用方便、靈活。(2) 運算符豐富。C的運算符包含的范圍很廣泛,共有34種運算符。(3) 數(shù)據(jù)結(jié)構(gòu)豐富,具有現(xiàn)代化語言的各種數(shù)據(jù)結(jié)構(gòu)。(4) 具有結(jié)構(gòu)化的控制語句(如ifelse語句、while語句、dowhile語句、switch語句、for語句)。(5) 語法限制不太嚴格,程序設計自由度大。(6) C語言能進行位(bit)操作,能實現(xiàn)匯編語言的大部分功能,可以直接對硬件進行操作。1.3 簡單的C程序介紹例 1.1 main ( ) printf (This is a C program.n); 本程序的作用是輸出以下一行信息: This is a c program.例 1.2main ( )/*求兩數(shù)之和*/int a,b,sum; /*這是定義變量*/ a=123; b=456; /* 以下3行為C語句 */ sum=a+b; printf (sum is %d/n, sum); 例1.3main ( ) int a, b, c; scanf (%d,%d,&a,&b); c=max (a,b);printf (max=%d,c); int max(int x,int y) int z; if (xy) z=x; else z=y;return (z); 通過以上幾個例子,可以看到:(1) C程序是由函數(shù)構(gòu)成的。(2) 一個函數(shù)由兩部分組成: 函數(shù)的首部,即函數(shù)的第一行。 函數(shù)體,即函數(shù)首部下面的大括弧內(nèi)的部分。(3) 一個C程序總是從main函數(shù)開始執(zhí)行的。(4) C程序書寫格式自由,。(5) 每個語句和數(shù)據(jù)定義的最后必須有一個分號。(6) C語言本身沒有輸入輸出語句。(7) 可以用/*/對C程序中的任何部分作注釋。1.4 C程序的上機步驟(1) 調(diào)用 Turbo C程序。(2) 編輯源文件。(3) 編譯源程序。(4) 執(zhí)行程序。(5) 可以用“Alt”和“X”鍵脫離Turbo C。第2章 數(shù)據(jù)類型、運算符與表達式2.1 C的數(shù)據(jù)類型2.2 常量與變量2.3 整型數(shù)據(jù)2.4 實型數(shù)據(jù)2.5 字符型數(shù)據(jù)2.6 變量賦初值2.7 各類數(shù)值型數(shù)據(jù)間混合運算2.8 算術運算符和算術表達式2.9 賦值運算符和賦值表達式2.10 逗號運算符和逗號表達式2.1 C的數(shù)據(jù)類型一個程序應包括以下兩方面內(nèi)容:(1) 對數(shù)據(jù)的描述。(2) 對操作的描述。c的數(shù)據(jù)類型如下:數(shù)據(jù)類型,基本類型,整型,字符型,實型(浮點型)單精度型,雙精度型,枚舉類型,構(gòu)造類型,數(shù)組類型,結(jié)構(gòu)體類型,共用體類型,指針類型,空類型2.2 常量與變量2.2.1 常量和符號常量在程序運行過程中,其值不能被改變的量稱為常量。常量區(qū)分為字面常量或直接常量、符號常量例2.1符號常量的使用。 #define price 30 main ( ) int num, total; num=10; total=num * price; printf(total=%d,total); 習慣上,符號常量名用大寫,變量用小寫,以示區(qū)別。 使用符號常量的好處是:(1) 含義清楚。(2) 在需要改變一個常量時能做到“一改全改”。2.2.2 變量其值可以改變的量稱為變量。C語言規(guī)定標識符只能由字母、數(shù)字和下劃線三種字符組成,且第一個字符必須為字母或下劃線。注意,大寫字母和小寫字母被認為是兩個不同的字符。在選擇變量名和其他標識符時,應注意做到“見名知意”,“先定義,后使用”2.3 整型數(shù)據(jù)2.3.1 整型常量的表示方法整型常量即整常數(shù)。c整常數(shù)可用以下三種形式表示:(1) 十進制整數(shù)。(2) 八進制整數(shù)。(3) 十六進制整數(shù)。2.3.2 整型變量1. 整型數(shù)據(jù)在內(nèi)存中的存放形式數(shù)據(jù)在內(nèi)存中是以二進制形式存放的。如果定義了一個整型變量i:int i; /* 定義為整型變量 */i=10; /* 給i賦以整數(shù)10 */ 每一個整型變量在內(nèi)存中占2個字節(jié)。數(shù)值是以補碼(complement) 表示的。2. 整型變量的分類(1) 基本整型,以int表示。(2) 短整型, 以short int表示,或以short表示。(3) 長整型, 以long int表示,或以long表示。有符號基本整型 signed int 無符號基本整型 unsigned int有符號短整型 signed short int無符號短整型 unsigned short int有符號長整型 signed long int無符號長整型 unsigned long int3. 整型變量的定義int a,b;(指定變量a、b為整型)unsigned short c,d;(指定變量c、d為無符號短整型)long e,f; (指定變量e、f為長整型)4. 整型數(shù)據(jù)的溢出例2.3整型數(shù)據(jù)的溢出。main()int a,b; a=32767; b=a+1; printf(%d,%d,a,b);運行結(jié)果為32767,-327682.3.3 整型常量的類型請注意以下幾點:(1) 一個整數(shù),如果其值在-32768+32767范圍內(nèi),認為它是int型,它可以賦值給int型和long int型變量。(2) 一個整數(shù),如果其值超過了上述范圍,而在-2147483648+2147483647范圍內(nèi),則認為它是長整型,可以將它賦值給一個long int型變量。(3) 如果某一計算機系統(tǒng)的c版本(例如turbo c)確定short int與int型數(shù)據(jù)在內(nèi)存中占據(jù)的長度相同,則它的表數(shù)范圍與int型相同。(4) 一個整常量后面加一個字母u,認為是unsigned int型 (5) 在一個整常量后面加一個字母l或l,則認為是long int型常量。2.4 實型數(shù)據(jù)2.4.1 實型常量的表示方法實數(shù)有兩種表示形式:(1) 十進制小數(shù)形式。(2) 指數(shù)形式。1. 實型數(shù)據(jù)在內(nèi)存中的存放形式 2. 實型變量的分類C實型變量分為單精度(float型)、雙精度(double型)和長雙精度型(long double)三類。對每一個實型變量都應在使用前加以定義。如:floatx,y,(指定x、y為單精度實數(shù))double z; (指定z為雙精度實數(shù)) long double t; (指定t為長雙精度實數(shù))3. 實型數(shù)據(jù)的舍入誤差例2.4實型數(shù)據(jù)的舍入誤差。main()float a,b; a = 123456,789e5; b = a + 20 ; printf(%f,b); 2.4.3 實型常量的類型 C編譯系統(tǒng)將實型常量作為雙精度來處理。例如已定義一個實型變量f,有如下語句: f = 2.45678 * 4523.65 系統(tǒng)將2.45678和4523.65按雙精度數(shù)據(jù)存儲(占64位)和運算,得到一個雙精度的乘積,然后取前7位賦給實型變量f。假如a已指定為單精度實型變量:float a;a=111111111;由于float型變量只能接收7位有效數(shù)字。2.5 字符型數(shù)據(jù)2.5.1 字符常量C的字符常量是用單引號(即撇號)括起來的一個字符。還允許用一種特殊形式的字符常量,就是以一個“”開頭的字符序列。n,它代表一個“換行”符。這是一種“控制字符”,在屏幕上是不能顯示的。例2.5轉(zhuǎn)義字符的使用。 ain() printf( ab ct derftgn); printf(htibbj k); 2.5.2 字符變量字符型變量用來存放字符常量,請注意只能放一個字符字符變量的定義形式如下:charc1,c2;用下面語句對c1、c2賦值:c1=a;c2=b;在所有的編譯系統(tǒng)中都規(guī)定以一個字節(jié)來存放一個字符,2.5.3 字符數(shù)據(jù)在內(nèi)存中的存儲形式及其使用方法將一個字符常量放到一個字符變量中,是將該字符的相應的ASCII代碼放到存儲單元中。例2.6向字符變量賦以整數(shù)。 main() char c1,c2; c1=97; c2=98; printf(%c %cn,c1,c2);/*以字符形式輸出*/ printf(%d %dn,c1,c2);/*轉(zhuǎn)換為整數(shù)形式輸出*/ 例2.7大小寫字母的轉(zhuǎn)換。main() char c1,c2; c1=a; c2=b; c1=c1-32; c2=c2-32; printf(%c%c,c1,c2); 2.5.4 字符串常量c語言除了允許使用字符常量外,還允許使用字符串常量。字符串常量是一對雙引號括起來的字符序列。如:“how do you do.”, “CHINA,a,123.452.6 變量賦初值程序中常需要對一些變量預先設置初值。C語言允許在定義變量的同時使變量初始化。如:int a=3; /* 指定a為整型變量,初值為3 */float f=3.56;/* 指定f為實型變量,初值為3.56 */char c=a; /* 指定c為字符變量,初值為a */也可以使被定義的變量的一部分賦初值。如: int a,b,c=5;表示指定a、b、c為整型變量,只對c初始化,c的值為5。2.7 各類數(shù)值型數(shù)據(jù)間的混合運算整型(包括int,short,long)、實型(包括float,double)可以混合運算。例如:10+a+15-87651234 *b是合法的。在計算機執(zhí)行時從左至右掃描,運算次序為:進行10+a的運算,先將a轉(zhuǎn)換成整數(shù)97,運算結(jié)果為107。由于“*”比“+”優(yōu)先,先進行i*f的運算。先將i與f都轉(zhuǎn)成double型,運算結(jié)果為double型。整數(shù)107與i*f的積相加。先將整數(shù)107轉(zhuǎn)換成雙精度數(shù)(小數(shù)點后加若干個0,即10700000),結(jié)果為double型。將變量e化成double型,d/e結(jié)果為double型。將10+a+i*f的結(jié)果與d/e的商相減,結(jié)果為double型。上述的類型轉(zhuǎn)換是由系統(tǒng)自動進行的。2.8 算術運算符和算術表達式1算術運算符 (+-*/%)2關系運算符 (=!=)3邏輯運算符 (!&|)4位運算符 ( |&)5賦值運算符 (=及其擴展賦值運算符)6條件運算符 (?:)7逗號運算符 (,)8指針運算符 (*和&)9求字節(jié)數(shù)運算符 (s i z e o f)10強制類型轉(zhuǎn)換運算符 ( (類型) )11分量運算符 (-)12下標運算符 ()13其他 (如函數(shù)調(diào)用運算符()2.8.2 算術運算符和算術表達式1. 基本的算術運算符+(加法運算符,或正值運算符。如3+5、+3)-(減法運算符,或負值運算符。如5-2、-3)*(乘法運算符。如3*5)/(除法運算符。如5/3)%(模運算符,或稱求余運算符,%兩側(cè)均應為整型數(shù)據(jù),如7%4的值為3)。2. 算術表達式和運算符的優(yōu)先級與結(jié)合性算術運算符的結(jié)合方向為“自左至右”,又稱“左結(jié)合性”,有些運算符的結(jié)合方向為“自右至左”,即右結(jié)合性3. 強制類型轉(zhuǎn)換運算符可以利用強制類型轉(zhuǎn)換運算符將一個表達式轉(zhuǎn)換成所需類型。例如: (double)a (將a轉(zhuǎn)換成double類型) (int)(x+y) (將x+y的值轉(zhuǎn)換成整型) (float)(5%3) (將5%3的值轉(zhuǎn)換成float型)其一般形式為(類型名)(表達式)例2.8強制類型轉(zhuǎn)換。 main() float x; int i; x=36; i=(int)x; printf(x=%f, i=%d,x,i); 4. 自增、自減運算符+i,-i(在使用i之前,先使i的值加(減)1) i+,i-(在使用i之后,使i的值加(減)1)=+i;(i的值先變成4, 再賦給,j的值為4) =i+;(先將 i的值3賦給,的值為3,然后i變?yōu)?)注意:(1) 自增運算符(+)和自減運算符(-),只能用于變量,而不能用于常量或表達式(2) +和-的結(jié)合方向是“自右至左”。5. 有關表達式使用中的問題說明(1)C運算符和表達式使用靈活因此務必要小心謹慎。如果有以下表達式:(i+)+(i+)+(i+)(2) c語言中有的運算符為一個字符,有的運算符由兩個字符組成,在表達式中如何組合呢?如i+,是理解為(i+)+呢?還是i+(+)呢?(3) C語言中類似上述這樣的問題還有一些。例如,在調(diào)用函數(shù)時,實參數(shù)的求值順序,C標準并無統(tǒng)一規(guī)定??傊?,不要寫出別人看不懂的、也不知道系統(tǒng)會怎樣執(zhí)行的程序。2.9 賦值運算符和賦值表達式1. 賦值運算符2. 類型轉(zhuǎn)換(1) 將實型數(shù)據(jù)(包括單、雙精度)賦給整型變量時,舍棄實數(shù)的小數(shù)部分。(2) 將整型數(shù)據(jù)賦給單、雙精度變量時,數(shù)值不變,但以浮點數(shù)形式存儲到變量中。(3) 將一個double型數(shù)據(jù)賦給float變量時,截取其前面7位有效數(shù)字,存放到float變量的存儲單元(32位)中。但應注意數(shù)值范圍不能溢出。(4) 字符型數(shù)據(jù)賦給整型變量時,由于字符只占1個字節(jié),而整型變量為2個字節(jié),因此將字符數(shù)據(jù)(8位)放到整型變量低8位中。有兩種情況: 如果所用系統(tǒng)將字符處理為無符號的量或?qū)nsigned char型變量賦值,則將字符的8位放到整型變量低8位,高8位補零。 如果所用系統(tǒng)(如turbo c)將字符處理為帶符號的(即signed char),若字符最高位為0,則整型變量高8位補0;若字符最高位為1,則高8位全補1(圖2.11(b)。這稱為“符號擴展”,這樣做的目的是使數(shù)值保持不變,(5) 將一個int、short、long型數(shù)據(jù)賦給一個char型變量時,只將其低8位原封不動地送到char型變量(即截斷)。(6) 將帶符號的整型數(shù)據(jù)(int型)賦給long型變量時,要進行符號擴展,將整型數(shù)的16位送到long型低16位中,如果int型數(shù)據(jù)為正值(符號位為0),則long型變量的高16位補0;如果int型變量為負值(符號位為1),則long型變量的高16位補1,以保持數(shù)值不改變。反之,若將一個long型數(shù)據(jù)賦給一個int型變量,只將long型數(shù)據(jù)中低16位原封不動地送到整型變量(即截斷)。(7) 將unsigned int型數(shù)據(jù)賦給long int型變量時,不存在符號擴展問題,只需將高位補0即可。將一個unsigned類型數(shù)據(jù)賦給一個占字節(jié)數(shù)相同的整型變量,將unsigned型變量的內(nèi)容原樣送到非unsigned型變量中,但如果數(shù)據(jù)范圍超過相應整型的范圍,則會出現(xiàn)數(shù)據(jù)錯誤。(8) 將非unsigned型數(shù)據(jù)賦給長度相同的unsigned型變量,也是原樣照賦(連原有的符號位也作為數(shù)值一起傳送)。3. 復合的賦值運算符在賦值符“=”之前加上其他運算符,可以構(gòu)成復合的運算符。如果在“=”前加一個“+”運算符就成了復合運算符“+=”。 a += b (其中a為變量,b為表達式) a +=b (將有下劃線的“a+”移到“=”右側(cè)) a = a + b (在“=”左側(cè)補上變量名a) 注意,如果b是包含若干項的表達式,則相當于它有括號。如: x %= y+3 x %=(y+3) x = x %(y+3) (不要錯寫成x=x%y+3)凡是二元(二目)運算符,都可以與賦值符一起組合成復合賦值符。c語言規(guī)定可以使用10種復合賦值運算符。即:+=,-=,*=,/=,%=,=,&=,=,|=后4. 賦值表達式由賦值運算符將一個變量和一個表達式連接起來的式子稱為“賦值表達式”。它的一般形式為 2.10 逗號運算符和逗號表達式C語言提供一種特殊的運算符逗號運算符。用它將兩個表達式連接起來。如:3+5,6+8 稱為逗號表達式,又稱為“順序求值運算符”。逗號表達式的一般形式為表達式1,表達式2逗號表達式的求解過程是:先求解表達式1,再求解表達式2。整個逗號表達式的值是表達式2的值。請注意并不是任何地方出現(xiàn)的逗號都是作為逗號運算符。第3章 最簡單的c程序設計順序程序設計3.1 C語句概述3.2 程序的三種基本結(jié)構(gòu)3.3 賦值語句3.4 數(shù)據(jù)輸入輸出的概念及在語言中的實現(xiàn)3.5 字符數(shù)據(jù)的輸入輸出3.6 格式輸入與輸出3.7 順序結(jié)構(gòu)程序設計舉例3.1 C語句概述C語句可以分為以下5類:(1) 控制語句,完成一定的控制功能。c只有9種控制語句,它們是: if()else(條件語句) for() (循環(huán)語句) hile() (循環(huán)語句) dohile() (循環(huán)語句) continue (結(jié)束本次循環(huán)語句) break (中止執(zhí)行switch或循環(huán)語句) sitch (多分支選擇語句) goto (轉(zhuǎn)向語句) return (從函數(shù)返回語句)(2) 函數(shù)調(diào)用語句。由一次函數(shù)調(diào)用加一個分號構(gòu)成一個語句;(3) 表達式語句。(4) 空語句。下面是一個空語句: (5) 可以用 把一些語句括起來成為復合語句,又稱分程序。3.2 程序的三種基本結(jié)構(gòu)有三種基本結(jié)構(gòu):(1) 順序結(jié)構(gòu)。先執(zhí)行a操作,再執(zhí)行b操作,兩者是順序執(zhí)行的關系。(2) 選擇結(jié)構(gòu)。p代表一個條件,當p條件成立(或稱為“真”)時執(zhí)行a,否則執(zhí)行b。(3) 循環(huán)結(jié)構(gòu),有兩種循環(huán)結(jié)構(gòu): 當型循環(huán)結(jié)構(gòu) 直到型循環(huán)結(jié)構(gòu)。由選擇結(jié)構(gòu)可以派生出另一種基本結(jié)構(gòu): 多分支選擇結(jié)構(gòu),見圖3.6。3.3 賦值語句賦值語句是由賦值表達式加上一個分號構(gòu)成。(1) C語言中的賦值號“=”是一個運算符,在其他大多數(shù)語言中賦值號不是運算符。(2) 關于賦值表達式與賦值語句的概念,其他多數(shù)高級語言沒有“賦值表達式”一概念。作為賦值表達式可以包括在其他表達式之中,例如:if(a=b)0)t=a;3.4 數(shù)據(jù)輸入輸出的概念及在C語言中的實現(xiàn)(1) 所謂輸入輸出是以計算機主機為主體而言的。(2) C語言本身不提供輸入輸出語句,輸入和輸出操作是由函數(shù)來實現(xiàn)的。(3) 在使用c語言庫函數(shù)時,要用預編譯命令“include”將有關的“頭文件” 包括到用戶源文件中??紤]到printf和scanf函數(shù)使用頻繁,系統(tǒng)允許在使用這兩個函數(shù)時可不加#include命令。3.5 字符數(shù)據(jù)的輸入輸出3.5.1 putchar函數(shù)(字符輸出函數(shù))putchar函數(shù)的作用是向終端輸出一個字符:例如putchar(c);它輸出字符變量c的值。c可以是字符型變量或整型變量。例3.1輸出單個字符。 #include main() char a,b,c; a=b;b=o;c=y; putchar(a);putchar(b);putchar(c); 也可以輸出其他轉(zhuǎn)義字符,如:putchar(101)(輸出字符a) putchar() (輸出單引號字符) putchar(015) (輸出回車,不換行,使輸出的當前位置移到本行開頭)3.5.2 getchar函數(shù)(字符輸入函數(shù))此函數(shù)的作用是從終端(或系統(tǒng)隱含指定的輸入設備)輸入一個字符。getchar函數(shù)沒有參數(shù),其一般形式為getchar()函數(shù)的值就是從輸入設備得到的字符。例如:例3.2輸入單個字符#include main() charc; c=getchar(); putchar(c); 應該在該函數(shù)的前面(或本文件開頭)加上“包含命令”#include3.6 格式輸入與輸出3.6.1 printf函數(shù)(格式輸出函數(shù))1. printf函數(shù)的一般格式為printf(格式控制,輸出表列) 如:printf(%d, %cn,i,c) 括弧內(nèi)包括兩部分:(1) “格式控制”,也稱“轉(zhuǎn)換控制字符串”,它包括兩種信息: 格式說明,由“%”和格式字符組成。它的作用是將輸出的數(shù)據(jù)轉(zhuǎn)換為指定的格式輸出。格式說明總是由“%”字符開始的。 普通字符,即需要原樣輸出的字符。(2) “輸出表列”是需要輸出的一些數(shù)據(jù),可以是表達式。2. 格式字符對不同類型的數(shù)據(jù)用不同的格式字符。常用的有以下幾種格式字符:(1) d格式符。%d, %md, %ld(2) o格式符, (3) x格式符,(4) u格式符,(5) c格式符,(6) s格式符,%s,%ms,%-ms,%mns,%-mns,(7) f格式符,%f,%nf%-nf與%nf, (8) e格式符, %e %m.ne和%-m.ne。(9) g格式符,在使用printf函數(shù)時,還有幾點要說明:(1) 除了x,e,g外,其他格式字符必須用小寫字母,(2) 可以在printf函數(shù)中的“格式控制”字符串。(3) 上面介紹的d、o、x、u、c、s、f、e、g等字符,如用在“%”后面就作為格式符號。(4) 如果想輸出字符“%”,則應該在“格式控制”字符串中用連續(xù)兩個%表示, 3.6.2 scanf函數(shù)(格式輸入函數(shù))1. 一般形式scanf(格式控制,地址表列)“格式控制”的含義同printf函數(shù);“地址表列”是由若干個地址組成的表列,可以是變量的地址,或字符串的首地址。例3.9用scanf函數(shù)輸入數(shù)據(jù)。ain() int a,b,c; scanf(“%d%d%d”,&a,&b,&c); printf(%d,%d,%dn,a,b,c); 輸入數(shù)據(jù)時,在兩個數(shù)據(jù)之間以一個或多個空格間隔,也可以用回車鍵、跳格鍵tab。用“%d%d%d”格式輸入數(shù)據(jù)時,不能用逗號作兩個數(shù)據(jù)間的分隔符2. 格式說明以%開始,以一個格式字符結(jié)束,中間可以插入附加的字符。說明:(1) 對unsigned型變量所需的數(shù)據(jù),可以用%u,%d或%o,%x格式輸入。(2) 可以指定輸入數(shù)據(jù)所占列數(shù),系統(tǒng)自動按它截取所需數(shù)據(jù)。(3) 如果在%后有一個“*”附加說明符,表示跳過它指定的列數(shù)。(4) 輸入數(shù)據(jù)時不能規(guī)定精度3. 使用scanf函數(shù)時應注意的問題(1) scanf函數(shù)中的“格式控制”后面應當是變量地址,而不應是變量名。(2) 如果在“格式控制”字符串中除了格式說明以外還有其他字符,則在輸入數(shù)據(jù)時應輸入與這些字符相同的字符。(3) 在用“%c”格式輸入字符時,空格字符和“轉(zhuǎn)義字符”都作為有效字符輸入(4) 在輸入數(shù)據(jù)時,遇以下情況時該數(shù)據(jù)認為結(jié)束。 遇空格,或按“回車”或“跳格”(tab)鍵。 按指定的寬度結(jié)束,如“%3d”,只取3列。 遇非法輸入。3.7 順序結(jié)構(gòu)程序設計舉例例3.10輸入三角形的三邊長,求三角形面積。include ain() float a,b,c,s,area; scanf(%f,%f,%f,&a,&b,&c); s=10/2(a+b+c); area=srt(s(s-a)(s-b)(s-c); printf(a=%7.2f, b=%7.2f, c =%7.2f, s =%7.2fn,a,b,c,s); printf(area=%72fn,area); 例3.11從鍵盤輸入一個大寫字母,要求改用小寫字母輸出。 #include main() char cl,c2; cl=getchar(); printf(%c,%dn,cl,cl); c2=cl+32; printf(%c,%dn,c2,c2); 例3.12求ax2+bx+c=0方程的根。include ain(); float a,b,c,disc,x1,x2,p,; scanf(a=%f,b=%f,c=%f,&a,&b,&c); disc=b*b-4*a*c; p=-b/(2*a);=srt(disc)/(2*a); x1=p+;x2=p-; printf(nnx1=%5.2fnx2=%5.2fn,x1,x2); 第4章 選擇結(jié)構(gòu)程序設計4.1關系運算符和關系表達式4.2邏輯運算符和邏輯表達式4.3if語句4.4switch語句4.5程序舉例習題選擇結(jié)構(gòu),是三種基本結(jié)構(gòu)之一。在大多數(shù)程序中都會包含選擇結(jié)構(gòu)。它的作用是,根據(jù)所指定的條件是否滿足,決定從給定的兩組操作選擇其一。4.1 關系運算符和關系表達式所謂“關系運算”實際上是“比較運算”。將兩個值進行比較,判斷其比較的結(jié)果是否符合給定的條件。4.1.1 關系運算符及其優(yōu)先次序C語言提供6種關系運算符:優(yōu)先級相同 (高): (小于) =(小于或等于) (大于) =(大于或等于)優(yōu)先級相同 (低): = = (等于) !=(不等于) 關于優(yōu)先次序:(1) 前4種關系運算符(,=,=)的優(yōu)先級別相同,后兩種也相同。(2) 關系運算符的優(yōu)先級低于算術運算符。(3) 關系運算符的優(yōu)先級高于賦值運算符。4.1.2 關系表達式用關系運算符將兩個表達式(可以是算術表達式或關系表達式、邏輯表達式、賦值表達式、字符表達式)連接起來的式子,稱關系表達式。關系表達式的值是一個邏輯值,即“真”或“假”。關系表達式“ab”的值為“真”,表達式的值為1。關系表達式“bca”的值為“假”,表達式的值為0。4.2.1 邏輯運算符及其優(yōu)先次序C語言提供三種邏輯運算符:(1) &邏輯與(相當于其他語言中的aND)(2) | 邏輯或(相當于其他語言中的)(3) ! 邏輯非(相當于其他語言中的NT)(1) !(非)&(與)(或), 即“!”為三者中最高的。(2) 邏輯運算符中的“&”和“|”低于關系運算符,“!”高于算術運算符。4.2.2 邏輯表達式邏輯表達式的值應該是一個邏輯量“真”或“假”。c語言編譯系統(tǒng)在給出邏輯運算結(jié)果時,以數(shù)值1代表“真”,以0代表“假”,但在判斷一個量是否為“真”時,以0代表“假”,以非0代表“真”。即將一個非零的數(shù)值認作為“真”。例如,要判別某一年year是否閏年。閏年的條件是符合下面二者之一:能被4整除,但不能被100整除。能被4整除,又能被400整除??梢杂靡粋€邏輯表達式來表示:(year4=0&year100!=0)|year400=0當year為某一整數(shù)值時,如果上述表達式值為真(1),則year為閏年;否則year為非閏年??梢约右粋€“!”用來判別非閏年:!(year4=0 & year100!=0)|year400=0)若表達式值為真(1),year為非閏年。也可以用下面邏輯表達式判別非閏年:(year4!=0)|(year100=0 & year400!=0)若表達式值為真,year為非閏年。請注意表達式中右面的括弧內(nèi)的不同運算符(,!,&0,=)的運算優(yōu)先次序。4.3 if語句if語句是用來判定所給定的條件是否滿足,根據(jù)判定的結(jié)果(真或假)決定執(zhí)行給出的兩種操作之一。4.3.1 if語句的三種形式C語言提供了三種形式的if語句:1 if(表達式)語句2 if(表達式)語句1 else語句23 if(表達式1) 語句1else if(表達式2)語句2else if(表達式3)語句3else if(表達式m)語句melse語句n說明:(1) 三種形式的if語句中在if后面都有“表達式”,一般為邏輯表達式或關系表達式。(2) 第二、第三種形式的if語句中,在每個else前面有一分號,整個語句結(jié)束處有分號。(3) 在if和else后面可以只含一個內(nèi)嵌的操作語句(如上例),也可以有多個操作語句,此時用花括號“”將幾個語句括起來成為一個復合語句。例4.1輸入兩個實數(shù),按代數(shù)值由小到大的次序輸出這兩個數(shù)。這個問題的算法很簡單,只需要作一次比較即可。對類似這樣簡單的問題可以不必先寫出算法或畫流程圖,而直接編寫程序?;蛘哒f,算法在編程者的腦子里,相當于在算術運算中對簡單的問題可以“心算”而不必在紙上寫出來一樣。 程序如下: main() float a,b,t; scanf(f,f,&a,&b); if(ab) t=a;a=b;b=t; printf(52f,52f,a,b); 4.3.2 if語句的嵌套在if語句中又包含一個或多個if語句稱為if語句的嵌套。一般形式如下:if()if()語句1else語句2內(nèi)嵌ifelseif()語句3else語句4內(nèi)嵌if應當注意if與else的配對關系。else總是與它上面的最近的if配對。4.3.3 條件運算符若if語句中,在表達式為“真”和“假”時,且都只執(zhí)行一個賦值語句給同一個變量賦值時,可以用簡單的條件運算符來處理。例如,若有以下if語句:if(ab)max=a; elsemax=b;可以用下面的條件運算符來處理:max=(ab)?ab;其中“(ab)?ab”是一個“條件表達式”。它是這樣執(zhí)行的:如果(ab)條件為真,則條件表達式取值a,否則取值b。條件運算符要求有3個操作對象,稱三目(元)運算符,它是c語言中唯一的一個三目運算符。條件表達式的一般形式為圖4.11表達式1?表達式2表達式3。說明:(1) 條件運算符的執(zhí)行順序:先求解表達式1,若為非0(真)則求解表達式2,此時表達式2的值就作為整個條件表達式的值。若表達式1的值為0(假),則求解表達式3,表達式3的值就是整個條件表達式的值。(2) 條件運算符優(yōu)先于賦值運算符,因此上面賦值表達式的求解過程是先求解條件表達式,再將它的值賦給max。條件運算符的優(yōu)先級別比關系運算符和算術運算符都低。(3) 條件運算符的結(jié)合方向為“自右至左”。(4) 條件表達式不能取代一般的if語句,只有在if語句中內(nèi)嵌的語句為賦值語句(且兩個分支都給同一個變量賦值)時才能代替if語句。(5) 條件表達式中,表達式1的類型可以與表達式2和表達式3的類型不同。例4.4輸入一個字符,判別它是否大寫字母,如果是,將它轉(zhuǎn)換成小寫字母;如果不是,不轉(zhuǎn)換。然后輸出最后得到的字符。 main()charch; scanf(c,& ch); ch=(ch=a & ch=Z)?(ch32)ch; printf(c,ch) 4.4 Switch 語 句Switch語句是多分支選擇語句。當然這些都可以用嵌套的if語句來處理,但如果分支較多,則嵌套的if語句層數(shù)多,程序冗長而且可讀性降低。c語言提供Switch語句直接處理多分支選擇,它的一般形式如下:switch(表達式) case常量表達式1:語句1 case常量表達式2:語句2 case常量表達式n:語句n default :語句n1 例如,要求按照考試成績的等級打印出百分制分數(shù)段,可以用Switch語句實現(xiàn):Switch(grade) caseaprintf(85100n); casebprintf(7084n); casecprintf(6069n); caseDprintf(60n); defaultprintf(errorn); 說明:(1) switch后面括弧內(nèi)的“表達式”, ANSI標準允許它為任何類型。(2) 當表達式的值與某一個case后面的常量表達式的值相等時,就執(zhí)行此case后面的語句,若所有的case中的常量表達式的值都沒有與表達式的值匹配的,就執(zhí)行default后面的語句。(3) 每一個case的常量表達式的值必須互不相同,否則就會出現(xiàn)互相矛盾的現(xiàn)象(對表達式的同一個值,有兩種或多種執(zhí)行方案)。(4) 各個case和default的出現(xiàn)次序不影響執(zhí)行結(jié)果。例如,可以先出現(xiàn)“default:”,再出現(xiàn)“case D:”,然后是“case a:”。 (5) 執(zhí)行完一個case后面的語句后,流程控制轉(zhuǎn)移到下一個case繼續(xù)執(zhí)行?!癱ase常量表達式”只是起語句標號作用,并不是在該處進行條件判斷。在執(zhí)行Switch語句時,根據(jù)Switch后面表達式的值找到匹配的入口標號,就從此標號開始執(zhí)行下去,不再進行判斷。(6) 多個case可以共用一組執(zhí)行語句,如: casea caseb casecprintf(60n);break;grade的值為a、b或c時都執(zhí)行同一組語句。4.5 程序舉例例4.5寫程序,判斷某一年是否閏年。例4.6求ax2bxc=0方程的解。例3.12曾介紹過基本的算法,實際上應該有以下幾種可能: a=0,不是二次方程。 b2-4ac=0,有兩個相等實根。 b2-4ac0,有兩個不等實根。 b2-4ac0,有兩個共軛復根。例4.7運輸公司對用戶計算運費。路程(S)越遠,每公里運費越低。標準如下: s250km沒有折扣 250S500 2折扣 500S1000 5折扣 1000S2000 8折扣 2000S3000 10折扣 3000S 15折扣第5章 循 環(huán) 控 制5.1 概述5.2 goto語句以及用goto語句構(gòu)成循環(huán)5.3 while語句5.4 do while語句5.5 for 語句5.6 循環(huán)的嵌套5.7 幾種循環(huán)的比較5.8 break語句和continue語句5.9程序舉例5.1 概述循環(huán)結(jié)構(gòu)是結(jié)構(gòu)化程序設計的基本結(jié)構(gòu)之一,它和順序結(jié)構(gòu)、選擇結(jié)構(gòu)共同作為各種復雜程序的基本構(gòu)造單元。 (1) 用goto語句和if語句構(gòu)成循環(huán); (2) 用while語句; (3) 用do|while語句; (4) 用for語句。5.2 goto語句以及用goto語句構(gòu)成循環(huán)goto語句為無條件轉(zhuǎn)向語句,它的一般形式為 goto語句標號;語句標號用標識符表示,它的定名規(guī)則與變量名相同,即由字母、數(shù)字和下劃線組成,其第一個字符必須為字母或下劃線。不能用整數(shù)來做標號。例如:goto label-1;可讀性差。但也不是絕對禁止使用goto語句。一般來說,可以有兩種用途:(1) 與if語句一起構(gòu)成循環(huán)結(jié)構(gòu);(2) 從循環(huán)體中跳轉(zhuǎn)到循環(huán)體外,但在c語言中可以用break語句和continue語句(見5.8節(jié))跳出本層循環(huán)和結(jié)束本次循環(huán)。例5.1用if語句和goto語句構(gòu)成循環(huán),求n。 此問題的算法是比較簡單的,可以直接寫出程序: main( ) int i, sum=0;i=1;loop: if(i=100) sum=sum+i; i+; goto loop; printf(%d,sum);5.3while語句while語句用來實現(xiàn)“當型”循環(huán)結(jié)構(gòu)。其一般形式如下:while (表達式) 語句當表達式為非0值時,執(zhí)行while語句中的內(nèi)嵌語句。其特點是:先判斷表達式,后執(zhí)行語句。例5.2求n。用傳統(tǒng)流程圖和NS結(jié)構(gòu)流程圖表示算法。根據(jù)流程圖寫出程序:main() int i,sum=0
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 家委會工作管理制度
- 庫房目視化管理制度
- 強化地板廠管理制度
- 影視器材室管理制度
- 微黨校黨員管理制度
- 心理與課堂管理制度
- 快手安全與管理制度
- 快餐廳考勤管理制度
- 總經(jīng)理授權管理制度
- 感染科電梯管理制度
- 國開作業(yè)《公共關系學》實訓項目3:社區(qū)關系建設(六選一)-實訓項目二社區(qū)關系建設方案-參考(含答案)98
- 《歷史文化名城名鎮(zhèn)名村保護規(guī)劃編制要求》
- 現(xiàn)場工程量確認單
- 《數(shù)據(jù)科學與大數(shù)據(jù)技術導論》完整版課件(全)
- 2022年廣東省佛山市順德區(qū)承德小學小升初數(shù)學試卷
- 申請人申請仲裁送達信息確認書
- 黃亮和李燕的創(chuàng)業(yè)故事(鳳山書屋)
- (完整版)生物同源性荷爾蒙替代療法課件
- 福建跨學科四門主干課程作業(yè)及答案小學語文
- 燃氣輸配課程設計報告書
- DB61∕T 5006-2021 人民防空工程標識標準
評論
0/150
提交評論