




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、 第第 2 章章 C 程程 序序 的的 基基 本本 構(gòu)構(gòu) 成成2.1 C語言源文件語言源文件 C語言是結(jié)構(gòu)化的程序設(shè)計(jì)語言,一個(gè)語言是結(jié)構(gòu)化的程序設(shè)計(jì)語言,一個(gè)C源程序可以由源程序可以由一個(gè)或多個(gè)文件組成,一個(gè)或多個(gè)文件組成,C源源程序程序文件的擴(kuò)展名一般為文件的擴(kuò)展名一般為.c 或或.cpp,下面通過實(shí)例學(xué)習(xí)多文件系統(tǒng)中的函數(shù)調(diào)用。,下面通過實(shí)例學(xué)習(xí)多文件系統(tǒng)中的函數(shù)調(diào)用。 說明:說明: 文件文件-是指存放在存儲(chǔ)器上以文件名進(jìn)行管理的一組信是指存放在存儲(chǔ)器上以文件名進(jìn)行管理的一組信息息. 函數(shù)函數(shù)-指具有獨(dú)立功能、按一定格式構(gòu)成的代碼段。指具有獨(dú)立功能、按一定格式構(gòu)成的代碼段。 一個(gè)大型一個(gè)
2、大型,典型的典型的C語言源程序大致如下所示語言源程序大致如下所示: C語言源程序語言源程序 源程序文件源程序文件1 源程序文件源程序文件n 源程序文件源程序文件2. 預(yù)處理命令預(yù)處理命令 全局變量全局變量 聲明聲明 函數(shù)函數(shù)1. 函數(shù)函數(shù)n 函數(shù)首部函數(shù)首部 函數(shù)體函數(shù)體 局部變量局部變量 聲明聲明 執(zhí)行語句執(zhí)行語句 文件包含的概念:文件包含的概念: 一個(gè)文件可以將另一個(gè)源文件的全部內(nèi)容包含進(jìn)來,一個(gè)文件可以將另一個(gè)源文件的全部內(nèi)容包含進(jìn)來,這叫文件包含處理。這叫文件包含處理。 當(dāng)然當(dāng)然文件包含文件包含予處理也可在特定的盤,特定的目錄予處理也可在特定的盤,特定的目錄(文文件夾件夾)中尋找包含文
3、件中尋找包含文件. 如如:#include “c:my foldermyfile.c” 文件包含的一般格式文件包含的一般格式 : #include 或者或者 #include “文件名文件名” 使用使用尖括號(hào):尖括號(hào): 到存放到存放C庫函數(shù)頭文件所在目錄庫函數(shù)頭文件所在目錄中尋找要包含的文件中尋找要包含的文件. 一般為一般為” include”文件夾文件夾.使用使用“ ”雙引號(hào):表示雙引號(hào):表示在當(dāng)前目錄在當(dāng)前目錄(文件夾文件夾)中未中未找所包含的文件后找所包含的文件后, 再按再按尖括號(hào)方式尋找。尖括號(hào)方式尋找。 #include “file2.C”file1.cA 在編譯時(shí),將在編譯時(shí),將f
4、ile2.c全部內(nèi)容復(fù)制到全部內(nèi)容復(fù)制到#include“file2.c“的的位置上位置上, 將將file1.c作為一個(gè)源文件單位進(jìn)行編譯。作為一個(gè)源文件單位進(jìn)行編譯。file1.c BA+Bfile2.c包含包含例例2.1 在在Visual C+環(huán)境下新建兩個(gè)文件,其文件名分別環(huán)境下新建兩個(gè)文件,其文件名分別 為為2_1_1.c、 2_1_2.c, 其中其中2_1_1.c文件定義一個(gè)做乘法的函數(shù)文件定義一個(gè)做乘法的函數(shù)f( ),定義另一,定義另一個(gè)主調(diào)函數(shù)個(gè)主調(diào)函數(shù)main(). 在主調(diào)函數(shù)中分別調(diào)用函數(shù)在主調(diào)函數(shù)中分別調(diào)用函數(shù)f( )以及存放在以及存放在2_1_2.c中的中的函數(shù)函數(shù)dis
5、p(),在,在main函數(shù)中輸出函數(shù)中輸出f( )的返回值。的返回值。2_1_2.c 文件文件disp()函數(shù)函數(shù)分析:分析: 在文件在文件2_1_1.c中由兩個(gè)函數(shù)構(gòu)成,文件中由兩個(gè)函數(shù)構(gòu)成,文件2_1_2.c由一個(gè)由一個(gè)函數(shù)構(gòu)成函數(shù)構(gòu)成. 程序的執(zhí)行從程序的執(zhí)行從main()函數(shù)開始,函數(shù)開始,main函數(shù)調(diào)用函數(shù)調(diào)用f()函數(shù),函數(shù),然后再調(diào)用然后再調(diào)用disp()函數(shù)。函數(shù)。2_1_1.c文件文件f()函數(shù)函數(shù)main()函數(shù)函數(shù)#include “2_1_2.c調(diào)用調(diào)用操作過程:操作過程:步驟步驟1:在在VC+環(huán)境下的環(huán)境下的”新建新建”對(duì)話框中對(duì)話框中,點(diǎn)擊點(diǎn)擊 文件文件 選項(xiàng)卡選
6、項(xiàng)卡,然后選中然后選中”C+ Sourse File”項(xiàng)項(xiàng),輸入文件名輸入文件名2_1_2.c,過程如下圖所示。過程如下圖所示。步驟步驟2:輸入文件名輸入文件名2_1_2.c源程序代碼并保存:源程序代碼并保存: 這是一個(gè)將被這是一個(gè)將被2_1_1.c所包所包含的文件含的文件.內(nèi)容是一自定義函數(shù)內(nèi)容是一自定義函數(shù)disp().步驟步驟2:在在VC+環(huán)境下的再新建一文件環(huán)境下的再新建一文件: 2_1_1.c . 輸入文件名輸入文件名2_1_1.c,過程如下圖所示。過程如下圖所示。文件文件2_1_1.c的程序源代碼的程序源代碼:說明:說明:1. 文件文件2_1_1.c中有中有f() 與與 main(
7、)函數(shù)函數(shù). 2. 一個(gè)可執(zhí)行的程序必須有一一個(gè)可執(zhí)行的程序必須有一個(gè)個(gè)main函數(shù)函數(shù),并且只能有并且只能有一個(gè)一個(gè)main函數(shù)。函數(shù)。3. 由于在文件由于在文件2_1_1.c中有文件包中有文件包含含#include “2_1_2.c” 語句語句.在在2_1_2.c有自定義函數(shù)有自定義函數(shù)disp().只有這樣才能在只有這樣才能在 2_1_1.c文件中的文件中的main函數(shù)才可以調(diào)用函數(shù)才可以調(diào)用disp函數(shù)。函數(shù)。步驟步驟3 3:點(diǎn)擊點(diǎn)擊”編譯編譯”圖標(biāo)圖標(biāo) 進(jìn)行進(jìn)行編譯源程序編譯源程序2_1_1.c。(設(shè):設(shè):源程序源程序2_1_2.c已存在同一文件夾內(nèi))已存在同一文件夾內(nèi))步驟步驟5
8、5:點(diǎn)擊:點(diǎn)擊”連接連接”圖標(biāo)圖標(biāo): :進(jìn)行連接進(jìn)行連接, , 產(chǎn)生產(chǎn)生 .exe.exe文件文件. . 執(zhí)行程序執(zhí)行程序2_1_1.exe2_1_1.exe步驟步驟6: 點(diǎn)擊點(diǎn)擊”執(zhí)行執(zhí)行”圖標(biāo)圖標(biāo)調(diào)用函數(shù)調(diào)用函數(shù)disp()的結(jié)果的結(jié)果.調(diào)用函數(shù)調(diào)用函數(shù)f()的結(jié)果的結(jié)果.調(diào)用函數(shù)調(diào)用函數(shù)disp()的結(jié)果的結(jié)果.總結(jié)總結(jié): 1. C 程序是由函數(shù)組成程序是由函數(shù)組成,必須要包含一個(gè)主函必須要包含一個(gè)主函 數(shù)數(shù)main( ). 函數(shù)之間可以相互調(diào)用函數(shù)之間可以相互調(diào)用. 因此,因此,函數(shù)是函數(shù)是 C 程序的基本單位程序的基本單位。 (1). C 用各種各樣的函數(shù)來完成某些特定功能。用各種各
9、樣的函數(shù)來完成某些特定功能。 (2). C函數(shù)庫十分豐富,標(biāo)準(zhǔn)函數(shù)庫十分豐富,標(biāo)準(zhǔn) C 提供一百多個(gè)函數(shù)提供一百多個(gè)函數(shù). 被調(diào)函數(shù)可以是系統(tǒng)提供的庫函數(shù)被調(diào)函數(shù)可以是系統(tǒng)提供的庫函數(shù), 如如: printf( ), scanf( ); 也可以是根據(jù)需要自己編寫的函數(shù)也可以是根據(jù)需要自己編寫的函數(shù),如如: disp( ).2. 一個(gè)一個(gè)C 程序總是從程序總是從main()函數(shù)開始函數(shù)開始執(zhí)行執(zhí)行,不管這不管這 個(gè)個(gè)main( )在整個(gè)程序中處于什么位置。在整個(gè)程序中處于什么位置。 main( )函數(shù)可放在整個(gè)程序的最上頭,或最后函數(shù)可放在整個(gè)程序的最上頭,或最后, 或或 一些函數(shù)的中間一些函數(shù)
10、的中間 .3. C程序書寫格式自由:一行內(nèi)可以寫幾條語句程序書寫格式自由:一行內(nèi)可以寫幾條語句. 一條語句可寫在多行上一條語句可寫在多行上,行尾使用行尾使用續(xù)行符續(xù)行符: “ ”. * 書寫程序時(shí)書寫程序時(shí),一律使用英文標(biāo)點(diǎn)符號(hào)一律使用英文標(biāo)點(diǎn)符號(hào). * C語言程序中區(qū)分大小寫。語言程序中區(qū)分大小寫。 C 語言中語言中大小寫字母大小寫字母代代表表不同不同含義含義. . 也即也即C 語言對(duì)語言對(duì)大小寫敏感大小寫敏感. . * 在程序中在程序中int、return、include叫保留字,在叫保留字,在C語言語言 中有特定的含義中有特定的含義,一般不作它用。一般不作它用。 * 而而disp、f、a
11、、b等為用戶自定義標(biāo)識(shí)符,通常為等為用戶自定義標(biāo)識(shí)符,通常為 了定義函數(shù)、變量所取的名字,取名要有一定的規(guī)了定義函數(shù)、變量所取的名字,取名要有一定的規(guī) 則。則。 4 每條語句及變量定義的每條語句及變量定義的最后要有一個(gè)分號(hào)最后要有一個(gè)分號(hào)( ; ) , 分號(hào)分號(hào)( ; )是語句的必要組成部分。是語句的必要組成部分。 如:如: int x , y=7 ; c = a+b ; 注注:變量定義必須放在函數(shù)的開頭部分變量定義必須放在函數(shù)的開頭部分,執(zhí)行語句之前執(zhí)行語句之前, 不能不能 插入在語句當(dāng)中插入在語句當(dāng)中. C+可放程序任何位置可放程序任何位置.5 C語言本身并沒有輸入語言本身并沒有輸入,輸出
12、語句輸出語句. 輸入輸入,輸出的操輸出的操 作是由庫函數(shù),像作是由庫函數(shù),像printf(), scanf()函數(shù)來完成。函數(shù)來完成。 C 語言對(duì)輸入、輸出實(shí)行語言對(duì)輸入、輸出實(shí)行“函數(shù)化函數(shù)化”管理。管理。上機(jī)練習(xí)上機(jī)練習(xí)11.上機(jī)調(diào)試程序例上機(jī)調(diào)試程序例2.12.在例在例2.1中,修改函數(shù)中,修改函數(shù)disp為為display,顯示兩排星號(hào),顯示兩排星號(hào),函數(shù)函數(shù)f改為改為func,做兩個(gè)數(shù)的加法運(yùn)算,做兩個(gè)數(shù)的加法運(yùn)算,main函數(shù)調(diào)用這兩函數(shù)調(diào)用這兩個(gè)函數(shù),請(qǐng)編寫程序并編譯調(diào)試。個(gè)函數(shù),請(qǐng)編寫程序并編譯調(diào)試。3在文件在文件2_1_1.c中去掉中去掉#include這一行,觀這一行,觀察
13、編譯程序時(shí)有什么提示。察編譯程序時(shí)有什么提示。2.2 C 函數(shù)函數(shù) 一一. 函數(shù)的調(diào)用形式為:函數(shù)的調(diào)用形式為: 函數(shù)名函數(shù)名( 參數(shù)參數(shù) ); 注注: 函數(shù)的原型:函數(shù)的原型: 函數(shù)返回值類型函數(shù)返回值類型 函數(shù)名函數(shù)名( 形式參數(shù)表形式參數(shù)表 );函數(shù)的原型函數(shù)的原型:指明了函數(shù)名是什么指明了函數(shù)名是什么?函數(shù)的返回值類型是什么函數(shù)的返回值類型是什么?它的形式參數(shù)個(gè)數(shù)及類型?它的形式參數(shù)個(gè)數(shù)及類型?函數(shù)的調(diào)用函數(shù)的調(diào)用:只要寫上函數(shù)名只要寫上函數(shù)名 和相關(guān)的和相關(guān)的實(shí)際參數(shù)就可以進(jìn)行函數(shù)調(diào)實(shí)際參數(shù)就可以進(jìn)行函數(shù)調(diào)用了用了.參數(shù)參數(shù): 執(zhí)行一個(gè)函數(shù)所必須提供的數(shù)據(jù)叫參數(shù)執(zhí)行一個(gè)函數(shù)所必須提供
14、的數(shù)據(jù)叫參數(shù).返回值類型返回值類型 函數(shù)名函數(shù)名(形式參數(shù)聲明形式參數(shù)聲明) 數(shù)據(jù)聲明部分?jǐn)?shù)據(jù)聲明部分 語句部分語句部分 二二. C函數(shù)定義的結(jié)構(gòu)示意圖函數(shù)定義的結(jié)構(gòu)示意圖大括號(hào)內(nèi)為大括號(hào)內(nèi)為函數(shù)體函數(shù)體.例例2.2 函數(shù)結(jié)構(gòu)的例子函數(shù)結(jié)構(gòu)的例子int add(int x,int y) int z; /* 數(shù)據(jù)定義部分,給變量分配內(nèi)存空間數(shù)據(jù)定義部分,給變量分配內(nèi)存空間*/ z=x+y; /*執(zhí)行語句執(zhí)行語句*/ return z; Add為函數(shù)名為函數(shù)名.其功能為其功能為:計(jì)算兩數(shù)之和計(jì)算兩數(shù)之和.int為函數(shù)的返為函數(shù)的返回值類型回值類型.int x,int y為函數(shù)為函數(shù)的形式參數(shù)定義的
15、形式參數(shù)定義其中其中“”和和“”分別表示函分別表示函數(shù)執(zhí)行的起點(diǎn)與終點(diǎn)數(shù)執(zhí)行的起點(diǎn)與終點(diǎn).(或程序塊的起點(diǎn)與終點(diǎn)或程序塊的起點(diǎn)與終點(diǎn).) int add(int x,int y) int z; /* 變量定義,給變量分配內(nèi)存空間變量定義,給變量分配內(nèi)存空間*/ z=x+y; /*執(zhí)行語句執(zhí)行語句*/ return z; 函數(shù)調(diào)用時(shí)函數(shù)調(diào)用時(shí),實(shí)際參數(shù)傳給實(shí)際參數(shù)傳給這里的形式參數(shù)這里的形式參數(shù). 與此同時(shí)為與此同時(shí)為形參變量形參變量在內(nèi)存在內(nèi)存中分配相應(yīng)的存儲(chǔ)空間。中分配相應(yīng)的存儲(chǔ)空間。執(zhí)行函數(shù)執(zhí)行函數(shù)add()后,函數(shù)返回一值后,函數(shù)返回一值z(mì)到主調(diào)函數(shù)到主調(diào)函數(shù),其類型為整型。其類型為整型
16、。注:注: 在在C語言中語言中, 變量在使用前,一定要先定義變量在使用前,一定要先定義: 指定變量的名字及類型指定變量的名字及類型,在編譯時(shí)給變量分配存儲(chǔ)空間。在編譯時(shí)給變量分配存儲(chǔ)空間。 例如例如: int z; 指定變量的名字為指定變量的名字為z,及類及類型為型為int.(在編譯時(shí)給變量分配在編譯時(shí)給變量分配存儲(chǔ)空間存儲(chǔ)空間)。注注: 變量名按變量名按C語言的命名規(guī)則命名語言的命名規(guī)則命名. 變量名一般用小寫字母變量名一般用小寫字母, 見名知義見名知義.例如:例如:int x3,n; 定義整型變量定義整型變量float y2; 定義單精度浮點(diǎn)型變量定義單精度浮點(diǎn)型變量double area
17、, length; 定義雙精度浮點(diǎn)型變量定義雙精度浮點(diǎn)型變量 多個(gè)變量用逗號(hào)多個(gè)變量用逗號(hào)(,)分開分開,最后加一分號(hào)最后加一分號(hào)(;). 每一個(gè)變量每一個(gè)變量有有二個(gè)特性二個(gè)特性: 有一個(gè)有一個(gè)名字名字和相應(yīng)的和相應(yīng)的類型類型, ,并在編譯時(shí)分配相應(yīng)的內(nèi)存并在編譯時(shí)分配相應(yīng)的內(nèi)存單元。單元。 該存儲(chǔ)單元的該存儲(chǔ)單元的大小大小由變量的數(shù)據(jù)類型決定由變量的數(shù)據(jù)類型決定. 1.5x3變量名變量名變量值變量值存儲(chǔ)單元存儲(chǔ)單元 C語言中的變量和代數(shù)中的變量語言中的變量和代數(shù)中的變量含義不同含義不同. . 數(shù)學(xué)中的變量代表未知數(shù)數(shù)學(xué)中的變量代表未知數(shù). . 如在如在C語言中的式子語言中的式子: x =
18、x+1 在代數(shù)中沒有意義在代數(shù)中沒有意義.但在但在C語言語言中中,式子式子x=x+1 表示把變量表示把變量x中的值加中的值加1,然后然后再保存到再保存到x中中. 這里的這里的”=“是是賦值運(yùn)算符賦值運(yùn)算符. 構(gòu)成了一賦值表達(dá)式構(gòu)成了一賦值表達(dá)式.x = x + 12.3 C語句語句 C文件由函數(shù)構(gòu)成,函數(shù)由語句構(gòu)成,語句的結(jié)束符文件由函數(shù)構(gòu)成,函數(shù)由語句構(gòu)成,語句的結(jié)束符用用“;”表示表示. 在在例例2.1中的文件中的文件2_1_1.c中的中的main函數(shù),由函數(shù),由5條語句條語句構(gòu)成,每條語句用構(gòu)成,每條語句用“;”表示語句的結(jié)束。表示語句的結(jié)束。 int x=3,y=4,z; - 變量定義
19、語句變量定義語句.表示定義了表示定義了x、y、z三個(gè)變量,三個(gè)變量, 并并給給x、y分別賦予一個(gè)最初的值分別賦予一個(gè)最初的值3與與4. int x=3,y=4,z; disp( ); z=f(x,y); printf( %d * %d = %dn ,x,y,z); disp( );disp( ); - 函數(shù)調(diào)用語句函數(shù)調(diào)用語句.表示調(diào)用函數(shù)表示調(diào)用函數(shù)disp().輸出:輸出:* int x=3,y=4,z; disp( ); z=f(x,y); printf( %d * %d = %dn ,x,y,z); disp( ); z=f(x,y); 表示調(diào)用函數(shù)表示調(diào)用函數(shù)f(),在調(diào)用函數(shù),在調(diào)
20、用函數(shù)f()時(shí)把實(shí)時(shí)把實(shí)參參x、y的值分別傳給形參的值分別傳給形參a、b. 返回值最后賦給變量返回值最后賦給變量z. printf(“ %d * %d = %dn” ,x,y,z);表表示調(diào)用系統(tǒng)函數(shù)示調(diào)用系統(tǒng)函數(shù)printf輸出,輸出,其輸出形式為:其輸出形式為:3*4=12int f(int a,int b) int c; c=a*b; return c; 在被調(diào)函數(shù)在被調(diào)函數(shù)f()中把中把a(bǔ)、b的乘積賦的乘積賦給變量給變量c,然后函數(shù),然后函數(shù)f()把返回值把返回值c賦給賦給main函數(shù)中的函數(shù)中的z。2.4 保留字與標(biāo)識(shí)符保留字與標(biāo)識(shí)符 語句由保留字、標(biāo)識(shí)符、運(yùn)算符和表達(dá)式構(gòu)成。語句由
21、保留字、標(biāo)識(shí)符、運(yùn)算符和表達(dá)式構(gòu)成。2.4.1 保留字保留字 保留字是指保留字是指C語言中有特殊含義的名字,只能用于語言中有特殊含義的名字,只能用于C語語言中特定的場合。言中特定的場合。 例如:例如: int: 用于定義用于定義整型類型整型類型變量變量 float: 用于定義用于定義實(shí)型實(shí)型變量變量 double: 用于定義用于定義雙精度雙精度變量變量 char: 用于定義用于定義字符字符變量或字符串變量變量或字符串變量 注意:注意: 保留字只能用于規(guī)定的場合,不能用作給變量取名或保留字只能用于規(guī)定的場合,不能用作給變量取名或用戶自定義標(biāo)識(shí)符。用戶自定義標(biāo)識(shí)符。if: 用于判斷用于判斷for:
22、 用于循環(huán)用于循環(huán)while : 用于循環(huán)用于循環(huán) 在在C語言中其它的保留字見語言中其它的保留字見附錄附錄C,其含義在以后,其含義在以后的章節(jié)中陸續(xù)學(xué)到。的章節(jié)中陸續(xù)學(xué)到。2.4.2 標(biāo)識(shí)符標(biāo)識(shí)符 標(biāo)識(shí)符簡單的理解就是給在程序中涉及的對(duì)象取的名字標(biāo)識(shí)符簡單的理解就是給在程序中涉及的對(duì)象取的名字. 標(biāo)識(shí)符分為標(biāo)識(shí)符分為系統(tǒng)系統(tǒng)命名的標(biāo)識(shí)符與命名的標(biāo)識(shí)符與用戶用戶自命名標(biāo)識(shí)符,系自命名標(biāo)識(shí)符,系統(tǒng)標(biāo)識(shí)符通常用于系統(tǒng)函數(shù)的命名,如:統(tǒng)標(biāo)識(shí)符通常用于系統(tǒng)函數(shù)的命名,如: printf、strlen、scanf、fabs、malloc等。等。 用戶自命名標(biāo)識(shí)符是用戶為命名變量或定義函數(shù)等而取用戶自命名標(biāo)
23、識(shí)符是用戶為命名變量或定義函數(shù)等而取的名字,通常用戶自定義標(biāo)識(shí)符以的名字,通常用戶自定義標(biāo)識(shí)符以字母、數(shù)字、下劃字母、數(shù)字、下劃線線組成組成,并以字母或下劃線開頭并以字母或下劃線開頭。注意:注意: a_12 、 _12 、ab12 等等 都是正確命名的標(biāo)識(shí)符。都是正確命名的標(biāo)識(shí)符。 12a、a/b等等 都是不正確的標(biāo)識(shí)符。都是不正確的標(biāo)識(shí)符。 思考:思考: 是否可用:是否可用:int if=5; 定義一個(gè)整型變量?為什么?定義一個(gè)整型變量?為什么? 2.5 運(yùn)算符運(yùn)算符 在在C程序中有極為豐富的運(yùn)算符,例如程序中有極為豐富的運(yùn)算符,例如: 賦值運(yùn)算符賦值運(yùn)算符、算術(shù)運(yùn)算符、關(guān)系運(yùn)算符、邏輯運(yùn)算
24、符、算術(shù)運(yùn)算符、關(guān)系運(yùn)算符、邏輯運(yùn)算符、位運(yùn)算符等。位運(yùn)算符等。 運(yùn)算符及其優(yōu)先級(jí)請(qǐng)參閱運(yùn)算符及其優(yōu)先級(jí)請(qǐng)參閱附錄附錄2.5.1 算術(shù)運(yùn)算符算術(shù)運(yùn)算符 算術(shù)運(yùn)算符有算術(shù)運(yùn)算符有: 加、減、乘、除、取余數(shù),它們的加、減、乘、除、取余數(shù),它們的表達(dá)方式及含義如下表所示。表達(dá)方式及含義如下表所示。運(yùn)算符運(yùn)算符 含義含義 例例 備注備注 + 加加 5+2 結(jié)果結(jié)果 7 - 減減 5-2 結(jié)果結(jié)果 3 * 乘乘 5*2 結(jié)果結(jié)果 10 / 除除 5/2 結(jié)果結(jié)果 2 % 求余求余 5%2 結(jié)果結(jié)果1 只適用于整型數(shù)只適用于整型數(shù) + 自增自增 - 自減自減 算術(shù)運(yùn)算符的優(yōu)先級(jí)算術(shù)運(yùn)算符的優(yōu)先級(jí):運(yùn)算符運(yùn)
25、算符 + - * / % 相同相同相同相同低低高高1. 關(guān)于除法運(yùn)算符關(guān)于除法運(yùn)算符: / 兩個(gè)整數(shù)相除結(jié)果為整數(shù)兩個(gè)整數(shù)相除結(jié)果為整數(shù): 5/2 結(jié)果結(jié)果 2 5/3 結(jié)果結(jié)果 1 2. 關(guān)于求余運(yùn)算符關(guān)于求余運(yùn)算符: % %兩邊的操作數(shù)都兩邊的操作數(shù)都應(yīng)是整數(shù)應(yīng)是整數(shù). 5%2 結(jié)果結(jié)果1 7%4 結(jié)果結(jié)果3 除法運(yùn)算符除法運(yùn)算符” “/ “的運(yùn)算結(jié)果跟兩個(gè)操作的運(yùn)算結(jié)果跟兩個(gè)操作數(shù)的類型有關(guān)數(shù)的類型有關(guān): (1).如果兩邊都是整形如果兩邊都是整形,結(jié)果必定為整形結(jié)果必定為整形. (2).如果兩邊是其它類形如果兩邊是其它類形,結(jié)果不是整形結(jié)果不是整形 .3. C3. C語言也規(guī)定了算術(shù)運(yùn)算
26、符的語言也規(guī)定了算術(shù)運(yùn)算符的優(yōu)選級(jí)和結(jié)合性優(yōu)選級(jí)和結(jié)合性。 在表達(dá)式求值時(shí):在表達(dá)式求值時(shí):* 先按運(yùn)算符的先按運(yùn)算符的優(yōu)先級(jí)別優(yōu)先級(jí)別高低次序執(zhí)行,如高低次序執(zhí)行,如a-ba-b* *c,c, * 如果在一個(gè)運(yùn)算對(duì)象兩側(cè)的運(yùn)算符級(jí)別一樣如果在一個(gè)運(yùn)算對(duì)象兩側(cè)的運(yùn)算符級(jí)別一樣, ,則按則按 “ “結(jié)合方向結(jié)合方向”處理。處理。 算術(shù)運(yùn)算符算術(shù)運(yùn)算符的結(jié)合方向是的結(jié)合方向是“自左至右自左至右”, ,即先左后右即先左后右. . 又稱又稱“左結(jié)合性左結(jié)合性” 即運(yùn)算對(duì)象先與左邊的運(yùn)算符相即運(yùn)算對(duì)象先與左邊的運(yùn)算符相結(jié)合。結(jié)合。 如如: : a-b+ca-b+c , , 因此因此b b先與減號(hào)結(jié)合先與
27、減號(hào)結(jié)合, ,執(zhí)行執(zhí)行a-ba-b的運(yùn)算的運(yùn)算, ,再執(zhí)再執(zhí)行加行加 +c +c的運(yùn)算的運(yùn)算. . 以后還將遇到以后還將遇到 “ “右結(jié)合性右結(jié)合性”的運(yùn)算符的運(yùn)算符, ,其結(jié)合方向?yàn)槠浣Y(jié)合方向?yàn)樽宰杂抑磷蟆<催\(yùn)算對(duì)象與右邊運(yùn)算符的相結(jié)合右至左。即運(yùn)算對(duì)象與右邊運(yùn)算符的相結(jié)合. . 結(jié)合性是在別的高級(jí)語言中沒有的結(jié)合性是在別的高級(jí)語言中沒有的, ,是是C C特有的特有的 。請(qǐng)參閱請(qǐng)參閱附錄附錄: 列出所有運(yùn)算符的優(yōu)先級(jí)和結(jié)合性。列出所有運(yùn)算符的優(yōu)先級(jí)和結(jié)合性。3、算術(shù)表達(dá)式、算術(shù)表達(dá)式 : 什么是表達(dá)式?什么是表達(dá)式? 由常量,變量,各種運(yùn)算符,由常量,變量,各種運(yùn)算符, 函數(shù)和括號(hào)連接而成函
28、數(shù)和括號(hào)連接而成的,合符的,合符 c語言語法規(guī)則的有意義的式子,稱為表達(dá)式。語言語法規(guī)則的有意義的式子,稱為表達(dá)式。 如:如: a+23 , t+sqrt(y), z=x+y ,Pi*r*r算術(shù)表達(dá)式的書寫規(guī)則算術(shù)表達(dá)式的書寫規(guī)則: 在數(shù)學(xué)表達(dá)式中省略的內(nèi)容要寫上在數(shù)學(xué)表達(dá)式中省略的內(nèi)容要寫上: 如如: 2x 要寫成要寫成 2*x 2 r 要寫成要寫成 2* *r a b ca=b & b =c s(s-a)(s-b)(s-c) 要寫成要寫成 s*(s-a)*(s-b)*(s-c) (59)(F-32) 要寫成要寫成 (5 / 9)* (F - 32) x1+x2 要寫成要寫成 x1+
29、x2 4. 4. 自增、自減運(yùn)算符自增、自減運(yùn)算符: : 在算術(shù)運(yùn)算符中,在算術(shù)運(yùn)算符中,C C語言又增加了兩個(gè)很有用的運(yùn)語言又增加了兩個(gè)很有用的運(yùn) 算符:算符: + 加加 1 1 運(yùn)算符運(yùn)算符( (自增)自增) - 減減 1 1 運(yùn)算符運(yùn)算符( (自減)自減)作用:作用: 使使變量變量的值加的值加1 1或減或減1 1。如。如; ; +x +x; 相當(dāng)于相當(dāng)于 x=x+1x=x+1; -x-x; 相當(dāng)于相當(dāng)于 x=x-1;x=x-1; 增增1,減,減1運(yùn)算符可放在操作數(shù)之前,也可放在其后。如運(yùn)算符可放在操作數(shù)之前,也可放在其后。如: +i, - -i 變量變量使用之前使用之前, 先使先使 i
30、增增1,減減 1. i+ , i- - 變量變量使用之后使用之后, 再使再使 i加加 1,減,減1設(shè):設(shè): i=3; j = +i ; (j的值為的值為4) j = i+ ; (j的值為的值為3,i的值為的值為4)注意注意!例例: main ( ) int a=100; printf(“%d n”,+a); printf(“%d n”,a+); printf(“%d n”,a); 結(jié)果:結(jié)果: 101 101 102(2). (2). 結(jié)合方向是結(jié)合方向是“自右至左自右至左”,即,即“右結(jié)合右結(jié)合”. 如有如有: -i+ 負(fù)號(hào)和負(fù)號(hào)和“+”同一優(yōu)先級(jí)同一優(yōu)先級(jí),結(jié)合方向同為結(jié)合方向同為“自右而
31、左自右而左”,即相當(dāng)于即相當(dāng)于 -(i+). 注注: : (1). +,- - 運(yùn)算符只能用于運(yùn)算符只能用于變量變量,不能用于常量與表不能用于常量與表 達(dá)式。達(dá)式。 如如: 5+,(a+b)+ 都不合法都不合法.思考思考: 表達(dá)式表達(dá)式 y=1+x+ 是否等同于是否等同于 x+, y=1+x 還是等同于還是等同于 y=1+x, x+ ?上機(jī)練習(xí)上機(jī)練習(xí)21:上機(jī)調(diào)試下列程序,總結(jié)余數(shù)的符號(hào)與什么相關(guān)。:上機(jī)調(diào)試下列程序,總結(jié)余數(shù)的符號(hào)與什么相關(guān)。#includeint main() printf(%d %dn, 5%2, -5%2); return 0;2:上機(jī)調(diào)試下列程序,分析程序輸出的結(jié)果
32、。:上機(jī)調(diào)試下列程序,分析程序輸出的結(jié)果。#includeint main() int x,y,z; scanf(%d,&x); y=x+; z=+x; printf(y=%d z=%d x=%dn,y,z,x); &的含義是的含義是“取地址取地址”的意思,函數(shù)的作用的意思,函數(shù)的作用是:是: 從鍵盤輸入的兩個(gè)值從鍵盤輸入的兩個(gè)值,分別送到分別送到 x所占地址所占地址的內(nèi)存單元中去的內(nèi)存單元中去,也就是輸入也就是輸入x的值的值. %d為輸入格式說明為輸入格式說明, d為為十進(jìn)制整數(shù)格式說明符。十進(jìn)制整數(shù)格式說明符。 現(xiàn)設(shè)給現(xiàn)設(shè)給x輸入了一個(gè)輸入了一個(gè)5, 問:問:y,z,x輸出
33、各為多少輸出各為多少?輸出輸出:y=5,z=7,x=7 又又:#includeint main() int x,y,z; scanf(%d,&x); y=x-; z=-x; printf(y=%d z=%d x=%dn,y,z,x); 3:把前程序中的:把前程序中的+都改為都改為-,再次調(diào)試程序,觀察程序,再次調(diào)試程序,觀察程序運(yùn)行的結(jié)果。運(yùn)行的結(jié)果。 現(xiàn)設(shè)給現(xiàn)設(shè)給x輸入了一個(gè)輸入了一個(gè)5, 問:問:y,z,x輸出各為多少輸出各為多少?輸出輸出:y=5,z=3,x=3 x=45.3+y*4注注: 左邊必須是一個(gè)變量左邊必須是一個(gè)變量. 1. 首先計(jì)算表達(dá)式的值首先計(jì)算表達(dá)式的值. 同時(shí)
34、把其類型轉(zhuǎn)為左邊同時(shí)把其類型轉(zhuǎn)為左邊變量的類型變量的類型. 2. 把右邊表達(dá)式的值賦把右邊表達(dá)式的值賦 給左邊的變量給左邊的變量.說明說明:1. 如果在賦值運(yùn)算中,如果在賦值運(yùn)算中,賦值符兩側(cè)類型不一致賦值符兩側(cè)類型不一致, 在賦值在賦值時(shí)要進(jìn)行類型轉(zhuǎn)換。時(shí)要進(jìn)行類型轉(zhuǎn)換。規(guī)則規(guī)則: 賦值符右邊的值轉(zhuǎn)變?yōu)橘x值符左邊賦值符右邊的值轉(zhuǎn)變?yōu)橘x值符左邊變量所屬的類型變量所屬的類型 (系統(tǒng)自動(dòng)轉(zhuǎn)換)。系統(tǒng)自動(dòng)轉(zhuǎn)換)。 例如:例如: a. 將將實(shí)型數(shù)據(jù)賦給整型變量實(shí)型數(shù)據(jù)賦給整型變量時(shí),小數(shù)部分自動(dòng)時(shí),小數(shù)部分自動(dòng) 丟失。丟失。 int i ; i=8.56; ( i為整型變量為整型變量, i 的值就為的
35、值就為 8 )b. 將整型數(shù)據(jù)賦給實(shí)型變量時(shí)將整型數(shù)據(jù)賦給實(shí)型變量時(shí),數(shù)值不變,數(shù)值不變,但以浮點(diǎn)形但以浮點(diǎn)形 式存于內(nèi)存。式存于內(nèi)存。 如如: float f2; f2 = 28; f2將以將以28.0000存于內(nèi)存。存于內(nèi)存。 (單精度以單精度以6位有效數(shù)字存入位有效數(shù)字存入, 雙精度有雙精度有15位有效數(shù)字位有效數(shù)字)例例: 若若x是整型變量是整型變量,表達(dá)式表達(dá)式(x=10.0/4.0)的值是的值是_ A. 2.5 B、2.0 C、3 D、 26、復(fù)合賦值運(yùn)算符復(fù)合賦值運(yùn)算符:(1). 如果在賦值符如果在賦值符=之前加上其它運(yùn)算符,可構(gòu)成之前加上其它運(yùn)算符,可構(gòu)成 復(fù)合賦值復(fù)合賦值運(yùn)算
36、符運(yùn)算符, 如如 : += (相加賦值相加賦值) *= (相乘賦值相乘賦值) 例如例如: a += 3 相當(dāng)于相當(dāng)于 a=a+3 x *= y+8 相當(dāng)于相當(dāng)于 x = x *(y+8) x %= 3 相當(dāng)于相當(dāng)于 x=x%3 C 采用這種形式,一采用這種形式,一是為了簡化程序,二是是為了簡化程序,二是為了提高編譯效率。為了提高編譯效率。 凡是二目凡是二目(二元二元)運(yùn)算符,都可與賦值符組成復(fù)合賦值符運(yùn)算符,都可與賦值符組成復(fù)合賦值符. 為了便于記憶,可以這樣理解:為了便于記憶,可以這樣理解: 設(shè)有設(shè)有 : a += b 又設(shè)又設(shè)a a為變量,為變量,b b為表達(dá)式為表達(dá)式 a + = b (
37、“=”左邊部分,插入左邊部分,插入“=”右邊)右邊) a = a + b (“=”左邊補(bǔ)上變量名左邊補(bǔ)上變量名) 如果如果 b表達(dá)式是包含若干項(xiàng)的表達(dá)式,它相當(dāng)表達(dá)式是包含若干項(xiàng)的表達(dá)式,它相當(dāng) 于有括號(hào):于有括號(hào): x% = y+3 x% = (y+3) x = x%(y+3)(2).(2).賦值表達(dá)式賦值表達(dá)式: : 由賦值運(yùn)算符將一個(gè)變量和一個(gè)表達(dá)式連接起來的式子由賦值運(yùn)算符將一個(gè)變量和一個(gè)表達(dá)式連接起來的式子稱為稱為“賦值表達(dá)式賦值表達(dá)式”. . 如如: : “a=5 “a=5* *b” b” 就是一個(gè)賦值表達(dá)式就是一個(gè)賦值表達(dá)式, ,賦值表達(dá)式的值賦值表達(dá)式的值就就是是 被賦值的變量
38、的值被賦值的變量的值. . 7 7、強(qiáng)制類型轉(zhuǎn)換運(yùn)算符強(qiáng)制類型轉(zhuǎn)換運(yùn)算符 如如: : (double)(double)a2 .a2 .( (將將a2a2變量強(qiáng)制轉(zhuǎn)換成變量強(qiáng)制轉(zhuǎn)換成doubledouble型型) ) (int)(int)(x+y) .(x+y) .( (將將(x+y)(x+y)的類型強(qiáng)制轉(zhuǎn)換的類型強(qiáng)制轉(zhuǎn)換intint型型) ) 一般形式為一般形式為: :( (類型名類型名) )( (表達(dá)式表達(dá)式) )說明說明:進(jìn)行強(qiáng)制類型轉(zhuǎn)換時(shí),得到一個(gè)所需的中間變量進(jìn)行強(qiáng)制類型轉(zhuǎn)換時(shí),得到一個(gè)所需的中間變量, , 原來的變量類型不變。原來的變量類型不變。 例:例:float x1;float
39、 x1; int i; int i; x1=13.6; x1=13.6; i= i=( (intint) )x1x1 ; ; * * i i的值為的值為13 13 * * 類型轉(zhuǎn)換有二種方法:類型轉(zhuǎn)換有二種方法: a. 系統(tǒng)自動(dòng)進(jìn)行系統(tǒng)自動(dòng)進(jìn)行. . b. 強(qiáng)制進(jìn)行強(qiáng)制進(jìn)行. . 強(qiáng)制類型轉(zhuǎn)換在函數(shù)調(diào)用時(shí),當(dāng)要求形參與實(shí)參的類型強(qiáng)制類型轉(zhuǎn)換在函數(shù)調(diào)用時(shí),當(dāng)要求形參與實(shí)參的類型一致時(shí)使用。一致時(shí)使用。2.5.2 關(guān)系運(yùn)算符關(guān)系運(yùn)算符一、關(guān)系運(yùn)算符與關(guān)系表達(dá)式一、關(guān)系運(yùn)算符與關(guān)系表達(dá)式 : 關(guān)系運(yùn)算符也就是一種比較大小的運(yùn)算符。關(guān)系運(yùn)算符也就是一種比較大小的運(yùn)算符。1關(guān)系運(yùn)算符及優(yōu)先級(jí)關(guān)系運(yùn)算符及
40、優(yōu)先級(jí): (小于小于) (大于大于) = (大于等于大于等于) = = (等于等于) 低低 ! = (不等于不等于) 優(yōu)先級(jí)相同優(yōu)先級(jí)相同(低低)優(yōu)先級(jí)相同優(yōu)先級(jí)相同(高高) 算術(shù)運(yùn)算符算術(shù)運(yùn)算符 : * , / , % + , - 高高 關(guān)系運(yùn)算符:關(guān)系運(yùn)算符: , , =, =, != 賦值運(yùn)算符:賦值運(yùn)算符: = 低低 復(fù)合復(fù)合賦值運(yùn)算符賦值運(yùn)算符: +=, %=, *= 運(yùn)算符的優(yōu)先級(jí)請(qǐng)見附錄運(yùn)算符的優(yōu)先級(jí)請(qǐng)見附錄B2 2關(guān)系表達(dá)式:關(guān)系表達(dá)式: 用關(guān)系運(yùn)算符將兩個(gè)表達(dá)式連起來的式子用關(guān)系運(yùn)算符將兩個(gè)表達(dá)式連起來的式子關(guān)系表關(guān)系表 達(dá)式達(dá)式。關(guān)系表達(dá)式由于是一種比較的操作。關(guān)系表達(dá)式由
41、于是一種比較的操作,其結(jié)果是成其結(jié)果是成 立立,不成立的關(guān)系。不成立的關(guān)系。 也即產(chǎn)生一個(gè)也即產(chǎn)生一個(gè)邏輯值邏輯值 , “真真” 或或 “假假”。 C語言中沒有設(shè)邏輯型數(shù)據(jù)語言中沒有設(shè)邏輯型數(shù)據(jù) . C中用中用1代表邏輯代表邏輯真真 ,0 0代表邏輯代表邏輯假假。0 1 如:設(shè)如:設(shè): a=4 , b=3 , c=2 ; 則則:(1). a b的值為的值為 “真真”,表達(dá)式的值為,表達(dá)式的值為 1 . (2). d= b c /* d的值為的值為 1 1 .*/ (3). e = abc /* e 的值為的值為 0.*/ /* 因因 “” 運(yùn)算符運(yùn)算符自左到右結(jié)合自左到右結(jié)合, 先執(zhí)行先執(zhí)行
42、ab,值為值為 1,再執(zhí)行再執(zhí)行1c,值為值為 0 0*/ (4). f= (ab)+a f的值為的值為5思考:思考: 表達(dá)式表達(dá)式 y=610=1 它等同于它等同于 y=(610)=1 還是還是 y=6(10=1) ? 高高 算術(shù)運(yùn)算符算術(shù)運(yùn)算符 : * , / ,% + , - 關(guān)系運(yùn)算符:關(guān)系運(yùn)算符: , , =, , , =, =, != 賦值運(yùn)算符:賦值運(yùn)算符: = = 低低 2.5.3 邏輯運(yùn)算符邏輯運(yùn)算符1邏輯運(yùn)算符及優(yōu)先級(jí):邏輯運(yùn)算符及優(yōu)先級(jí): 邏輯運(yùn)算符是對(duì)邏輯量進(jìn)行操作邏輯運(yùn)算符是對(duì)邏輯量進(jìn)行操作. 共有三種:共有三種: ! ! 邏輯非邏輯非(NOT) (對(duì)操作數(shù)取反對(duì)操作
43、數(shù)取反,如操作數(shù)為真如操作數(shù)為真,結(jié)果就為假結(jié)果就為假.) & 邏輯與邏輯與(AND) (只有兩個(gè)操作數(shù)的值同時(shí)為真時(shí)只有兩個(gè)操作數(shù)的值同時(shí)為真時(shí),結(jié)果為真結(jié)果為真.) | | 邏輯或邏輯或 (OR) (只要兩個(gè)操作數(shù)中的一個(gè)值為真時(shí)只要兩個(gè)操作數(shù)中的一個(gè)值為真時(shí),結(jié)果就為真結(jié)果就為真.)高高 低低 & , | | 是是雙目雙目(二元二元)運(yùn)算符,運(yùn)算符,! 是是單目單目(一元一元)運(yùn)算符運(yùn)算符. 優(yōu)先級(jí)優(yōu)先級(jí): 邏輯運(yùn)算符邏輯運(yùn)算符: ! 高高 算術(shù)運(yùn)算符:算術(shù)運(yùn)算符: + , * 關(guān)系運(yùn)算符:關(guān)系運(yùn)算符: , =b)& (xy) ab & xy (!a) |
44、 | ab ! a | | ab2邏輯表達(dá)式邏輯表達(dá)式 : 用邏輯運(yùn)算符將關(guān)系表達(dá)式,或邏輯量連起來的式用邏輯運(yùn)算符將關(guān)系表達(dá)式,或邏輯量連起來的式 子,子,叫邏輯表達(dá)式。叫邏輯表達(dá)式。 邏輯表達(dá)式的值應(yīng)該是一個(gè)邏輯量:真邏輯表達(dá)式的值應(yīng)該是一個(gè)邏輯量:真(1),假(,假(0). 但在但在判斷判斷一個(gè)量是否為真或?yàn)榧贂r(shí)一個(gè)量是否為真或?yàn)榧贂r(shí), 即以非即以非0 0為真為真(包包括負(fù)值)括負(fù)值), 以以0 0值為假值為假. 這種表示方法法最先在這種表示方法法最先在C中使用,因?yàn)樗沟镁幊田@中使用,因?yàn)樗沟镁幊田@示特別方便。示特別方便。說明說明 : C語言在編譯時(shí),給出語言在編譯時(shí),給出邏輯運(yùn)算結(jié)
45、果邏輯運(yùn)算結(jié)果時(shí)時(shí) (如如 關(guān)系表關(guān)系表 達(dá)式、邏輯表達(dá)式),如果是真,用數(shù)值達(dá)式、邏輯表達(dá)式),如果是真,用數(shù)值 1 表示表示 ; 是假用是假用 0 表示。表示。例:設(shè)例:設(shè) a=4 , b=5 那么:那么: ! a 的值為的值為 0 (因?yàn)椋ㄒ驗(yàn)閍的值為非的值為非 0,認(rèn)為是真),認(rèn)為是真) a&b 的值為的值為 1 . a| |b 的值為的值為 1 . 4 & 0 | | 2 的值為的值為 1 (自左向右運(yùn)算)(自左向右運(yùn)算).可見可見: (1). 邏輯運(yùn)算結(jié)果不是邏輯運(yùn)算結(jié)果不是 0,就是,就是 1. (2). 參加邏輯運(yùn)算的操作數(shù)可以是參加邏輯運(yùn)算的操作數(shù)可以是1,0
46、(真真, 假假),也可是,也可是 整數(shù),也可以是任何類型的數(shù)據(jù)。系統(tǒng)最終是以整數(shù),也可以是任何類型的數(shù)據(jù)。系統(tǒng)最終是以: 0判斷為假,非判斷為假,非 0 判斷為真判斷為真.例例:求表達(dá)式的值:求表達(dá)式的值: : 5 53 & 2|83 & 2|84 4!0!0 4!0 即: 3 得:53 & 2|83 5 53 3 結(jié)果為結(jié)果為 1 1 ; 83 結(jié)果為結(jié)果為 0 得:1 & 2 | 0 1&2 1&2 結(jié)果為結(jié)果為 1 1 最后結(jié)果為最后結(jié)果為 1 注注: : 邏輯表達(dá)式求解自左向右邏輯表達(dá)式求解自左向右,且,且一旦知道結(jié)果一旦知道結(jié)果的真假的
47、真假 值,求值即停止。值,求值即停止。 例例. . 若設(shè)若設(shè): a=1,b=1,c=3,d=4, m,n: a=1,b=1,c=3,d=4, m,n原值為原值為1 1,那么,那么: : (m=ab) & (n=cd) (m=ab) & (n=cd) 則則m m新值為新值為0 0,n n不再賦值不再賦值。 2. 判斷判斷ch 是否為是否為英文英文字母字母: (ch = a & ch = A & ch = Z) 熟練掌握關(guān)系運(yùn)算符和邏輯運(yùn)算符,可以巧妙地用一熟練掌握關(guān)系運(yùn)算符和邏輯運(yùn)算符,可以巧妙地用一個(gè)邏輯表達(dá)式來表示一個(gè)復(fù)雜的條件。個(gè)邏輯表達(dá)式來表示一個(gè)復(fù)雜的條
48、件。 例例:閏年的條件:閏年的條件: a. 能被能被4整除,但不能被整除,但不能被100整除整除 b. 能被能被400整除整除 設(shè)設(shè) year為某一年份,為某一年份, year為閏年的表達(dá)式:為閏年的表達(dá)式:(year%4 =0&year%100!=0)|year%400=0) 當(dāng)上述邏輯表達(dá)式為當(dāng)上述邏輯表達(dá)式為 1 時(shí),時(shí),year這一年為閏年,這一年為閏年, 當(dāng)為當(dāng)為 0 時(shí),時(shí),year這一年為非閏年。這一年為非閏年。例例2.3 #include int main() int x=20,y=3,z=0,a; a=xy; printf(%d %d=%dn,x,y,a); a=x/
49、y; printf(%d / %d=%dn,x,y,a); a=x%y; printf(%d % %d=%dn,x,y,a); . .ch2_2_3.c輸出符號(hào)輸出符號(hào)%時(shí),時(shí),需寫成:需寫成: . a=x=y; printf(%d = %d=%dn,x,y,a); a=x!=y; printf(%d != %d=%dn,x,y,a); a=x&y; printf(%d & %d=%dn,x,y,a); a=x|y; printf(%d | %d=%dn,x,y,a); a=!xy; printf(!%d%d=%dn,x,y,a);注:注: 由于由于% %通常用于格式控制符中,
50、當(dāng)在通常用于格式控制符中,當(dāng)在printfprintf中輸出符號(hào)中輸出符號(hào)% %時(shí),需寫成:時(shí),需寫成: printf(“%d printf(“%d % %d=%dn”,x,y,a); %d=%dn”,x,y,a);,而不是:而不是: printf(%d % %d=%dn,x,y,a);printf(%d % %d=%dn,x,y,a); 說明:說明: 在編譯新程序前要關(guān)閉前一程序的在編譯新程序前要關(guān)閉前一程序的 工作空間工作空間 。 注意!注意!思考思考: 1. 寫出判斷寫出判斷x大于大于0并且小于并且小于10的表達(dá)式。的表達(dá)式。 2寫出判斷寫出判斷ch是大寫字母的的表達(dá)式。是大寫字母的的表
51、達(dá)式。 3寫出判斷寫出判斷ch是字母的表達(dá)式。是字母的表達(dá)式。 4寫出整型數(shù)寫出整型數(shù)a、b、c能構(gòu)成一個(gè)三角形的表達(dá)式。能構(gòu)成一個(gè)三角形的表達(dá)式。 2.5.4 位運(yùn)算符位運(yùn)算符 位運(yùn)算符的運(yùn)算對(duì)象為二進(jìn)制數(shù)位運(yùn)算符的運(yùn)算對(duì)象為二進(jìn)制數(shù). 運(yùn)算符運(yùn)算符 含義含義 1. 按位取反按位取反 例:例: 1 結(jié)果結(jié)果 0 1010 結(jié)果結(jié)果 0101 2. & 按位與按位與 例:例: 1&1為為1; 1&0為為0 1100&1010 結(jié)果結(jié)果 10003. | 按位或按位或 例:例: 1|1 為為1 ; 1|0 為為1; 0|0為為0 . 1100 | 1010 結(jié)果結(jié)
52、果 1110 4. 按位異或按位異或 例:例: 11 為為0; 00為為0; 10為為1 . 1100&1010 結(jié)果結(jié)果 0110 5. 按位左移按位左移 例:例: 0010 按位右移按位右移 例:例: 0010 1 右移右移1位位 結(jié)果結(jié)果 0001例例2.4 從鍵盤輸入一個(gè)整型數(shù),判斷此數(shù)轉(zhuǎn)化為二進(jìn)從鍵盤輸入一個(gè)整型數(shù),判斷此數(shù)轉(zhuǎn)化為二進(jìn)制數(shù)后第制數(shù)后第2位是否為位是否為1。分析:分析: 假定此整數(shù)為假定此整數(shù)為12,轉(zhuǎn)化為二進(jìn)制后為,轉(zhuǎn)化為二進(jìn)制后為1100(你可以用你可以用windows中的計(jì)算器轉(zhuǎn)換中的計(jì)算器轉(zhuǎn)換). 判斷第判斷第2位是否為位是否為1,即此數(shù)只要與二進(jìn)制數(shù),
53、即此數(shù)只要與二進(jìn)制數(shù)0100作作“與與”運(yùn)算運(yùn)算. 如結(jié)果不為如結(jié)果不為0,即可判斷此數(shù)的二進(jìn)制數(shù)的第,即可判斷此數(shù)的二進(jìn)制數(shù)的第2位不為位不為0.第第0位位#includeint main()int x,y;scanf(%d,&x);y= (x&4) != 0;printf(此數(shù)的二進(jìn)制數(shù)的第此數(shù)的二進(jìn)制數(shù)的第2位為位為:%dn,y); 請(qǐng)讀者自行調(diào)試,如程序運(yùn)行時(shí)分別輸入請(qǐng)讀者自行調(diào)試,如程序運(yùn)行時(shí)分別輸入7、8,輸出,輸出是什么?為什么?是什么?為什么?ch2_2_4.c輸入輸入12 (12) 1 1 0 0 ( 4 ) 0 1 0 0 例例: 執(zhí)行下列程序段后執(zhí)行下列程
54、序段后, a值為值為_:int a, b;a=15; b= -1;a= a+b&a; A) 15 B) 0 C ) 1 D) 16 例例:寫出下列程序段的輸出結(jié)果寫出下列程序段的輸出結(jié)果: float x1, x2; x1=3/2; x2=x1/2; printf(%d, %.1f, (int)x1, x2) ;C). 11, 0.53/2的值為的值為1 第第 2 章章 C 程程 序序 的的 基基 本本 構(gòu)構(gòu) 成成 結(jié)結(jié) 束束上機(jī)練習(xí)上機(jī)練習(xí)一、模仿例一、模仿例2.4從鍵盤輸入一個(gè)整型數(shù),從從鍵盤輸入一個(gè)整型數(shù),從0開始計(jì)數(shù)開始計(jì)數(shù)判斷此數(shù)轉(zhuǎn)化為二進(jìn)制數(shù)后第判斷此數(shù)轉(zhuǎn)化為二進(jìn)制數(shù)后第4
55、位是否為位是否為1。思考:思考:1int x=3,y=4,z; z=x&y; z=x|y; z=xy; z=xy;在這在這4種情況下,種情況下,z的值分別是多少?的值分別是多少? 2.6 編輯編輯C程序時(shí)應(yīng)注意的問題程序時(shí)應(yīng)注意的問題1. C程序中區(qū)分大小寫字母,書寫格式自由,一行內(nèi)程序中區(qū)分大小寫字母,書寫格式自由,一行內(nèi)可寫幾個(gè)語句??蓪憥讉€(gè)語句。 2.用用“;”作為語句的結(jié)束標(biāo)記。作為語句的結(jié)束標(biāo)記。3. 函數(shù)定義如:函數(shù)定義如:main()、()、 #include、#define PI 3.14159 不是語句,后面不能用不是語句,后面不能用“;”號(hào)。號(hào)。 注釋用符號(hào)注釋用符
56、號(hào)“*” 和和 “*”來界定,來界定,“”和和“*”之間不可以有空格。之間不可以有空格。4. 一個(gè)好的程序應(yīng)該有詳細(xì)的注釋。一個(gè)好的程序應(yīng)該有詳細(xì)的注釋。練習(xí)與實(shí)踐練習(xí)與實(shí)踐一、選擇題一、選擇題1( )是構(gòu)成)是構(gòu)成C語言程序的基本單位。語言程序的基本單位。(A)函數(shù))函數(shù) (B)過程)過程 (C)子程序)子程序 (D)文件)文件2在下述程序段中,(在下述程序段中,( )是錯(cuò)誤的程序注釋方法(注:)是錯(cuò)誤的程序注釋方法(注:本例多個(gè)選擇)。本例多個(gè)選擇)。(A) #in/*包含包含*/clude void main() printf(How are you?n); (B)#includevoi
57、d main() int i=3; /*整型數(shù)整型數(shù)*/(C)#include void main() int x/*初始化初始化*/=10; /*打印打印*/printf(%d,x); (D)#includevoid main() int x=10; printf(%d,x); /*打印打印x/*x=10*/的值的值*/ 3( )是)是C語言提供的合法的數(shù)據(jù)類型關(guān)鍵字。語言提供的合法的數(shù)據(jù)類型關(guān)鍵字。(A)Float (B)signed (C)integer (D)Char4以下選項(xiàng)中不合法的用戶標(biāo)識(shí)符是(以下選項(xiàng)中不合法的用戶標(biāo)識(shí)符是( )。)。(A)abc.c (B)file (C)Ma
58、in (D)PRINTF5合法的語言字符常數(shù)是(合法的語言字符常數(shù)是( )。)。(A)084 (B)A (C)ab (D)x436C語言中,要求運(yùn)算數(shù)必須是整型的運(yùn)算符是(語言中,要求運(yùn)算數(shù)必須是整型的運(yùn)算符是( )。)。(A)% (B) / (C) (D)!7以下選項(xiàng)以下選項(xiàng)中不正確的實(shí)型常量是(中不正確的實(shí)型常量是( )。)。(A)2.607E1 (B)0.8103e2. (C)77.77 (D)456e28合法的合法的C語言賦值語句為(語言賦值語句為( )。)。(A)a=b=58 (B)i+ ; (C)a = 50 ,b = 50 (D)k = int(a + b); 9不合法的不合法的
59、C語言賦值語句為(語言賦值語句為( )。)。(A)+a; (B)n1 =(n2 =(n3= 0); (C)a = b= = c; (D)k = a + b=1 ;10正確的語句是(正確的語句是( )。)。(A)int x=y=z=0; (B)int z=(x+y)+; (C)x=+3=2; (D)x%=2.5; 11下述程序的輸出是(下述程序的輸出是( )。)。#includevoid main() int x=023; printf(%d,-x);(A)17 (B)18 (C)23 (D)2412設(shè)設(shè)a,b,c均定義為均定義為int型,且已賦于大于型,且已賦于大于1的數(shù),能的數(shù),能正確表達(dá)正
60、確表達(dá)1/(abc)的表達(dá)式是()的表達(dá)式是( )。)。(A) 1/a*b*c (B)1/(a*b*c) (C)1.0/a*b*c (D)1.0/a/b/c二、寫出表達(dá)式或程序的運(yùn)行結(jié)果二、寫出表達(dá)式或程序的運(yùn)行結(jié)果1以下程序輸出結(jié)果是(以下程序輸出結(jié)果是( )。)。#includevoid main() int a , d=241; a = d / 100 % 9 ; printf(%dn, a ); 2定義:定義: int a =5,b=4; float x=5.5,y=3.7; (float)(a+b)/2+(int)x/(int)y+(int)(x+y)%4/2值為(值為( )。)。 3定義定義 int a =2 ,b =3, c =4; 執(zhí)行完下列語句后執(zhí)行完下列語句后: a
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 公廁維修維護(hù)合同范例
- 亳州拆除合同范例
- 出租底商合同范例
- 減免租金合同范例
- 個(gè)人與公司簽合同范例
- 便攜式果茶包裝設(shè)計(jì)行業(yè)跨境出海項(xiàng)目商業(yè)計(jì)劃書
- 青少年法律意識(shí)提升策略研究
- 2025年重癥監(jiān)護(hù)臨床信息系統(tǒng)項(xiàng)目發(fā)展計(jì)劃
- 節(jié)日慶典家庭聚會(huì)布置技巧歡樂祥和的節(jié)日氛圍
- 餐廳裝修的餐飲文化體現(xiàn)
- 浙江省杭州地區(qū)(含周邊)重點(diǎn)中學(xué)2024-2025學(xué)年高一下學(xué)期期中考試化學(xué)試卷(含答案)
- 2025年北京市石景山區(qū)九年級(jí)初三一模語文試卷(含答案)
- 2025年人教版九年級(jí)中考道法社會(huì)熱點(diǎn)專題 熱點(diǎn)七 《黑神話:悟空》
- 2025年浙江省溫州市中考一模語文試題(含答案)
- GB/T 12385-2025管法蘭用墊片密封性能試驗(yàn)方法
- 油煙機(jī)清洗合同協(xié)議范本
- 毫針操作基本技術(shù)
- 賓館衛(wèi)生考試題及答案
- 習(xí)近平總書記安全生產(chǎn)重要論述2013.6-2025.2
- 綠色供應(yīng)鏈管理策略試題及答案
- 離婚協(xié)議書 標(biāo)準(zhǔn)版電子版(2025年版)
評(píng)論
0/150
提交評(píng)論