第2章 C語言程序的基本構成_第1頁
第2章 C語言程序的基本構成_第2頁
第2章 C語言程序的基本構成_第3頁
第2章 C語言程序的基本構成_第4頁
第2章 C語言程序的基本構成_第5頁
已閱讀5頁,還剩104頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、 第第 2 章章 C 程程 序序 的的 基基 本本 構構 成成2.1 C語言源文件語言源文件 C語言是結構化的程序設計語言,一個語言是結構化的程序設計語言,一個C源程序可以由源程序可以由一個或多個文件組成,一個或多個文件組成,C源源程序程序文件的擴展名一般為文件的擴展名一般為.c 或或.cpp,下面通過實例學習多文件系統中的函數調用。,下面通過實例學習多文件系統中的函數調用。 說明:說明: 文件文件-是指存放在存儲器上以文件名進行管理的一組信是指存放在存儲器上以文件名進行管理的一組信息息. 函數函數-指具有獨立功能、按一定格式構成的代碼段。指具有獨立功能、按一定格式構成的代碼段。 一個大型一個

2、大型,典型的典型的C語言源程序大致如下所示語言源程序大致如下所示: C語言源程序語言源程序 源程序文件源程序文件1 源程序文件源程序文件n 源程序文件源程序文件2. 預處理命令預處理命令 全局變量全局變量 聲明聲明 函數函數1. 函數函數n 函數首部函數首部 函數體函數體 局部變量局部變量 聲明聲明 執行語句執行語句 文件包含的概念:文件包含的概念: 一個文件可以將另一個源文件的全部內容包含進來,一個文件可以將另一個源文件的全部內容包含進來,這叫文件包含處理。這叫文件包含處理。 當然當然文件包含文件包含予處理也可在特定的盤,特定的目錄予處理也可在特定的盤,特定的目錄(文文件夾件夾)中尋找包含文

3、件中尋找包含文件. 如如:#include “c:my foldermyfile.c” 文件包含的一般格式文件包含的一般格式 : #include 或者或者 #include “文件名文件名” 使用使用尖括號:尖括號: 到存放到存放C庫函數頭文件所在目錄庫函數頭文件所在目錄中尋找要包含的文件中尋找要包含的文件. 一般為一般為” include”文件夾文件夾.使用使用“ ”雙引號:表示雙引號:表示在當前目錄在當前目錄(文件夾文件夾)中未中未找所包含的文件后找所包含的文件后, 再按再按尖括號方式尋找。尖括號方式尋找。 #include “file2.C”file1.cA 在編譯時,將在編譯時,將f

4、ile2.c全部內容復制到全部內容復制到#include“file2.c“的的位置上位置上, 將將file1.c作為一個源文件單位進行編譯。作為一個源文件單位進行編譯。file1.c BA+Bfile2.c包含包含例例2.1 在在Visual C+環境下新建兩個文件,其文件名分別環境下新建兩個文件,其文件名分別 為為2_1_1.c、 2_1_2.c, 其中其中2_1_1.c文件定義一個做乘法的函數文件定義一個做乘法的函數f( ),定義另一,定義另一個主調函數個主調函數main(). 在主調函數中分別調用函數在主調函數中分別調用函數f( )以及存放在以及存放在2_1_2.c中的中的函數函數dis

5、p(),在,在main函數中輸出函數中輸出f( )的返回值。的返回值。2_1_2.c 文件文件disp()函數函數分析:分析: 在文件在文件2_1_1.c中由兩個函數構成,文件中由兩個函數構成,文件2_1_2.c由一個由一個函數構成函數構成. 程序的執行從程序的執行從main()函數開始,函數開始,main函數調用函數調用f()函數,函數,然后再調用然后再調用disp()函數。函數。2_1_1.c文件文件f()函數函數main()函數函數#include “2_1_2.c調用調用操作過程:操作過程:步驟步驟1:在在VC+環境下的環境下的”新建新建”對話框中對話框中,點擊點擊 文件文件 選項卡選

6、項卡,然后選中然后選中”C+ Sourse File”項項,輸入文件名輸入文件名2_1_2.c,過程如下圖所示。過程如下圖所示。步驟步驟2:輸入文件名輸入文件名2_1_2.c源程序代碼并保存:源程序代碼并保存: 這是一個將被這是一個將被2_1_1.c所包所包含的文件含的文件.內容是一自定義函數內容是一自定義函數disp().步驟步驟2:在在VC+環境下的再新建一文件環境下的再新建一文件: 2_1_1.c . 輸入文件名輸入文件名2_1_1.c,過程如下圖所示。過程如下圖所示。文件文件2_1_1.c的程序源代碼的程序源代碼:說明:說明:1. 文件文件2_1_1.c中有中有f() 與與 main(

7、)函數函數. 2. 一個可執行的程序必須有一一個可執行的程序必須有一個個main函數函數,并且只能有并且只能有一個一個main函數。函數。3. 由于在文件由于在文件2_1_1.c中有文件包中有文件包含含#include “2_1_2.c” 語句語句.在在2_1_2.c有自定義函數有自定義函數disp().只有這樣才能在只有這樣才能在 2_1_1.c文件中的文件中的main函數才可以調用函數才可以調用disp函數。函數。步驟步驟3 3:點擊點擊”編譯編譯”圖標圖標 進行進行編譯源程序編譯源程序2_1_1.c。(設:設:源程序源程序2_1_2.c已存在同一文件夾內)已存在同一文件夾內)步驟步驟5

