譚浩強_C語言程序設計基礎教程課件_第1頁
譚浩強_C語言程序設計基礎教程課件_第2頁
譚浩強_C語言程序設計基礎教程課件_第3頁
譚浩強_C語言程序設計基礎教程課件_第4頁
譚浩強_C語言程序設計基礎教程課件_第5頁
已閱讀5頁,還剩287頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、第一章l主要內容主要內容1.1 1.1 計算機與程序、程序設計語言計算機與程序、程序設計語言1.2 1.2 語言出現的歷史背景語言出現的歷史背景1.3 1.3 語言的特點語言的特點1.4 1.4 簡單的簡單的C C語言程序語言程序1.5 1.5 運行程序的步驟和方法運行程序的步驟和方法 1.1計算機與程序、程序設計語言v計算機與程序:要讓計算機按照人們的愿望工作,必須由人們事先編制好程序,并輸入到計算機,讓計算機執行程序才能產生相應的操作結果。v程序設計語言:一個型號機器語言的指令的集合稱為該計算機的機器語言;用一些特定的“助記符號”代替0和1來表示指令的程序設計語言稱為匯編語言;接近于人們習

2、慣使用的自然語言(英文)和數學語言稱為“高級語言”。1.2 語言出現的歷史背景vC語言是國際上廣泛流行的高級語言。vC語言是在B語言的基礎上發展起來的。vB (BCPL)語言是1970年由美國貝爾實驗室設計的, 并用于編寫了第一個UNIX操作系統。優點:簡單,接近硬件,缺點:過于簡單,功能有限。 v1972年至1973年貝爾實驗室的D.M.Ritchie 在B語言的基礎上設計出了C語言,并用之改寫了原來用匯編編寫的UNIX。后來,C語言多次做了改進,但主要還是在貝爾實驗室使用。 1.2語言出現的歷史背景v1977年出現了可移植C語言編譯程序 ,推動了UNIX在各種機器上實現 ,C語言也迅速得到

3、推廣,其發展相輔相成。v1978年在Brian W.Kernighan和Dennis M.Ritchie 合著的影響深遠的名著The C Programming Language中介紹的C語言成為后來廣泛使用的C語言版本的基礎 ,被稱為標準C。v1978年以后,C語言先后移植到大、中、小、微型計算機上,風靡世界,成為最廣泛的幾種計算機語言之一。 1.2語言出現的歷史背景v1983年,美國國家標準化協會(ANSI)根據C語言各種版本對C的發展和擴充,制定了新的標準ANSI C ,比標準C有了很大的發展。v1987年,ANSI公布了新標準87 ANSI C。v1989年,ANSI又公布了一個新的C

4、語言標準C89v1990年,ISO接受C89作為國際標準通常稱為C90v1999年,ISO對C語言標準進行修訂,在基本保留原來的C語言特征的基礎上,增加了一些面向對象的特征,簡稱為 C99。 v目前流行的C語言編譯系統大多是以C89為基礎進行開發的。1.3 語言的特點(1)語言簡潔、緊湊,使用方便、靈活。 32個關鍵字、9種控制語句,程序形式自由(2)運算符豐富。34種運算符 (3)數據類型豐富,提供整型、浮點型、字符型、數組類型、指針類型、結構體類型、共用體類型等,能用來實現各種復雜的數據結構(如鏈表、樹、棧等)的運算。(4)C語言是完全模塊化和結構化的語言。 (5)語法限制不太嚴格,程序設

5、計自由度大。 1.3 語言的特點(6)允許直接訪問物理地址,可直接對硬件進行操作。兼有高級和低級語言的功能 。(7)目標代碼質量高,程序執行效率高。只比匯編程序生成的目標代碼效率低10-20%。(8)用C語言編寫的程序可移植性好。基本上不做修改就能用于各種型號的計算機和各種操作系統。 1.4 簡單的C語言程序例1.1#include void main( ) printf (This is a C program.n); /*文件包含*/*主函數 */*函數體開始*/*輸出語句*/*函數體結束*/ main-主函數名, void-函數類型v每個C程序必須有一個主函數mainv 是函數開始和結束

6、的標志,不可省v每個C語句以分號結束v使用標準庫函數時應在程序開頭一行寫: #include 說明:說明: 本程序的作用是輸出一行信息本程序的作用是輸出一行信息: :This is a C program.This is a C program.例1. 2 求兩數之和#include #include void main( ) void main( ) / /* *求兩數之和求兩數之和* */ / int a,b,sum; int a,b,sum; / /* *聲明,定義變量為整型聲明,定義變量為整型* */ / / /* *以下以下3 3行為行為C C語句語句 * */ / a=123; b

7、=456; a=123; b=456; sum=a+b; sum=a+b; printf(sum is %d printf(sum is %dn,sum);n,sum); /*/表示注釋。注釋只是給人看的,對編譯和運行不起作用。所以可以用漢字或英文字符表示,可以出現在一行中的最右側,也可以單獨成為一行。說明:說明: 輸出一行信息輸出一行信息:sum is 579:sum is 579例1.3 求2個數中較大者。#include #include void main( ) void main( ) / /* * 主函數主函數* */ / int max(int x,int y); int max

