版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、二級(jí)C語言講義 第1章 C程序設(shè)計(jì)基本概念§1.1 程序和程序設(shè)計(jì)考點(diǎn)01:C語言概述C語言的原型是ALGOL 60語言,由B語言演變而來,1978年正式發(fā)表。C語言是一種面向過程的語言。早期的C語言主要是用于UNIX系統(tǒng),現(xiàn)在在各類大、中、小和微型計(jì)算機(jī)上得到了廣泛的使用??键c(diǎn)02:C語言的特點(diǎn)1C語言的主要特點(diǎn)u 簡潔緊湊、靈活方便u 共有32個(gè)關(guān)鍵字,9種控制語句,程序書寫自由,主要用小寫字母表示。u 運(yùn)算符豐富u 運(yùn)算符包含的范圍很廣泛,共有34種運(yùn)算符。C語言把括號(hào)、賦值、強(qiáng)制類型轉(zhuǎn)換等都作為運(yùn)算符處理。u 數(shù)據(jù)結(jié)構(gòu)豐富u 整型、實(shí)型、字符型、數(shù)組類型、指針類型、結(jié)構(gòu)體類型
2、、共用體類型等,能用來實(shí)現(xiàn)各種復(fù)雜的數(shù)據(jù)類型的運(yùn)算。引入了指針概念,使程序效率更高。u C語言是結(jié)構(gòu)式語言u(píng) 用函數(shù)作為程序模塊,每個(gè)函數(shù)完成獨(dú)立的功能來實(shí)現(xiàn)程序的模塊化。u 語法限制不太嚴(yán)格、程序設(shè)計(jì)自由度大。u 一般的高級(jí)語言語法檢查比較嚴(yán),能夠檢查出幾乎所有的語法錯(cuò)誤,而C語言允許程序編寫者有較大的自由度。 u C語言允許直接訪問物理地址,可以直接對(duì)硬件進(jìn)行操作,屬于中級(jí)語言u(píng) 能夠像匯編語言一樣對(duì)位、字節(jié)和地址進(jìn)行操作, 而這三者是C語言最基本的工作單元,因此既具有高級(jí)語言的功能,又具有低級(jí)語言的許多功能,可以用來編寫系統(tǒng)軟件。u C語言程序生成代碼質(zhì)量高,程序執(zhí)行效率高。u C語言適
3、用范圍大,可移植性好。2版本:Microsoft C、Turbo C、C#、C+、Visual C+等。C是C+的基礎(chǔ),它們是兼容的??键c(diǎn)03:程序設(shè)計(jì)的內(nèi)容1基本步驟確定數(shù)據(jù)結(jié)構(gòu)、確定算法、編碼(編程)、在計(jì)算機(jī)上運(yùn)行程序、整理并寫出文檔資料。2C語言的基本結(jié)構(gòu)#include <stdio.h> /*文件包含命令行*/main() /*主函數(shù)*/ int x,y,sum; /*定義變量*/ x=46;y=100; /*變量初始化*/ sum=x+y; /*求兩數(shù)之和*/ printf("sum is %d !n",sum); /*輸出兩數(shù)之和*/1) 程序一
4、般用小寫字母書寫,嚴(yán)格區(qū)分大小寫。書寫格式自由,一行可以寫幾個(gè)語句,一個(gè)語句可以寫在幾行上。*2) 一個(gè)C語言源程序可以由一個(gè)或多個(gè)源文件組成,一個(gè)源程序不論由多少文件組成,都有且只能有一個(gè)main( ),稱主函數(shù)。注意:C程序是由函數(shù)(function)構(gòu)成的,函數(shù)是C程序的基本單位。函數(shù)分為:系統(tǒng)提供的庫函數(shù),用戶定義的函數(shù)。*3) C程序的執(zhí)行總是先從主函數(shù)開始,而不論主函數(shù)在整個(gè)程序中的位置。4) 函數(shù)體必須在 之間,函數(shù)前面部分為聲明(定義)部分,后面為執(zhí)行部分。5) 每個(gè)語句的結(jié)尾必須要有 ;作為終止符。6) 可以在語句旁邊用/*/進(jìn)行注釋,但/與*之間不能空格,且/*與*/之間不
5、能再插入/*/。注釋內(nèi)容可以是英文或中文。*7) C語言本身沒有輸入輸出語句,有關(guān)操作都是通過調(diào)用庫函數(shù)scanf和printf來完成。8) 低一層次的語句或說明可比高一層次的縮進(jìn)若干格書寫。§1.2 算法考點(diǎn)04:算法及其特征 開 始1概念:任何解決問題的過程都是由一定的步驟組成的,所以把解決問題確定的方法和有限的步驟稱作為算法。程序數(shù)據(jù)結(jié)構(gòu)+算法 0=>s2簡單算法示例【例1-2】求1+2+3+100? 1=>i假 S1:s=0 S2:i=1 S3:s=s+i S4:i=i+1 S5:如果i不大于100,則重復(fù)執(zhí)行步驟3,否則算法結(jié)束。 i<=100main()
6、 真 s+i=>s int i,s=0; for(i=1;i<=100;i+) i+1=>is=s+i; printf("%dn",s); 輸出s運(yùn)行結(jié)果為: 5050 結(jié) 束*3特點(diǎn):有窮性、確定性、可行性(有效性)、有零個(gè)或多個(gè)輸入、有一個(gè)或多個(gè)輸出。4表示方法(1) 流程圖: 開始或終止框、 輸入輸出框、 判斷框、 處理框、 流程線、 連接點(diǎn)、 注釋框。(2) 偽代碼(3) 計(jì)算機(jī)語言C語言考點(diǎn)05:算法的類型1基本類型1) 數(shù)值算法:常用于科學(xué)計(jì)算,如求方程的根等。2) 非數(shù)值算法:廣泛用于各種數(shù)據(jù)的數(shù)據(jù)處理,如事務(wù)管理、圖書檢索、人事管理等。2基
7、本構(gòu)成1) 結(jié)構(gòu):順序結(jié)構(gòu)、選擇(分支)結(jié)構(gòu)、循環(huán)(重復(fù))結(jié)構(gòu)。2) 原操作:輸入、輸出、表達(dá)式求值、變量賦值等。§1.3 結(jié)構(gòu)化程序設(shè)計(jì)和模塊化結(jié)構(gòu)考點(diǎn)06:結(jié)構(gòu)化程序1順序結(jié)構(gòu)順序結(jié)構(gòu)是由一組順序執(zhí)行的程序塊所組成的。2選擇結(jié)構(gòu)選擇結(jié)構(gòu)是根據(jù)分支條件的取值來決定程序執(zhí)行的走向。條件語句真假3循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)是一種對(duì)某一處理塊反復(fù)執(zhí)行指定次數(shù)的結(jié)構(gòu)??键c(diǎn)07:模塊化結(jié)構(gòu)C語言是一種結(jié)構(gòu)化程序設(shè)計(jì)語言,它提供了三種基本結(jié)構(gòu)的語句;提供了定義“函數(shù)”的功能,在C語言中沒有子程序的概念,它提供的函數(shù)可以完成子程序的所以功能;C語言允許對(duì)函數(shù)單獨(dú)進(jìn)行編譯,從而可以實(shí)現(xiàn)模塊化。C語言的工作界
8、面及上機(jī)操作啟動(dòng)TC 2.0:雙擊快捷方式或啟動(dòng)MS-DOS,鍵入cdtctc或單擊開始菜單運(yùn)行c: tctc.exe。1菜單欄F10Flie(文件):Load(加載文件)、Pick(選擇文件)、New(新建文件)、Save(保存文件)、Write to(另存為)、Directory(選擇指定目錄下的文件)、Chang dir(改變默認(rèn)打開的文件目錄)、OS shell(暫時(shí)回到DOS)、Quit(退出)。Edit(編輯):Alt+E(F6) 從信息窗口回到編輯窗口。可清除錯(cuò)誤白線提示。Run(運(yùn)行):Run(運(yùn)行)、Program reset(程序重啟)、Go to cursor(運(yùn)行到光標(biāo)
9、處)、Tace into(跟蹤)、Step over(單步執(zhí)行)、User screen(用戶屏幕)。Complie(編譯):生成目標(biāo)文件、可執(zhí)行文件等。Project(項(xiàng)目):由多個(gè)文件生成一個(gè)可執(zhí)行文件。Options(選項(xiàng)):設(shè)置工作環(huán)境。Debug(調(diào)試):。Evalute在調(diào)試過程中采用給某些變量賦新值來尋找錯(cuò)誤。Break/watch(斷點(diǎn)及監(jiān)視表達(dá)式):。Add watch增加監(jiān)視的變量,觀察語句執(zhí)行過程中變量值的變化。注意:TC默認(rèn)在C盤根目錄下,需要設(shè)置其他目錄只需將其拷貝至該目錄下,保留C盤的TC。2狀態(tài)欄目:光標(biāo)位置、文件名等。3信息窗口:顯示提示信息。4功能鍵提示信息F
10、1:幫助 F2:保存文件 F3:打開文件 F4:運(yùn)行到光標(biāo)處F5:隱藏信息窗口 F6:轉(zhuǎn)換編輯與信息窗口 F7:單步跟蹤程序執(zhí)行F8:單步跟蹤程序執(zhí)行但不進(jìn)入被調(diào)用的子函數(shù)中F9:生成目標(biāo)文件但不運(yùn)行F10:打開菜單欄。Alt+F3:選擇文件、Alt+F5:顯示運(yùn)行結(jié)果、Ctrl+F7: 增加監(jiān)視的表達(dá)式、Ctrl+F9:運(yùn)行程序。注意:新建文件可在進(jìn)入TC 2.0時(shí)直接Alt+E或按兩次Esc,新建文件不要在原有文件上修改,此時(shí)運(yùn)行結(jié)果可能發(fā)生錯(cuò)誤。 除了運(yùn)行顯示圖形的程序,其他均需要通過Alt+F5來顯示運(yùn)行結(jié)果。5C程序的生成過程:編輯編譯連接運(yùn)行。連接目標(biāo)程序*.OBJ編譯源程序*.C
11、可執(zhí)行程序*.EXE C編譯程序 Link程序第2章 C程序設(shè)計(jì)的初步認(rèn)識(shí)§2.1 標(biāo)識(shí)符、常量和變量考點(diǎn)01:標(biāo)識(shí)符1. 概念:用于標(biāo)識(shí)變量、函數(shù)、數(shù)組、文件等的一串字符稱為標(biāo)識(shí)符。2. 規(guī)定a) 必須由英文字母、數(shù)字或下劃線組成,且首字符只能是英文字母或下劃線。b) C程序中區(qū)別大、小寫字母。c) 禁止使用關(guān)鍵字作為標(biāo)識(shí)符。3. 關(guān)鍵字:又稱保留字,是編譯系統(tǒng)預(yù)先定義的一些具有特定含義的標(biāo)識(shí)符,共32個(gè)(數(shù)據(jù)類型12個(gè)、控制語句12個(gè)、存儲(chǔ)類型4個(gè)、其它4個(gè))。預(yù)定義標(biāo)識(shí)符雖然不屬于關(guān)鍵字,但為了避免混亂,建議不使用它們作標(biāo)識(shí)符。注意:C程序允許32個(gè)字符的標(biāo)識(shí)符,但建議不超過8
12、個(gè)字符。二、基本數(shù)據(jù)類型1算法處理的對(duì)象是數(shù)據(jù),而數(shù)據(jù)是以某種特定的形式出現(xiàn),在C語言中,數(shù)據(jù)有常量、變量,一般它們都有一定的數(shù)據(jù)類型。整型(int)基本類型字符型(char)實(shí)型(float、double)枚舉型(enum)數(shù)據(jù)類型 數(shù)組類型 構(gòu)造類型 結(jié)構(gòu)體類型(struct)共用(聯(lián)合)體類型(union)指針類型 空類型(void)2常量與變量a) 常量:在程序運(yùn)行過程中其值不能改變的量稱為常量。符號(hào)常量是在程序中指定用一個(gè)符號(hào)代表一個(gè)常量。注意:符號(hào)常量必須由#define宏定義命令來定義,符號(hào)常量修改方便、不易出錯(cuò)。 習(xí)慣上符號(hào)常量名用大寫,變量名用小寫。b) 變量:在程序運(yùn)行過程
13、中其值能改變的量稱為變量。一個(gè)變量在內(nèi)存中占據(jù)一定的存儲(chǔ)單元,在存儲(chǔ)單元中存放該變量的值。c) 變量說明與變量賦值(變量初始化):變量說明格式為:類型說明符 變量表列 變量賦值格式為:變量名表達(dá)式注意:表達(dá)式可以是:常量、變量、算術(shù)表達(dá)式、賦值表達(dá)式。允許在一個(gè)類型標(biāo)識(shí)符后說明多個(gè)相同類型的變量,各變量名之間用逗號(hào)間隔。但不能使用 變量變量表達(dá)式;,如int x=y=7;,只能是int x=7,y=7;或int x,y;x=y=7;。變量說明必須放在變量使用之前,一般在函數(shù)體的開頭部分;變量必須先定義后使用。“”左側(cè)必須是變量,如x=y+7=9是錯(cuò)誤的。3. 整型數(shù)據(jù)(1) 整型常量按進(jìn)制分類
14、:l 十進(jìn)制整數(shù):非0開頭(除0),如123、-123、8、0、-5、30000等。l 八進(jìn)制整數(shù):0開頭,數(shù)字串只能含有07,如056、-0111等。0565×816×8046。l 十六進(jìn)制整數(shù):0x或0X開頭,數(shù)字串只能含有09及a、b、c、d、e、f(A、B、C、D、E、F)。如0x123 、0X3A、-0x2e等。0X3A3×16110×16058。(2) 整型變量類型說明符 所占位數(shù)(存儲(chǔ)字節(jié)) 數(shù)的范圍 基本型int 16(2) -32768(-215)32767(215-1) 短整型 short (int) 16(2) -32768(-21
15、5)32767(215-1)長整型 long (int) 32(4) -2147483648(-231)2147483647(231-1)無符號(hào)型 unsigned int 16(2) 065535(216-1) unsigned short 16(2) 065535(216-1) unsigned long 32(4)04294967295(232-1) 注意:所占位數(shù)(存儲(chǔ)字節(jié))是由機(jī)器(CPU)的字長決定的,16位機(jī)字長為8。(3) 存放方式整型數(shù)據(jù)在內(nèi)存中以二進(jìn)制方式存放,最高位為符號(hào)位,0為正、1為負(fù),并以補(bǔ)碼表示。l 對(duì)于正數(shù),其補(bǔ)碼與原碼相同。l 對(duì)于負(fù)數(shù),其補(bǔ)碼是將該數(shù)的絕對(duì)值
16、的二進(jìn)制形式按位取反再加1。如10的補(bǔ)碼:10的原碼 0000 0000 0000 1010 取反 1111 1111 1111 0101 加1 1111 1111 1111 0110-10的補(bǔ)碼l 二進(jìn)制轉(zhuǎn)換成十進(jìn)制的負(fù)整數(shù):取反轉(zhuǎn)換成十進(jìn)制整數(shù)取負(fù)值再減1。如1111 1111 1111 1110:取反 0000 0000 0000 00011-1減1十進(jìn)制負(fù)整數(shù)-2。l 十進(jìn)制轉(zhuǎn)換成八進(jìn)制:十進(jìn)制每3位對(duì)應(yīng)于八進(jìn)制1位。如-40177774即1 111 111 111 111 1001 7 7 7 7 4;負(fù)整數(shù)(int)加65536再轉(zhuǎn)換成八進(jìn)制即可。l 十進(jìn)制轉(zhuǎn)換成十六進(jìn)制:十進(jìn)制每
17、4位對(duì)應(yīng)于十六進(jìn)制1位。如-40xfffc即1111 1111 1111 1100f f f c;負(fù)整數(shù)(int)加65536再轉(zhuǎn)換成十六進(jìn)制即可。(4) 數(shù)據(jù)溢出當(dāng)向變量賦的值超出該整型變量的范圍即溢出,溢出后會(huì)給出錯(cuò)誤的結(jié)果?!纠?-1】:main() int a,b; a=32767; ( a=-32768; ) b=a+1; ( b=a-1; ) printf("%d,%dn",a,b); 運(yùn)行結(jié)果為:32767,-32768 (-32768,32767 )注意:如果需要輸出正確的結(jié)果,可以使用長整型來接收超過基本(短)整型變量范圍的數(shù)值。當(dāng)基本(短)整型變量數(shù)值3
18、2767,則該數(shù)值減65536直到在-3276832767為止;當(dāng)基本(短)整型變量數(shù)值-32767,則該數(shù)值加65536直到在-3276832767為止。4. 實(shí)型數(shù)據(jù)(浮點(diǎn)數(shù))(1) 實(shí)型常量l 十進(jìn)制小數(shù)形式:由數(shù)字加小數(shù)點(diǎn)組成(必須有小數(shù)點(diǎn)),如100.5、-123.、.123、0.0。l 指數(shù)形式:如123e3、1.23E5,字母e(E)之前必須有數(shù)字,后面必須為整數(shù)。(2) 實(shí)型變量類型說明符 所占位數(shù)(存儲(chǔ)字節(jié))數(shù)的范圍 單精度 float 32(4) 10371038雙精度 double 64(8) 1030710308長雙精度 long double 128(16) 1049
19、31104932注意:不論單精度、雙精度均輸出小數(shù)點(diǎn)后6位,不足補(bǔ)0。指數(shù)形式為X.XXXXXe(E)±XXX。(3) 舍入誤差由于實(shí)型變量是用有限的存儲(chǔ)單元存儲(chǔ)的,因此能提供的有效數(shù)字總是有限的,在有效數(shù)位以外的數(shù)字將被舍去,由此可能產(chǎn)生誤差。單精度有效位是7位,雙精度有效位是16位?!纠?-2】:main() float a=111111.111; ( double a=.1111; )printf("%fn",a); ( printf("%en",a); ) 運(yùn)行結(jié)果為:111111.109375(1.11111e+05) ( (1.11
20、111e+13) )(4) 數(shù)據(jù)溢出當(dāng)向變量賦的值超出該實(shí)型變量的范圍即溢出,溢出后會(huì)給出錯(cuò)誤的提示?!纠?-3】:main() float a=1.111111E40; printf("%En",a); 運(yùn)行結(jié)果為:+INF5. 字符型數(shù)據(jù)(1) 字符(串)常量:l 字符:用' '括起來的一個(gè)字符,如'A'、'a'等。注意:字符常量只能且必須包含一個(gè)字符,空格也可以,但必須寫成' '。【例2-4】:main() char c1,c2,c3; c1='a'c2=97;c3=c1-32; prin
21、tf("%c,%c,%cn%d,%d,%d",c1,c2,c3,c1,c2,c3); 運(yùn)行結(jié)果為:a,a,A97,97,65l 字符串:用" "括起來的一串字符,如"A"、"Very Good"、"" (空串)等。注意:字符串常量結(jié)尾系統(tǒng)自動(dòng)加一個(gè)結(jié)束標(biāo)志'0', 字符串常量所占字節(jié)數(shù)為字符數(shù)加1。(2) 轉(zhuǎn)義字符常量:又稱反斜線字符,總是以一個(gè)跟一個(gè)特定的字符來代表某一特定的ASCII字符,這些字符也必須括在' '內(nèi),如'n'代表換行、'
22、101'、'x41'均代表'A'。注意:每個(gè)轉(zhuǎn)義字符只能看作一個(gè)字符。 轉(zhuǎn)義字符ddd表示1-3位八進(jìn)制數(shù)、xhh表示1-2位十六進(jìn)制數(shù)。例:已知字母A的ASCII碼為十進(jìn)制數(shù)65,且c為字符型,則執(zhí)行語句c='A'+'6'-'3'后,c中的值為 。 A)D B)67 C)不確定的值 D)C【例2-5】:main() printf("ctderatYb=n"); /*表示空格*/ printf("376"); 運(yùn)行結(jié)果為:a=de說明:在第一行輸出c,t橫向跳格至第9
23、格,輸出de,r使輸出位置移至本行首,輸出a,t橫向跳格至第9列(c清除),輸出Y,b退一格(Y清除),輸出,n換行,輸出。(3) 字符變量:類型說明符 所占字節(jié) 數(shù)的范圍 char 1 -128127 注意:字符變量在內(nèi)存中占1個(gè)字節(jié),存放的是字符的ASCII代碼值,可以作為整型來處理,如'A'的值為65、'a'的值為97、空格字符的值為32,所以可以進(jìn)行算術(shù)運(yùn)算。三、運(yùn)算符與表達(dá)式表達(dá)式:由常量、變量、函數(shù)等運(yùn)算對(duì)象和運(yùn)算符組成的式子。運(yùn)算符:運(yùn)算符有優(yōu)先級(jí),高的先執(zhí)行,同級(jí)的由結(jié)合規(guī)則決定。從左到右結(jié)合:運(yùn)算對(duì)象與左邊運(yùn)算符相結(jié)合,如5+x-10。從右到左
24、結(jié)合:運(yùn)算對(duì)象與右邊運(yùn)算符相結(jié)合,如x=y=7。1. 算術(shù)運(yùn)算符與算術(shù)表達(dá)式(從左到右)(1) 單目(表示符號(hào)):正號(hào)“+”、負(fù)號(hào)“”。(2) 雙目:+、*、/、%(模)。例:若有代數(shù)式,則不正確的C語言表達(dá)式為 。A)a/b/c*e*3 B)3*a*e/b/c C)3*a*e/b*c D)a*e/c/b*3注意:整型/整型時(shí),小數(shù)點(diǎn)后的數(shù)一律舍去,如13/5為2、5/13為0、7/3*3的結(jié)果為6。 模運(yùn)算是整除取余數(shù),運(yùn)算符兩側(cè)必須都是整型,計(jì)算結(jié)果的符號(hào)與第一個(gè)數(shù)的符號(hào)相同,如-5%3為-2、-5%-3為-2、5%-3為2。2. 自增自減運(yùn)算符(單目) (優(yōu)先級(jí)高于算術(shù),右結(jié)合)(常用于
25、循環(huán)結(jié)構(gòu))(1) 自增:+i先加1再使用,相當(dāng)于先執(zhí)行i=i+1;再執(zhí)行運(yùn)算;i+先使用再加1,相當(dāng)于先執(zhí)行運(yùn)算再執(zhí)行i=i+1;。(2) 自減:i先減1再使用,相當(dāng)于先執(zhí)行i=i1;再執(zhí)行運(yùn)算;i先使用再減1,相當(dāng)于先執(zhí)行運(yùn)算再執(zhí)行i=i-1;。注意:自增自減運(yùn)算符只能用于變量(整型、實(shí)型、字符型、指針型),不能用于常量或表達(dá)式。i+等價(jià)于(i+)?!纠?-6】:main() int i=3,k; k=(i+)+(i+)+(i+); ( k=(+i)+(+i)+(+i); ) ( k=(+i)+(i+)+(i+); ) printf("i=%d,k=%dn ",i,k);
26、 運(yùn)行結(jié)果為:i=6,k=9 ( i=6,k=18 ) ( i=6,k=15 )3. 賦值運(yùn)算符與賦值表達(dá)式(優(yōu)先級(jí)低于算術(shù),右結(jié)合)(1) 賦值運(yùn)算符:“”是將“”右側(cè)的數(shù)值賦值給左側(cè)的變量。(2) 賦值表達(dá)式:變量名表達(dá)式注意:賦值運(yùn)算符兩側(cè)數(shù)據(jù)類型不一致,則運(yùn)算結(jié)果以“”左側(cè)的數(shù)據(jù)類型為準(zhǔn)。 賦值表達(dá)式后面加上“;”便構(gòu)成了賦值語句。(3) 復(fù)合賦值運(yùn)算符(雙目)l +=加賦值、=減賦值、*=乘賦值、/=除賦值、%=模賦值。l &=按位與賦值、|=按位或賦值、=按位異或賦值、<<=位左移賦值、>>=位右移賦值?!纠?-7】:main() int a=6;
27、a+=a-=a*a; printf("a=%dn ",a); 運(yùn)行結(jié)果為:a=-604. 關(guān)系運(yùn)算符與關(guān)系表達(dá)式(優(yōu)先級(jí)低于算術(shù),左結(jié)合,高于賦值)(用于選擇或循環(huán)結(jié)構(gòu))(1) 關(guān)系運(yùn)算符:<小于、<=小于或等于、>大于、>=大于或等于、=等于、!=不等于。(2) 關(guān)系表達(dá)式:l 格式:表達(dá)式 關(guān)系運(yùn)算符 表達(dá)式。l 結(jié)果:邏輯值1(關(guān)系式成立)或0(關(guān)系式不成立)。例:若希望當(dāng)A為奇數(shù)時(shí),表達(dá)式值為“真”,偶數(shù)時(shí)為“假”,則不滿足要求的表達(dá)式是( )。A)A%2=1 B)! (A%2=0) C)! (A%2) D)A%25. 邏輯運(yùn)算符與邏輯表達(dá)式
28、(優(yōu)先級(jí)低于關(guān)系,左結(jié)合,!除外)(用于選擇或循環(huán)結(jié)構(gòu))(1) 邏輯運(yùn)算符:!非(單目)、&&與 (雙目) 、| |或(雙目)。(2) 邏輯表達(dá)式:l 格式:表達(dá)式 邏輯運(yùn)算符 表達(dá)式。l 結(jié)果:邏輯值1(真)或0(假)。例:判斷char類型數(shù)據(jù)c1是否為大寫字母的正確表達(dá)式是( )。A)'A'<=c1<='Z' B)(c1>='A')&(c1<='Z') C)( 'A'<=c1)AND('Z'>=c1) D)(c1>='A&
29、#39;)&&(c1<='Z')【例2-8】:main() int a=1,b=2,c=3,d=4,m=2,n=2; x=(m=a>b)&&(n=c>d);printf("a=%d,b=%d,c=%d,d=%d,m=%d,n=%d,x=%dn ",a,b,c,d,m,n,x); 運(yùn)行結(jié)果為:a=1,b=2,c=3,d=4,m=0,n=2,x=0注意:!取相反值,非0表達(dá)式值為0、0值為1,&&兩側(cè)表達(dá)式均為非0值才為1、否則為0,| |只要有一個(gè)表達(dá)式值為非0值就為1,否則為0。 求值短路:當(dāng)
30、&&左側(cè)表達(dá)式為0則不繼續(xù)計(jì)算右側(cè)表達(dá)式直接給結(jié)果0,當(dāng)| |左側(cè)表達(dá)式為非0則不繼續(xù)計(jì)算右側(cè)表達(dá)式直接給結(jié)果1。6. 逗號(hào)運(yùn)算符與逗號(hào)表達(dá)式(優(yōu)先級(jí)最低,左結(jié)合)(1) 格式:表達(dá)式1,表達(dá)式2,表達(dá)式n。(2) 結(jié)果:依次計(jì)算各表達(dá)式的值,最后一個(gè)表達(dá)式的值為整個(gè)表達(dá)式的值。注意:與間隔符區(qū)分開,如printf("%d,%d,%d",(a,b,c),d,e);語句%d,%d,%d中的,是間隔符。例:設(shè)x,y均為int類型,則表達(dá)式y(tǒng)=6, y+1,x=y,x+1的值是( )。A)8 B)6 C)7 D)不確定7. 條件運(yùn)算符與條件表達(dá)式(三目)(優(yōu)先級(jí)低
31、于邏輯,左結(jié)合,高于賦值)(用于選擇結(jié)構(gòu))(1) 格式:表達(dá)式1?表達(dá)式2:表達(dá)式3。(2) 結(jié)果:求解表達(dá)式1,非0(為真),求解表達(dá)式2,其值即為整個(gè)表達(dá)式的值;0(為假),求解表達(dá)式3,其值即為整個(gè)表達(dá)式的值。如a>b?a:c>d?c:d等價(jià)于a > b ? a : (c> d ?c :d)。例:若給定條件表達(dá)式(M)?(a+):(a-),則其中表達(dá)式(M) 。A. 和(M=0)等價(jià) B. 和(M=1)等價(jià) C. 和(M!=0)等價(jià) D. 和(M!=1)等價(jià)8. 長度運(yùn)算符(優(yōu)先級(jí)高于算術(shù),右結(jié)合)(1) 格式:sizeof(類型說明符或變量)。(2) 結(jié)果:測試
32、數(shù)據(jù)類型所占用的字節(jié)數(shù),如sizeof(int)值為2。9. 位運(yùn)算符(雙目) (運(yùn)算對(duì)象整型或字符型)(1) 按位取反(單目):將運(yùn)算對(duì)象的內(nèi)容按位取反,如3276732768,即0111 1111 1111 11111000 0000 0000 0000 。(2) &按位與:把兩個(gè)運(yùn)算數(shù)按對(duì)應(yīng)的二進(jìn)制進(jìn)行“與”運(yùn)算,相應(yīng)位都是1,該位結(jié)果為1,否則為0;如12&108,即 0000 1100& 0000 10100000 1000。(3) |按位或:兩個(gè)運(yùn)算數(shù)相應(yīng)位只要有一個(gè)為1,該位結(jié)果為1,兩個(gè)都是0結(jié)果才為0;如83|1295,即0101 0011| 0000
33、 11000101 1111。(4) 按位異或:兩個(gè)運(yùn)算數(shù)相應(yīng)位數(shù)字相同該位結(jié)果為0,不同結(jié)果為1;如51195240,即0011 0011| 1100 00111111 0000。(5) <<左移:運(yùn)算對(duì)象<<整型表達(dá)式,移位后低位補(bǔ)0,高位移出的舍棄;如6<<224,即0000 0110<<20001 1000。如果左端移出的部分不含1,則相當(dāng)于移位對(duì)象乘以4。(6) >>右移:運(yùn)算對(duì)象>>整型表達(dá)式,移位后低位移出的舍棄,高位補(bǔ)0(負(fù)整數(shù)補(bǔ)1);如24>>26,即0001 1000>>2000
34、0 0110。如果右端移出的部分不含1,則相當(dāng)于移位對(duì)象除以4。10. 常用數(shù)學(xué)函數(shù)(#include <math.h>)l abs與fabs:abs(x)求整數(shù)x的絕對(duì)值,fabs(x)求x的絕對(duì)值;兩者區(qū)別為前者參數(shù)及返回值均為基本整型,后者參數(shù)及返回值均為雙精度。l exp:exp(x)求ex的值,參數(shù)及返回值均為雙精度(下同)。l log與log10:log(x)求lnx的值、log10(x)求log10x的值。l pow:pow(x,y)求xy的值。l sqrt:sqrt(x)求 的值。例:代數(shù)式 對(duì)應(yīng)的C語言表達(dá)式是:sqrt(fabs(pow(y,x)+log10(y
35、)。 代數(shù)式 對(duì)應(yīng)的C語言表達(dá)式是:fabs(pow(x,3.0)+log10(x)。11. 優(yōu)先級(jí):括號(hào)邏輯非、自增自減、求正負(fù)算術(shù)運(yùn)算符關(guān)系運(yùn)算符邏輯與邏輯或條件運(yùn)算符賦值運(yùn)算符逗號(hào)運(yùn)算符(最好多用括號(hào),使表達(dá)式更明了)四、類型轉(zhuǎn)換 高 double float1. 隱式轉(zhuǎn)換 縱向箭頭表示當(dāng)運(yùn)算對(duì)象為不同類型時(shí)的轉(zhuǎn)換方向, long橫向箭頭表示必定轉(zhuǎn)換。 unsigned低 int char,shorta) 將int轉(zhuǎn)換為long時(shí)要進(jìn)行符號(hào)擴(kuò)展。正值高16位補(bǔ)0,數(shù)值不變,如1010 0000 0000 0000 10100000 0000 0000 0000 0000 0000 000
36、0 1010;負(fù)值高16位補(bǔ)1,數(shù)值不變,如1010 1111 1111 1111 01101111 1111 1111 1111 1111 1111 1111 0110。b) 將long轉(zhuǎn)換為int時(shí)要進(jìn)行數(shù)位截取。將long int的低16位給int。數(shù)據(jù)可能溢出。c) 將unsigned轉(zhuǎn)換為long時(shí)要進(jìn)行數(shù)位擴(kuò)展。高16位補(bǔ)0,數(shù)值不變。d) 將unsigned轉(zhuǎn)換為相同位數(shù)的整型變量時(shí),只需原封不動(dòng)傳遞。數(shù)據(jù)可能溢出。e) 將非unsigned轉(zhuǎn)換為相同位數(shù)的unsigned時(shí),只需原封不動(dòng)傳遞。數(shù)據(jù)可能溢出。注意:超過4位的16進(jìn)制整型變量轉(zhuǎn)換為無符號(hào)16進(jìn)制變量時(shí)只需保留后4位
37、。當(dāng)負(fù)值基本(短)整型變量轉(zhuǎn)換為無符號(hào)整型變量時(shí)加65536直到>=0為止?!纠?-9】:main() int a,b,c,d; long x,y; unsigned u; a=53; b=-3; c=65533; d=0xABCDE; (=703710=要減11*65536=1010 1011 1100 1101 1110) u=-2; x=a; printf("a=%d,a=%un",a,a); /* %d,以帶符號(hào)十進(jìn)制形式輸出整數(shù)*/ printf("b=%d,b=%un",b,b); /* %u,以無符號(hào)十進(jìn)制形式輸出整數(shù)*/ print
38、f("c=%d,c=%un",c,c); printf("d=%d,d=%xn",d,d); /* %x,以無符號(hào)十六進(jìn)制形式輸出整數(shù)*/ printf("u=%d,u=%un",u,u); printf("x=%ld,x=%lxn",x,x); /* %ld,以帶符號(hào)十進(jìn)制形式輸出長整型*/ 運(yùn)行結(jié)果為:a=53,a=53b=-3,b=65533c=-3,c=65533d=-17186,d=bcdeu=-2,u=65534x=53,x=352. 顯式轉(zhuǎn)換:(類型說明符) 表達(dá)式,如(int)2.50000=2。第
39、3章 順序結(jié)構(gòu)程序設(shè)計(jì)教學(xué)目的:1. 掌握各種輸入輸出語句的要點(diǎn)和使用方法。2. 掌握printf()和scanf()函數(shù)中各種格式符號(hào)的作用和使用方法。3. 能夠靈活地運(yùn)用各種順序語句進(jìn)行綜合程序設(shè)計(jì)。一、C語句分類1. 控制語句:條件語句if()else、循環(huán)語句for()、while()、dowhile()、結(jié)束本次循環(huán)語句continue、中止執(zhí)行switch或循環(huán)語句break、多分支選擇語句switch、轉(zhuǎn)向語句goto、從函數(shù)返回語句return。如if(x>y) z=x; else z=y;。2. 函數(shù)調(diào)用語句:由一次函數(shù)調(diào)用加分號(hào)構(gòu)成。如printf("Thi
40、s is a C program.");。3. 表達(dá)式語句:由一個(gè)表達(dá)式加分號(hào)構(gòu)成,最典型的賦值語句。如a=3;。4. 空語句:只有“;”構(gòu)成的語句,它什么也不做,有時(shí)用來作被轉(zhuǎn)向點(diǎn)。5. 復(fù)合語句:用 把一些語句括起來成為復(fù)合語句,又稱分程序。如 z=x+y;t=z/10;。二、基本輸入輸出語句C本身沒有輸入輸出語句,有關(guān)操作是通過調(diào)用庫函數(shù)scanf、getchar和printf、putchar來完成。在程序中調(diào)用這些函數(shù)時(shí),要用編譯預(yù)處理命令:#include <stdio.h>,scanf、printf可省略。1. 字符數(shù)據(jù)的輸入輸出(1) putchar函數(shù):用
41、于向終端輸出一個(gè)字符,格式為putchar(c),c可以是字符型變量或整型變量。如輸出"China":putchar(C);putchar(h);putchar(i);putchar(n);putchar(a);。(2) getchar函數(shù):用于從輸入設(shè)備輸入一個(gè)字符,格式為getchar()。如輸入一個(gè)字符并顯示:int ch;chgetchar();putchar(ch);。2. 格式輸入輸出(1) printf函數(shù):用于向終端輸出若干個(gè)任意類型的數(shù)據(jù)。格式為printf("格式控制",輸出表列)。格式控制包括格式說明、普通字符(指需要原樣輸出的字符
42、)。l 格式說明由%和格式字符組成,如%d,%f等。若%d則直接輸出%d,格式字符無效。l 在格式說明中,在%和格式字符間可以插入修飾符。a) l,用于長整型數(shù),可加在格式符d、o、x(X)、u前面;h,用于短整型或無符號(hào)短整型數(shù)。b) m(正整數(shù)),控制數(shù)據(jù)最小寬度。c) 正整數(shù)m.正整數(shù)n,對(duì)實(shí)數(shù),表示輸出n位小數(shù);對(duì)字符串,表示截取的字符個(gè)數(shù)。d) ,輸出的數(shù)字或字符左對(duì)齊。e) +,使輸出的數(shù)字總是帶有+號(hào)或號(hào)。f) 0,指定寬度的同時(shí),在數(shù)據(jù)前面的多余空格處填以數(shù)字0。g) #,在%與o、x(X)之間,輸出前導(dǎo)符0、0x(X)。注意:格式說明與輸出項(xiàng)從左到右在類型上必須一一對(duì)應(yīng)匹配,
43、如不匹配將導(dǎo)致數(shù)據(jù)不能正確輸出。 格式說明與輸出項(xiàng)的個(gè)數(shù)應(yīng)該相同,如果格式說明個(gè)數(shù)少于輸出項(xiàng)的個(gè)數(shù),多余的輸出項(xiàng)不予輸出;反之,則多余的格式將輸出不定值(或0值)。 除了X、E、G外,其他格式字符必須用小寫字母,如%d不能寫成%D。 可在格式控制字符串內(nèi)包含轉(zhuǎn)義字符,如“n”、“t”等?!纠?-1】:main() int x=0177; float y=123.456; char z='a';printf("x=%d,x=%-6d,x=$%-06d,x=$%06d,x=%06d,x=%#o,x=%#xn",x,x,x,x,x,x,x);printf(&quo
44、t;y=%f,y=*%9.2f,y=%-9.2f,y=014.5f,y=%gn",y,y,y,y,y);printf("z=%s,z=%3s,z=%7.2s,z=%-5.3sn","string","string","string","string"); 運(yùn)行結(jié)果為:x=127,x=127 ,x=$127 ,x=$000127,x=%06d,x=0177,x=0x7fy=123.456001,y=* 123.46,y=123.46 ,y=00000123.45600,y=123.456
45、z=string,z=string,z= st,z=str(2) scanf函數(shù):用于從輸入設(shè)備獲取數(shù)據(jù)。格式為scanf("格式控制",地址表列)。l 輸入整型、實(shí)型變量:數(shù)據(jù)之間用間隔符(空格、Tab鍵、回車)隔開,間隔符數(shù)量不限。如scanf("%d%d%d",&a,&b,&c);輸入形式為:10<間隔符>20<間隔符>30。l 指定輸入數(shù)據(jù)所占寬度:數(shù)據(jù)之間不用間隔符,系統(tǒng)自動(dòng)按寬度截取數(shù)據(jù)。如scanf("%4d%f",&a,&b); 得到a=1234,f=56
46、78.93。l 跳過輸入數(shù)據(jù):在%和格式字符之間加*號(hào)。如scanf ("%d%*d%d%d ",&a,&b,&c); 輸入形式為:10<間隔符>20<間隔符>30<間隔符>40得到a=10,b=30,c=40。l 輸入字符型或混合變量:字符之間不用間隔符,字符與數(shù)據(jù)之間不用間隔符。如scanf("%d%d%c%3d",&a,&b,&c,&d); 輸入形式為:10<間隔符>11A12345得到a=10,b=11,c='A',d=123。
47、l 輸入數(shù)據(jù)少于scanf函數(shù)要求輸入的數(shù)據(jù):系統(tǒng)將等待輸入,直到滿足要求為止或遇非法輸入。l 輸入數(shù)據(jù)多于scanf函數(shù)要求輸入的數(shù)據(jù):多余的數(shù)據(jù)將留在緩沖區(qū)作為下一次輸入操作的輸入數(shù)據(jù)。l 在格式控制字符串中插入其他字符:輸入時(shí)要求按一一對(duì)應(yīng)的位置原樣輸入這些字符,通常是逗號(hào)或空格;如scanf("%d,%d,%d",&a,&b,&c); 輸入形式為:10,20,30或10,<間隔符>20, <間隔符>30。l 輸入數(shù)據(jù)的結(jié)束:遇空格、Tab鍵、回車,按指定的寬度結(jié)束,遇非法輸入(不正確的數(shù)據(jù)類型等)。注意:格式控制后面應(yīng)
48、當(dāng)是變量地址&,而不是變量名。 輸入數(shù)據(jù)時(shí)不能規(guī)定精度,如scanf("%10.2f",&f);是不合法的。三、順序結(jié)構(gòu)程序設(shè)計(jì)示例【例3-2】從鍵盤輸入一個(gè)大寫字母,要求改用小寫字母輸出。 開始#include <stdio.h>main()輸入c1 char c1,c2; c1+32=>c2 c1=getchar(); c2=c1+32; 輸出c2 printf("%c",c2); 結(jié)束運(yùn)行結(jié)果為:Aa 【例3-3】求ax2+bx+c=0方程的根。a,b,c由鍵盤輸入,設(shè)b24ac>0。 p=,q=,x1=p+
49、q,x2=p-q#include <math.h>main() float a,b,c,disc,x1,x2,p,q; scanf("a=%f,b=%f,c=%f",&a,&b,&c); disc=b*b-4*a*c;p=-b/(2*a);q=sqrt(disc)/(2*a); x1=p+q;x2=p-q; printf("x1=%5.2fnx2=%5.2fn",x1,x2); 運(yùn)行結(jié)果為:a=1,b=3,c=2x1=1.00x2=2.00第4章 選擇結(jié)構(gòu)程序設(shè)計(jì)教學(xué)目的:1. 掌握關(guān)系運(yùn)算符、邏輯運(yùn)算符、條件運(yùn)算符在
50、選擇結(jié)構(gòu)中的使用方法及技巧。2. 掌握if語句的使用方法及構(gòu)成的各種選擇結(jié)構(gòu)的程序設(shè)計(jì)。3. 掌握switch語句的使用方法及break在switch語句中的使用方法。一、關(guān)系、邏輯、條件運(yùn)算與選擇結(jié)構(gòu)1. 選擇結(jié)構(gòu)是判斷表達(dá)式的真假來選擇要執(zhí)行的語句。2. 關(guān)系、邏輯表達(dá)式也是判斷表達(dá)式的真假,所以選擇結(jié)構(gòu)的判斷表達(dá)式常用關(guān)系、邏輯表達(dá)式。例:判斷年份是否為閏年條件是被4整除但不能被100整除能被400整除;可以表示為(year%4=0) && (year%100!=0) | | (year%400=0) 或 ! ( (year%4!=0) && (year%
51、100=0) | | (year%400!=0) 或 ( (year%4=0) && (year%100!=0) | | (year%400=0) ) ? 1 :0 。3. 條件表達(dá)式可直接代替if語句。例:將a,b中較大的數(shù)賦值給x,可表示為if (a>b) x=a; else x=b; 或 x=(a>b) ? a :b。二、if語句及用if語句構(gòu)成的選擇結(jié)構(gòu)1. if語句的3種形式(1) 單分支if語句(不含else子句)l 形式:if (表達(dá)式) 語句(if子句),如if (a<b) t=a; a=b; b=t;。說明:if是C語言的關(guān)鍵字,如果if子句需要多個(gè)語句,則應(yīng)該用 括起來。l 執(zhí)行:計(jì)算表達(dá)式的值,非0則執(zhí)行if子句,再執(zhí)行if語句后的下一條語句;0則跳過if子句直接執(zhí)行if子句后的下一條語句?!纠?-1】輸入兩個(gè)實(shí)數(shù),按代數(shù)值由大到小的次序輸出這兩個(gè)數(shù)。 開始main
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 45073-2024國家公園標(biāo)識(shí)
- GB/T 44940-2024鞋類和鞋類部件抗真菌性能定性評(píng)估試驗(yàn)方法(生長測試)
- 2025版環(huán)保物業(yè)合同小區(qū)共建項(xiàng)目3篇
- 體育競技:管理創(chuàng)獎(jiǎng)勵(lì)運(yùn)動(dòng)精神
- 環(huán)保設(shè)備證照管理辦法
- 眼鏡加工制造手冊(cè)
- 體育產(chǎn)業(yè)稅收優(yōu)惠指南
- 勞務(wù)派遣工作環(huán)境優(yōu)化
- 娛樂行業(yè)證照規(guī)定
- 高端教育社區(qū)按揭合同模板
- 學(xué)校安全事故應(yīng)急處置流程圖
- 形式邏輯學(xué)全套課件
- 姜安《政治學(xué)概論》(第2版)筆記和典型題(含考研真題)詳解
- 國開電大公共行政學(xué)形考任務(wù)二答案
- YY/T 0698.1-2011最終滅菌醫(yī)療器械包裝材料第1部分:吸塑包裝共擠塑料膜要求和試驗(yàn)方法
- GB/T 25249-2010氨基醇酸樹脂涂料
- 元旦知識(shí)競賽(試題24道含答案)
- 數(shù)碼電子陰道鏡EK-6000B說明書
- 手機(jī)攝影入門教程
- 《子路、曾皙、冉有、公西華侍坐》 課件46張
- 老年髖部骨折患者圍術(shù)期麻醉管理課件
評(píng)論
0/150
提交評(píng)論