8、5:點擊:點擊”連接連接”圖標圖標: :進行連接進行連接, , 產生產生 .exe.exe文件文件. . 執行程序執行程序2_1_1.exe2_1_1.exe步驟步驟6: 點擊點擊”執行執行”圖標圖標調用函數調用函數disp()的結果的結果.調用函數調用函數f()的結果的結果.調用函數調用函數disp()的結果的結果.總結總結: 1. C 程序是由函數組成程序是由函數組成,必須要包含一個主函必須要包含一個主函 數數main( ). 函數之間可以相互調用函數之間可以相互調用. 因此,因此,函數是函數是 C 程序的基本單位程序的基本單位。 (1). C 用各種各樣的函數來完成某些特定功能。用各種各

9、樣的函數來完成某些特定功能。 (2). C函數庫十分豐富,標準函數庫十分豐富,標準 C 提供一百多個函數提供一百多個函數. 被調函數可以是系統提供的庫函數被調函數可以是系統提供的庫函數, 如如: printf( ), scanf( ); 也可以是根據需要自己編寫的函數也可以是根據需要自己編寫的函數,如如: disp( ).2. 一個一個C 程序總是從程序總是從main()函數開始函數開始執行執行,不管這不管這 個個main( )在整個程序中處于什么位置。在整個程序中處于什么位置。 main( )函數可放在整個程序的最上頭,或最后函數可放在整個程序的最上頭,或最后, 或或 一些函數的中間一些函數

10、的中間 .3. C程序書寫格式自由:一行內可以寫幾條語句程序書寫格式自由:一行內可以寫幾條語句. 一條語句可寫在多行上一條語句可寫在多行上,行尾使用行尾使用續行符續行符: “ ”. * 書寫程序時書寫程序時,一律使用英文標點符號一律使用英文標點符號. * C語言程序中區分大小寫。語言程序中區分大小寫。 C 語言中語言中大小寫字母大小寫字母代代表表不同不同含義含義. . 也即也即C 語言對語言對大小寫敏感大小寫敏感. . * 在程序中在程序中int、return、include叫保留字,在叫保留字,在C語言語言 中有特定的含義中有特定的含義,一般不作它用。一般不作它用。 * 而而disp、f、a

11、、b等為用戶自定義標識符,通常為等為用戶自定義標識符,通常為 了定義函數、變量所取的名字,取名要有一定的規了定義函數、變量所取的名字,取名要有一定的規 則。則。 4 每條語句及變量定義的每條語句及變量定義的最后要有一個分號最后要有一個分號( ; ) , 分號分號( ; )是語句的必要組成部分。是語句的必要組成部分。 如:如: int x , y=7 ; c = a+b ; 注注:變量定義必須放在函數的開頭部分變量定義必須放在函數的開頭部分,執行語句之前執行語句之前, 不能不能 插入在語句當中插入在語句當中. C+可放程序任何位置可放程序任何位置.5 C語言本身并沒有輸入語言本身并沒有輸入,輸出

12、語句輸出語句. 輸入輸入,輸出的操輸出的操 作是由庫函數,像作是由庫函數,像printf(), scanf()函數來完成。函數來完成。 C 語言對輸入、輸出實行語言對輸入、輸出實行“函數化函數化”管理。管理。上機練習上機練習11.上機調試程序例上機調試程序例2.12.在例在例2.1中,修改函數中,修改函數disp為為display,顯示兩排星號,顯示兩排星號,函數函數f改為改為func,做兩個數的加法運算,做兩個數的加法運算,main函數調用這兩函數調用這兩個函數,請編寫程序并編譯調試。個函數,請編寫程序并編譯調試。3在文件在文件2_1_1.c中去掉中去掉#include這一行,觀這一行,觀察

13、編譯程序時有什么提示。察編譯程序時有什么提示。2.2 C 函數函數 一一. 函數的調用形式為:函數的調用形式為: 函數名函數名( 參數參數 ); 注注: 函數的原型:函數的原型: 函數返回值類型函數返回值類型 函數名函數名( 形式參數表形式參數表 );函數的原型函數的原型:指明了函數名是什么指明了函數名是什么?函數的返回值類型是什么函數的返回值類型是什么?它的形式參數個數及類型?它的形式參數個數及類型?函數的調用函數的調用:只要寫上函數名只要寫上函數名 和相關的和相關的實際參數就可以進行函數調實際參數就可以進行函數調用了用了.參數參數: 執行一個函數所必須提供的數據叫參數執行一個函數所必須提供