8、(int x,int y); / / 對被調用函數對被調用函數maxmax的聲明的聲明 * */ / int a, b, c; int a, b, c; / /* *定義變量定義變量a a、b b、c c * */ / scanf(scanf(d,d,d,&a,&b); d,&a,&b); / /* *輸入變量輸入變量a a和和b b的值的值* */ / c=max(a,b); c=max(a,b); / /* *調用調用maxmax函數函數, ,將得到的值賦給將得到的值賦給c c * */ / printf(max=printf(max=dn,c); dn,c); / /* *輸出輸出c c

9、的值的值* */ / v程序運行情況如下程序運行情況如下:v8,5 8,5 ( (輸入輸入8 8和和5 5賦給賦給a a和和b)b)vmax=8 (max=8 (輸出輸出c c的值的值) )int max(int x, int y) int z; if (xy) z=x; else z=y; return (z); max(int x, int y) max(max(a a, ,b b);); 本程序包括main和被調用函數max兩個函數。max函數的作用是將x和y中較大者的值賦給變量z。return語句將z的值返回給主調函數main。 1.4 簡單的C語言程序(1) C程序是由函數構成的。

10、這使得程序容易實現模塊化。 (2) 一個函數由兩部分組成: 函數的首部:例1.3中的max函數首部 int max(int x,int y ) 函數體:花括號內的部分。若一個函數有多個花括號,則最外層的一對花括號為函數體的范圍。 函數體包括兩部分 :聲明部分:int a,b,c; 可缺省執行部分:由若干個語句組成。可缺省1.4 簡單的C語言程序小結:小結:(3) C程序總是從main函數開始執行的,與main函數的位置無關。(4) C程序書寫格式自由,一行內可以寫幾個語句, 一個語句可以分寫在多行上,C程序沒有行號。(5) 每個語句和數據聲明的最后必須有一個分號。分號是C語句的必要組成部分。即

11、使是程序中最后一個語句也應包含分號 。 1.4 簡單的C語言程序小結:小結:(6) C語言本身沒有輸入輸出語句。輸入和輸出的操作是由庫函數scanf和printf等函數來完成的。C對輸入輸出實行“函數化”。(7) 可以用 /*/ 對C程序中的任何一行或數行做注釋。一個好的、有使用價值的源程序都應當加上必要的注釋,以增加程序的可讀性。 1.5 運行程序的步驟和方法1.5.1 運行程序的步驟上機輸入與編輯源程序對源程序進行編譯與庫函數連接運行目標程序 1.5 運行程序的步驟和方法1.5.2上機運行程序的方法l目前使用的大多數C編譯系統都是集成環境(IDE)的。可以用不同的編譯系統對C程序進行操作l

12、常用的有Turbo C 2.0、Turbo C+ 3.0、Visual C+6.0等 l前一段時間,Turbo C 2.0用得比較多,但Turbo C 2.0是用于DOS環境的,不能用鼠標進行操作,很不方便,所以今年來不少人改為用Turbo C+ 3.0或Visual C+ 6.0對C程序進行編譯 第二章l主要內容主要內容2.1 C2.1 C語言的數據類型語言的數據類型2.2 2.2 常量與變量常量與變量2.3 2.3 整型數據整型數據2.4 2.4 浮點型數據浮點型數據2.5 2.5 字符型數據字符型數據2.6 2.6 各類數值型數據間的混合運算各類數值型數據間的混合運算 2.7 2.7 算

13、術運算符和算術表達式算術運算符和算術表達式 2.8 2.8 逗號運算符和逗號表達式逗號運算符和逗號表達式 2.1 C的數據類型C語言提供了以下一些數據類型。 2.2 常量與變量 2.2.1 2.2.1 常量常量v在程序運行過程中,其值不能被改變的量稱為常量v常量區分為不同的類型:整型 100,125,-100,0實型 3.14 , 0.125,-3.789字符型 a, b,2符號常量符號常量為了使用方便,可用一個符號名來代表一個常量。例2.1在程序中使用符號常量 #define PRICE 30#define PRICE 30#include #include void main ( )voi

14、d main ( ) int num, total; int num, total; num=10; num=10; total=num total=num * * PRICE; PRICE; printf(total=%dn,total); printf(total=%dn,total); 用一個標識符代表一個常量。符號常量的值在其作用域內不能改變,也不能再被賦值。 運行結果:運行結果: total=300total=300 程序中用#define命令行定義PRICE代表常量30,此后凡在本文件中出現的PRICE都代表30,可以和常量一樣進行運算如再用賦值語句給PRICE賦值是錯的PRICE

15、=40;/* 錯誤,不能給符號常量賦不能對符號常量指定類型int PRICE; /* 錯誤,PRICE不是變量,不能指 定類型 */ 2.2 常量與變量 2.2.2 2.2.2變量變量v變量代表內存中具有特定屬性的一個存儲單元,它用來存放數據,也就是變量的值,在程序運行期間,這些值是可以改變的。v變量名實際上是一個以一個名字對應代表一個地址,在對程序編譯連接時由編譯系統給每一個變量名分配對應的內存地址。從變量中取值,實際上是通過變量名找到相應的內存地址,從該存儲單元中讀取數據。2.2 常量與變量 2.2.22.2.2標識符標識符v變量的名字必須符合C語言對標識符標識符的規定。v用來標識對象名字

