c語言第2章數(shù)據(jù)類型運(yùn)算符和表達(dá)式.ppt
《c語言第2章數(shù)據(jù)類型運(yùn)算符和表達(dá)式.ppt》由會(huì)員分享,可在線閱讀,更多相關(guān)《c語言第2章數(shù)據(jù)類型運(yùn)算符和表達(dá)式.ppt(65頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
第2章 數(shù)據(jù)類型、運(yùn)算符與表達(dá)式,林淑玲 lin.sl@,C語言,知識(shí)目標(biāo):掌握C語言的數(shù)據(jù)類型;深刻理解常量與變量;深刻理解整型、實(shí)型和字符型數(shù)據(jù)常量和變量的表示方法;掌握賦值運(yùn)算符和賦值表達(dá)式、變量的賦值方法;理解各種數(shù)據(jù)類型之間的混合運(yùn)算。 能力目標(biāo):能正確定義“班級(jí)學(xué)生成績管理系統(tǒng)”中的相關(guān)數(shù)據(jù)的類型。,第2章 數(shù)據(jù)類型、運(yùn)算符與表達(dá)式,內(nèi)容提要,基本數(shù)據(jù)類型; 常量和變量; 標(biāo)識(shí)符命名; 常用運(yùn)算符和表達(dá)式; 運(yùn)算符的優(yōu)先級(jí)與結(jié)合性,一個(gè)簡單的C程序例子,#include /*函數(shù)功能:計(jì)算兩個(gè)整數(shù)相加之和 入口參數(shù):整型數(shù)據(jù)a和b 返回值: 整型數(shù)a和b之和 */ int Add(int a, int b) { return (a + b); } /*主函數(shù)*/ main() { int x, y, sum = 0; printf(“Input two integers:“); scanf(“%d%d“, /*輸出x和y相加之和*/ },簡單的C語言程序總結(jié),總結(jié)C程序: (1) C程序是由函數(shù)構(gòu)成的。 這使得程序容易實(shí)現(xiàn)模塊化。 (2) 一個(gè)函數(shù)由兩部分組成: 函數(shù)的首部:例2.1中的Add函數(shù)首部 int Add(int a, int b) 函數(shù)體:花括號(hào)內(nèi)的部分。若一個(gè)函數(shù)有多個(gè)花括號(hào),則最外層的一對(duì)花括號(hào)為函數(shù)體的范圍。 函數(shù)體包括兩部分 : 聲明部分: int x, y, sum = 0;可缺省 執(zhí)行部分:由若干個(gè)語句組成??扇笔?簡單的C語言程序總結(jié),(3) C程序是由函數(shù)構(gòu)成的??偸菑膍ain函數(shù)開始執(zhí)行的,與main函數(shù)的位置無關(guān)。 (4) C程序書寫格式自由,一行內(nèi)可以寫幾個(gè)語句, 一個(gè)語句可以分寫在多行上,C程序沒有行號(hào)。 (5) 每個(gè)語句和數(shù)據(jù)聲明的最后必須有一個(gè)分號(hào)。 (6) C語言本身沒有輸入輸出語句。輸入和輸出的操作是由庫函數(shù)scanf和printf等函數(shù)來完成的。 (7)可以用/*… …*/進(jìn)行注釋。,C源程序的結(jié)構(gòu)特點(diǎn),1.一個(gè)C語言源程序可以由一個(gè)或多個(gè)源文件組成。 2.每個(gè)源文件可由一個(gè)或多個(gè)函數(shù)組成。 3.一個(gè)源程序不論由多少個(gè)文件組成,都有一個(gè)且只能有一個(gè)main函數(shù),即主函數(shù)。 4.源程序中可以有預(yù)處理命令(include 命令僅為其中的一種),預(yù)處理命令通常應(yīng)放在源文件或源程序的最前面。 5.每一個(gè)說明,每一個(gè)語句都必須以分號(hào)結(jié)尾。但預(yù)處理命令,函數(shù)頭和花括號(hào)“}”之后不能加分號(hào)。 6.標(biāo)識(shí)符,關(guān)鍵字之間必須至少加一個(gè)空格以示間隔。若已有明顯的間隔符,也可不再加空格來間隔。 7.C語言程序中可加任意多的注釋。通常情況下,“//”注釋一行,“/* … */”注釋中間的所有內(nèi)容。注釋不參加編譯,因此不進(jìn)行錯(cuò)誤查找處理。 8.用戶定義的變量或函數(shù)等其他的量必須先定義后使用。,書寫程序時(shí)應(yīng)遵循的規(guī)則,C語言程序書寫中應(yīng)當(dāng)注意的問題 (1) 用分號(hào)作為語句的結(jié)束符,不可省略(即便是最后一個(gè)語句也不能省略)。 3種不能加分號(hào)的情況:預(yù)處理命令后、定義函數(shù)名稱(函數(shù)頭)后、花括號(hào)(})之后。 (2) 第一行是預(yù)處理命令行,其中的指令必須以符號(hào)“#”開始,所指定的頭文件也必須用引號(hào)或尖括號(hào)標(biāo)識(shí)。 例如,#include “stdio.h“ 或 #include 。 (3) 主函數(shù)main()后的括號(hào)不能缺省。,書寫程序時(shí)應(yīng)遵循的規(guī)則,編碼風(fēng)格 1)源程序通常使用小寫字母,只有符號(hào)常量或其他特殊用途的符號(hào)才大寫。 2)C語言可以一個(gè)語句占一行,也可多個(gè)語句占一行。但后者不規(guī)范,所以并不提倡。 3)程序代碼采用縮進(jìn)格式。 4)建議同一層次的語句應(yīng)左對(duì)齊。 5)用花括號(hào)對(duì)({})表示各個(gè)結(jié)構(gòu)層次的范圍。它可以表示函數(shù),也可以表示循環(huán)體等,書寫程序時(shí)應(yīng)遵循的規(guī)則,6)一個(gè)語句中不同成分之間應(yīng)使用空格隔開。標(biāo)識(shí)符、關(guān)鍵字之間必須至少加一個(gè)空格以示間隔。若已有明顯的間隔符,也可以不再加空格來間隔。 7)程序中的空白行不影響程序的執(zhí)行。可以為使程序清晰而添加空行,但不要在一個(gè)語句中間加空行。 8)建議使用注釋語句,以增加程序的可讀性。 9)程序塊的分界符(即花括號(hào)“{”和“}”)應(yīng)各獨(dú)占一行并且位于同一列,同時(shí)與引用它們的語句左對(duì)齊。,C程序常見符號(hào)分類,關(guān)鍵字(Keyword) 又稱為保留字,C語言中預(yù)先規(guī)定的具有固定含義的一些單詞 標(biāo)識(shí)符(Identifier) 系統(tǒng)預(yù)定義標(biāo)識(shí)符 用戶自定義標(biāo)識(shí)符 運(yùn)算符(Operator) 34種,詳見附錄2 分隔符(Separator) 空格、回車/換行、逗號(hào)等 其它符號(hào) 大花括號(hào)“{”和“}”通常用于標(biāo)識(shí)函數(shù)體或者一個(gè)語句塊 “/*”和“*/”是程序注釋所需的定界符 數(shù)據(jù)(Data) 變量(Variable) 常量(Constant),任務(wù)1 “學(xué)生成績管理系統(tǒng)”中相關(guān)數(shù)據(jù)設(shè)計(jì),1任務(wù)情境 “學(xué)生成績管理系統(tǒng)”中的數(shù)據(jù)有常量與變量、簡單類型數(shù)據(jù)和復(fù)雜類型數(shù)據(jù)。這些變量有簡單類型變量,還有一些復(fù)雜類型變量,如數(shù)組、結(jié)構(gòu)體、共用體、指針類型等變量。 在這里我們只對(duì)“學(xué)生成績管理系統(tǒng)”中的數(shù)據(jù)做一些簡單的分析?!皩W(xué)生成績管理系統(tǒng)”中的學(xué)生信息主要有:學(xué)號(hào)、性別、年齡、三門功課成績、總成績和平均成績,再加上一些與計(jì)算全班成績有關(guān)的最高成績、最低成績等。如學(xué)號(hào)、性別這類數(shù)據(jù)只是起到描述一些基本信息的作用,通常情況下不進(jìn)行算術(shù)運(yùn)算;而年齡、三門功課成績、總成績和平均成績以及最高成績、最低成績等這類數(shù)據(jù)有可能進(jìn)行算術(shù)運(yùn)算。所以針對(duì)這二類數(shù)據(jù)我們?cè)诙x數(shù)據(jù)類型時(shí),要根據(jù)實(shí)際情況選擇不同的數(shù)據(jù)類型。 下面我們通過相關(guān)理論的學(xué)習(xí),掌握如何將“學(xué)生成績管理系統(tǒng)”中的數(shù)據(jù)定義成C語言能夠處理的數(shù)據(jù)。,2知識(shí)必備,數(shù)據(jù)類型 常量 變量,數(shù)據(jù)類型(Data Type),數(shù)據(jù)為什么要區(qū)分類型? 不同類型的數(shù)據(jù)代表不同的 數(shù)據(jù)表示形式 合法的取值范圍 占用內(nèi)存空間大小 可參與的運(yùn)算種類 從基本數(shù)據(jù)類型到抽象數(shù)據(jù)類型 無數(shù)據(jù)類型 基本數(shù)據(jù)類型 構(gòu)造數(shù)據(jù)類型 抽象數(shù)據(jù)類型,數(shù)據(jù)類型(Data Type),標(biāo)識(shí)符命名,變量名 函數(shù)名 由英文字母、數(shù)字和下劃線組成,大小寫敏感 不可以是數(shù)字開頭 直觀,見名知意,便于記憶和閱讀 最好使用英文單詞或其組合 切忌使用漢語拼音 下劃線和大小寫通常用來增強(qiáng)可讀性 variablename variable_name VariableName, variableName 不允許使用關(guān)鍵字作為標(biāo)識(shí)符的名字 int, float, for, while, if等 某些功能的變量采用習(xí)慣命名 如:for語句所采用的循環(huán)變量習(xí)慣用i, j, k,,,,,Windows 風(fēng)格,UNIX 風(fēng)格,b, B, KB, MB, GB, TB,Megabyte(MB),中文叫法:兆 Kilobyte(KB),中文叫法: K Byte,中文叫法:字節(jié) bit,中文叫法:位 Gigabyte(GB),中文叫法:G Terabyte(TB),中文叫法:T,1 TB == 1,024 GB,1 GB == 1,024 MB,1 MB == 1,024 KB,1 KB == 1,024 B,1 B == 8 b,b, B, KB, MB, GB, TB,一個(gè)位有多大? 只能是“0”或者“1”,這叫二進(jìn)制 一個(gè)字節(jié)有多大? 保存一個(gè)字符(英文字母、數(shù)字、符號(hào)) ASCII(美國標(biāo)準(zhǔn)信息交換碼)編碼 兩個(gè)字節(jié)保存一個(gè)漢字 GB編碼 可以表示數(shù)字0~255,基本數(shù)據(jù)類型,int 整數(shù),在目前絕大多數(shù)機(jī)器上占4個(gè)字節(jié)。TC2中是2個(gè)字節(jié) float 單精度浮點(diǎn)數(shù),一般是4個(gè)字節(jié)長 double 雙精度浮點(diǎn)數(shù),一般是8個(gè)字節(jié)長 char 字符,一般是1個(gè)字節(jié)長 用來表示256個(gè)ASCII字符,或者0~255的整數(shù),數(shù)據(jù)類型修飾符,short short int,短整數(shù),一般2個(gè)字節(jié)長。通常簡寫為short long long int,長整數(shù),一般是4個(gè)字節(jié)長。通常簡寫為long long double,長雙精度(高精度)浮點(diǎn)數(shù),一般是10個(gè)字節(jié)長。 signed 用來修飾char、int、short和long,說明他們是有符號(hào)的整數(shù)(正整數(shù)、0和負(fù)整數(shù))。一般缺省都是有符號(hào)的,所以這個(gè)修飾符通常省略 unsigned 用來修飾char、int、short和long,說明他們是無符號(hào)的整數(shù)(正整數(shù)和0),假設(shè)編譯系統(tǒng)為 int 型整數(shù)分配 2 個(gè)字節(jié)的存儲(chǔ)空間,即 16 個(gè)二進(jìn)制位中最高位是符號(hào)位,以 32767 為例,其在內(nèi)存中的存儲(chǔ)形式為:,有符號(hào)數(shù)與無符號(hào)數(shù),若是無符號(hào)數(shù),該數(shù)是 65535 ,若是有符號(hào)數(shù),該數(shù)是 -1 。,-1 的原碼,-1 的反碼,-1 的反碼加 1 后的結(jié)果,-1 的補(bǔ)碼,TC2中int的范圍是-32768~32767 如果我們給它一個(gè)小于-32768或者大于32767的數(shù)會(huì)如何呢? 現(xiàn)場(chǎng)演示……,小蛇能吞下大象嗎?,超出取值范圍會(huì)怎樣?,一臺(tái)安裝了Windows 95/98的機(jī)器,如果連續(xù)運(yùn)行49.7天沒有重新啟動(dòng),可能死機(jī) 原因: Windows自啟動(dòng)時(shí)刻起,有一個(gè)計(jì)數(shù)器,記錄系統(tǒng)已經(jīng)運(yùn)行了多少毫秒。這個(gè)計(jì)數(shù)器是個(gè)unsigned long 類型的變量 unsigned long 的最大值是:4294967295 一天有 24*60*60*1000 = 86400000毫秒 4294967295 / 86400000 = 49.71026961805…… 當(dāng)49.7天的時(shí)候,此計(jì)數(shù)器會(huì)溢出,引起死機(jī),溢出(Overflow)造成的危害,如何選擇恰當(dāng)?shù)臄?shù)據(jù)類型?,具體問題具體分析,1 + 2 + 3 + 4 + …,1! + 2! + 3! + 4! + …,13 + 23 + 33 + 43 + …,使用變量要注意,不要對(duì)類型或變量所占的內(nèi)存空間字節(jié)數(shù)想當(dāng)然 用sizeof獲得變量或者數(shù)據(jù)類型的長度 現(xiàn)場(chǎng)演示程序在Turbo C2.0和Visual C下的運(yùn)行結(jié)果,注意!,#include main() { printf(“Data type Number of bytes\n“); printf(“------------ ---------------------\n“); printf(“char %d\n“, sizeof(char)); printf(“int %d\n“, sizeof(int)); printf(“short int %d\n“, sizeof(short)); printf(“l(fā)ong int %d\n“, sizeof(long)); printf(“float %d\n“, sizeof(float)); printf(“double %d\n“, sizeof(double)); },變量,變量定義語句: 類型關(guān)鍵字 變量名1[,變量名2,變量名3,…] 定義變量時(shí)初始化方式: 類型關(guān)鍵字 變量名1=常量1[,變量名2 =常量2 ,…],變量聲明,使用變量的基本原則 變量必須先定義,后使用 所有變量必須在第一條可執(zhí)行語句前定義 聲明的順序無關(guān)緊要 一條聲明語句可聲明若干個(gè)同類型的變量 聲明變量,是初始化變量的最好時(shí)機(jī) 不被初始化的變量,其值為危險(xiǎn)的隨機(jī)數(shù) char esc = 'a'; int i = 1; int sum = 0; float eps = 1.0e-5;,實(shí)型數(shù)據(jù)在內(nèi)存中的存儲(chǔ),1234.56=0.123456X104 =1.23456X103 =12345.6x10-1,N=S X r j,有效位數(shù) (精度),取值范圍,實(shí)型數(shù)據(jù)提供的有效數(shù)字位數(shù),float型數(shù)據(jù)提供7位有效數(shù)字 double型數(shù)據(jù)提供16位有效數(shù)字 使用不當(dāng)導(dǎo)致舍入誤差,#include main() { float a; double b; a = 123456.789e4; b = 123456.789e4; printf(“%f\n%f\n“,a,b); },#include main() { float f; f = 123.456; if (f == 123.456) printf(“f is equal to 123.456 indeed.“); else printf(“In fact, f is equal to %f\n“, f); } 運(yùn)行結(jié)果會(huì)是什么?,float.c,浮點(diǎn)數(shù)的陷阱,float的精度低,較易發(fā)生精度帶來的相等性判斷問題 double精度高,這個(gè)問題發(fā)生的概率小一些,但也存在 解決辦法: if (fabs(f – 123.456) 1E-5) ……,,根據(jù)精度要求設(shè)定,浮點(diǎn)數(shù)的陷阱,,char型與int型之間的關(guān)系,小寫字母轉(zhuǎn)換為大寫字母,#include main() { char ch = 'b'; ch = 'b' - 32; printf(“%c, %d\n“, ch, ch); },#include main() { char ch = 'b'; ch = 'b' - ('a' - 'A') ; printf(“%c, %d\n“, ch, ch); },常數(shù)(Constant),整型常數(shù) 18、-31 長整型常量 123l、123L、123456l、123456L 無符號(hào)型常量 123u、 123U 浮點(diǎn)常數(shù) 十進(jìn)制小數(shù)形式 123.45、456.78 指數(shù)形式 1e-2、4.5e3 單精度實(shí)型常量 123.45f、 456.78F、1e-2f、4.5e3F 長雙精度型常量 123.45l、 456.78L、1e-2l、4.5e3L,八進(jìn)制與十六進(jìn)制常數(shù),以數(shù)字“0”開始的整型常數(shù)是八進(jìn)制數(shù) 022、-037 010和10大小不一樣 因?yàn)榘诉M(jìn)制并不常用,所以此種表示法比較少見 以“0x”或者“0X”開始的整型常數(shù)是十六進(jìn)制 A~F和a~f用來表示十進(jìn)制的10~15 十六進(jìn)制的形式比較常用,尤其在進(jìn)行位一級(jí)的控制的時(shí)候 0x12、-0x1F, -0x1f,字符(Character)常數(shù),字符常數(shù)的表示方法 ’a’,’A’,’5’,’%’,’$’…… 單引號(hào)內(nèi)只能有一個(gè)字符,除非用“\”開頭 就是一個(gè)普通整數(shù),也可以參與各種數(shù)學(xué)運(yùn)算 每個(gè)字符具有一個(gè)0~255之間的數(shù)值,可從ASCII表查出 注意:’5’和整數(shù)5的區(qū)別 字符的數(shù)學(xué)運(yùn)算在密碼學(xué)內(nèi)用得比較多,字符常數(shù),轉(zhuǎn)義字符 一些特殊字符(無法從鍵盤輸入或者另有它用)用轉(zhuǎn)義字符表示,字符串(String)常數(shù),用雙引號(hào)括住的由0個(gè)或多個(gè)字符組成的字符序列 “I am a string“ ““表示空字符串 轉(zhuǎn)義字符也可以在字符串中使用 引號(hào)只作為字符串開始和結(jié)束的標(biāo)志 C語言內(nèi)部用’\0’表示字符串的結(jié)束 除注釋外,是唯一可以出現(xiàn)中文的地方 “x“和’x’是不同的 里定義了一系列專門的字符串處理函數(shù),枚舉(Enumeration)常量,一個(gè)被遺忘的角色 從程序來窺其一斑 enum weeks {MON, TUE, WED, THU, FRI, SAT, SUN}; enum weeks today; enum response {no, yes, none}; enum response answer; today = TUE; answer = yes; if (answer == yes) printf(“Today is Tuesday.\n“); else printf(“Today is NOT Tuesday.\n“);,宏常量,宏常量 也稱符號(hào)常量 一般采用大寫字母表示 #define 標(biāo)識(shí)符 字符串 不是語句,而是一種編譯預(yù)處理命令 宏替換(Macro Substitulition),#include #define PI 3.14159 #define R 5.3 main() { printf(“area = %f\n“, PI * R * R); printf(“circumference = %f\n“, 2 * PI * R); },宏常量,宏常量 也稱符號(hào)常量 一般采用大寫字母表示 #define 標(biāo)識(shí)符 字符串 不是語句,而是一種編譯預(yù)處理命令 宏替換(Macro Substitulition),#include #define PI 3.14159 #define R 5.3 main() { printf(“PI*R*R = %f\n“, PI * R * R); printf(“2*PI*R = %f\n“, 2 * PI * R); },const常量,用const修飾定義的變量為常量 const float pi = 3.1425926; 常量只能在定義時(shí)賦值,然后不能再改變其值 常數(shù)、 const常量、宏常量和枚舉常量,都可以用來表示一個(gè)永遠(yuǎn)不會(huì)改變的數(shù) 前者不建議直接使用,而用后三者代替,通過相關(guān)理論學(xué)習(xí)后,我們可以對(duì)“學(xué)生成績管理系統(tǒng)”中相關(guān)數(shù)據(jù)進(jìn)行分析及定義了。將現(xiàn)實(shí)中的數(shù)據(jù)處理成C語言能夠理解的數(shù)據(jù)。 1.常量定義 在“學(xué)生成績管理系統(tǒng)”中我們假定本系統(tǒng)能處理一個(gè)班40個(gè)學(xué)生的數(shù)據(jù)。通常情況下,學(xué)生人數(shù)這個(gè)數(shù)據(jù)在程序的運(yùn)行過程中是不變的。因此,要把表示一個(gè)班學(xué)生總?cè)藬?shù)的數(shù)據(jù)定義成符號(hào)常量。 定義符號(hào)常量的格式如下: #define STUNUM 40 說明:符號(hào)常量(STUNUM)必須用大寫字母。,3 任務(wù)實(shí)施,2.簡單類型 “學(xué)生成績管理系統(tǒng)”中的學(xué)生信息主要包括:學(xué)號(hào)、姓名、性別、年齡、三門功課成績、總成績和平均成績,另外還有一些與計(jì)算全班成績有關(guān)的最高成績、最低成績等。這些數(shù)據(jù)在程序運(yùn)行過程中是可能改變的,這里只對(duì)部分表示學(xué)生信息的簡單數(shù)據(jù)定義,我們?cè)诙x變量時(shí)最好能做到“見名知義”。 int stunum;//整數(shù)類型的學(xué)號(hào) char stusex;//字符類型的性別 int stuage;//整數(shù)類型的年齡 float score1;//單精度類型的成績1,float score2;//單精度類型的成績2 float score3;//單精度類型的成績3 float avescore;//單精度類型的平均成績 float maxscore;//單精度類型的最高分 float minscore;//單精度類型的最低分 由于性別這類數(shù)據(jù)只是起到描述一些基本信息的作用,通常情況下不進(jìn)行算術(shù)運(yùn)算,所以我們定義為字符型;而年齡、三門功課成績、總成績和平均成績以及最高成績、最低成績等這類數(shù)據(jù)有可能進(jìn)行算術(shù)運(yùn)算, 所以我們定義為數(shù)值型。 另外,在編程實(shí)踐中還會(huì)遇到一些這里不能一一列舉出來的變量、數(shù)組變量和指針變量,我們將在后續(xù)的學(xué)習(xí)逐漸認(rèn)識(shí)與掌握。 在“班級(jí)學(xué)生成績管理系統(tǒng)”中變量定義完成以后,接下來我們還要在知識(shí)擴(kuò)展環(huán)節(jié)里進(jìn)一步學(xué)習(xí)如何給變量賦值。,4知識(shí)擴(kuò)展,常用運(yùn)算符及表達(dá)式 賦值和表達(dá)式中的類型轉(zhuǎn)換,算術(shù)運(yùn)算符,+,-,*,/ 加、減、乘、除運(yùn)算 四則混合運(yùn)算中,先算乘除,后算加減, 按從左向右的順序計(jì)算,左結(jié)合 % 求余運(yùn)算,常用的標(biāo)準(zhǔn)數(shù)學(xué)函數(shù),,關(guān)系運(yùn)算符,,=,,=,==,!= 大于,大于等于,小于,小于等于,等于,不等于 關(guān)系運(yùn)算符運(yùn)算出的結(jié)果為0和非0 0,表示假,即該關(guān)系不成立 非0,表示真,即該關(guān)系成立 絕大多數(shù)編譯器,關(guān)系運(yùn)算得到的非0結(jié)果為1,但是不要利用這個(gè)1,邏輯運(yùn)算符,邏輯運(yùn)算也被稱為布爾(Boolean)運(yùn)算 && 與運(yùn)算 ( a b && b c);a大于b,并且b大于c || 或運(yùn)算 ( a b || b c); a大于b,或者b大于c ! 求反 ( !a );如果a是0,結(jié)果非0;如果a是非0,結(jié)果是0 并不改變a的值,實(shí)例,ch是英文大寫字母 (ch = 'A') && (ch = 'Z') 判斷某一年year是否是閏年的條件是滿足下列兩個(gè)條件之一: 能被4整除,但不能被100整除; 能被400整除; ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0),增一和減一運(yùn)算符,n++,n--,++n,--n ++讓參與運(yùn)算的變量加1,--讓參與運(yùn)算的變量減1 作為后綴運(yùn)算符時(shí),先取n的值,然后加/減1 作為前綴運(yùn)算符時(shí),先加/減1,然后取n的值 m = n++; 等價(jià)于 m=n; n++; m = ++n; 等價(jià)于 n++; m=n;,增一和減一運(yùn)算符,良好的程序設(shè)計(jì)風(fēng)格提倡:在一行語句中,一個(gè)變量只能出現(xiàn)一次加1或者減1運(yùn)算 過多的加1和減1運(yùn)算混合,不僅可讀性差,而且因?yàn)榫幾g器實(shí)現(xiàn)的方法不同,導(dǎo)致不同編譯器產(chǎn)生不同的運(yùn)行結(jié)果,位操作運(yùn)算符,& 按位與運(yùn)算 | 按位或運(yùn)算 ^ 按位異或運(yùn)算, 按位右移運(yùn)算 ~ 按位求反,賦值運(yùn)算符,下面兩個(gè)語句是等價(jià)的 i = i + 2; i += 2; +、-、*、/、%、、&、^、|運(yùn)算符都可以按此種方式處理 這種形式看起來更直觀,而且執(zhí)行效率一般也能更高一些,逗號(hào)運(yùn)算符,表達(dá)式1, 表達(dá)式2, …, 表達(dá)式n 多數(shù)情況下,并不使用整個(gè)逗號(hào)表達(dá)式的值,更常見的情況是要分別得到各表達(dá)式的值 主要用在循環(huán)語句中,同時(shí)對(duì)多個(gè)變量賦初值等 for (i = 0 , j = 0; i j; i++, j++),條件表達(dá)式,把a(bǔ)和b中的最大值放入z中 if (a b) z = a; else z = b; z = (a b) ? a : b; 此種表達(dá)式切忌用得過于繁雜,優(yōu)先級(jí),( ) [ ] - . ! ~ ++ -- + - * & (類型) sizeof * / % + - = == != & ^ | && || ? : = += -= *= /= %= &= ^= |= = ,,優(yōu)先級(jí),能背下優(yōu)先級(jí)表的人鳳毛麟角 用括號(hào)來控制運(yùn)算順序更直觀、方便,并減少出錯(cuò)的概率,結(jié)合性,多數(shù)運(yùn)算符為左結(jié)合 少數(shù)為右結(jié)合: 一元運(yùn)算符 賦值運(yùn)算符 條件運(yùn)算符,類型轉(zhuǎn)換,在進(jìn)行賦值操作時(shí),會(huì)發(fā)生類型轉(zhuǎn)換 將取值范圍小的類型轉(zhuǎn)為取值范圍大的類型是安全的 反之是不安全的 如果大類型的值在小類型能容納的范圍之內(nèi),則平安無事 但是,浮點(diǎn)數(shù)轉(zhuǎn)為整數(shù),會(huì)丟失小數(shù)部分,非四舍五入 反之,轉(zhuǎn)換后的結(jié)果必然是錯(cuò)誤的,具體結(jié)果與機(jī)器和實(shí)現(xiàn)方式有關(guān)。避免如此使用,字符串與數(shù)值類型之間的轉(zhuǎn)換,int i = “123“ 這樣用是不行地 atof(),atoi(),atol() 把字符串轉(zhuǎn)為double,int和long 定義在stdlib.h中 sprintf() 可以用來把各種類型的數(shù)值轉(zhuǎn)為字符串 定義在stdio.h中,自動(dòng)類型轉(zhuǎn)換,同種數(shù)據(jù)類型的運(yùn)算結(jié)果,還是該類型 不同種數(shù)據(jù)類型的運(yùn)算結(jié)果,是兩種類型中取值范圍更大的那種 long double double float long int short char 把數(shù)據(jù)賦值給另外一種類型變量也會(huì)發(fā)生自動(dòng)類型轉(zhuǎn)換 從小到大,順利轉(zhuǎn)換 從大到小,可能丟失信息(好的編譯器會(huì)發(fā)出警告),類型強(qiáng)轉(zhuǎn)(Casting),消除從大到小的警告 l = (long)i; 可以通過“(類型)表達(dá)式”的方式把表達(dá)式的值轉(zhuǎn)為任意類型 強(qiáng)轉(zhuǎn)時(shí),你必須知道你在做什么 強(qiáng)轉(zhuǎn)與指針,并稱C語言兩大神器,用好了可以呼風(fēng)喚雨,用壞了就損兵折將,#include main() { int m = 5; printf(“m / 2=%d\n“, m/2); printf(“(float) (m / 2) = %f\n“, (float) (m / 2)); printf(“(float) m / 2 = %f\n“, (float) m / 2); printf(“m = %d\n“, m); },類型強(qiáng)轉(zhuǎn),強(qiáng)轉(zhuǎn)與指針,并稱C語言兩大神器,用好了可以呼風(fēng)喚雨,用壞了就損兵折將,屠 龍 刀,倚 天 劍,這一章我們學(xué)到了,變量的命名規(guī)則 數(shù)據(jù)類型 char,short,int,long,float,double,long double signed,unsigned enum 常數(shù)、轉(zhuǎn)義字符 運(yùn)算符 算術(shù)運(yùn)算符、關(guān)系運(yùn)算符、邏輯運(yùn)算符、增一/減一運(yùn)算符、位運(yùn)算符、賦值運(yùn)算符、類型強(qiáng)轉(zhuǎn)運(yùn)算符、逗號(hào)運(yùn)算符、條件運(yùn)算符(? :)、 sizeof 類型轉(zhuǎn)換 優(yōu)先級(jí)和結(jié)合性,ASCII字符表1,,- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
14.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 語言 數(shù)據(jù)類型 運(yùn)算 表達(dá)式
鏈接地址:http://m.jqnhouse.com/p-2015982.html