14、的數據叫參數.返回值類型返回值類型 函數名函數名(形式參數聲明形式參數聲明) 數據聲明部分數據聲明部分 語句部分語句部分 二二. C函數定義的結構示意圖函數定義的結構示意圖大括號內為大括號內為函數體函數體.例例2.2 函數結構的例子函數結構的例子int add(int x,int y) int z; /* 數據定義部分,給變量分配內存空間數據定義部分,給變量分配內存空間*/ z=x+y; /*執行語句執行語句*/ return z; Add為函數名為函數名.其功能為其功能為:計算兩數之和計算兩數之和.int為函數的返為函數的返回值類型回值類型.int x,int y為函數為函數的形式參數定義的

15、形式參數定義其中其中“”和和“”分別表示函分別表示函數執行的起點與終點數執行的起點與終點.(或程序塊的起點與終點或程序塊的起點與終點.) int add(int x,int y) int z; /* 變量定義,給變量分配內存空間變量定義,給變量分配內存空間*/ z=x+y; /*執行語句執行語句*/ return z; 函數調用時函數調用時,實際參數傳給實際參數傳給這里的形式參數這里的形式參數. 與此同時為與此同時為形參變量形參變量在內存在內存中分配相應的存儲空間。中分配相應的存儲空間。執行函數執行函數add()后,函數返回一值后,函數返回一值z到主調函數到主調函數,其類型為整型。其類型為整型

16、。注:注: 在在C語言中語言中, 變量在使用前,一定要先定義變量在使用前,一定要先定義: 指定變量的名字及類型指定變量的名字及類型,在編譯時給變量分配存儲空間。在編譯時給變量分配存儲空間。 例如例如: int z; 指定變量的名字為指定變量的名字為z,及類及類型為型為int.(在編譯時給變量分配在編譯時給變量分配存儲空間存儲空間)。注注: 變量名按變量名按C語言的命名規則命名語言的命名規則命名. 變量名一般用小寫字母變量名一般用小寫字母, 見名知義見名知義.例如:例如:int x3,n; 定義整型變量定義整型變量float y2; 定義單精度浮點型變量定義單精度浮點型變量double area

17、, length; 定義雙精度浮點型變量定義雙精度浮點型變量 多個變量用逗號多個變量用逗號(,)分開分開,最后加一分號最后加一分號(;). 每一個變量每一個變量有有二個特性二個特性: 有一個有一個名字名字和相應的和相應的類型類型, ,并在編譯時分配相應的內存并在編譯時分配相應的內存單元。單元。 該存儲單元的該存儲單元的大小大小由變量的數據類型決定由變量的數據類型決定. 1.5x3變量名變量名變量值變量值存儲單元存儲單元 C語言中的變量和代數中的變量語言中的變量和代數中的變量含義不同含義不同. . 數學中的變量代表未知數數學中的變量代表未知數. . 如在如在C語言中的式子語言中的式子: x =

18、x+1 在代數中沒有意義在代數中沒有意義.但在但在C語言語言中中,式子式子x=x+1 表示把變量表示把變量x中的值加中的值加1,然后然后再保存到再保存到x中中. 這里的這里的”=“是是賦值運算符賦值運算符. 構成了一賦值表達式構成了一賦值表達式.x = x + 12.3 C語句語句 C文件由函數構成,函數由語句構成,語句的結束符文件由函數構成,函數由語句構成,語句的結束符用用“;”表示表示. 在在例例2.1中的文件中的文件2_1_1.c中的中的main函數,由函數,由5條語句條語句構成,每條語句用構成,每條語句用“;”表示語句的結束。表示語句的結束。 int x=3,y=4,z; - 變量定義

19、語句變量定義語句.表示定義了表示定義了x、y、z三個變量,三個變量, 并并給給x、y分別賦予一個最初的值分別賦予一個最初的值3與與4. int x=3,y=4,z; disp( ); z=f(x,y); printf( %d * %d = %dn ,x,y,z); disp( );disp( ); - 函數調用語句函數調用語句.表示調用函數表示調用函數disp().輸出:輸出:* int x=3,y=4,z; disp( ); z=f(x,y); printf( %d * %d = %dn ,x,y,z); disp( ); z=f(x,y); 表示調用函數表示調用函數f(),在調用函數,在調

20、用函數f()時把實時把實參參x、y的值分別傳給形參的值分別傳給形參a、b. 返回值最后賦給變量返回值最后賦給變量z. printf(“ %d * %d = %dn” ,x,y,z);表表示調用系統函數示調用系統函數printf輸出,輸出,其輸出形式為:其輸出形式為:3*4=12int f(int a,int b) int c; c=a*b; return c; 在被調函數在被調函數f()中把中把a、b的乘積賦的乘積賦給變量給變量c,然后函數,然后函數f()把返回值把返回值c賦給賦給main函數中的函數中的z。2.4 保留字與標識符保留字與標識符 語句由保留字、標識符、運算符和表達式構成。語句由