16、(包括變量、函數、數組、類型等)的有效字符序列 。vC語言中,有3類標識符:關鍵字,系統預定義的標識符 ,用戶標識符。 C語言規定標識符只能由字母、數字和下劃線三種字符組成,且第一個字符必須為字母或下劃線。 2.2 常量與變量 變量命名的規定:變量的名字必須符合C語言對標示符得規定 例:例:sum,_total, month, Student_name, lotus_1_2_,BASIC, li_ling M.D.John, ¥123,3D64,ab 2.2 常量與變量v編譯系統將大寫字母和小寫字母認為是兩個不同的字符。 v建議變量名的長度最好不要超過8個字符。v在選擇變量名和其它標識符時,應

17、注意做到“見名知意”,即選有含意的英文單詞 (或其縮寫)作標識符。v要求對所有用到的變量作強制定義,也就是“先定義,后使用” 。 2.3 整型數據2.3.12.3.1整型常量的表示形式整型常量的表示形式 整型常量即整常數。在語言中,整常數可用以下三種形式表示:(1)十進制整數。 如:如:123, -456,4。(2)八進制整數。以0頭的數是八進制數。 如:如:0123表示八進制數123,等于十進制數83,-011表示八進制數-11,即十進制數-9。 2.3 整型數據2.3.12.3.1整型常量的表示形式整型常量的表示形式(3)十六進制整數。以0 x開頭的數是16進制數。 如:如:0 x123,

18、代表16進制數123,等于十進制數 291。 -0 x12等于十進制數10。 2.3.22.3.2整型變量整型變量v整型變量用來存放整數。整型變量的基本類型符為int。vC語言中有以下3類整型變量 :基本整型,短整型,長整型。 2.3 整型數據 2.3.2整型變量整型變量 ANSI C標準沒有具體規定以上各類數據所占內存的字節數而是由各計算機系統自行決定。 Turbo C中,int型和short型數據都是2個字節,即16個二進制位。long型數據是4個字節,32位。而VC+則給short型數據分配2個字節,16位,int和long型數據都是4個字節,32位 。 2.3 整型數據 2.3.2整型

19、變量整型變量一般情況下,存儲整數時存儲單元中的第一個二進位用來代表數值符號,而在實際應用中,變量的值常常是正的 ,所以存儲單元全部用來存儲數值本身,此定義無符號整數。所以歸納起來,在C語言中,可以定義和使用6種整型變量共六種共六種有符號基本整型有符號短整型有符號長整型無符號基本整型無符號短整型無符號長整型(signed)int (signed)short (int )(signed) long (int)unsigned intunsigned short (int)unsigned long (int) 注意:注意:括號表示其中的內容是可選的. 2.3 整型數據 2.3.2整型變量整型變量v

20、整數類型的有關數據:例2.2 整型變量的定義與使用#include #include void main()() int a,b,c,d; /*指定、為整指定、為整型變量型變量* unsigned ; *指定為無符號整型變量指定為無符號整型變量* 12;-24;10; ; printf(,);,); 可以看到不同種類的整型數據可以進行算術運算可以看到不同種類的整型數據可以進行算術運算 運行結果:運行結果: , 2.3 整型數據 2.3.3整型數據在內存中的存放形式整型數據在內存中的存放形式 數據在內存中以二進制形式存放。數據在內存中以二進制形式存放。 如如: : int i; /int i;

21、/* * 定義為整型變量定義為整型變量 * */ / i=10; / i=10; /* * 給給i i賦以整數賦以整數10 10 * */ / i i (a) (b)000000000000101010例2.3 整型數據的溢出#include #include void main()void main()int a,b; int a,b; a=32767; a=32767; b=a+1; b=a+1; printf(“%d,%dn”,a,b); printf(“%d,%dn”,a,b); 數值是以補碼表示的。一個整型變量只能容納數值是以補碼表示的。一個整型變量只能容納-32768-327683

22、276732767范圍內的數,無法表示大于范圍內的數,無法表示大于3276732767或小于或小于-32768-32768的數。遇此情況就的數。遇此情況就發生發生“溢出溢出”。運行結果:運行結果: 32767,-3276832767,-32768 如果系統給一個整型變量分配2個字節,則變量的最大允許值為32767,若超出最大職則出現溢出現象。 2.4 浮點型數據 2.4.12.4.1浮點型常量的表示形式浮點型常量的表示形式兩種表兩種表示形式示形式十進制小數十進制小數指數指數0.1230.1233 3e-3e-3注意注意: :字母字母e(e(或或E)E)之前必須有數字,且之前必須有數字,且e e

23、后面的指數必須為整數后面的指數必須為整數 2.4 浮點型數據 2.4.2 2.4.2 浮點型變量浮點型變量 1 1)浮點型變量分為單精度()浮點型變量分為單精度(floatfloat型)、雙精度(型)、雙精度(doubledouble型)和長雙精型)和長雙精度型(度型(long doublelong double)三類形式。)三類形式。 2.4 浮點型數據 2.4.2 2.4.2 浮點型變量浮點型變量 2)浮點型數據在內存中的存放形式:一個浮點型數據一般在內存中占4個字節(32位)。與整型數據的存儲方式不同,浮點型數據是按照指數形式存儲的。系統把一個浮點型數據分成小數部分和指數部分,分別存放。

