




已閱讀5頁,還剩43頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
數(shù)據(jù)類型、運算符與表達式,西南財經(jīng)大學經(jīng)濟信息工程學院 劉家芬 ,C語言大學實用教程,例2.1 第一個C程序,#include void main( ) printf (“This is a program. n”); ,編譯預處理命令 導入stdio.h:標準輸入輸出頭文件,C程序的主函數(shù),每個C程序有且僅有一個主函數(shù),void表示主函數(shù)不返回任何值。,是stdio.h中定義的標準輸出函數(shù),用于在屏幕上顯示。,( )中就是需要輸出的內(nèi)容,將用“ ”引起來的字符串原樣顯示在屏幕上即可,n是一個特殊的字符,稱為轉義字符。用于控制光標移動到下一行,例2.2 第二個C程序,#include void main() int a,b,sum; a=123; b=456; sum=a+b; printf(“sum is %dn“,sum); ,編譯預處理命令 導入stdio.h:標準輸入輸出頭文件,C程序的主函數(shù),每個C程序有且僅有一個主函數(shù),void表示主函數(shù)不返回任何值。,定義了三個變量,名字分別是a,b,sum.這三個變量都是int型。,給變量a賦值123,實際上就是向該內(nèi)存單元放入值123;給變量b賦值456.,變量sum的值是變量a的值加上變量b的值;,調(diào)用stdio.h中的printf函數(shù),在屏幕上顯示計算結果。首先原樣輸出sum is,后面的%d是格式控制符,表示“以十進制整數(shù)形式輸出”變量sum的值,例2.3 第三個C程序,#include void main() int max (int x,int y); int a,b,c; scanf(“%d,%d“, ,聲明后面的語句中將使用一個用戶自定義的函數(shù)max,該函數(shù)使用兩個整型參數(shù),并且返回一個整型值,使用stdio.h中定義的標準庫函數(shù)scanf,從鍵盤讀取兩個十進制整數(shù),分別賦值給a和b,以a和b作為參數(shù)調(diào)用用戶自定義函數(shù)max,并且將該函數(shù)的返回值賦給變量c,使用stdio.h中定義的標準輸出庫函數(shù)pintf,這里是函數(shù)max的定義部分,該函數(shù)使用兩個整型參數(shù)x和y,作用是找出x和y中較大的值并返回給主程序,C程序的特點,函數(shù)是程序的基本單位 主函數(shù) 用戶自定義函數(shù) 系統(tǒng)提供的庫函數(shù) 函數(shù)由函數(shù)頭和函數(shù)體組成 函數(shù)頭包括返回值類型、函數(shù)名、形式參數(shù)列表 函數(shù)體 由語句;組成,常量(Constant),程序運行過程中保持固定值的數(shù)據(jù),根據(jù)類型分為: 整型常量 如5,程序2中的123,456 實型常量 如4.6,-1.23,1e-4 字符常量 如5, c, /n 字符串常量 如“5”和程序1中的“This is a program.” 符號常量(宏常量) #define PI=3.1415926 枚舉常量 enum enum responseyes,no; enum response answer; answer=yes;,變量(Variable),在程序執(zhí)行過程中值會發(fā)生改變的量 變量名代表著內(nèi)存中的一個存儲單元,里面存放的就是變量的值。 怎么給變量起名字呢? 標識符的命名規(guī)則 由英文字母、數(shù)字和下劃線組成,只能以字母和下劃線開頭。不允許使用關鍵字作為標識符的名字 。 區(qū)分大小寫 除了變量名外,符號常量、自定義函數(shù)、數(shù)組等的名字也都是標識符, 簡單地說,標識符就是用戶在程序中起的一個名字。,123,456,我的名字叫a,我的名字叫b,變量使用的原則,使用變量的基本原則先定義,后使用 編譯時確定該變量所占用的內(nèi)存單元的大小 編譯時進行合法性檢查 例如%求余運算要求兩個操作數(shù)均為int型。 一條定義語句可定義若干個同類型的變量,以逗號分隔 定義后沒有賦初值的變量,其值為隨機數(shù) 例2中先定義,然后再賦初值 int a,b,sum; a=123; b=456; 也可以在定義的同時初始化 char esc = a; int i = 1;,數(shù)據(jù)的類型,數(shù)據(jù)為什么要區(qū)分類型? 不同類型的數(shù)據(jù)代表不同的 數(shù)據(jù)表示形式 合法的取值范圍 占用內(nèi)存空間大小 可參與的運算種類 常用數(shù)據(jù)類型有整型、浮點型、字符型等,整型數(shù)據(jù)之整型常量,十進制整數(shù) 18、-31 八進制整數(shù) 以0開頭,數(shù)取0-7 如022,-037,注意區(qū)分022和22的值 十六進制整數(shù) 以0x開頭,數(shù)取0-F或者0-f 0x12, -0x1f 整型常量的后綴 無后綴為基本整型 L或者l,表示long長型,占用比基本整型更長的存儲單元,如 123占用兩個字節(jié),123l、123L占用4個字節(jié),但數(shù)值一樣。 U或者u,表示unsigned無符號 ,只能表示正數(shù),涉及最高位的意義。,0XA5Lu,整型數(shù)據(jù)之整型變量,數(shù)據(jù)在內(nèi)存中以二進制的補碼形式存放。 正數(shù)的補碼和原碼相同。 負數(shù)的補碼:將該數(shù)絕對值的二進制形式,按位取反再加1。 例:求-10的補碼 10的原碼 取反 再加1 就得到了-10的補碼,-10,整型變量的分類,根據(jù)所占內(nèi)存大小 基本型:類型說明符為int,占2個字節(jié)。 短整型:類型說明符為short int或short。完全等同于基本型。 長整型:類型說明符為long int或long,在內(nèi)存中占4個字節(jié)。 根據(jù)是否有正負符號 有符號,修飾符signed。默認為signed,可省略不寫 無符號,修飾符unsigned 兩種分類方法交叉組合成六種整型變量,signed VS unsigned,signed與unsigned型的區(qū)別: signed的最高位代表符號,0為正,1為負 unsigned的最高位也代表數(shù)值 以基本整型int為例,signed int和unsigned int都是占用兩個字節(jié),但表示范圍不同。 有符號整型量signed int ,最大表示 =32767 無符號整型量unsigned int =65535,整型變量的取值范圍,如果超出了該變量的取值范圍,會出現(xiàn)什么情況呢?,溢出!,例2.4 溢出舉例,#include void main() int i, j, m, n; i=32767; j=i+1; m=-32768; n=m-1; printf(“i=%d, j=%dn“,i,j); printf(“m=%d, n=%dn“,m,n); ,溢出(Overflow),C語言直接提供的任何類型都有取值范圍。當向其賦超過此范圍的數(shù)值,就會產(chǎn)生數(shù)值溢出,得到一個不正確的結果。 int 型數(shù)32767在內(nèi)存中的表示方法: 加1 補碼解釋為-32768 如何避免類似的錯誤?,typeoverflow.c,浮點型數(shù)據(jù)之浮點型常量,浮點數(shù)就是實數(shù),有兩種表示形式 十進制小數(shù)形式 0.0、25.0、5.789、0.13、5.0、300.、-267.8230必須有小數(shù)點 指數(shù)形式 如2.1e5、- 2.8E-2等。E之前必須有數(shù)字,并且指數(shù)部分為整數(shù)。 例:123.456可以表示為: 123.456e0, 12.3456e1, 1.23456e2, 0.123456e3, 0.0123456e4 后綴為“f”或“F”表示該數(shù)為單精度浮點數(shù) 365是浮點數(shù)嗎? 365.是浮點數(shù)嗎? 365.00是浮點數(shù)嗎? 365f是浮點數(shù)嗎?,浮點型數(shù)據(jù)的存放,浮點型數(shù)據(jù)在內(nèi)存中以指數(shù)形式存放 N=S2j,所占位數(shù)決定 實數(shù)的取值范圍,所占位數(shù)決定 實數(shù)的精度,例2.5關于實數(shù)的輸出,#include main() float f=123.456; printf(“f in decimal: %fn“,f); printf(“f in exponent: %en“,f); ,浮點型變量的分類,單精度(float型) 占用4個字節(jié),有效數(shù)字7位 雙精度(double型) 占用8個字節(jié),有效數(shù)字16位 長雙精度(long double型) 占用16個字節(jié),較少使用 什么是有效數(shù)字? 回顧例2.5的執(zhí)行結果 注意:浮點型常量都作為雙精度來處理,例 2.6 float型的有效位數(shù),#include “stdio.h“ main() float a; double b; a = 123456.789e4; b = 123456.789e4; printf(“%fn%fn“, a, b); ,float型中通常用位來存放以二進制表示的尾數(shù)部分。將一個較大的十進制小數(shù)轉化成二進制,通常都會超出位的長度,所以在內(nèi)存中存放時會舍去后面的小數(shù)。之后讀取時,按照二進制到十進制的轉換規(guī)則,輸出的就不再是之前賦予的值了。,字符型數(shù)據(jù)之字符常量,字符常量是用單引號括起來的一個字符。 如a,A,5,%,$等 轉義字符是一種特殊的字符常量。 轉義字符以反斜線開頭,后跟一個或幾個字符。 轉義字符具有特定的含義,不同于字符原有的意義,故稱“轉義”字符。,常見轉義字符,101表示?,字符型數(shù)據(jù)之字符變量,字符變量 代表內(nèi)存中的一個存儲單元,長度為一個字節(jié),用來存放一個字符 char c1,c2; c1=A; c2=a;,字符型數(shù)據(jù)在內(nèi)存中的形式,字符型數(shù)據(jù)是以其ASCII碼值的形式存放在內(nèi)存單元之中的。 char c1,c2; c1=A; c2=a; 字符型數(shù)據(jù)可以作為取值范圍0-255間的整型數(shù)據(jù)處理。,0100 0001,C1,0110 0001,C2,%c,%d,A,65,%c,%d,a,97,例2.7 字符型數(shù)據(jù)的處理,#include void main() char c1,c2; c1=97; c2=98; printf(“%c,%cn“,c1,c2); printf(“%d,%dn“,c1,c2); 字符型數(shù)據(jù)可以以其ASCII碼值參與算術運算; 字符型數(shù)據(jù)可以與整型數(shù)據(jù)互相賦值; 例如int i=a; char c=97;,字符串(String)常量,字符串常量是由一對雙引號括起的字符序列。 例如: “CHINA“ , “ C program “ , “$12.5“ 等都是合法的字符串常量。 字符常量和字符串常量的區(qū)別: 字符常量由單引號括起來,字符串常量由雙引號括起來。 字符常量只能是單個字符,字符串常量則可以包含一個或多個字符。 字符常量只占一個字節(jié)的內(nèi)存空間。字符串常量占的內(nèi)存字節(jié)數(shù)等于字符串中字符數(shù)加1,增加的一個字節(jié)用于存放字符“0” (ASCII碼為0),也就是字符串結束標志。 區(qū)別5,5, “5“ 注意:字符串結束標志是由系統(tǒng)自動添加的。,不同類型間的轉換,自動轉換 不同類型的數(shù)據(jù)混合運算時,編譯系統(tǒng)自動完成類型轉換。若參與運算量的類型不同,則先轉換成同一類型,然后進行運算。如10+a+1.5 轉換按數(shù)據(jù)長度增加的方向進行,以保證精度不降低。 所有的浮點運算都是以雙精度進行的,即使僅含float單精度量運算的表達式,也要先轉換成double型再運算。 char型和short型參與運算時,必須先轉換成int型 在賦值運算中,賦值號兩邊量的數(shù)據(jù)類型不同時,賦值號右邊量的類型將轉換為左邊量的類型。如果右邊量的數(shù)據(jù)類型長度比左邊長時,將丟失一部分數(shù)據(jù),這樣會降低精度,丟失的部分按四舍五入向前舍入。,轉換規(guī)則,1. 橫向的箭頭表示必定的轉換,例如float型數(shù)據(jù)在進行計算時,即使兩個數(shù)都是float型,也要先轉換成double型才行。這樣做是為了提高精度。 2. 縱向箭頭標明了數(shù)據(jù)類型級別的高低,由低向高進行轉換。例如int型和double型運算,首先int型數(shù)據(jù)要轉換成double型,然后再運算。,強制轉換,通過類型轉換運算來實現(xiàn),其一般形式為: (類型說明符) (表達式) 其功能是把表達式的運算結果強制轉換成類型說明符所表示的類型。 例如: (float) a 把a轉換為實型 (int)(x+y) 把x+y的結果轉換為整型 注意:無論是強制轉換或是自動轉換,都只是運算的需要而對變量的數(shù)據(jù)長度進行的臨時性轉換,而不改變該變量的類型,例2.8 強制類型轉換,#include main() int m = 5; printf(“m/2=%dn“, m/2); printf(“(float)(m/2)=%fn“,(float)(m/2); printf(“(float)m/2 = %fn“, (float)m/2); printf(“m = %dn“, m); ,m/2 = 2 (float)(m/2) = 2.000000 (float)m/2 = 2.500000 m = 5,運算符,算術運算符:用于各類數(shù)值運算。包括加(+)、減(-)、乘(*)、除(/)、求余(或稱模運算,%)、自增(+)、自減(-)共七種。 關系運算符:用于比較運算。包括大于()、小于(=)、小于等于()六種。 賦值運算符:用于賦值運算,分為簡單賦值(=)、復合算術賦值(+=,-=,*=,/=,%=)和復合位運算賦值(&=,|=,=,=,=)三類共十一種。 條件運算符:這是一個三目運算符,用于條件求值(?:)。 逗號運算符:用于把若干表達式組合成一個表達式(,)。 指針運算符:用于取內(nèi)容(*)和取地址(&)二種運算。 求字節(jié)數(shù)運算符:用于計算數(shù)據(jù)類型所占的字節(jié)數(shù)(sizeof)。 特殊運算符:有括號(),下標等幾種。,運算符的優(yōu)先級與結合性,運算符的優(yōu)先級:在表達式中,優(yōu)先級較高的先于優(yōu)先級較低的進行運算。而在一個運算量兩側的運算符優(yōu)先級相同時,則按運算符的結合性所規(guī)定的結合方向處理。 運算符的結合性:語言中各運算符的結合性分為兩種 左結合性(自左至右)和 右結合性(自右至左)。 C語言中多數(shù)運算符為左結合,例如表達式x-y+z。 C中滿足右結合的運算符 單目運算符 賦值運算符 條件運算符,運算符的優(yōu)先級,1. ( ) - . 2. ! + - + - * & (類型) sizeof 3. * / % 4. + - 5. 6. = 7. = != 8. & 9. 10. | 11. & 12. | 13. ? : 14. = += -= *= /= %= &= = |= = 15. , 用括號來控制運算順序更直觀、方便,并減少出錯的概率,算術運算符,+,-,*,/,%,-(取反) 兩整數(shù)相除結果仍為整數(shù) 求余運算的操作數(shù)必須為整數(shù),余數(shù)符號與被除數(shù)相同 算術表達式 用算術運算符將運算對象連接起來的式子 復雜的算術表達式經(jīng)常需要用到math.h中提供的標準數(shù)學函數(shù) P34注意事項,常用的標準數(shù)學函數(shù),自增和自減運算符,n+,n-,+n,-n +讓參與運算的變量加1,-讓參與運算的變量減1 作為后綴運算符時,先用n的原值參與運算,然后n的值加/減1 作為前綴運算符時,先對n的值進行加/減,然后用n的現(xiàn)值參與運算 int i=8; printf(“%dn“,+i); 9 printf(“%dn“,-i); 8 printf(“%dn“,i+); 8 printf(“%dn“,i-); 9 printf(“%dn“,-i+); -8 printf(“%dn”,-i-); -9 自增自減運算符的運算對象只能是變量,不能是表達式例如(a+b)+ 、 (-i)+都是錯誤的,關系運算符,,=,b且bc? 關系表達式abc的值為真嗎?,邏輯運算符,邏輯運算也被稱為布爾(Boolean)運算 與運算& a & b當且僅當兩者都為真,則結果為真 ( a b & b c) a大于b,并且b大于c 或運算| a | b只要兩者中有一個為真,結果就為真 ( a b | b c) a大于b,或者b大于c 求反! ( !a ) 如果a是0,結果非0;如果a是非0,結果是0 并不改變a的值,實例,ch是英文大寫字母 (ch = A) & (ch = Z) 判斷某一年year是否是閏年的條件是滿足下列兩個條件之一: 能被4整除,但不能被100整除; 能被400整除; (year % 4 = 0) & (year % 100 != 0) | (year % 400 = 0),賦值運算符,賦值表達式 變量名=表達式,計算右邊表達式的值并將其賦給左邊的變量。 左側不允許表達式,只能是標識一個存儲單元的變量. 判斷a+b=c,x=x+1是否為合法的賦值表達式? 賦值運算符優(yōu)先級低于算術運算符、關系運算符和邏輯運算符。 滿足右結合性。賦值表達式的值等于運算完成后左操作數(shù)的值 a=b=c=5 等價于a=(b=(c=5) 賦值表達式將自動進行類型轉換,復合賦值運算符,復合賦值表達式 變量 二元運算符 = 表達式 等價于 變量 = 變量 二元運算符 表達式 a += 5 等價于a=a+5 x *= y+7 等價于x=x*(y+7) r %= p 等價于r=r%p 算術運算符+、-、*、/、%和位運算符、&、|運算符都可進行復合賦值運算。,位操作運算符,&按位與運算 |按位或運算 按位異或運算,按位右移運算 按位求反,見書本P41頁,例2.9 邏輯運算與位運算,#include void mai
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 四年級語文上冊第2單元走月亮教學設計北師大版
- 電氣儲存式散熱器企業(yè)數(shù)字化轉型與智慧升級戰(zhàn)略研究報告
- 電子記錄儀企業(yè)ESG實踐與創(chuàng)新戰(zhàn)略研究報告
- 復印和膠版印制設備企業(yè)ESG實踐與創(chuàng)新戰(zhàn)略研究報告
- 糖汁濃縮設備企業(yè)數(shù)字化轉型與智慧升級戰(zhàn)略研究報告
- 精密鈑金企業(yè)縣域市場拓展與下沉戰(zhàn)略研究報告
- 成卷機企業(yè)數(shù)字化轉型與智慧升級戰(zhàn)略研究報告
- 離合器式螺旋壓力機企業(yè)縣域市場拓展與下沉戰(zhàn)略研究報告
- 智能煤氣表企業(yè)數(shù)字化轉型與智慧升級戰(zhàn)略研究報告
- 管道式氣動調(diào)節(jié)閥企業(yè)縣域市場拓展與下沉戰(zhàn)略研究報告
- 2024河北高考地理真題卷解析 課件
- 城市道路日常養(yǎng)護作業(yè)服務投標文件(技術方案)
- 《當前國際安全形勢》課件
- 3.1 貫徹新發(fā)展理念 課件-高中政治統(tǒng)編版必修二經(jīng)濟與社會
- 《互換性復習》課件
- 《光伏系統(tǒng)設計培訓》課件
- 設備的運行動態(tài)管理制度(4篇)
- 抖店仲裁申請書模板
- 借款利率協(xié)議
- 雞球蟲課件(共32張課件)《動物疫病防治》
- 2024年第三屆職業(yè)技能競賽(井下作業(yè)工賽項)理論考試題庫(含答案)
評論
0/150
提交評論