21、保留字、標識符、運算符和表達式構成。2.4.1 保留字保留字 保留字是指保留字是指C語言中有特殊含義的名字,只能用于語言中有特殊含義的名字,只能用于C語語言中特定的場合。言中特定的場合。 例如:例如: int: 用于定義用于定義整型類型整型類型變量變量 float: 用于定義用于定義實型實型變量變量 double: 用于定義用于定義雙精度雙精度變量變量 char: 用于定義用于定義字符字符變量或字符串變量變量或字符串變量 注意:注意: 保留字只能用于規定的場合,不能用作給變量取名或保留字只能用于規定的場合,不能用作給變量取名或用戶自定義標識符。用戶自定義標識符。if: 用于判斷用于判斷for:

22、 用于循環用于循環while : 用于循環用于循環 在在C語言中其它的保留字見語言中其它的保留字見附錄附錄C,其含義在以后,其含義在以后的章節中陸續學到。的章節中陸續學到。2.4.2 標識符標識符 標識符簡單的理解就是給在程序中涉及的對象取的名字標識符簡單的理解就是給在程序中涉及的對象取的名字. 標識符分為標識符分為系統系統命名的標識符與命名的標識符與用戶用戶自命名標識符,系自命名標識符,系統標識符通常用于系統函數的命名,如:統標識符通常用于系統函數的命名,如: printf、strlen、scanf、fabs、malloc等。等。 用戶自命名標識符是用戶為命名變量或定義函數等而取用戶自命名標

23、識符是用戶為命名變量或定義函數等而取的名字,通常用戶自定義標識符以的名字,通常用戶自定義標識符以字母、數字、下劃字母、數字、下劃線線組成組成,并以字母或下劃線開頭并以字母或下劃線開頭。注意:注意: a_12 、 _12 、ab12 等等 都是正確命名的標識符。都是正確命名的標識符。 12a、a/b等等 都是不正確的標識符。都是不正確的標識符。 思考:思考: 是否可用:是否可用:int if=5; 定義一個整型變量?為什么?定義一個整型變量?為什么? 2.5 運算符運算符 在在C程序中有極為豐富的運算符,例如程序中有極為豐富的運算符,例如: 賦值運算符賦值運算符、算術運算符、關系運算符、邏輯運算

24、符、算術運算符、關系運算符、邏輯運算符、位運算符等。位運算符等。 運算符及其優先級請參閱運算符及其優先級請參閱附錄附錄2.5.1 算術運算符算術運算符 算術運算符有算術運算符有: 加、減、乘、除、取余數,它們的加、減、乘、除、取余數,它們的表達方式及含義如下表所示。表達方式及含義如下表所示。運算符運算符 含義含義 例例 備注備注 + 加加 5+2 結果結果 7 - 減減 5-2 結果結果 3 * 乘乘 5*2 結果結果 10 / 除除 5/2 結果結果 2 % 求余求余 5%2 結果結果1 只適用于整型數只適用于整型數 + 自增自增 - 自減自減 算術運算符的優先級算術運算符的優先級:運算符運

25、算符 + - * / % 相同相同相同相同低低高高1. 關于除法運算符關于除法運算符: / 兩個整數相除結果為整數兩個整數相除結果為整數: 5/2 結果結果 2 5/3 結果結果 1 2. 關于求余運算符關于求余運算符: % %兩邊的操作數都兩邊的操作數都應是整數應是整數. 5%2 結果結果1 7%4 結果結果3 除法運算符除法運算符” “/ “的運算結果跟兩個操作的運算結果跟兩個操作數的類型有關數的類型有關: (1).如果兩邊都是整形如果兩邊都是整形,結果必定為整形結果必定為整形. (2).如果兩邊是其它類形如果兩邊是其它類形,結果不是整形結果不是整形 .3. C3. C語言也規定了算術運算

26、符的語言也規定了算術運算符的優選級和結合性優選級和結合性。 在表達式求值時:在表達式求值時:* 先按運算符的先按運算符的優先級別優先級別高低次序執行,如高低次序執行,如a-ba-b* *c,c, * 如果在一個運算對象兩側的運算符級別一樣如果在一個運算對象兩側的運算符級別一樣, ,則按則按 “ “結合方向結合方向”處理。處理。 算術運算符算術運算符的結合方向是的結合方向是“自左至右自左至右”, ,即先左后右即先左后右. . 又稱又稱“左結合性左結合性” 即運算對象先與左邊的運算符相即運算對象先與左邊的運算符相結合。結合。 如如: : a-b+ca-b+c , , 因此因此b b先與減號結合先與

27、減號結合, ,執行執行a-ba-b的運算的運算, ,再執再執行加行加 +c +c的運算的運算. . 以后還將遇到以后還將遇到 “ “右結合性右結合性”的運算符的運算符, ,其結合方向為其結合方向為自自右至左。即運算對象與右邊運算符的相結合右至左。即運算對象與右邊運算符的相結合. . 結合性是在別的高級語言中沒有的結合性是在別的高級語言中沒有的, ,是是C C特有的特有的 。請參閱請參閱附錄附錄: 列出所有運算符的優先級和結合性。列出所有運算符的優先級和結合性。3、算術表達式、算術表達式 : 什么是表達式?什么是表達式? 由常量,變量,各種運算符,由常量,變量,各種運算符, 函數和括號連接而成函