24、指數部分采用規范化的指數形式。3)浮點型數據的舍入誤差:由于浮點型變量是由有限的存儲單元組成的,因此能提供的有效數字總是有限的。在有效位以外的數字將被舍去。由此可能會產生一些誤差例2.4 浮點型數據的舍入誤差#include #include void main()void main()float a,b;float a,b; a = 123456.789e5; a = 123456.789e5; b = a + 20 ; b = a + 20 ; printf(“%fn”,b); printf(“%fn”,b); 一個浮點型變量只能保證的有效數字是7位有效數字,后面的數字是無意義的,并不準確

25、地表示該數。應當避免將一個很大的數和一個很小的數直接相加或相減,否則就會“丟失”小的數運行結果:運行結果: 123456.789e5123456.789e5 2.4.2 2.4.2 浮點型變量浮點型變量.5 字符型數據 .5.1 字符常量(1)用單引號包含的一個字符是字符型常量(2)只能包含一個字符a a, ,A A, , 1 1abcabc、“a a” 2.5 字符型數據 .5.1 字符常量字符常量 有些以有些以“ ”開頭的特殊字符稱為轉義字符開頭的特殊字符稱為轉義字符 含含 義義 ASCII代碼代碼 換行,將當前位置移到下一行開頭換行,將當前位置移到下一行開頭 10 水平制表(跳到下一個水

26、平制表(跳到下一個Tab位置)位置) 9 退格,將當前位置移到前一列退格,將當前位置移到前一列 8 回車,將當前位置移到本行開頭回車,將當前位置移到本行開頭 13 換頁,將當前位置移到下頁開頭換頁,將當前位置移到下頁開頭 12 a 發出鈴聲發出鈴聲 7 代表一個反斜杠字符代表一個反斜杠字符“”92 代表一個單撇號字符代表一個單撇號字符 39 代表一個雙撇號字符代表一個雙撇號字符34 到位八進制數所代表的字符到位八進制數所代表的字符 到位十六進制數所代表的字符到位十六進制數所代表的字符 例2.5 轉義字符的使用#include #include void void ()() ( ab ct ab

27、 ct derftgnderftgn); ; printf(htibbj kn); printf(htibbj kn);v打印機上的顯示結果:打印機上的顯示結果: fab c gde h jikv顯示屏上的運行結果:顯示屏上的運行結果: f gde j k 2.5 字符型數據 2.5.22.5.2字符變量字符變量v字符型變量用來存放字符常量,注意只能放一個字字符型變量用來存放字符常量,注意只能放一個字符。符。v字符變量的定義形式如下:字符變量的定義形式如下:char c1,c2;char c1,c2;v在本函數中可以用下面語句對在本函數中可以用下面語句對c1,c2c1,c2賦值:賦值: c1c

28、1a a;c2c2 b b ;v一個字符變量在內存中占一個字節。一個字符變量在內存中占一個字節。 2.5 字符型數據 2.5.3 2.5.3 字符數據在內存中的存儲形式及其使用方法字符數據在內存中的存儲形式及其使用方法v一個字符常量存放到一個字符變量中,實際上并不是把該字符的字型放到一個字符常量存放到一個字符變量中,實際上并不是把該字符的字型放到內存中去,而是將該字符的相應的內存中去,而是將該字符的相應的ASCIIASCII代碼放到存儲單元中。這樣使字符代碼放到存儲單元中。這樣使字符型數據和整型數據之間可以通用型數據和整型數據之間可以通用。注意注意: : 一個字符數據既可以以字符形式輸一個字符

29、數據既可以以字符形式輸, ,也可以以整數形式輸出以字符也可以以整數形式輸出以字符形式輸出時形式輸出時, ,系統先將存儲單元中的系統先將存儲單元中的I I碼轉換成相應字碼轉換成相應字符,符, 然后輸出。然后輸出。 以整數形式輸出時,直接將碼作以整數形式輸出時,直接將碼作為整數輸出。也可以對字符數據進行算術運算,為整數輸出。也可以對字符數據進行算術運算, 此時相當于對此時相當于對它們的碼進行算術運算。它們的碼進行算術運算。 例2.6 向字符變量賦予整數。 #include #include void main()void main() char c1,c2; char c1,c2; c1=97;

30、c1=97; c2=98; c2=98; printf(“%c %cn”,c1,c2); printf(“%c %cn”,c1,c2); printf(“%d %dn”,c1,c2); printf(“%d %dn”,c1,c2); 在第在第4 4和第和第5 5行中,將整數行中,將整數9797和和9898分別賦給分別賦給c1c1和和c2c2,它的作用相當于,它的作用相當于以下兩個賦值語句:以下兩個賦值語句:c1c1;c2;c2; 因為因為aa和和bb的的ASCIIASCII碼為碼為9797和和9898v運行結果:運行結果: 97 9897 98例2.7 大小寫字母的轉換 #include #i

31、nclude void main()void main() char c1,c2 char c1,c2; c1=a;c1=a; c2=b; c2=b;c1=c1-32;c1=c1-32;c2=c2-32;c2=c2-32; printf(“ printf(“c c cc,c1,c2c1,c2);); 程序的作用是將兩個小寫字母程序的作用是將兩個小寫字母a a和和b b轉換成大寫字母轉換成大寫字母A A和和B B。從。從代碼表中可以看到每一個小寫字母比它相應的大寫字母代碼表中可以看到每一個小寫字母比它相應的大寫字母的的ASCIIASCII碼大碼大3232。語言允許字符數據與整數直接進行算術運算。

