C語言高級語言程序設計(一)PPT教學課件-第二章 數據類型與表達式.ppt_第1頁
C語言高級語言程序設計(一)PPT教學課件-第二章 數據類型與表達式.ppt_第2頁
C語言高級語言程序設計(一)PPT教學課件-第二章 數據類型與表達式.ppt_第3頁
C語言高級語言程序設計(一)PPT教學課件-第二章 數據類型與表達式.ppt_第4頁
C語言高級語言程序設計(一)PPT教學課件-第二章 數據類型與表達式.ppt_第5頁
已閱讀5頁,還剩41頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

數據類型與表達式,第2章,本 章 內 容,1. c語言的數據類型 2. 常量和變量 3. 整型數據 4. 實型數據 5. 字符型數據 6. 系統函數 7. c運算符概述 8. 算術運算符 9. 關系運算符和邏輯運算符 10. 位運算符與長度運算符 11. 賦值運算符和賦值表達式 12. 逗號運算符和逗號表達式 13. 運算符的優先級與表達式的分類,2.1 c語言的數據類型,數據類型是一個值的集合和定義在這個值集上的一組操作的總稱。 數據類型明顯或隱含地規定了在程序執行期間變量或表達式所有可能的取值范圍,以及在這些值上允許進行的操作。 c語言的各種數據類型:,2.2 常量和變量,常量和符號常量 1常量 在程序運行過程中,其值不能被改變的量稱為常量,又叫常數。 常量區分為不同的類型,如100,0,-8為整型常量,25.32,0.142為實型常量,a,b是字符型常量。 常量不需要事先定義,只在程序中需要的地方直接寫出即可。常量的類型也不需要事先說明,它們的類型是由書寫方式自動默認的。 2符號常量 用一個符號(標識符)代表一個常量,例如: #define maxnum 1000 #define true 1 #define false 0 符號常量的定義格式如下: #define 符號常量 常量,2.2 常量和變量,標識符與變量 1標識符 在c 語言中,標識符是對變量、符號常量、函數、數組、文件等用戶定義對象的命名。 標識符可以是一個或多個字符。標識符的第一個字符必須是英文字母或下畫線,隨后的字符必須是字母、數字或下畫線。不能以數字打頭。 下面是一些正確或錯誤標識符命名的示例。 正確標識符 錯誤標識符 weight 2x length a|#b color2 red!color save _$123,2.2 常量和變量,2變量 在程序運行過程中,其值可以改變的量稱為變量。 在c語言中,要求對所有用到的變量 “先定義,后使用”。 例如:定義兩個整型變量a、b和三個實型變量x、y、z。 int a,b; float x,y,z; c語言有五種基本數據類型:字符型、整型、實型、雙精度實型、 和空類型。定義這五種類型的變量時須使用的類型說明符分別為 char、int、float、double和void。,2.3 整型數據,整型常量 1不同進制數的使用 十進制整數的表示與通常在算術中的表示一樣,例如:321,+321。 八進制整數必須以數字0開頭,例如:0123表示(123)8。 十六進制整數必須以0x開頭,例如0x123 表示(123)16。,2.3 整型數據,整型變量 1整型數據在內存中的存放形式 在計算機中,數是用二進制表示的,把一個數連同其符號在計算機中加以數值化,這樣的數稱為機器數,機器數可以用不同的碼制(原碼、補碼)表示。 2整型變量的分類 根據數值的范圍將整型變量分為以下六種類型: 有符號基本整型:signed int。 有符號短整型:signed short int。 有符號長整型:signed long int。 無符號基本整型:unsigned int。 無符號短整型:unsigned short int。 無符號長整型:unsigned long int。,2.3 整型數據,ansi標準定義的整數類型,2.3 整型數據,3.不同類型的整型常量賦值給整形變量 整型變量可分為int、short int、long int、unsigned int、unsigned short、unsigned long等類別,將整型常量賦值給上述類別的整型變量時如何做到類型匹配? 一個整型常數,若值在-32768+32767范圍內,可將它賦值給int型和long int型變量。 一個整型常數,若值在-2147483648+2147483647范圍內,可以賦值給一個long int型變量。 常量無unsigned型。但一個非負值的整數可以賦值給unsigned int型變量,只要它的范圍在065535范圍內。 在一個整常數后面加一個小寫字母l或大寫字母l,則認為是long型常量。例如,-123l、123l、0l、0775l、0x9el等。,2.3 整型數據,3. 整型變量的定義 對變量的定義,一般是放在一個函數的開頭的聲明部分。 【例2-1】 main() int a; unsigned int b; long c; unsigned long d; a=-100; b=60000; c=-2123456789; d=4123456789; printf(“a=%d,b=%u,c=%ld,d=%lu“,a,b,c,d); 運行結果為 a=-100,b=60000,c=-2123456789,d=4123456789,2.4 實型數據,實型常量的表示方法 實型常數也稱為浮點數,在c語言中實型常數只使用十進制數表示,它的書寫方式有兩種: 小數形式。它是由整數、小數點、小數三部分組成,最多只能省略其中的整數或小數部分,但不能二者都省略,也不能省略小數點。例如:123.,-.123,1.23,-1.23,12.0,0.,.0,0.0都是合法的十進制小數形式。 指數形式。它是由尾數、字母e或e、指數三部分組成。尾數可以是一個十進制小數形式,也可以是一個整數形式, 如123e-3或123e-3都代表12310-3的值。 注意:字母e(或e)之前必須有數字,且后面指數必須為整數,如-0.32e-2,2e4,-.23e-2,.0e3,0.e-5,0e0等都是合法的指數形式,而e-5,.e2,12.3e5.4卻是非法的指數形式。,2.4 實型數據,實型變量 1實型數據在內存中的存放形式 實型數據是按指數形式存儲的。系統把一個實型數據分成尾數部分和指數部分分別存放。實型數據在內存中小數點位置不是固定的,或者說是浮動的,故這種表示法稱為浮點表示法。 2實型變量的定義 對每一個實型變量都應在使用前加以定義。如 float x,y; 3實型數據的舍入誤差 由于實型變量是由有限的存儲單元組成的,因此能提供的有效數字總是有限的。在有效范圍以外的數字將被舍去。由此可能會產生一些誤差。請分析下面的程序:,【例2-3】分析實型數據的舍入誤差。 main() float a; a=12345.6789; printf(“n%f“,a); printf(“n%e“,a); 在turbo c中程序運行結果為: 12345.678711 1.234568e+002,2.4 實型數據,雙精度型數據 1雙精度常數 雙精度常數的書寫方式與實型常數的書寫方式相同,有十進制小數形式和指數形式兩種,比實型數據的范圍廣、精度高。 2雙精度數據在內存中的表示形式 ansi并未具體規定每種類型數據的長度、精度和數值范圍。 微機上常用的c編譯系統(如turbo c、ms c、borland c)實型數據: 3雙精度變量的定義 雙精度類型標識符double前還可加修飾符long,long double 比double型的精度更高,表示的數值范圍更大。,2.5 字符型數據,字符常量 字符常量是用單引號()括起來的單個字符。例如a、!、#、a、* 等。 除字符常量外,將“”開頭的特定字符串稱為“轉義字符”,意思是將反斜杠后面的字符串轉換成另外的意義。,2.5 字符型數據,【例2-4】下面程序中使用了幾種轉義字符。 main() printf(“abxbcdtefghtijkln“); printf(“xxxxxxxxrmnoptqrstuvwxn“); ,程序運行時在顯示屏上得到以下結果: abcd efgh ijkl mnop qrst uvwx,2.5 字符型數據,字符變量 字符變量用來存放字符常量,一個字符變量只能放一個字符。 字符變量的定義形式: char 變量名表列; 例如: char c1,c2; c1=a; c2=b; c語言編譯系統規定用一個字節來存放一個字符,將一個字符常量賦值給一個變量,實際上是將該字符的ascii代碼放到存儲單元中。,【例2-5】將字符數據以不同的方式輸出。 main() char c1,c2; c1=a; c2=b; printf(“%c,%cn“,c1,c2); printf(“%d,%d“,c1,c2); ,a,b 65,66,【例2-6】大小寫字母的轉換。 main() char c1,c2,c3,c4; c1=a; c2=b; c3=c1+32; c4=c2+32; printf(“%c,%c“,c3,c4); ,a,b,2.5 字符型數據,字符串常量 定義:字符串就是用兩個雙引號(“)括起來的若干個字符。 例如,“china“、“88383872“、“aj200“ 存儲:每個字符串尾自動加一個 0 作為字符串結束標志 例如:字 符串“china”在內存中 字符串的長度:字符串中所有字符的個數,其中每個轉義字符當作一個字符。 例如,字符串“china”,、“abcd“、“101102x43x44”的長度分別為5、4、6、4。 字符常量與字符串常量不同,沒有字符串變量,用字符數組存放,2.6 系統函數,簡例 【例2-7】假設根據自變量x不同的值求下式的值: x7+sinx-log10(x+3) 在c語言中可使用以下程序: #include main() float x,y; scanf(“%f“, ,2.6 系統函數,函數:是可以被調用的一段程序。 庫函數:軟件開發商編寫了很多標準函數,作為運算符的補充,供用戶調用,稱之為庫函數或系統函數。 庫函數存儲在擴展名為.lib的文件中。 按庫函數類劃分為:數學函數、字符函數、字符串函數、輸入輸出函數、動態存儲分配函數等。其聲明分別包含在math.h、ctype.h、string.h、stdio.h和stdlib.h等文件中。如果程序需要調用這些庫函數,就要在源程序文件中使用文件包含命令: #include 或 #include“文件名“ 輸入輸出函數scanf()和printf()也是庫函數,稱為標準輸入輸出函數,它們的聲明包含在文件stdio.h中。由于turbo c允許使用標準輸入輸出函數的時候省略頭文件,所以上述例子中我們未使用#include。,常用數學函數,2.7 c運算符概述,c的運算符有以下幾種: 算術運算符:(+、-、*、/、%),自加自減運算符(+、-)。 類型轉換運算符((類型符))。 關系運算符(、=、=、!=)。 邏輯運算符(!、&、|)。 條件運算符(? :)。 位運算符:移位運算符(),位邏輯運算符(、&、|、)。 求字節數運算符(sizeof)。 賦值運算符:基本賦值運算符(=),算術自反賦值運算符(+=、-=、*=、/=、%=),位自反賦值運算符(=、&=、|=、=)。 逗號運算符(,)。 指針運算符(*、&)。 下標運算符( )。 分量運算符(.、-)。,2.8 算術運算符,算術表達式和運算符的優先級與結合性 算術表達式:用算術運算符和括號將運算對象連起來的、符合c語言規則的式子。 例如:合法的算術表達式:a+b*(y/(-3)+x*x-pow(c,3)+15%6 不合法的算術表達式:a*/5+3,x(y+4),a/b%3.5 運算符的優先級和結合性:先按運算符的優先級別高低次序執行。如果優先級別相同,則按規定的“結合方向”處理。 各種運算符的結合方向: 算術運算符中的二元運算的結合方向為“自左至右”。 例如:9/2*3%7:先執行“/”,再執行“*”,最后執行“%”。 算術運算符中的單目運算符+、-的結合方向為“自右至左” 。 例如:-+-5等價于-(+(-5)。,可以適當使用小括號“()”來改變表達式的優先級和結合性。,2.8 算術運算符,自加、自減運算符 使變量的值加一或減一。 前綴形式:+i, -i 先改變i的值,再使用i的值。 后綴形式:i+,i- 先使用i的值,再改變i的值。 相當于:i = i + 1 i = i 1 例如: int i=3,j,k; j=i+; k=+i; printf(“%d,%d,%d“,i,j,k);,2.8 算術運算符,說明: +和-運算符只能用于變量,不能用于常量或表達式。 分析:(a + b)+ ? +和-的結合方向是“自右至左“。 例如:-x+ 相當于-(x+),2.8 算術運算符,類型轉換運算符及類型轉換 類型轉換運算符 一般形式:(類型名)(表達式) 例 (int)(x+y) (int)x+y (double)(3/2) (int)3.6 說明:強制轉換得到所需類型的中間變量,原變量類型不變,2.8 算術運算符,類型轉換 當表達式中出現不同類型的操作數時,要按一定的規則將其轉換為相同的類型。遵循以下轉換規則: 【例2-8】設a是整型變量,其值為2,c是字符變量,其值為a,x是實型變量,其值為1.5,則表達式: x+c*a/10-3/2,橫向朝左的箭頭表示必定的轉換。 縱向箭頭表示當運算對象為不同類型時轉換的方向。低級類型轉換為高級類型。 轉換是由系統自動進行。,2.9 關系運算符和邏輯運算符,關系運算符,2.9 關系運算符和邏輯運算符,在比較時注意以下規則: 如果兩個操作數是數值型,則按其大小比較。 如果兩個操作數是字符型,則按字符的ascii碼值進行比較,即ascii碼值大的字符大。 表中前四種運算符優先級相同,后兩種優先級相同。前四種的優先級高于后兩種。關系運算符具有自左至右的結合性。 關系運算符的優先級低于算術運算符。 例 當a的值為2時,一個表達式的運算次序及結果如圖2-2所示。,2.9 關系運算符和邏輯運算符,邏輯運算符 c語言中提供了三種邏輯運算符: 單目邏輯運算符:!(邏輯“非”)。 雙目邏輯運算符:&(邏輯“與”)。 雙目邏輯運算符:|(邏輯“或”)。,表2-7 邏輯運算的真值表,2.9 關系運算符和邏輯運算符,例 a=4.5,b=5.0,c=2.5,d=3.0,2.9 關系運算符和邏輯運算符,條件運算符 條件運算符是c語言中唯一的三目運算符,一般格式為 表達式1? 表達式2 :表達式3 【例2-9】將大寫字母轉換為小寫字母,可編如下程序實現。 main() char ch; scanf(“%c“, ,2.10 位運算符與長度運算符,原碼、反碼和補碼 當真值 x=+xn-2xn-3x0時,它的原碼、反碼和補碼完全相同, x原=x反=x補=0xn-2xn-3x0 當真值x=-xn-2xn-3x0時,它的原碼、反碼和補碼與x的關系: 其中 表示xi取反,即,n位,2.10 位運算符與長度運算符,【例2-10】假設某計算機的字長為16位,試寫出二進制數+100010和-100010的原碼、反碼和補碼。 解:x=+000000000100010 y=-000000000100010 x對應的機器數如下:x原=x反=x補=0000000000100010 真值y為負,則有 y原=1000000000100010 y反=1111111111011101 y補=1111111111011110 【例2-11】已知x補=1111111111110010,求真值x。 解:由x補求出x反,則得 x反=1111111111110010-1=1111111111110001 x原=1000000000001110 x原對應的符號位為1,故其對應的真值為負,且數值位與原碼各位相同,即有 x=(-000000000001110)2=14,2.10 位運算符與長度運算符,移位運算符 1左移位運算符 e1n 例如: x=-32767,手工計算x2的步驟如下: 第一步:x原=1111111111111111 第二步:x反=1000000000000000 第三步:x補=1000000000000001 第四步:將x補左移位兩次得 0000000000000100 第五步:將上式看作結果數所對應的補碼,求原碼。由于符號位為0,其原碼還等于補碼。 第六步:由原碼得到真值為4,這正是x2的運算結果。 一般來說,一個整數左移一位,其結果相當于這個整數乘以2(數值溢出時例外)。 例如: -21 的值為-4。,2.10 位運算符與長度運算符,2右移位運算符 e1n 注意: 對無符號數,右移時,左邊高位移入0。 對于有符號的值,如果原來符號位為0(該數為正),則左邊也是移入0;如果符號位原來為1(該數為負),則左邊移入0還是1,要取決于所用的計算機系統。有的系統移入0,有的系統移入1。turbo c及多數c編譯系統是移入1,即保持數的正負性不變。 一般來說,一個整數右移1位,其結果相當于這個整數除以2。 例如: 142,相當于14連續兩次除以2并取整,即其值為3。,2.10 位運算符與長度運算符,位邏輯運算符 1按位取反運算符 以int型數據為例,若a的值為2,則 a補=0000000000000010 按位取反得 1111111111111101 上式對應的原碼為 1000000000000011 從而知(a)的值為-3。 2按位與運算符& 按位與運算符&的作用是對兩個操作數按位求邏輯與。,2.10 位運算符與長度運算符,3按位或運算符| 按位或運算符|的作用是對兩個操作數按位求邏輯或。 4按位異或運算符 按位異或運算符使參加運算的兩個數按位求異或,即當兩個二進位相異則結果為1,相同則結果為0。,2.10 位運算符與長度運算符,求長度運算符sizeof sizeof(類型符或變量名) 運算結果為操作數對應的類型在內存中所占用的字節數。 例如:在微機上,int型的長度為2,float型的長度為4,所以sizeof(int)的值為2,sizeof(float)的值為4。 假設n為int型變量,x為float型變量,則 sizeof(n)=2,sizeof(x)=4。 注意:運算對象必須用圓括號括住。,2.11 賦值運算符和賦值表達式,賦值運算符和賦值表達式 例如:a=2+5 類型轉換問題 如果賦值運算符兩側的類型不一致,但都是數值型或字符型時,在賦值時會自動進行類型轉換。 算術自反賦值運算符 在賦值符“=”之前加上二元算術運算符+、-、*、/、%,可以構成算術自反賦值運算符。例如,a+=3相當于a=a+3。 【例2-12】整型變量n1的值為10,則: n1+=2運算后,n1的值為12,表達式的值也為12。 n1-=2運算后,n1的值為8,表達式的值也為8。 n1*=2運算后,n1的值為20,表達式的值也為20。 n1/=2運算后,n1的值為5,表達式的值也為5。 n1%=2運算后,n1的值為0,表達式的值也為0。,2.11 賦值運算符和賦值表達式,

溫馨提示

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

評論

0/150

提交評論