28、數和括號連接而成的,合符的,合符 c語言語法規則的有意義的式子,稱為表達式。語言語法規則的有意義的式子,稱為表達式。 如:如: a+23 , t+sqrt(y), z=x+y ,Pi*r*r算術表達式的書寫規則算術表達式的書寫規則: 在數學表達式中省略的內容要寫上在數學表達式中省略的內容要寫上: 如如: 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. 自增、自減運算符自增、自減運算符: : 在算術運算符中,在算術運算符中,C C語言又增加了兩個很有用的運語言又增加了兩個很有用的運 算符:算符: + 加加 1 1 運算符運算符( (自增)自增) - 減減 1 1 運算符運算符( (自減)自減)作用:作用: 使使變量變量的值加的值加1 1或減或減1 1。如。如; ; +x +x; 相當于相當于 x=x+1x=x+1; -x-x; 相當于相當于 x=x-1;x=x-1; 增增1,減,減1運算符可放在操作數之前,也可放在其后。如運算符可放在操作數之前,也可放在其后。如: +i, - -i 變量變量使用之前使用之前, 先使先使 i

30、增增1,減減 1. i+ , i- - 變量變量使用之后使用之后, 再使再使 i加加 1,減,減1設:設: 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); 結果:結果: 101 101 102(2). (2). 結合方向是結合方向是“自右至左自右至左”,即,即“右結合右結合”. 如有如有: -i+ 負號和負號和“+”同一優先級同一優先級,結合方向同為結合方向同為“自右而

31、左自右而左”,即相當于即相當于 -(i+). 注注: : (1). +,- - 運算符只能用于運算符只能用于變量變量,不能用于常量與表不能用于常量與表 達式。達式。 如如: 5+,(a+b)+ 都不合法都不合法.思考思考: 表達式表達式 y=1+x+ 是否等同于是否等同于 x+, y=1+x 還是等同于還是等同于 y=1+x, x+ ?上機練習上機練習21:上機調試下列程序,總結余數的符號與什么相關。:上機調試下列程序,總結余數的符號與什么相關。#includeint main() printf(%d %dn, 5%2, -5%2); return 0;2:上機調試下列程序,分析程序輸出的結果

32、。:上機調試下列程序,分析程序輸出的結果。#includeint main() int x,y,z; scanf(%d,&x); y=x+; z=+x; printf(y=%d z=%d x=%dn,y,z,x); &的含義是的含義是“取地址取地址”的意思,函數的作用的意思,函數的作用是:是: 從鍵盤輸入的兩個值從鍵盤輸入的兩個值,分別送到分別送到 x所占地址所占地址的內存單元中去的內存單元中去,也就是輸入也就是輸入x的值的值. %d為輸入格式說明為輸入格式說明, d為為十進制整數格式說明符。十進制整數格式說明符。 現設給現設給x輸入了一個輸入了一個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:把前程序中的:把前程序中的+都改為都改為-,再次調試程序,觀察程序,再次調試程序,觀察程序運行的結果。運行的結果。 現設給現設給x輸入了一個輸入了一個5, 問:問:y,z,x輸出各為多少輸出各為多少?輸出輸出:y=5,z=3,x=3 x=45.3+y*4注注: 左邊必須是一個變量左邊必須是一個變量. 1. 首先計算表達式的值首先計算表達式的值. 同時

34、把其類型轉為左邊同時把其類型轉為左邊變量的類型變量的類型. 2. 把右邊表達式的值賦把右邊表達式的值賦 給左邊的變量給左邊的變量.說明說明:1. 如果在賦值運算中,如果在賦值運算中,賦值符兩側類型不一致賦值符兩側類型不一致, 在賦值在賦值時要進行類型轉換。時要進行類型轉換。規則規則: 賦值符右邊的值轉變為賦值符左邊賦值符右邊的值轉變為賦值符左邊變量所屬的類型變量所屬的類型 (系統自動轉換)。系統自動轉換)。 例如:例如: a. 將將實型數據賦給整型變量實型數據賦給整型變量時,小數部分自動時,小數部分自動 丟失。丟失。 int i ; i=8.56; ( i為整型變量為整型變量, i 的值就為的

35、值就為 8 )b. 將整型數據賦給實型變量時將整型數據賦給實型變量時,數值不變,數值不變,但以浮點形但以浮點形 式存于內存。式存于內存。 如如: float f2; f2 = 28; f2將以將以28.0000存于內存。存于內存。 (單精度以單精度以6位有效數字存入位有效數字存入, 雙精度有雙精度有15位有效數字位有效數字)例例: 若若x是整型變量是整型變量,表達式表達式(x=10.0/4.0)的值是的值是_ A. 2.5 B、2.0 C、3 D、 26、復合賦值運算符復合賦值運算符:(1). 如果在賦值符如果在賦值符=之前加上其它運算符,可構成之前加上其它運算符,可構成 復合賦值復合賦值運算