32、語言允許字符數據與整數直接進行算術運算。 v運行結果:運行結果: 2.5 字符型數據 2.5.3 字符數據在內存中的存儲形式及其使用方法字符數據在內存中的存儲形式及其使用方法 有些系統(如有些系統(如Turbo C,VC+Turbo C,VC+)將字符變量定義為)將字符變量定義為signed charsigned char型。其存儲單元中的最高位作為符號位,型。其存儲單元中的最高位作為符號位,它的取值范圍是它的取值范圍是-128-128127127。如果在字符變量中存放。如果在字符變量中存放一個一個ASCIIASCII碼為碼為0 0127127間的字符,由于字節中最高位間的字符,由于字節中最高

33、位為為0 0,因此用,因此用%d%d輸出字符變量時,輸出的是一個正整輸出字符變量時,輸出的是一個正整數。如果在字符變量中存放一個數。如果在字符變量中存放一個ASCIIASCII碼為碼為128128255255間的字符,由于在字節中最高位為間的字符,由于在字節中最高位為1 1,用,用%d%d格式符輸格式符輸出時,就會得到一個負整數。出時,就會得到一個負整數。 2.5 字符型數據 2.5.4 2.5.4 字符串常量字符串常量v字符串常量是一對雙撇號括起來的字符序列字符串常量是一對雙撇號括起來的字符序列. .v合法的字符串常量合法的字符串常量: :“How do you do.How do you

34、do.”, , “CHINACHINA”, “a a” , “$123.45$123.45”v可以輸出一個字符串,如可以輸出一個字符串,如printf(printf(“How do you do.How do you do.”) ); 2.5 字符型數據 2.5.4 字符串常量字符串常量 是字符常量, “a”是字符串常量,二者不同。 如:如:假設被指定為字符變量 :char c c= a; “a” ;c “CHINA”; 結論:結論:不能把一個字符串常量賦給一個字符變量。v規定:在每一個字符串常量的結尾加一個規定:在每一個字符串常量的結尾加一個 “字符字符串結束標志串結束標志”,以便系統據此判

35、斷字符串是否結束。,以便系統據此判斷字符串是否結束。規定以字符規定以字符作為字符串結束標志。作為字符串結束標志。 如:如:如果有一個字符串常量” ,實際上在內存中是:CHINA0 它占內存單元不是個字符,而是個字符,最后一個字符為。但在輸出時不輸出。 2.5 字符型數據 2.5.4 字符串常量字符串常量 2.6 各類數值型數據間的混合運算 混合運算:整型(包括int,short,long)、浮點型(包括float,double)可以混合運算。在進行運算時,不同類型的數據要先轉換成同一類型,然后進行運算.說明: 這種類型轉換是由系統自動進行的。 2.7 算術運算符和算術表達式 1. 1. 語言語

