




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第一章第二章第三章第四章第五章第六章第七章第一章第一章 C C語言概述語言概述 C語言 既可作為系統(tǒng)軟件的程序設(shè)計語言,又可作為應(yīng)用軟件的程序設(shè)計語言。 尤其是當今計算機應(yīng)用極為廣泛,軟件的設(shè)計、編寫質(zhì)量要求高,經(jīng)常與硬件部分打交道,如:界面設(shè)計等,所以用C語言編寫是最理想的。因而C語言也是當前計算機語言中用得最廣泛的語言之一。 1.1 1.1 C C語言出現(xiàn)的歷史背景語言出現(xiàn)的歷史背景一、操作系統(tǒng)的設(shè)計語言一、操作系統(tǒng)的設(shè)計語言O(shè).S. 操作系統(tǒng),為用戶使用計算機提供一個操作環(huán)境:系統(tǒng)命令、語言編程等。如:DOS. UNIX以前:O. S .軟件用匯編指令編寫。匯編語言:一種二進制指令代碼的
2、符號表示,既繁瑣,又易出錯,可讀性差。改進:用C語言編寫,既提高了程序的可讀性,又可與硬件打交道。二 、二 、發(fā) 展 過 程發(fā) 展 過 程 1960年出現(xiàn)了Algol60語言,但該語言主要面向問題,與硬件較遠,故英國劍橋大學推出了CPL(Combined Programming Language) 1967年,Matin Richards對CPL進行改進、簡化 、 推 出 了 B C P L ( B a s i c C o m b i n e d Programming Language) 1970年,美國貝爾實驗室Ken Thomson 以BCPL為基礎(chǔ),再次簡化推出了B語言,并寫了第一個U
3、NIX系統(tǒng)。 美國貝爾實驗室D.M. Ritchie 在B語言基礎(chǔ)上設(shè)計出了C語言,并用其將UNIX系統(tǒng)全部改寫并實現(xiàn)。 經(jīng)進一步改進,至1977年出現(xiàn)了與具體機器無關(guān)的C編譯文本,從而使C語言廣泛應(yīng)用,各種機器皆可使用。 1978年,美國Brain W.Kernighan與Dennis. M. Ritchie 聯(lián)合出版一書The C Programming Language成為 ANSI C之基礎(chǔ)。 1983年,美國標準化協(xié)會(ANSI) 制定了ANSI C。 ANSI C 為基礎(chǔ): 不同機器有不同版本,尤其是函數(shù)均應(yīng)參考相應(yīng)的機器。 1.2 C語言的特點語言的特點 只有通過學習,方可理解C
4、之特點,先簡敘之:1. 簡潔、緊湊、方便、靈活簡潔、緊湊、方便、靈活 32個關(guān)鍵字,9種控制語句, 主要用小寫字母,壓縮一切不必要成分2. 運算符豐富運算符豐富 除了最基本的、%等運算外,還將括號、賦值、類型強制轉(zhuǎn)換等均作為運算符,共有34種運算符。3. 數(shù)據(jù)結(jié)構(gòu)豐富數(shù)據(jù)結(jié)構(gòu)豐富 除基本類型外, 有指針, 結(jié)構(gòu)體、共同體等類型。4. 具有結(jié)構(gòu)化的控制語句具有結(jié)構(gòu)化的控制語句 模塊完整,控制中的語句可完整化。5. 語法嚴格,但有靈活性語法嚴格,但有靈活性 如:數(shù)據(jù)類型可相互通用:整型、字符型通用。6. 可與機器硬件打交道,直接訪問內(nèi)存地址,具可與機器硬件打交道,直接訪問內(nèi)存地址,具有有“ 高高”
5、、“ 低低”級語言之功能。級語言之功能。7. 生成目標代碼質(zhì)量高,執(zhí)行效率高。生成目標代碼質(zhì)量高,執(zhí)行效率高。8. 可移植性優(yōu)于匯編語言??梢浦残詢?yōu)于匯編語言。1.3 簡單的簡單的C程序介紹程序介紹 為了更好、更快地掌握C程序,我們先看幾個C語言程序:例1. main( ) printf (This is a c programn); 例2. main ( ) /*求兩個數(shù)之和*/ int a, b, sum; /*這是定義變量*/ a=123; b=456; sum=a+b; printf(sum is %dn, sum); 例3.main( ) /* 主函數(shù)*/ int a, b, c;
6、/*定義變量*/ scanf(%d, %d, &a, &b); /*輸入變量a和b的值*/ c=max(a, b);/*調(diào)用max函數(shù),將得到的值賦給c*/ printf(max=%d,c;) /*輸出c的值*/ int max (x, y) int x, y; /*對形參x、y作類型定義*/ int z; /*max函用到的變量z,也要加以定義*/ z=y; if (xy) z=x; return (z); /*將z的值返回,通過max帶回調(diào)用處*/ 通過分析,初步看到通過分析,初步看到:1. C程序全部由一個一個的函數(shù)構(gòu)成。至少有一個主函數(shù)main ( ), 其它函數(shù)可被主
7、函數(shù)調(diào)用或相互調(diào)用。其它函數(shù)可為C 函數(shù)庫中函數(shù),也可為自己編的函數(shù)。上述特點稱為程序的模塊化.2. 函數(shù)的構(gòu)成: 函數(shù)說明+函數(shù)體 函數(shù)體: 變量定義與執(zhí)行語句 可允許空函數(shù): dump ( ) 函數(shù)說明包括:函數(shù)名、類型、屬性、參數(shù)等3. 函數(shù)的執(zhí)行一定從main ( )開始。盡管main ( )函數(shù)位置可自由。4. 書寫自由,一個語句可多行,一行可多個語句。5. 每一條語句必須有一個分號;6. C語言的輸入 / 出均以函數(shù)形式出現(xiàn)。scanf( ), printf( ).7. 可用/ /對C語言加注釋第二章第二章 數(shù)據(jù)類型、運算符與表達數(shù)據(jù)類型、運算符與表達式式2.1. 數(shù)據(jù)類型數(shù)據(jù)類型
8、 著名計算機科學家沃思提出: 程序數(shù)據(jù)結(jié)構(gòu)算法 所以,存放數(shù)據(jù)的方式直接反映了一種語言的數(shù)據(jù)表達能力。 數(shù)據(jù)的存儲方式又稱之為:數(shù)據(jù)類型。 舉 一個例子:以考生各科成績及總分排隊問題為列。 成績的存放 以數(shù)組形式 排隊方法 算法前面已述. C數(shù)據(jù)類型豐富,分為:基本類型構(gòu)造類型指針類型空類型整型字符型實型單精度雙精度數(shù)組結(jié)構(gòu)體共用體數(shù)據(jù)有常量、變量之分,均為其中一種類型。本章先學習基本類型。枚舉2.2 常量與變量常量與變量2.2.1 常量和符號常量常量和符號常量常量 程序運行過程中不能被改變的量。一般的數(shù)據(jù)顯式寫法均表示常量。 如程序中: 20 整型常量 15.8 實型常量 a 字符常量例:
9、#define PRICE 30 main ( ) int num, total; num=10; total=num*PRICE; printf(total=%d,total); 還可用一個符號表示一個常量 符號常量符號常量(一般用大寫,以區(qū)分變量)再如: =3.1415629 #define PAI 3.1415629 #define PRICE 302.2.2變量變量 程序執(zhí)行中可以改變的量稱為變量。變量包括變量名和變量值。變量名 用標識符命名,對應(yīng)一定數(shù)量的內(nèi)存存貯單元,其單元數(shù)視變量類型而定。標識符 由字母、數(shù)字、下劃線組成且由字母或下劃線開頭的字符串。 標識符可用來命名變量及作為常
10、量名、函數(shù)名、類型名、文件名等,一個程序內(nèi)不得有重復名。 如: _sum, sum, student_name, price等 習慣上,變量名、函數(shù)名等用小寫字母表示。常量名用大寫字母表示(以增加可讀性)。 另: 需注意標識符長度,視不同系統(tǒng)而定。 設(shè)允許8個字符。 則: student_ name student_ number為同一名字。C語言中, 變量須先定義,后使用 如: int student student=30; 則若寫成student=30, 則未定義, 編譯時指出其錯。 一旦變量被定義,即可在編譯時為其分配相應(yīng)數(shù)量的單元。 一旦變量被定義, 其類型便確定。則可檢查其運算的合法
11、性。如: a % b 表示a整除以b的余,則a,b必須為整型量。2.3.1 整型常量整型常量整型常量 整型常數(shù)C語言提供了三種形式 十進制 如: 256, 308, 120等 八進制 以數(shù)字0開頭表示的整數(shù) 例:0235, 0146 012等. 0235=28238515710 014618248610210 012(182)1010十六進制 以0 x開頭的整型數(shù) 如: 0 x16, 0 x282.3.2 整型變量整型變量一、分類:一、分類: 分為四種:基本型、短整型、長整型、無符號型 2.短整型: 用short int或 short定義 3.長整型: 用long 或 long int 定義
12、1.基本型: 用int定義 4.無符號型: 不存放符號,則不帶符號數(shù). 又分無符號整型,無符號短整型, 無符號長整型。 上述各種類型所占內(nèi)存單元數(shù)及取值范圍視不同機器而不同。詳見P13。二、定義方法二、定義方法 整型變量分別以下列方式定義2. 短整型 short int 或 short a, b, c;3. 長整型 long int 或 long a, b, c;1. 基本整型: int a, b, c;4. 無符號型 unsigned a, b, c; unsigned short a, b, c; unsigned long a, b, c;例: main ( ) int a, b, c,
13、 d; /*指定a, b, c, d為整型變量*/ unsignd u; /*指定u為無符號整型變量*/ a=12; b= 24; u=10; c=a+u; d=b+u; printf(a+u=%d, b+u=%dn,c,d); 由此看到: 不同類型的整型數(shù)據(jù)可進行算術(shù)運算。 但有一定規(guī)則,見2.7.運行結(jié)果為 a+u=22, b+u= 14三、關(guān)于整型常量三、關(guān)于整型常量 程序中出現(xiàn)的整型常數(shù), 系統(tǒng)按以下規(guī)則分配變量(內(nèi)存單元)或賦值給相應(yīng)變量 2. 若超越,而在21474836482147483647之間,則可賦給 long int 變量。 1. 當常數(shù)(量)在 3276832767之間
14、,則可賦給int, long int 變量。4. 一個非負整數(shù), =, =, !=4. 位運算符 , , , , &.5. 賦值運算符 = 等6. 條件運算符 ? 等7. 逗號運算符 ,8. 指針運算符 *, &11. 分量運算符 , ,12. 下標運算符 13. 其它運算符 如函數(shù)的調(diào)用( )9. 求字節(jié)數(shù)運算符 size of 10. 強制類型轉(zhuǎn)換運算符 (類型) 2.8.2 算術(shù)運算符和算術(shù)表達式算術(shù)運算符和算術(shù)表達式一、基本算術(shù)運算符+ 加法 正值 3+6, +3 減法 負值 6 4, 5 乘法 38/ 除法 8 / 5% 求余 7 % 4 的值為3注: 兩個整型數(shù)據(jù)相
15、除 (結(jié)果為整,一般向零靠攏)。 5/ 3 1“ /” 中,有一個 float, 則結(jié)果為double型,使用時千萬注意 int / int 出現(xiàn)數(shù)據(jù)丟失。二、算術(shù)表達式及算術(shù)運算符的優(yōu)先級與結(jié)合性運算對象: 常量、變量、函數(shù)等優(yōu)先級: ( ), , /, %, +, 結(jié)合性: 同一優(yōu)先級, 自左向右,為左結(jié)合性,反之為右結(jié)合性。例: a b / c 1.5 + ad e 當類型不同的數(shù)據(jù)進行運算時,按2.7介紹的類型轉(zhuǎn)換。 算術(shù)表達式: 用算術(shù)運行運算符和括號將運算對象連接起來,且符合C語法規(guī)則的式子。三、可利用強制類型轉(zhuǎn)換運算符將一個算術(shù)表達式轉(zhuǎn)換為所需類型形式: (類型名) (表達式)例
16、如: (double) a 將a轉(zhuǎn)換為double(int) (x+y) 將x+y轉(zhuǎn)換為int(float) (5%3) 將5%3轉(zhuǎn)換為float注: 1. 括號不能省略。 如: intx 會理解為變量intx. 2. 轉(zhuǎn)換后的類型數(shù)據(jù)由系統(tǒng)分配一個中間變量存放,而原變量類型不變。 float x; 又如: (int) (x+y) 若省略: (int)x+y會變成將x轉(zhuǎn)成整型. (int)x; 則x本身仍為實型,而(int)x由一個中間變量(整)存放x的整數(shù)部分。例: main ( ) float x; int i; x=3.6; i= (int) x; printf (x=%d, x, i)
17、; 則: x=3.600000, i=3.總結(jié)以上類型轉(zhuǎn)換,有二種: 1. 強制另: 強制類型轉(zhuǎn)換運算優(yōu)先于算術(shù)運算符.2. 系統(tǒng)自動如: 若x為float, 則x%3不合法。 但可用(int)x%3來解決。(附錄III介紹了優(yōu)先級)四、自增,自減運算符設(shè)有int i = 3;+ + 自增1 自減1則: + +i, i+都會使i變?yōu)?,但有區(qū)別:+i: 先使i值+1,再使用i值;i+: 先使用i值,再使i值+1.j= +i; j=4, i=4. (i=i+1; j=i;)j=i+; j=3, i=4. (j=i; i=i+1)同理: i, i ,均使i值1,但: 又如: printf (i=%
18、dn, i+); 結(jié)果: i=3若: printf (i=%dn, +i); 結(jié)果: i=4 i: 先使i值1,再使用i值;i : 先使用i值,再使i值1i=3;幾點注意:1. +和 運算法只能用于變量,不得用于常量和表達式.2. +, ,的結(jié)合性為從右至左,而一般算術(shù)運算符為從左至右。如:如 5+ +, (a+b)+ +均為不合法.i+ 和+ +為同一優(yōu)先級.i+相當于(i+)若 i=3, 則結(jié)果為3, i為4. +, 主要用于循環(huán)變量自增或自減。1. 要慎用+、 運算符。五、有關(guān)表達式使用中的問題說明則:先對i進行3次自加,為6,然后三個i相加為18,而i為6。如: 表達式(i+)+(i+
19、)+(i+) (i=3) 一般認為: 從左至右: 3+4+5=12,i6.但Turbo C. MSC 都是先取三個原值相加: i+i+i=9 i6如果表達式數(shù)為: k=(+i)+(+i)+(+i)2. 在表達式中,有的運算符為一個字符,有的為兩個字符。3. 在函數(shù)調(diào)用時,如:一般地: 自左至右盡可能多地將若干字符組成一個運算符。例: i+j, 究竟理解為(i+)+j還是i+(+j)?printf(%d, %d, i, i+);若i=3, 若參數(shù)計算從左至右, 則輸出 3, 3若從右至左, 則輸出4, 3上述問題看似復雜,最好上機實踐.2.9 賦值運算符和 賦值表達式符號 = 為賦值運算符。2.
20、 整型數(shù)據(jù)賦給實型變量,數(shù)值不變,但按實數(shù)形式存放. 1. 將實型數(shù)據(jù)(無論單,雙精度)賦給整型變量時,舍棄小數(shù).賦值時,兩邊類型若不一致,則按以下規(guī)則轉(zhuǎn)換:4. 將intlong int, 進行符號擴展。 即: 符號擴展, 低16位long 的低16位。5. long int int 則高16位截斷。3. 字符型數(shù)據(jù)賦給整型變量時:(2)字符帶符號整型變量,則字符高位擴展。(1)字符無符號整型變量,則存入低8位,高8位補零。6. 將unsigned int 型long int高位補0。原值傳送,但數(shù)據(jù)大小不能超值。 如: unsigned int a=65535; int b; b=a; 則
21、越界。而位數(shù)相同部分賦值 unsigned int int unsigned long long unsigned short short7. 非unsigned 型長度相同的unsigned型數(shù)據(jù),原樣傳送(包括符號位) 一、復合賦值運算符:在 號之前加一個其它運算符。C語言規(guī)定:凡是二目運算符均可構(gòu)成復合運算符。例: a+=3; 相當于 a=a+3 x=y+8; 相當于 x=x (y+8) x%=3; 相當于x=x% 一般形式: 二、賦值表達式例: x=10 為一賦值表達式 其中又可以是一個賦值表達式。例: x=(y=10) 相當于 y=10;x=y 由于賦值號為右結(jié)合性,于是 ( ) 可
22、省略, 即為:x=y=10;例: a + = a =aa (設(shè)a12)又: a=5+(c=6) c=6, a=11 a=(b=4)+(c=6) b=4, c=6, a=10 a=(b=10)/ (c=2)b=10,c=2, a=5進一步,還可用復合賦值運算符作下列運算:步驟: aa144. a =a a a=a a a=12 144= 132 a + = 132 a = a+(132) = 2642.10 2.10 逗號運算符和逗號運算符和逗號表達式逗號表達式 一般形式: 表達式1, 表達式2其計算規(guī)則: 先計算表達式1,再計算表達式2,最后值為表達式2的值。例:a=35, a 4 則: 先計
23、算3 5, a15, a 4=60,結(jié)果為60。又如: (a=35, a 4), a+5 擴展形式: 表達式1, 表達2, ,表達式n,結(jié)果為20(作為逗號表達式的值) a+5a 即 20a. 3 5=15a a 4=60 (此時a值仍未變)結(jié)果為表達式n的值 注意: x=(a=3, 63) 賦值表達式, x18; x=a=3, 6 a 逗號表達式, x3. 逗號表達式主要用于某些語句中需一次計算多個表達式值的情況。如在循環(huán)語句中。 函數(shù)調(diào)用中的實參之間雖然用的是逗號間隔,但不是逗號表達式。 如: printf (%d, %d, %d, a, b, c);第三章第三章 最簡單的最簡單的C C程
24、序設(shè)計程序設(shè)計3.1 C語句概述語句概述 C語句全部為可執(zhí)行語句,對應(yīng)若干機器操作指命令C程序由許多源文件組成。(分別編譯,然后連接)每一個源文件由預(yù)編譯命令和若干函數(shù)組成。每一個函數(shù)由說明部分和語句部分組成。其結(jié)構(gòu)如圖除說明部分外,重要部分為語句部分。C 程 序源程序文件1源程序文件i源程序文件n預(yù)編譯命令函 數(shù) 1函 數(shù) n說 明 部 分執(zhí)行部分(語句)C C 語句分為五類1. 控制語句改變語句的執(zhí)行順序共有共有9種控制語句種控制語句: if ( ) else (條件) for ( ) (循環(huán)) while ( ) (循環(huán)) do while (循環(huán)) continue (結(jié)束本次循環(huán))
25、switch (多分支選擇) break (中止整個循環(huán)) goto (轉(zhuǎn)移) return ( 函數(shù)返回)( )表示條件, 表示語句2. 函數(shù)調(diào)用語句3. 表達式語句printf ();表達式加; 如: i=i+1; i+; x+y; 其函數(shù)調(diào)用也可理解為表達式語句.5. 復合語句4. 空語句 ; 任何事情都不做.用 括起來的一系列語句。 如: z=x+y; t=z/100; printf (%f, t); 從結(jié)構(gòu)化程序設(shè)計角度出發(fā),程序有三種結(jié)構(gòu):順序結(jié)構(gòu)選擇結(jié)構(gòu)循環(huán)結(jié)構(gòu)1. 順序結(jié)構(gòu)表示ABAB先執(zhí)行A, 再執(zhí)行B.2. 選擇結(jié)構(gòu)表示為ABPTFB TPFA存在某條件P, 若P為真,則執(zhí)
26、行A, 否則執(zhí)行B。3. 循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)表示為PFTAAP為T(1) 當型結(jié)構(gòu) 當P條件成立時(T),反復執(zhí)行A,直到P為“ 假”時才停止循環(huán).有兩種結(jié)構(gòu):當型和直到型(2) 直到型APFTA直到P為真 先執(zhí)行A, 再判斷P,若為F,再執(zhí)行A,如此反復,直到P為T. 另外:由選擇結(jié)構(gòu)可以派生出另一種基本結(jié)構(gòu)多分支結(jié)構(gòu).KK=K1A1A2AiAnK=K2K=Ki 已證明: 上述三種結(jié)構(gòu)組成的程序可以解決全部的問題,所以任何一種高級語言都具備上述三種結(jié)構(gòu)。 由賦值表達式加分號;構(gòu)成,與其它高級語言相比有以下不同點:“ =”為一運算符,由此,構(gòu)成一賦值表達式,可出現(xiàn)于表達式能出現(xiàn)的任何地方:if
27、( (a=b)0) t=a; 前面已論述: C語言本身無輸入/ 出語句, 由函數(shù)實現(xiàn),如printf.等。 一般:C語言提供了一些標準的輸入/出函數(shù)系統(tǒng)函數(shù)。形式: putchar (c );功能: 向終端(一般為顯示器)輸出一個字符,其中c為 字符型或整型變量注意: 用該函數(shù)時,須用預(yù)編譯命令: #include stdio.h 3.4.1 putchar 函數(shù)函數(shù) 字符輸出函數(shù)字符輸出函數(shù)舉例: #include stdio.h main( ) char a, b, c; a=B ; b=O ; c=Y; putchar(a); putchar(b); putchar ( C); 結(jié)果:
28、BOY putchar(a); putchar( n ); putchar(b); putchar( n ); putchar(c); putchar( n );*利用putchar還可輸出其它轉(zhuǎn)義字符結(jié)果: B O Y putchar( 101 ); 輸出Aputchar( ); 輸出putchar( 015 ); 輸出*若將最后一行改為:3.4.2 printf 函數(shù)函數(shù)格式輸出函數(shù)格式輸出函數(shù)一、printf的一般形式 是C語言中使用得最多的一種輸出函數(shù),它可一次按格式輸出多個不同類型的數(shù)據(jù)。printf(格式控制序列,輸出表列);輸出表列 用“ ,”號隔開的變量或表達式序列,其變量的值
29、按對應(yīng)的格式控制符所指定的格式輸出。格式控制序列用雙引號“ .”括起來的格式符序列。格式控制序列由格式說明符和普通字符組成。2. 普通字符 原樣輸出1. 格式說明符: 由%接格式字符組成 如: %f, %d等例: a=3; b=4; printf(a=%d, b=%d, a, b); 結(jié)果: a=3,b=4無論 a, b中位數(shù)多少, 均為上述形式:a=123 b=45二、格式字符 如直接用%d,則將出錯。不同類型的數(shù)據(jù)輸出,用不同格式字符:1. d格式符十進制整數(shù)輸出。(1) %d: 按數(shù)據(jù)的實際長度輸出。(2) %md: m表示輸出字段寬度。若實際位數(shù)m,則m自動取n值,即保證n個字符正常輸
30、出。(2)%ms, 如果串長小于m,則在m列范圍內(nèi),字符串向左靠,右補空格。7. f格式符以小數(shù)形式輸出單、雙精度實數(shù),有以下幾種形式: %m.nf, 指定輸出的數(shù)據(jù)共占m列,其中有n位小數(shù)。如果值長度小于m,則左端補空格。 %mn.f, 與%m.nf基本相同,只是使輸出的數(shù)值向左端靠,右端補空格。 %f, 不指定字段寬度,由系統(tǒng)自動指定,使整數(shù)部分全部如數(shù)輸出,并輸出6位小數(shù)。%f %m.nf %m.nf8. e格式符以指數(shù)形式輸出單,雙精度實數(shù)基本形式: %e結(jié)果: 1.23456共13列6例5例可有%m.ne和%m.ne的形式9. g格式符根據(jù)實數(shù)大小自動選擇f格式,或e格式輸出單雙精度
31、實數(shù)。e+002例: printf ( %e , 123.456)表表3.1 printf格式字符總結(jié)格式字符總結(jié)格式字符d以帶符號的十進制形式輸出整數(shù)(正數(shù)不輸出符號)oxucsfeg以8進制無符號形式輸出整數(shù)(不輸出前導符0)。以16進制無符號形式輸出整數(shù)(不輸出前導符0 x)。以無符號10進制形式輸出整數(shù)。以字符形式輸出,只輸出一個字符。說明輸出字符串。以小數(shù)形式輸出單、雙精度數(shù),隱含輸出6位小數(shù)。以標準形式輸出單、雙精度數(shù),數(shù)字部分小數(shù)位數(shù)為6位。選用f或%e格式中輸出寬度較短的一種格式,不輸出無意義的0。 許多情況與具體機器或系統(tǒng)有關(guān),最好機器上一試。表表3.2 附加格式說明字符附加
32、格式說明字符字符說明用于長整型整型,可加在格式符d、o、x、u前面。數(shù)據(jù)最小寬度對實數(shù),表示輸出n位小數(shù); 對字符串,表示截取的字符個數(shù)。輸出的數(shù)字或字符在域內(nèi)向左靠。m(代表一個正整數(shù)).n(代表一個正整數(shù))字母1 系統(tǒng)提供了若干函數(shù),以提供從標準輸入設(shè)備(鍵盤)上輸入數(shù)據(jù).3.5.1 getchar 函數(shù)函數(shù)本節(jié)先介紹兩個輸入函數(shù).形式: getchar( )功能: 從標準輸入裝置(鍵盤)上輸入一個字符要求: 有#include stdio.h預(yù)編譯命令例: #include stdio.h main ( ) char c; c=getchar ( ); putchar (c ); 3.5
33、.2 scanf函數(shù)函數(shù)功能: 在標準輸入裝置(鍵盤)上按指定格式 輸入各種類型的數(shù)據(jù)地址表列變量的地址或字符串首地址。形式: scanf(格式控制序列, 地址表列)格式控制序列同printf(.)例: main( ) int a, b, c; scanf( %d%d%d , &a, &b, &c); prinft( %d,%d,%dn, a, b, c); 運行,機器等待你輸入: 3 4 5 結(jié)果 3, 4, 5注意: 1.scanf函數(shù)順用地址量接受數(shù)據(jù)。2. 輸入數(shù)據(jù)的間隔為 ,Tab. 空格, 不能為“ ,”.3. 允許在格式符中插入附加字符。格式字符及附加字符
34、的定義如下表3.3和表3.4表表3.3 scanf格式字符格式字符格式字符d用來輸入十進制整數(shù)。oxcsfe用來輸入八進制整數(shù)。用來輸入十六進制整數(shù)。用來輸入單個字符。說明用來輸入字符串,將字符串送到一個字符數(shù)組中,在輸入時以非空白字符開始,以第一個空白字符結(jié)束。字符串以串結(jié)束標志 0作為其最后一個字符。用來輸入實數(shù),可以用小數(shù)形式或指數(shù)形式輸入。以f作用相同,e與f可以互相替換。表表3.4 scanf附加的格式說明字符附加的格式說明字符字符說明用于輸入長整型數(shù)據(jù)(可用ld, %lo, %lx), 以及double型數(shù)據(jù)(用%lf或%le)。用于輸入短整型數(shù)據(jù)(可用%hd, %ho, %hx)
35、。指定輸入數(shù)據(jù)所占寬度(列數(shù))。表示本輸入項在讀入后不賦給相應(yīng)的變量。h域?qū)?為一正整數(shù))*l4. 對于輸入unsigned型數(shù)據(jù),不用%u,而用%d, %o, %x.5. 指定數(shù)據(jù)長度時,系統(tǒng)自動截取。則當輸入123456時, scanf( %3d%3d , &a, &b);a12, b347. 輸入數(shù)據(jù)不能規(guī)定精度. 6. 在%后加“ *”表示跳過相應(yīng)的數(shù)據(jù)則當輸入為12 345 67則a12 b67scanf(%2d %*3d %2d, &a, &b);scanf ( %7.2f , &a);是錯誤的8. 在格式控制中除格式說明符外若還有其它字符,
36、則應(yīng)按順序原樣輸入。例: scanf( %d, %d, &a, &b);則必須輸入 21, 28又如: scanf(a=%d, b=%d, c=%d, &a, &b, &c);則輸入: a=34, b=58, c=100例1: 輸入三角形三邊, 求三角形面積。例2: 輸入一個大寫字母,要求系統(tǒng)改為小寫字母輸出。例3. 當b24ac0時,求ax2+bx+c=0的兩個根。 在C程序的三種結(jié)構(gòu)中,分支結(jié)構(gòu)是一重要結(jié)構(gòu),其中的P為條件問題:條件如何表達?邏輯運算、關(guān)系運算 關(guān)系運算比較運算, 如: a3為一比較運算,當a=5, a3成立。結(jié)果稱為“ 真”, 否則
37、, 如: a=1,a3不成立,為假。上述表達式a3稱為關(guān)系表達式。4.1.1 關(guān)系運算符及其優(yōu)先次序關(guān)系運算符及其優(yōu)先次序1. , , =為同一優(yōu)先級, = =, !=等為同一優(yōu)先級, 但前者高于后者。2. 關(guān)系運算符優(yōu)先級低于算術(shù)運算符。C語言提供了六種關(guān)系運算符 = = = !=優(yōu)先級為:3. 關(guān)系運算符優(yōu)先級高于賦值運算符。如下圖:算術(shù)運算符賦值運算符關(guān)系運算符高低舉例: ca+b c(a+b)ab!=c (ab)!=ca= =bc a= =(bc a=(bc)4.1.2 關(guān)系表達式關(guān)系表達式關(guān)系表達式的結(jié)果值規(guī)定為1或0.如: ab, a+bb+c, (a=3)(b=5) , a b
38、, (ab)(bb)= =c 成立 1b+cb 則ab值為1, 所以d=1. f=abc ab為1, abc為0,所以f=0. 用邏輯運算符將關(guān)系表達式、邏輯表達式連接起來的式子邏輯表達式。4.2.1 邏輯運算符及優(yōu)先級 a b !a !b a&b a b 真 真 假 假 真 真 真 假 假 真 假 真 假 真 真 假 假 真 假 假 真 真 假 假三種: & (與), (或) ! (非)其意義見真值表a&b 當a, b均為1時,才為1a b 當a, b中有一個為1時,才為1!a 當a為1, !a為0,反之為1.由此看到:和&為雙目運算符. !為單目運算符。優(yōu)先
39、級定義:2. &和低于關(guān)系運算符。!高于算術(shù)運算符1. !(非)優(yōu)先于&(與).&優(yōu)先于即: !& 例: !a&b xy & c (!a)&b) (xy)&c)4.2.2 邏輯表達式 1. 邏輯表達式的值與關(guān)系表達式值一樣,真為1,假為0。例: a=4 則 !a 值為0.此處只要a 0,為真.則!a值為0. a=4, b=5 a&b為1 前面已定義了邏輯表達式,以下看一看邏輯表達式的值及具體的運算。 4&0 2 為1. 總之,在邏輯運算中,非0值參加邏輯運算時被看成1處理. a=4, b=5 a b為1 a=4,
40、b=5 !a b為12. 一個邏輯表達式中的邏輯運算符并不是一定全部執(zhí)行. 一個實際的例子:判斷年號是否為潤年。如: a&b&c. 則當a=0(假)時, b,c不需判斷。當a=1,b=0,則不需判c.又如: a b c. 當a=1時,b, c均不必判別。潤年的定義: 能被4整除且又能被400整除。 年號能被4整除但不能被100整除。 當(year%4!=0) (year%100= =0& year%400!=0) 為1時, year為非潤年。設(shè)用變量year表示年號 當(year%4= =0& year% 100 !=0) year%400= =0)為1時,ye
41、ar為潤年,否則為非潤年。如果要判別非潤年可在上述表達式前加非(!)運算符. 當!( (year%4= =0 & year%100!=0) year% 400= = 0) 為1時,year為非潤年?;蛘?即:則:4.3.1 4.3.1 ifif的三種形式的三種形式 功能: 當表達式值非0時, 執(zhí)行語句A,否則不執(zhí)行語句A.表達式語句A00例如: if (xy) printf( %d, x)形式1 if(表達式)語句A其流程圖:形式2 if(表達式)語句A else 語句B功能: 表達式為非0,執(zhí)行語句A 表達式為0,執(zhí)行語句B表達式語句A語句B 0= 0例: if(xy)printf(
42、%d, x);else printf( %d, y);形式3 if(表達式1)語句1 else if (表達式2) 語句2else if (表達式3) 語句3 else if(表達式n) 語句nelse 語句n流程:表達1表達2表達3表達n語句1語句2語句3語句n語句n語句1 0= 0= 0 0 0 0如: if (3) prinft(o.k); if (a) 1. 表達式可以是邏輯、關(guān)系,甚至是算術(shù)表達式。 2. 上述形式中的語句必須以分號結(jié)束 3. 上述形式中的語句可以是由 括起來的復合語句。此時,在 外可以不用分號.注意的問題:main ( ) float a, b, t; scabf
43、(%f, %f, &a, &b); if (ab) t=a; a=b; b=t; printf (%5.2f, %5.2f, a, b);例4.1 輸入兩個實數(shù),按代數(shù)值由小到大次序輸出這兩個數(shù)。 3.6, 3.2 3.20, 3.60運行情況如下:例4.2 輸入三個數(shù),按大小順序輸出。 main ( ) float a, b, c,t; scanf(%f,%f,%f, &a, &b,&c); if (ab) t=a; a=b; b=t; if (ac) t=a; a=c; c=t; if (bc) t=b; b=c; c=t; printf(%5.2f
44、, %5.2f, %5.2f, a, b, c);運行情況如下:3,7,1 1.00, 3.00, 7.004.3.2. if語句的嵌套if (表達式1)內(nèi)嵌ifelse內(nèi)嵌注意: else與最近的if 配對.一般形式 在上述形式的if語句中, 又可以是if語句稱為嵌套。if (表達式2) 語句1if (表達式3) 語句3else 語句2else 語句4例: if ( )if ( ) 語句2else 語句3if ( ) if ( ) 語句1 else 所以:必要時加 .if ( ) 語句1else例4.3 有一函數(shù)y=1 (x0)編一程序,輸入一個x值,輸出y值。有以下幾種寫法,請判斷哪些是正
45、確的?程序1: main ( ) int x, y; scanf(d, &x); if (x=0) if (x0) y=1; else y=0; else y= 1;程序3: 將上述if語句改為: y= 1; if (x! =0) if (x0) y=1; else y=0;程序4: y=0; if (x=0) if (x0) y=1; else y= 1;4.3.3 4.3.3 條件運算符條件運算符 C語言提供了一個簡單的條件賦值語句或條件表達式。問題: 當判斷條件不論是“ 真”是“ 假”, 均給同一變量賦值時,能否簡化語句書寫?條件運算符為? : 三目運算符。功能: 先判表達式1,
46、 若非0,則值為表達式2的值,否則為表達式3的值。一般形式表達式1?表達式2: 表達式3 max=ab? a:b;當ab. max a. 否則maxb注: 1. 條件運算符優(yōu)先于賦值運算符. 例: max=(ab? a:b)可去掉( ) 2. 條件運算符低于關(guān)系運算符和算術(shù)運算符。 例: max=ab? a:b+1 max= ab? a:(b+1)并不是 max=(ab? a:b)+1 3. 條件運算符結(jié)合性為從右至左. 如: ab? a:cd ? c:d 相當于 ab? a:(cd? c:d)4. 條件表達式不能取代一般的if語句,只有當if 的兩 個分支為給同一變量賦值時才可替代if.if
47、 (ab) printf(%d, a); else printf (%d, b)由于printf.不是表達式,故不可用條件表達式,但可為: printf(%d, ab? a:b);5. 表達式1、表達式2、表達式3可類型不同。 main ( ) char ch; scanf (%c, &ch); ch=(ch=A & ch=Z? (ch+32):ch;printf(%c, ch)例4.4 輸入一個字符,判別它是否大寫字母,如果是,將它轉(zhuǎn)換成小寫字母;如果不是,不轉(zhuǎn)換。然后輸出最后得到的字符。運行結(jié)果如下: A a 問題: 當某一表達式有n個取值,每一取值執(zhí)行一語句,則如果用內(nèi)嵌
48、if十分繁鎖,而用switch簡單.一般形式: switch(表達式) case 常量表達式1: 語句1 case 常量表達式2: 語句2 case 常量表達式n: 語句n default : 語句n+1 例: 根據(jù)成績等級打印百分數(shù)段.switch (grade) case A: printf (85100n);case B: printf (7084n);case C: printf (6069n);case D: printf (60n); break; case D: printf(60n); break; 例1 寫一程序,輸入年號,判斷是否為閏年。1. 算法: 根據(jù)閏年的判斷條件 當
49、年號能被4整除但不能被100整除時,它為閏年。 當年號能被100整除又能被400整除時,它為閏年。 設(shè)用變量year表示年號,leap為待置值變量,當year為閏年:leap1, 否則leap0.輸入yearyear%4=0year%100=0leap0leap1yesANoNoyes 2. 流程圖leap%400=0leap1leap=0打印非閏年打印是閏年結(jié)束leap1yesNoyesNoA3. 程序:main ( ) int year, leap; scanf(%d, &year); if (year%4= =0) if (year%100= =0) if (year%400=
50、=0) leap=1; else leap=0; else leap=1;else leap=0;if (leap) printf(%d is, year);else printf(%d is not, year);printf (a leap yearn);運行情況如下:2000 2000 is a leap year1989 1989 is not a leap year 上述條件也可用一個邏輯表達式表示: if ( ( year%4=0)& year%100!) (year%= =0) leap=1; else leap=0;例2: 求ax2+b x+c=0方程的解例3: P62
51、 請同學們閱讀 前面已介紹了順序結(jié)構(gòu),選擇結(jié)構(gòu),本章介紹循環(huán)結(jié)構(gòu)。如: sum=1+2+3+100;, i1002i實際問題: 一組重復執(zhí)行的語句。則用循環(huán)結(jié)構(gòu)解決。C語言用四種形式循環(huán)2. while 語句3. do while 語句4. for語句01.if語句與goto語句1. goto語句2. 與if構(gòu)成循環(huán).例: 求100211001ii main ( ) int i, sum=0;形式: goto標號;功能: 無條件轉(zhuǎn)向標號處。標號:用標識符命名。i=1;loop:if (i=100) sum=sum+i; i+; goto loop; printf(%d, sum); 運行結(jié)果如
52、下: 5050main ( ) int sum=0, i=0; loop: sum=sum+i; i + +; if (i=100) goto loop; printf (sum=%d , sum); 本例相當于當型循環(huán),若改為直到型: 為了使程序的結(jié)構(gòu)化功能強,應(yīng)盡量少用goto語句。1. 形式: while (表達式)語句2. 執(zhí)行過程: 先判斷表達式的值。若0.則執(zhí)行其后面的語句,否則while執(zhí)行完畢。專門的當型循環(huán)語句while語句3. 流程圖:表達式語句0=0下一語句將上述例子用while語句寫出 while (i=100) sum+ =i; i+; 語句中應(yīng)有使表達式=0的語句。
53、 否則會出現(xiàn)無限循環(huán)死循環(huán)。注: while后面的語句一般為復合語句, 即:加 一種專門的“ 直到型” 循環(huán)語句。2. 執(zhí)行過程: 先執(zhí)行語句,再判表達式的值,若0,再執(zhí)行語句,否則結(jié)束循環(huán)3. 流程:語句表達式0=01. 形式: do語句while(表達式);main ( ) int i, sum=0; i=1; do sum=sum+i; i+; while (i=100); printf(%d,sum); 程序如下: while語句與dowhile語句的區(qū)別: 當?shù)谝淮螆?zhí)行時,若表達式=0時,則while語句與do while有所不同,do while 執(zhí)行一次后面的語句,而while不
54、執(zhí)行。1. 形式 首先計算表達式1,接著執(zhí)行表達式2,若表達式2的值0,則執(zhí)行語句,接著計算表達式3,再判斷表達式2的值.依此重復下去,直到表達式2的值=0(假)。一種形式更為靈活的循環(huán)語句。2.執(zhí)行過程for(表達式1; 表達式2; 表達式3)語句3. 流程:計算表達式1求表達式2值語句計算表達式3結(jié)束for語句=0(假)0(真)用for語句寫出上述例子for用while代替的流程 表達式1; while(表達式2) 語句 表達式3; for ( i=1; ib) i=b; j=a; for (; i=j; i+) sum=sum+i; printf ( n sum=%d, sum); 表達
55、式2一般不可省略,否則為無限循環(huán)相當于: while (1) sum=sum+i; i+; 例: for (i=1; ; i+) sum=sum+i;相當于條件永真、永不為0,若用while表示 表達式3亦可省略,但在循環(huán)體中須有語句修改循環(huán)變量;以使表達式2在某一時刻為0而正常結(jié)束循環(huán)。例: for (sum=0,i=1;i=100;) sum=sum+v; i+; 若同時省略表達式1,表達式3,則相當于while(表達式2)語句。相當于 while (i=100) sum:=i; i+; 例: for (; i=100,) sum+=i; i+; 三個表達式均省略 即for(;)語句則相當
56、于while(1)語句.表達式1、表達式3可以是逗號表達式,以使循環(huán)變量值在修改時可以對其它變量賦值。如 for (sum=0, i=1; i=100; i+, i+) sum=0; for (i=1; i100時結(jié)束。for(r=1; r100) break; printf (%f, area); 從結(jié)構(gòu)化程序要求出發(fā),用break,退出循環(huán),進入for語句的下一條語句。 注: break只能用于循環(huán)語句和switch語句。 main( ) int n; for (n=100; n200; n+) if (n%3!=0) printf(%d, n); 問題: 編寫程序,打印100200中不能
57、被3整除的數(shù)。換一種方式: main ( ) int n; for (n=100; n2)程序如下: main ( ) long int f1, f2;int i;f1=1; f2=1;for (i=1; i=20; i+)printf(%12ld %12ld , f1, f2); if (i%2= =0) printf(n ); f1=f1+f2; f2=f2+f1; f1=1, f2=1 for i=1 to 20 輸出f1, f2 f1=f1+f2 f2=f2+f1圖5.13運行結(jié)果為:153423315971094675025514229352457824157817185537725
58、84177111211393832040570288739088169213896104181286571964181346269922746563245986321144987676546368317811217830914930352102334155 判一個數(shù)m是否為素數(shù)的方法: 每打印10個數(shù),換一次行。m當用2, 3, 的整數(shù)去除它時均不能除盡, 則為素數(shù)。程序如下: #include math.h main ( ) 例2. 求100200的素數(shù). int m, k, i, n=0; for (m=101; m=200; m=m+2) if ( n%10= =0) printf(n)
59、; k=sqrt(m); for (i=2; i=k+1) printf(%d ,m); n=n+1; 101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199運行結(jié)果如下:主講教師:劉主講教師:劉 丹丹 前面所用到的數(shù)據(jù)均為基本類型(整、實、字符),為了豐富數(shù)據(jù)類型 ,須提供強有力的數(shù)據(jù)表達方式。C語言提供了一種構(gòu)造類型數(shù)據(jù)由基本類型按某一規(guī)則組合在一起。 其中數(shù)組:同一種(基本)類型按一定順序組合在一起的數(shù)據(jù)類型。6.16.1 一維數(shù)組一維數(shù)組6.1.1 一維數(shù)組的定義一維數(shù)組的定
60、義1. 數(shù)組名的確定方法同變量名。2. C語言用方括號 表示數(shù)組元數(shù)個數(shù)。形式: 類型說明符 數(shù)組名常量表達式;例: int a 20; float x 100;3. 常量表達式為常量和符號常量。不允許有變量,其表達式的值代表了元素的個數(shù)。例: int a20; 表示有20個元素 且元素從0開始編排:a0,a1,a 194. 可在定義時對靜態(tài)數(shù)組和外部存儲(全局)數(shù)組賦初值, 方法如下: 對部分元素賦初值 static int a10=0,1,2,3,4;靜態(tài) 對全部元素賦初值 static int a10=10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 如此,只有前5個元素初值確定,后5個元素由系統(tǒng)設(shè)置。 如對數(shù)組元素賦同一初值,必須一一寫出: static int a10=0,0,0,0,0,0,0,0,0,0;不可寫成: static int a10*0; 若賦全部元素的初值,可省略常量表達式 a =0,1,2,3; 表示a4,即只有4個元素。6.1.2 一維數(shù)組的引用一維數(shù)組的引用 2.
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 咸陽金屬板聲屏障施工方案
- 個人加盟協(xié)議合同范本
- 2025年安徽省建筑安全員B證考試題庫附答案
- 2025年吉林省建筑安全員《B證》考試題庫及答案
- 二年級口算題目總匯100道
- 單位代理記賬服務(wù)合同范本
- 互勉拍攝合同范本
- 專項法律顧問合同范本
- 化工廠安全施工合同范本
- 2025遼寧省建筑安全員《A證》考試題庫及答案
- 某小學申報廣州市義務(wù)教育規(guī)范化學校自評分說明
- 面神經(jīng)炎課件完整版
- 根據(jù)銅價計算各種電纜參考價格
- 湘教版五年級下冊美術(shù)教學計劃
- WB/T 1066-2017貨架安裝及驗收技術(shù)條件
- SB/T 10446-2007成品油批發(fā)企業(yè)管理技術(shù)規(guī)范
- 瀝青路面施工質(zhì)量控制要點課件
- 對建筑工程施工轉(zhuǎn)包違法分包等違法行為認定查處管理課件
- 雀巢碘超標危機公關(guān)分析
- 營養(yǎng)性缺鐵性貧血患兒的護理 (兒童護理課件)
- 六年級奧數(shù)教材
評論
0/150
提交評論