36、符運算符, 如如 : += (相加賦值相加賦值) *= (相乘賦值相乘賦值) 例如例如: a += 3 相當于相當于 a=a+3 x *= y+8 相當于相當于 x = x *(y+8) x %= 3 相當于相當于 x=x%3 C 采用這種形式,一采用這種形式,一是為了簡化程序,二是是為了簡化程序,二是為了提高編譯效率。為了提高編譯效率。 凡是二目凡是二目(二元二元)運算符,都可與賦值符組成復合賦值符運算符,都可與賦值符組成復合賦值符. 為了便于記憶,可以這樣理解:為了便于記憶,可以這樣理解: 設有設有 : a += b 又設又設a a為變量,為變量,b b為表達式為表達式 a + = b (

37、“=”左邊部分,插入左邊部分,插入“=”右邊)右邊) a = a + b (“=”左邊補上變量名左邊補上變量名) 如果如果 b表達式是包含若干項的表達式,它相當表達式是包含若干項的表達式,它相當 于有括號:于有括號: x% = y+3 x% = (y+3) x = x%(y+3)(2).(2).賦值表達式賦值表達式: : 由賦值運算符將一個變量和一個表達式連接起來的式子由賦值運算符將一個變量和一個表達式連接起來的式子稱為稱為“賦值表達式賦值表達式”. . 如如: : “a=5 “a=5* *b” b” 就是一個賦值表達式就是一個賦值表達式, ,賦值表達式的值賦值表達式的值就就是是 被賦值的變量

38、的值被賦值的變量的值. . 7 7、強制類型轉換運算符強制類型轉換運算符 如如: : (double)(double)a2 .a2 .( (將將a2a2變量強制轉換成變量強制轉換成doubledouble型型) ) (int)(int)(x+y) .(x+y) .( (將將(x+y)(x+y)的類型強制轉換的類型強制轉換intint型型) ) 一般形式為一般形式為: :( (類型名類型名) )( (表達式表達式) )說明說明:進行強制類型轉換時,得到一個所需的中間變量進行強制類型轉換時,得到一個所需的中間變量, , 原來的變量類型不變。原來的變量類型不變。 例:例:float x1;float

39、 x1; int i; int i; x1=13.6; x1=13.6; i= i=( (intint) )x1x1 ; ; * * i i的值為的值為13 13 * * 類型轉換有二種方法:類型轉換有二種方法: a. 系統自動進行系統自動進行. . b. 強制進行強制進行. . 強制類型轉換在函數調用時,當要求形參與實參的類型強制類型轉換在函數調用時,當要求形參與實參的類型一致時使用。一致時使用。2.5.2 關系運算符關系運算符一、關系運算符與關系表達式一、關系運算符與關系表達式 : 關系運算符也就是一種比較大小的運算符。關系運算符也就是一種比較大小的運算符。1關系運算符及優先級關系運算符及

40、優先級: (小于小于) (大于大于) = (大于等于大于等于) = = (等于等于) 低低 ! = (不等于不等于) 優先級相同優先級相同(低低)優先級相同優先級相同(高高) 算術運算符算術運算符 : * , / , % + , - 高高 關系運算符:關系運算符: , , =, =, != 賦值運算符:賦值運算符: = 低低 復合復合賦值運算符賦值運算符: +=, %=, *= 運算符的優先級請見附錄運算符的優先級請見附錄B2 2關系表達式:關系表達式: 用關系運算符將兩個表達式連起來的式子用關系運算符將兩個表達式連起來的式子關系表關系表 達式達式。關系表達式由于是一種比較的操作。關系表達式由

41、于是一種比較的操作,其結果是成其結果是成 立立,不成立的關系。不成立的關系。 也即產生一個也即產生一個邏輯值邏輯值 , “真真” 或或 “假假”。 C語言中沒有設邏輯型數據語言中沒有設邏輯型數據 . C中用中用1代表邏輯代表邏輯真真 ,0 0代表邏輯代表邏輯假假。0 1 如:設如:設: a=4 , b=3 , c=2 ; 則則:(1). a b的值為的值為 “真真”,表達式的值為,表達式的值為 1 . (2). d= b c /* d的值為的值為 1 1 .*/ (3). e = abc /* e 的值為的值為 0.*/ /* 因因 “” 運算符運算符自左到右結合自左到右結合, 先執行先執行

42、ab,值為值為 1,再執行再執行1c,值為值為 0 0*/ (4). f= (ab)+a f的值為的值為5思考:思考: 表達式表達式 y=610=1 它等同于它等同于 y=(610)=1 還是還是 y=6(10=1) ? 高高 算術運算符算術運算符 : * , / ,% + , - 關系運算符:關系運算符: , , =, , , =, =, != 賦值運算符:賦值運算符: = = 低低 2.5.3 邏輯運算符邏輯運算符1邏輯運算符及優先級:邏輯運算符及優先級: 邏輯運算符是對邏輯量進行操作邏輯運算符是對邏輯量進行操作. 共有三種:共有三種: ! ! 邏輯非邏輯非(NOT) (對操作數取反對操作

43、數取反,如操作數為真如操作數為真,結果就為假結果就為假.) & 邏輯與邏輯與(AND) (只有兩個操作數的值同時為真時只有兩個操作數的值同時為真時,結果為真結果為真.) | | 邏輯或邏輯或 (OR) (只要兩個操作數中的一個值為真時只要兩個操作數中的一個值為真時,結果就為真結果就為真.)高高 低低 & , | | 是是雙目雙目(二元二元)運算符,運算符,! 是是單目單目(一元一元)運算符運算符. 優先級優先級: 邏輯運算符邏輯運算符: ! 高高 算術運算符:算術運算符: + , * 關系運算符:關系運算符: , =b)& (xy) ab & xy (!a) |