36、言的運算符有以下幾類:的運算符有以下幾類:算術運算符 (+ - * / %)關系運算符 (!)邏輯運算符 (!|)位運算符 ( |)賦值運算符 (及其擴展賦值運算符)條件運算符 (?:)逗號運算符 (,) 2.7 算術運算符和算術表達式 2.7.1 C語言運算符和語言運算符和C算術表達式簡介算術表達式簡介(8)指針運算符 (*和)(9)求字節數運算符()(10)強制類型轉換運算符( (類型) )(11)分量運算符(-)(12)下標運算符()(13)其他 (如函數調用運算符() 2.7 算術運算符和算術表達式 2.7.1 C語言運算符和語言運算符和C算術表達式簡介算術表達式簡介2. C語言的表達

37、式有以下幾類:語言的表達式有以下幾類:(1)算術表達式:如2+6.7*3.5+sin(0.5)(2)關系表達式:如x0,y0 & y0 (表示x0與y0同時成立,&是邏輯運算符,代表“與”)(4)賦值表達式:如a=5.6(5)逗號表達式:如a=3,y=4,z=8 2.7 算術運算符和算術表達式 1. 1. 基本的算術運算符基本的算術運算符: : (加法運算符,或正值運算符。如:、) (減法運算符,或負值運算符。如:、)* * (乘法運算符。如:*) (除法運算符。兩個整數相除的結果為整數兩個整數相除的結果為整數,如:結果為) (模運算符,或稱求余運算符,兩側均應為整型 數據,如:的值為)。 2

38、.7 算術運算符和算術表達式 2. 2. 算術表達式和運算符的優先級與結合性算術表達式和運算符的優先級與結合性 用算術運算符和括號將運算對象(也稱操作數)連接起來的、符合語法規則的式子,稱為算術表達式算術表達式。運算對象包括常量、變量、函數等。 例如例如: : *.5a 是一個合法的表達式v語言規定了運算符的優先級和結合性。 在表達式求值時,先按運算符的優先級別高低次序執行,例如先乘除后加減。 v規定了各種運算符的結合方向(結合性) 算術運算符的結合方向為“自左至右”,即先左后右 。 2.7 算術運算符和算術表達式 2.7 算術運算符和算術表達式 3. 3. 強制類型轉換運算符強制類型轉換運算

39、符 可以利用強制類型轉換運算符將一個表達式轉換成所需類型。 一般形式:(類型名)(表達式)說明: 表達式應該用括號括起來。 在強制類型轉換時,得到一個所需類型的中間變量,原來變量的類型未發生變化。例2.8 強制類型轉換。 #include #include void main()void main() float x;float x; int i; int i; x=3.6; x=3.6; i=(int)x; i=(int)x; printf(x=%f, printf(x=%f, i=%dn,x,i);i=%dn,x,i); 有兩種類型轉換,一種是在運算時不必用戶指定,系統自動進行的類型轉換,

40、如3+6.5。第二種是強制類型轉換。當自動類型轉換不能實現目的時,可以用強制類型轉換。v運行結果:運行結果: x3.600000, i=3 2.7 算術運算符和算術表達式 2.7.2 算術運算符和算術表達式 4. 4. 自增、自減運算符自增、自減運算符 作用是使變量的值增或減如如: v,(在使用之前,先使的值加 (減)v,(在使用之后,使的值加( 減) 2.7 算術運算符和算術表達式 2.7.2 算術運算符和算術表達式i+i+與與+i+i的區別:的區別: 是先執行后,再使用的值; 是先使用的值后,再執行。例如:例如: ; i的值先變成4, 再賦給,j的值為 ; 先將 i的值3賦給,的值為,然后

41、變為 2.7 算術運算符和算術表達式 2.7.2 算術運算符和算術表達式注意:注意: (1)自增運算符(),自減運算符(),只能用于變量,而不能用于常量或表達式, (2)和的結合方向是“自右至左”。 (3)自增(減)運算符常用于循環語句中使循環變 量自動加。也用于指針變量,使指針指向下一個地址。 (4)使用和時 ,為避免二義性,最好采取大家都能理解的寫法,可以加一些“不必要”的括號,如(i+)+j。 2.8 逗號運算符和逗號表達式逗號運算符逗號運算符: :將兩個表達式連接起來,又稱為“順序求值運算符”。 如:如:5, 一般形式一般形式: : 表達式,表達式表達式,表達式求解過程:求解過程: 先

42、求解表達式,再求解表達式。整個逗號表達式的值是表達式的值。 逗號表達式 的值為14 2.8 逗號運算符和逗號表達式例:例:逗號表達式*5,* 分析分析: :賦值運算符的優先級別高于逗號運算符, 因此應先求解*5。的值為5,然后求解*,得。整個逗號表達式的值為。 一個逗號表達式又可以與另一個表達式組一個逗號表達式又可以與另一個表達式組成一個新的逗號表達式。成一個新的逗號表達式。 如如: :(*,*),a+5 先計算出的值等于,再進行*的運算得60(但值未變,仍為15),再進行得,即整個表達式的值為。 2.8 逗號運算符和逗號表達式 逗號表達式的一般形式可以擴展為 表達式,表達式,表達式,表達式,

43、表達式,表達式,表達式,表達式 它的值為表達式的值。 逗號運算符是所有運算符中級別最低的例例: : (,*) ,*3賦值表達式,將一個逗號表達式的值賦給,的值等于 逗號表達式,包括一個賦值表達式和一個算術表達式,的值為,整個逗號表達式的值為18。 2.8 逗號運算符和逗號表達式注意注意: :并不是任何地方出現的逗號都是作為逗號運算符。例如函數參數也是用逗號來間隔的。 如如: printf(“%d,%d,%d”,a,b,c);“,”并不是一個逗號表達式,它是printf函數的3個參數printf(“%d,%d,%d”,(a,b,c),b,c) “(,)”是一個逗號表達式,它的值等于的值。 第三章

44、l 主要內容主要內容3.1 3.1 程序的三種基本結構程序的三種基本結構3.2 C3.2 C語句概述語句概述3.3 3.3 賦值表達式和賦值語句賦值表達式和賦值語句3.4 3.4 數據輸入輸出的概念及在數據輸入輸出的概念及在C C語言中的實現語言中的實現3.5 3.5 字符數據的輸入輸出字符數據的輸入輸出3.6 3.6 簡單的格式輸入與輸出簡單的格式輸入與輸出3.7 3.7 較復雜的輸入輸出格式控制較復雜的輸入輸出格式控制3.8 3.8 順序結構程序設計舉例順序結構程序設計舉例3.1 程序的三種基本結構v一個良好的程序由以下三種基本結構組成: (1) 順序結構:各操作步驟順序執行,是一種最簡單

45、的基本結構。 3.2 C語句概述C程序源程序文件1源程序文件2預處理命令數據聲明函數1函數首部函數體數據聲明執行語句函數n源程序文件nC程序的結構:程序的結構: 3.2 C語句概述 v一個c程序可以有若干個源程序文件組成v一個源文件可以有若干個函數和預處理命令以及全局變量聲明部分組成v一個函數有函數首部和函數體組成v函數體由數據聲明和執行語句組成vC語句分為5類類控制語句控制語句函數調用語句函數調用語句表達式語句表達式語句空語句空語句復合語句復合語句 3.2 C語句概述 (一)控制語句 完成一定的控制功能 1 if() else 條件條件語句語句 6 break 中止語句中止語句 2 for(

46、) 循環循環語句語句 7 switch() 多分支選擇語句多分支選擇語句 3 while()循環循環語句語句 8 return 返回語句返回語句 4 do while();循環循環語句語句 9 goto 轉向語句轉向語句 5 continue 結束本次循環語句結束本次循環語句 3.2 C語句概述 (二)函數調用語句 由一個函數調用加一個分號構成 Printf(“This is a C statement.”); 3.2 C語句概述 (三)表達式語句 由一個表達式加一個分號構成 a = 3 ;分號賦值表達式表達式語句 3.2 C語句概述 (四)空語句 只有一個分號的語句 (什么也不做)(什么也不

47、做)v用來做流程的轉向點用來做流程的轉向點v用來作為循環語句中的循環體用來作為循環語句中的循環體 3.2 C語句概述 (五)復合語句 用一對括起來的語句 z=x+y;t=z/100;printf(“%f”,t);注意:注意:復合語句中最后一個語句中最后的分號不能忽略不寫。復合語句中最后一個語句中最后的分號不能忽略不寫。 3.3 賦值表達式和賦值語句 3.3.1 賦值表達式1.1.賦值運算符賦值運算符 賦值符號“”就是賦值運算符,它的作用是將一個數據賦給一個變量。 賦值語句是由賦值表達式加上一個分號構成例:例: “a=3” 把常量賦把常量賦給變量給變量 也可以將一個表達式的值賦給一個變量 3.3

48、 賦值表達式和賦值語句 3.3.1 賦值表達式. .復合的賦值運算符復合的賦值運算符 在賦值符“”之前加上其他運算符,可以構成復合的運算符。例:例: 等價于 先計算加,再賦給 3.3 賦值表達式和賦值語句 3.3.1 賦值表達式v可以這樣理解: a += b (a += b (其中其中a a為變量,為變量,b b為表達式為表達式) )a + = ba + = b(將有下劃線的(將有下劃線的“a+a+”移到移到“= =”右側)右側) | | a = a + b a = a + b(在(在“= =”左側補上變量名左側補上變量名a a) 3.3 賦值表達式和賦值語句 3.3.1 賦值表達式v如果是包

49、含若干項的表達式,則相當于它有括號。例:例: x %= y + 3 x %= (y + 3) |_ x = x %(y + 3) (不要錯寫成(不要錯寫成 x = x % y + 3 ) 3.3 賦值表達式和賦值語句 3.3.1 賦值表達式v凡是二元(二目)運算符,都可以與賦值符一起組合成復合賦值符。有關算術運箅的復合賦值運算符有:,*, v語言采用這種復合運算符,一是為了簡化程序,使程序精練,二是為了提高編譯效率,能產生質量較高的目標代碼。 3.3 賦值表達式和賦值語句 3.3.1 賦值表達式3.3.賦值表達式賦值表達式 由賦值運算符將一個變量和一個表達式連接起來的式子。v一般形式為:變量變

50、量 賦值運算符賦值運算符 表達式表達式v賦值表達式的求解過程:先求賦值運算符右側的先求賦值運算符右側的“表達式表達式”的值,然后賦給賦值運算符左側的變量。的值,然后賦給賦值運算符左側的變量。v賦值運算符左側的標識符稱為“左值” v出現在賦值運算符右側的表達式稱為“右值” v注意:注意:并不是任何對象都可以作為左值的,表達式和常變量就不能作為左值。任何左值并不是任何對象都可以作為左值的,表達式和常變量就不能作為左值。任何左值都可做右值。都可做右值。 3.3 賦值表達式和賦值語句 3.3.1 賦值表達式 說明:賦值運算符按照“自右而左”的結合順序,因此,“a=(b=5)”和“a=b=5”等價 v賦

51、值表達式中的“表達式”,又可以是一個賦值表達式。 例:例:a=(b=5) 相當于執行相當于執行“b=5”和和“ab”兩兩 個賦值表達式個賦值表達式 3.3 賦值表達式和賦值語句 3.3.1 賦值表達式 分析賦值表達式: (a=3*5)=4*3 賦值表達式為左值右值先執行括號內的運算,將15賦給a,然后執行4*3的運算,得12,再把12賦給a。最后a的值為12,整個表達式的值為12。 賦值表達式作為左值時應加括號 3.3 賦值表達式和賦值語句 3.3.1 賦值表達式 求解步驟如下求解步驟如下: : 先進行先進行“* *”的運算,的運算, 它相當于它相當于: : * *,a a的值為的值為1441

52、44132132。 再進行再進行“”的運算,相當于的運算,相當于: : =a+(-132)=a+(-132),a a的值為的值為132-132132-132-264-264。v賦值表達式也可以包含復合的賦值運算符。 3.3 賦值表達式和賦值語句 3.3.1 賦值表達式v賦值表達式作為表達式的一種,不僅可以出現在賦值語句中,而且可以以表達式形式出現在其他語句(如輸出語句、循環語句等)中 。printf(%d,a=b); 3.3 賦值表達式和賦值語句 3.3.2 賦值過程中的類型轉換v如果賦值運算符兩側的類型一致,則直接進行賦值。i=6 (假設i已定義為int型)v如果賦值運算符兩側的類型不一致,

53、但都是數值型或字符型時,在賦值時要進行類型轉換。類型轉換是系統自動進行的。 3.3 賦值表達式和賦值語句 3.3.2 賦值過程中的類型轉換v轉換規則轉換規則: 將浮點型數據(包括單、雙精度)賦給整型變量時,先對浮點數取為整,然后賦予整型變量。 將整型數據賦給單、雙精度變量時,數值不變,但以浮點數形式存儲到變量中。 將一個double型數據賦給float變量時,截取其前面7位有效數字,存放到float變量的存儲單元(4個字節)中。但應注意數值范圍不能溢出;將一個float型數據賦給double變量時,數值不變,有效位數擴展到16位,在內存中以8個字節存儲。 v轉換規則轉換規則:字符型數據賦給整型

54、變量時,將字符的ASCII碼賦給整型變量。將一個占字節多的整型數據賦給一個占字節少的整型變量/字符變量時,只將其低字節原封不動地送到該變量 i=289 c=33將有符號整數賦值給長度相同的無符號整型變量時,按字節原樣賦值。0 0 0 0 0 0 0 10 0 1 0 0 0 0 1 0 0 1 0 0 0 0 1例3.1有符號整數賦值給無符號整型變量,數據會失真。 #include void main ( ) unsigned a; /* 定義定義a為無符號整型變量為無符號整型變量 */ int b; /* 定義定義b為有符號整型變量為有符號整型變量 */ b=-1; b a=b; a pri

55、ntf(%un,a); 運行結果:運行結果:4294967295 由于a是無符號整型變量,因此不能用%d輸出格式符,而要用輸出無符號數的“%u”格式符。1 1 11 11 11 11 11 11 111 1 11 11 11 11 11 11 11例:3.2 無符號整數賦值給有符號整型變量,注意數值范圍。#include void main ( ) unsigned a; int b; a=65535; /* 兩個字節兩個字節16位全為位全為1 */ b=a; /* b的數值范圍為的數值范圍為-3276832767 */ printf(%dn,b);運行結果運行結果 -1 執行“b=a”時,將

56、a的兩個字節(全1)賦給b,由于是有符號的整型數,笫1個二進位是1表示此數是一個負數,16位全1是-1的補碼。轉換規則:轉換規則:將無符號整數賦值給長度相同的有符號整型變量時,應將無符號整數賦值給長度相同的有符號整型變量時,應注意不要超出有符號整型變量的數值范圍,否則會出錯。注意不要超出有符號整型變量的數值范圍,否則會出錯。 3.3 賦值表達式和賦值語句 3.3.3 賦值語句v賦值語句是由賦值表達式加上一個分號構成。 v賦值表達式的作用是將一個表達式的值賦給一個變量。v賦值表達式具有計算和賦值雙重功能。程序中的計算功能主要是由賦值語句來完成。v語言的賦值語句與其他高級語言的賦值語句之間的差異:

57、 (1) 語言中的賦值號“”是一個運算符,在其他大多數語言中賦值號不是運算符。 (2) 要區別賦值表達式和賦值語句。其他多數高級語言沒有“賦值表達式”這一概念。 3.3 賦值表達式和賦值語句 3.3.4 變量賦初值v程序中對變量賦初值的方法有兩種在定義變量的同時使變量初始化(更方便)int a=3; * 指定為整型變量,初值為 *float f=3.56; * 為浮點型變量,初值.56 *char c=a; * 指定為字符變量,初值為a *用賦值語句對變量賦值 int a; * 指定為整型變量*; * 賦值語句,將賦給*3.4 數據輸入輸出的概念 及在C語言中的實現(一).所謂輸入輸出是以計算

58、機主機為主體而言的輸出輸出:從計算機向外部輸出設備(顯示器,打印機) 輸出數據輸入輸入:從輸入設備(鍵盤,鼠標,掃描儀)向計算機 輸入數據.(二).C語言本身不提供輸入輸出語句,輸入和輸出操作是由C函數庫中的函數來實現的例如例如: :字符輸入函數: getchar字符輸出函數:putchar格式輸入函數: scanf 格式輸出函數: printf字符串輸入函數:gets 字數穿輸出函數:puts 3.4 數據輸入輸出的概念 及在C語言中的實現(三).在使用系統庫函數時,要用預編譯命令“#include”將有關的“頭文件”包括到用戶源文件中。例如:在調用標準輸入輸出庫函數時,文件開頭應該有: #

59、include “stdio.h” 或: #include 頭文件 3.4 數據輸入輸出的概念 及在C語言中的實現3.5 字符數據的輸入輸出3.5.1 用putchar函數輸出一個字符 vputchar函數(字符輸出函數)的作用是向終端輸出一個字符。v一般形式為 putchar(c) 可以是字符型變量或整型變量 例3.3 輸出單個字符。#include#includevoid main()void main() char a,b,c;char a,b,c;a=B;b=O;c=Y;a=B;b=O;c=Y;putchar(a);putchar(b);putchar(c);putcharputcha

60、r(a);putchar(b);putchar(c);putchar(n);(n); 運行結果:BOYputchar(a);putchar(n);putchar(b);putchar(n);putchar(c);putchar(n);運行結果:B O Y3.5 字符數據的輸入輸出3.5.2 用getchar函數輸入一個字符 vgetchar函數(字符輸入函數)的作用是從計算機終端輸入一個字符。 vgetchar函數沒有參數,一般形式為 getchar()函數的值就是從輸入設備得到的字符 例3.4 輸入單個字符。#include#includevoid main()void main() cha

溫馨提示

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

評論

0/150

提交評論