44、 | ab ! a | | ab2邏輯表達式邏輯表達式 : 用邏輯運算符將關系表達式,或邏輯量連起來的式用邏輯運算符將關系表達式,或邏輯量連起來的式 子,子,叫邏輯表達式。叫邏輯表達式。 邏輯表達式的值應該是一個邏輯量:真邏輯表達式的值應該是一個邏輯量:真(1),假(,假(0). 但在但在判斷判斷一個量是否為真或為假時一個量是否為真或為假時, 即以非即以非0 0為真為真(包包括負值)括負值), 以以0 0值為假值為假. 這種表示方法法最先在這種表示方法法最先在C中使用,因為它使得編程顯中使用,因為它使得編程顯示特別方便。示特別方便。說明說明 : C語言在編譯時,給出語言在編譯時,給出邏輯運算結

45、果邏輯運算結果時時 (如如 關系表關系表 達式、邏輯表達式),如果是真,用數值達式、邏輯表達式),如果是真,用數值 1 表示表示 ; 是假用是假用 0 表示。表示。例:設例:設 a=4 , b=5 那么:那么: ! a 的值為的值為 0 (因為(因為a的值為非的值為非 0,認為是真),認為是真) a&b 的值為的值為 1 . a| |b 的值為的值為 1 . 4 & 0 | | 2 的值為的值為 1 (自左向右運算)(自左向右運算).可見可見: (1). 邏輯運算結果不是邏輯運算結果不是 0,就是,就是 1. (2). 參加邏輯運算的操作數可以是參加邏輯運算的操作數可以是1,0

46、(真真, 假假),也可是,也可是 整數,也可以是任何類型的數據。系統最終是以整數,也可以是任何類型的數據。系統最終是以: 0判斷為假,非判斷為假,非 0 判斷為真判斷為真.例例:求表達式的值:求表達式的值: : 5 53 & 2|83 & 2|84 4!0!0 4!0 即: 3 得:53 & 2|83 5 53 3 結果為結果為 1 1 ; 83 結果為結果為 0 得:1 & 2 | 0 1&2 1&2 結果為結果為 1 1 最后結果為最后結果為 1 注注: : 邏輯表達式求解自左向右邏輯表達式求解自左向右,且,且一旦知道結果一旦知道結果的真假的

47、真假 值,求值即停止。值,求值即停止。 例例. . 若設若設: 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) 熟練掌握關系運算符和邏輯運算符,可以巧妙地用一熟練掌握關系運算符和邏輯運算符,可以巧妙地用一個邏輯表達式來表示一個復雜的條件。個邏輯表達式來表示一個復雜的條

48、件。 例例:閏年的條件:閏年的條件: a. 能被能被4整除,但不能被整除,但不能被100整除整除 b. 能被能被400整除整除 設設 year為某一年份,為某一年份, year為閏年的表達式:為閏年的表達式:(year%4 =0&year%100!=0)|year%400=0) 當上述邏輯表達式為當上述邏輯表達式為 1 時,時,year這一年為閏年,這一年為閏年, 當為當為 0 時,時,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輸出符號輸出符號%時,時,需寫成:需寫成: . 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、當在通常用于格式控制符中,當在printfprintf中輸出符號中輸出符號% %時,需寫成:時,需寫成: 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); 說明:說明: 在編譯新程序前要關閉前一程序的在編譯新程序前要關閉前一程序的 工作空間工作空間 。 注意!注意!思考思考: 1. 寫出判斷寫出判斷x大于大于0并且小于并且小于10的表達式。的表達式。 2寫出判斷寫出判斷ch是大寫字母的的表達式。是大寫字母的的表

51、達式。 3寫出判斷寫出判斷ch是字母的表達式。是字母的表達式。 4寫出整型數寫出整型數a、b、c能構成一個三角形的表達式。能構成一個三角形的表達式。 2.5.4 位運算符位運算符 位運算符的運算對象為二進制數位運算符的運算對象為二進制數. 運算符運算符 含義含義 1. 按位取反按位取反 例:例: 1 結果結果 0 1010 結果結果 0101 2. & 按位與按位與 例:例: 1&1為為1; 1&0為為0 1100&1010 結果結果 10003. | 按位或按位或 例:例: 1|1 為為1 ; 1|0 為為1; 0|0為為0 . 1100 | 1010 結果結

52、果 1110 4. 按位異或按位異或 例:例: 11 為為0; 00為為0; 10為為1 . 1100&1010 結果結果 0110 5. 按位左移按位左移 例:例: 0010 按位右移按位右移 例:例: 0010 1 右移右移1位位 結果結果 0001例例2.4 從鍵盤輸入一個整型數,判斷此數轉化為二進從鍵盤輸入一個整型數,判斷此數轉化為二進制數后第制數后第2位是否為位是否為1。分析:分析: 假定此整數為假定此整數為12,轉化為二進制后為,轉化為二進制后為1100(你可以用你可以用windows中的計算器轉換中的計算器轉換). 判斷第判斷第2位是否為位是否為1,即此數只要與二進制數,

53、即此數只要與二進制數0100作作“與與”運算運算. 如結果不為如結果不為0,即可判斷此數的二進制數的第,即可判斷此數的二進制數的第2位不為位不為0.第第0位位#includeint main()int x,y;scanf(%d,&x);y= (x&4) != 0;printf(此數的二進制數的第此數的二進制數的第2位為位為:%dn,y); 請讀者自行調試,如程序運行時分別輸入請讀者自行調試,如程序運行時分別輸入7、8,輸出,輸出是什么?為什么?是什么?為什么?ch2_2_4.c輸入輸入12 (12) 1 1 0 0 ( 4 ) 0 1 0 0 例例: 執行下列程序段后執行下列程

54、序段后, a值為值為_:int a, b;a=15; b= -1;a= a+b&a; A) 15 B) 0 C ) 1 D) 16 例例:寫出下列程序段的輸出結果寫出下列程序段的輸出結果: float x1, x2; x1=3/2; x2=x1/2; printf(%d, %.1f, (int)x1, x2) ;C). 11, 0.53/2的值為的值為1 第第 2 章章 C 程程 序序 的的 基基 本本 構構 成成 結結 束束上機練習上機練習一、模仿例一、模仿例2.4從鍵盤輸入一個整型數,從從鍵盤輸入一個整型數,從0開始計數開始計數判斷此數轉化為二進制數后第判斷此數轉化為二進制數后第4

55、位是否為位是否為1。思考:思考:1int x=3,y=4,z; z=x&y; z=x|y; z=xy; z=xy;在這在這4種情況下,種情況下,z的值分別是多少?的值分別是多少? 2.6 編輯編輯C程序時應注意的問題程序時應注意的問題1. C程序中區分大小寫字母,書寫格式自由,一行內程序中區分大小寫字母,書寫格式自由,一行內可寫幾個語句。可寫幾個語句。 2.用用“;”作為語句的結束標記。作為語句的結束標記。3. 函數定義如:函數定義如:main()、()、 #include、#define PI 3.14159 不是語句,后面不能用不是語句,后面不能用“;”號。號。 注釋用符號注釋用符

56、號“*” 和和 “*”來界定,來界定,“”和和“*”之間不可以有空格。之間不可以有空格。4. 一個好的程序應該有詳細的注釋。一個好的程序應該有詳細的注釋。練習與實踐練習與實踐一、選擇題一、選擇題1( )是構成)是構成C語言程序的基本單位。語言程序的基本單位。(A)函數)函數 (B)過程)過程 (C)子程序)子程序 (D)文件)文件2在下述程序段中,(在下述程序段中,( )是錯誤的程序注釋方法(注:)是錯誤的程序注釋方法(注:本例多個選擇)。本例多個選擇)。(A) #in/*包含包含*/clude void main() printf(How are you?n); (B)#includevoi

57、d main() int i=3; /*整型數整型數*/(C)#include void main() int x/*初始化初始化*/=10; /*打印打印*/printf(%d,x); (D)#includevoid main() int x=10; printf(%d,x); /*打印打印x/*x=10*/的值的值*/ 3( )是)是C語言提供的合法的數據類型關鍵字。語言提供的合法的數據類型關鍵字。(A)Float (B)signed (C)integer (D)Char4以下選項中不合法的用戶標識符是(以下選項中不合法的用戶標識符是( )。)。(A)abc.c (B)file (C)Ma

58、in (D)PRINTF5合法的語言字符常數是(合法的語言字符常數是( )。)。(A)084 (B)A (C)ab (D)x436C語言中,要求運算數必須是整型的運算符是(語言中,要求運算數必須是整型的運算符是( )。)。(A)% (B) / (C) (D)!7以下選項以下選項中不正確的實型常量是(中不正確的實型常量是( )。)。(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設設a,b,c均定義為均定義為int型,且已賦于大于型,且已賦于大于1的數,能的數,能正確表達正

60、確表達1/(abc)的表達式是()的表達式是( )。)。(A) 1/a*b*c (B)1/(a*b*c) (C)1.0/a*b*c (D)1.0/a/b/c二、寫出表達式或程序的運行結果二、寫出表達式或程序的運行結果1以下程序輸出結果是(以下程序輸出結果是( )。)。#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; 執行完下列語句后執行完下列語句后: a

溫馨提示

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

評論

0/150

提交評論