![C語言程序設計數據類型課件_第1頁](http://file4.renrendoc.com/view/c9eb25cb279f64f8ed1e809993c8188a/c9eb25cb279f64f8ed1e809993c8188a1.gif)
![C語言程序設計數據類型課件_第2頁](http://file4.renrendoc.com/view/c9eb25cb279f64f8ed1e809993c8188a/c9eb25cb279f64f8ed1e809993c8188a2.gif)
![C語言程序設計數據類型課件_第3頁](http://file4.renrendoc.com/view/c9eb25cb279f64f8ed1e809993c8188a/c9eb25cb279f64f8ed1e809993c8188a3.gif)
![C語言程序設計數據類型課件_第4頁](http://file4.renrendoc.com/view/c9eb25cb279f64f8ed1e809993c8188a/c9eb25cb279f64f8ed1e809993c8188a4.gif)
![C語言程序設計數據類型課件_第5頁](http://file4.renrendoc.com/view/c9eb25cb279f64f8ed1e809993c8188a/c9eb25cb279f64f8ed1e809993c8188a5.gif)
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第三章數據類型、運算符
與表達式第三章數據類型、運算符
與表達式1算法處理的對象是數據。數據是以某種特定的形式存在的,如整數、實數、字符等。所謂數據結構,就是指數據的組織形式。完整的程序設計=數據結構+算法
+程序設計方法+語言工具青島農業(yè)大學理信學院算法處理的對象是數據。完整的程序設計=數據結構+算法
+程序2主要內容一、數據類型二、變量與常量三、運算符四、表達式數據成分運算成分青島農業(yè)大學理信學院主要內容一、數據類型數據成分運算成分青島農業(yè)大學理信學院3一、數據類型C語言的數據類型構造類型指針類型*空類型(無值類型)void枚舉類型enum數組類型結構類型struct聯合類型union基本類型整型int字符型char實型(浮點型)單精度實型float雙精度實型double青島農業(yè)大學理信學院一、數據類型C語言的構造類型指針類型*空類型(無值類4二、變量與常量常量:指在程序運行過程中,值不能發(fā)生變化的量。常量可以有不同類型:比如,這些常量稱為字面常量或直接常量整型100,125,-100,0實型3.14,0.125,-3.789字符型‘a’,‘b’,‘2’字符串“a”,“ab”,“1232”青島農業(yè)大學理信學院二、變量與常量常量:指在程序運行過程中,值不能發(fā)生變化的量。5符號常量定義與使用定義:使用#define#definePI3.14使用:area=PI*3*3程序中用#define命令行定義PI代表常量3.14,此后凡在本文件中出現的PI都代表3.14,可以和常量一樣進行運算。PI=3.1415錯誤!常量值不能改變!習慣上,符號常量名用大寫,變量名用小寫優(yōu)點:含義清楚;一改全改青島農業(yè)大學理信學院符號常量定義與使用定義:使用#define青島農業(yè)大學理信學6例3.1#definePRICE30#include<stdio.h>voidmain(){intnum,total;num=10;total=num*PRICE;printf("total=%d",total);}青島農業(yè)大學理信學院例3.1#definePRICE30青島農業(yè)大學理信7變量變量:程序運行期間值可以發(fā)生改變的量。變量代表內存中具有特定屬性的一個存儲單元,它用來存放數據,這就是變量的值。青島農業(yè)大學理信學院變量變量:程序運行期間值可以發(fā)生改變的量。變量代表內存中具有8變量名實際上是一個以一個名字對應代表一個地址。在對程序編譯連接時由編譯系統給每一個變量名分配對應的內存地址。從變量中取值,實際上是通過變量名找到相應的內存地址,從該存儲單元中讀取數據。青島農業(yè)大學理信學院變量名實際上是一個以一個名字對應代表一個地址。青島農業(yè)大學理9變量定義數據類型變量名;比如,inta;floatx,y;青島農業(yè)大學理信學院變量定義數據類型變量名;青島農業(yè)大學理信學院10變量命名變量命名的規(guī)定:C語言規(guī)定標識符只能由字母、數字和下劃線三種字符組成,且第一個字符必須為字母或下劃線。變量名不能與關鍵字重名
例:sum,_total,month,Student_name,lotus_1_2_3,BASIC,li_ling
M.D.John,¥123,3D64,a>b
青島農業(yè)大學理信學院變量命名變量命名的規(guī)定:C語言規(guī)定標識符只能由字母、數字和下11注意:C語言區(qū)分大小寫,即:ABC與Abc認為是兩個不同的變量。建議變量名的長度最好不要超過8個字符。在選擇變量名和其它標識符時,應注意做到“見名知意”,即選有含意的英文單詞(或其縮寫)作標識符。(intStu)要求對所有用到的變量作強制定義,也就是“先定義,后使用”。青島農業(yè)大學理信學院注意:C語言區(qū)分大小寫,即:ABC與Abc認為是兩個不同的變12補充——C語言的關鍵字(附錄B)關鍵字(keywords)是C語言預定義的詞法符號,具有固定含義和用途,不能作為標識符使用。C語言的關鍵字:autobreakcasecharconstcontinuedefaultdodoubleelseenumexternfloatforgotoifintlongregisterreturnshortsignedsizeofstaticstructswitchtypedefunionunsignedvoidvolatilewhile
注意,關鍵字必須小寫。青島農業(yè)大學理信學院補充——C語言的關鍵字(附錄B)關鍵字(keyword131、整型數據在內存中是以二進制形式存放的,整型數據占用兩個字節(jié)的空間(TurboC2.0及TurboC++3.0中為兩個字節(jié),教材例子也假定整型占兩個字節(jié),但是在VC++6.0中則分配4個字節(jié))。數據采用補碼形式表示。青島農業(yè)大學理信學院1、整型數據在內存中是以二進制形式存放的,整型數據占用兩個字141)整型常量十進制整數123,-123八進制整數。以0開頭的數0123,-0123十六進制整數以0x開頭的數0x1A,-0xFD青島農業(yè)大學理信學院1)整型常量十進制整數青島農業(yè)大學理信學院152)整型變量
整型變量在內存中的存放形式整型數據在內存中的存放形式數據在內存中是以二進制形式存放的實際上,數值是以補碼(complement)表示的。+10在內存中的存放青島農業(yè)大學理信學院2)整型變量
整型變量在內存中的存放形式+10在內存中的存放16-10在內存中的存放青島農業(yè)大學理信學院-10在內存中的存放青島農業(yè)大學理信學院17整型變量的分類基本整型int短整型shortint長整型longint三者區(qū)別在于:可以表示的整數范圍不同。青島農業(yè)大學理信學院整型變量的分類基本整型int青島農業(yè)大學理信學院18類型類型說明符長度數的范圍基本型int2字節(jié)-32768~32767短整型short2字節(jié)-215~215-1長整型long4字節(jié)-231~231-1青島農業(yè)大學理信學院類型類型說明符長度19整型的符號整型數據還有有符號數和無符號數之分。signedunsigned青島農業(yè)大學理信學院整型的符號整型數據還有有符號數和無符號數之分。signedu20整型共六種有符號基本整型有符號短整型有符號長整型無符號基本整型無符號短整型無符號長整型(signed)int(signed)short(int)(signed)long(int)unsignedintunsignedshort(int)unsignedlong(int)
注意:括號表示其中的內容是可選的。青島農業(yè)大學理信學院整型共六種有符號基本整型(signed)int注意:括21整數(13為例)在存儲單元中的存儲情況青島農業(yè)大學理信學院整數(13為例)在存儲單元中的存儲情況青島農業(yè)大學理信學院223)整型變量的定義和使用定義:inta,b(指定變量a、b為整型)unsignedshortc,d;(指定變量c、d為無符號短整型)longe,f;(指定變量e、f為長整型)對變量的定義,一般是放在一個函數的開頭的聲明部分(也可以放在函數中某一分程序內,但作用域只限它所在的分程序)使用:a=12;b=10;c=a+b;賦值語句青島農業(yè)大學理信學院3)整型變量的定義和使用定義:賦值語句青島農業(yè)大學理信學院23溢出inta,b;a=32767;b=a+1;0111111111111111a01000000000000000b-32768青島農業(yè)大學理信學院溢出inta,b;0111111111111111a010244)整型常量的類型整型變量可分為int、shortint、longint和unsignedint、unsignedshort、unsignedlong等類別。那么常量呢?在將一個整型常量賦值給上述幾種類別的整型變量時如何做到類型匹配?請注意以下幾點:(1)一個整數,如果其值在-32768~+32767范圍內,認為它是int型,它可以賦值給int型和longint型變量。(2)一個整數,如果其值超過了上述范圍,而在-2147483648~+2147483647范圍內,則認為它是長整型,可以將它賦值給一個longint型變量。青島農業(yè)大學理信學院4)整型常量的類型整型變量可分為int、shortint25(3)如果某一計算機系統的c版本(例如turboc)確定shortint與int型數據在內存中占據的長度相同,則它的表數范圍與int型相同。因此,一個int型的常量也同時是一個shortint型常量,可以賦給int型或shortint型變量。(4)一個整常量后面加一個字母u,認為是unsignedint型,如12345u,在內存中按unsignedint規(guī)定的方式存放。如果寫成-12345u,則先將-12345轉換成其補碼53191,然后按無符號數存儲。(5)整常量后加一個字母l或L,則認為是longint型常量。例如123l、432l、0l等,這往往用于函數調用中。如果函數的形參為longint型,則要求實參也為longint型,此時用123作實參不行,而要用123l作實參。青島農業(yè)大學理信學院(3)如果某一計算機系統的c版本(例如turboc)確定262、浮點型1)浮點型常量兩種表示形式小數指數0.1233e-3注意:字母e(或E)之前必須有數字,且e后面的指數必須為整數:1e3、1.8e-3、-123e-6、-0.1e-3e3、2.1e3.5、.e3、e
青島農業(yè)大學理信學院2、浮點型1)浮點型常量兩種表小數0.123注意:字母e(或27規(guī)范化的指數形式字母e之前的小數中,小數點左邊有且僅有一位非零數字。例如:123.456可以表示為:123.456e0,12.3456e1,1.23456e2,0.123456e3,0.0123456e4,0.00123456e其中的1.23456e2稱為“規(guī)范化的指數形式”。青島農業(yè)大學理信學院規(guī)范化的指數形式字母e之前的小數中,小數點左邊有且僅有一位非28浮點數在內存中的存放一個浮點型數據一般在內存中占4個字節(jié)(32位)。分為小數部分和指數部分,分別存放。青島農業(yè)大學理信學院浮點數在內存中的存放一個浮點型數據一般在內存中占4個字節(jié)(3292)浮點型變量單精度型float雙精度型double長雙精度型longdouble類型位數數的范圍有效數字float3210-37~10386~7位double型6410-307~1030815~16位longdouble12810-4931~10493218~19位青島農業(yè)大學理信學院2)浮點型變量單精度型float類型位30浮點型數據的舍入誤差例3.4main(){floata,b;a=123456,789e5;b=a+20;printf("%f",b);}運行程序得到的a和b的值是12345678848.000000只有7位有效數字時準確的因此,避免將一個很大的數和很小的數相加減青島農業(yè)大學理信學院浮點型數據的舍入誤差例3.4青島農業(yè)大學理信學院31浮點型常量的運算C編譯系統將實型常量作為雙精度來處理。例如已定義一個實型變量f,有如下語句:f=2.45678*4523.65系統將2.45678和4523.65按雙精度數據存儲(占64位)和運算,得到一個雙精度的乘積,然后取前7位賦給實型變量f。(除非在數據后加F或f)一個實型常量可以賦給一個float型、double型或longdouble變量。根據變量的類型截取實型常量中相應的有效位數字。例如,floata;a=111111.111;由于float型變量只能接收7位有效數字青島農業(yè)大學理信學院浮點型常量的運算C編譯系統將實型常量作為雙精度來處理。例如已323、字符型1)字符常量:單引號括起來的一個字符比如,‘a’‘?’注意:‘a’與‘A’是兩個不同的字符常量。例‘a’,’A’,‘1’‘abc’、“a”青島農業(yè)大學理信學院3、字符型1)字符常量:單引號括起來的一個字符例‘a’,’A33補充——C語言的字符集(附錄A)
C的字符集(characterset)是ASCII碼的子集。標準ASCII碼從0~127,共128個字符。0~31和127是控制字符,屬不可見字符。32~126是可見字符。以下字符的碼值要記憶:32--空格’’48--’0’65--’A’97--’a’擴展ASCII碼,從0~255,共256個字符。128~255是圖形符號。青島農業(yè)大學理信學院補充——C語言的字符集(附錄A)C的字符集(chara34特殊的字符常量——轉義字符以\開頭的字符序列,稱為轉義字符。\n換行\(zhòng)b退格\t橫向跳格\f換頁\r回車\\反斜杠\’單引號\”雙引號\dddddd表示1到3位八進制數字\xhhhh表示1到2位十六進制數字青島農業(yè)大學理信學院特殊的字符常量——轉義字符以\開頭的字符序列,稱為轉義字符。35轉義字符的使用例3.5main(){printf("abc\tde\rf\tg\n");printf("h\ti\b\bjk");}青島農業(yè)大學理信學院轉義字符的使用例3.5青島農業(yè)大學理信學院362)字符變量定義:charc;使用:c=‘a’;青島農業(yè)大學理信學院2)字符變量定義:青島農業(yè)大學理信學院37字符數據在內存中的存儲一個字符變量在內存中占用一個字節(jié)。內存中實際存儲的并不是字符本身,而是字符的ASCII碼。整型數據和字符型數據存儲形式類似,可以通用。青島農業(yè)大學理信學院字符數據在內存中的存儲一個字符變量在內存中占用一個字節(jié)。青島38例3.6向字符變量賦以整數charc1,c2;c1=97;c2=98;printf(“%c%c\n”,c1,c2);printf(“%d%d\n”,c1,c2);注意:字符數據長一個字節(jié),所以最多只能表示0~255范圍內的整數。其第一位還可以被用作符號位。青島農業(yè)大學理信學院例3.6向字符變量賦以整數charc1,c2;注意:字符39例3.7大小寫轉換#include<stdio.h>voidmain(){ charc; c=‘a’; c=c-32; printf(“%c”,c);}/*字符數據可以和整型數據相互賦值*/C語言允許字符數據與整數直接參與算術運算。青島農業(yè)大學理信學院例3.7大小寫轉換#include<stdio.h>C語403)字符串常量用雙引號括起來的字符序列如“abc”,“a”C語言規(guī)定:在每個字符串最后加一個‘\0’作為字符串結束標記。比如,“CHINA”這個字符串常量CHINA\0青島農業(yè)大學理信學院3)字符串常量用雙引號括起來的字符序列CHINA\0青島農業(yè)41問題:“a”與‘a’是否相同?答案是不同?!產’是字符常量,而“a”是字符串常量?!癮”相當于‘a’+‘\0’結論:不能把一個字符串常量賦給一個字符變量。charc;c=“a”;錯!青島農業(yè)大學理信學院問題:“a”與‘a’青島農業(yè)大學理信學院42在c語言中沒有專門的字符串變量。如果想將一個字符串存放在變量中,以便保存,必須使用字符數組,即用一個字符型數組來存放一個字符串,數組中每一個元素存放一個字符。青島農業(yè)大學理信學院在c語言中沒有專門的字符串變量。如果想將一個字符串存放在變量434、變量賦初值C語言允許在定義變量的同時使變量初始化。比如,inta=3;相當于inta;a=3;charc=‘a’;inta,b,c=10;只對一部分變量賦初值inta=1,b=1,c=1; 不要寫成inta=b=c=1;錯!青島農業(yè)大學理信學院4、變量賦初值C語言允許在定義變量的同時使變量初始化。青島農44三、運算符與表達式(1)算術運算符+-*/%(2)關系運算符><==>=<=!=(3)邏輯運算符?。Γ|(4)位運算符<<>>~|∧&(5)賦值運算符=及其擴展賦值運算符(6)條件運算符?:(7)逗號運算符,(8)指針運算符*和&(9)求字節(jié)數運算符sizeof(10)強制類型轉換運算符(類型))(11)分量運算符.->(12)下標運算符[](13)其他如函數調用運算符()表達式:使用運算符和括號將變量、常量等操作數連接起來的,符合C語法規(guī)則的式子,稱為表達式。青島農業(yè)大學理信學院三、運算符與表達式(1)算術運算符+-*/%(8)451、算術運算符與算術表達式+加法運算符,或正值運算符,如:3+5、+3-減法運算符,或負值運算符,如:5-2、-3*乘法運算符,如:3*5/除法運算符,如:5/3%模運算符,或稱求余運算符,%兩側均應為整型數據,如:7%4的值為3優(yōu)先級:運算按照優(yōu)先級由高到低進行結合方向(結合性):從左至右,也稱為左結合性青島農業(yè)大學理信學院1、算術運算符與算術表達式+加法運算符,或正值運算符,如:46算術運算符優(yōu)先級和結合性(附錄C)表達式求值的普遍順序(從左向右掃描):圓括號()先內圓括號,后外圓括號;函數引用運算符優(yōu)先級不同,先做優(yōu)先級高的操作,然后做優(yōu)先級低的操作;運算符優(yōu)先級相同,按結合性處理;青島農業(yè)大學理信學院算術運算符優(yōu)先級和結合性(附錄C)表達式求值的普遍順序(從左47類型轉換自動類型轉換如果運算符兩側的數據類型不同,先進行自動類型轉換,再進行運算。強制類型轉換形式:(類型名)(表達式)short、chardoublefloatlongunsignedint高低青島農業(yè)大學理信學院類型轉換自動類型轉換short、chardoublefloa48例floatx;inti,j;x=3.6i=(int)x;j=(int)x%2;i的值是多少?j的值是多少?x的值是多少?青島農業(yè)大學理信學院例floatx;i的值是多少?青島農業(yè)大學理信學院49自增、自減運算符自增++自減--作用:使變量的值增1或者減1這兩個運算符只用于變量,而不用于常量和表達式。例如,5++,(a+b)++
不合法!結合方向是“自右至左”,例如-i++青島農業(yè)大學理信學院自增、自減運算符自增++青島農業(yè)大學理信學院50注意i++和++i的不同i++先使用i的值,再將i加1++i先將i加1,再使用i的值例子:i=3;j=i++;j=++i;青島農業(yè)大學理信學院注意i++和++i的不同i++青島農業(yè)大學理信學院51有關表達式使用中的問題說明歧義問題書寫程序,注意避免歧義青島農業(yè)大學理信學院有關表達式使用中的問題說明歧義問題青島農業(yè)大學理信學院522、賦值運算符和賦值表達式1)賦值運算符=作用:將右邊的數據賦給左邊的變量i=3i=x+y青島農業(yè)大學理信學院2、賦值運算符和賦值表達式1)賦值運算符=青島農業(yè)大學理信532)類型轉換如果賦值運算符兩側類型不一致,但都是數值型或字符型時,賦值時會自動進行類型轉換。將實型數據(包括單、雙精度)賦給整型變量時,舍棄實數的小數部分。將整型數據賦給單、雙精度變量時,數值不變,但以浮點數形式存儲到變量中。將一個double型數據賦給float變量時,截取其前面7位有效數字,存放到float變量的存儲單元(32位)中。但應注意數值范圍不能溢出。將一個float型數據賦給double變量時,數值不變,有效位數擴展到16位,在內存中以64位(bit)存儲。青島農業(yè)大學理信學院2)類型轉換如果賦值運算符兩側類型不一致,但都是數值型或字符54(4)字符型數據賦給整型變量時,由于字符只占1個字節(jié),需考慮是否有符號,有符號位需“符號擴展”。unsignedsigned青島農業(yè)大學理信學院(4)字符型數據賦給整型變量時,由于字符只占1個字節(jié),需考55(5)將一個int、short、long型數據賦給一個char型變量時,只將其低8位原封不動地送到char型變量(即截斷)。青島農業(yè)大學理信學院(5)將一個int、short、long型數據賦給一個ch56(6)將帶符號的整型數據(int型)賦給long型變量時,要進行符號擴展。反之,若將一個long型數據賦給一個int型變量,只將long型數據中低16位原封不動地送到整型變量(即截斷)。青島農業(yè)大學理信學院(6)將帶符號的整型數據(int型)賦給long型變量時,57(7)將unsignedint型數據賦給longint型變量時,不存在符號擴展問題,只需將高位補0即可。將一個unsigned類型數據賦給一個占字節(jié)數相同的整型變量(例如:unsignedint=>int,unsignedlong=>long,unsignedshort=>short),將unsigned型變量的內容原樣送到非unsigned型變量中,但如果數據范圍超過相應整型的范圍,則會出現數據錯誤。將非unsigned型數據賦給長度相同的unsigned型變量,也是原樣照賦(連原有的符號位也作為數值一起傳送)。青島農業(yè)大學理信學院(7)將unsignedint型數據賦給longint58青島農業(yè)大學理信學院青島農業(yè)大學理信學院593)復合的賦值運算符賦值運算符前面加上其它運算符,就構成復合的賦值運算符;如+=-=等例子:a+=3等價于a=a+3x*=y+8等價于x=x*(y+8)x%=3等價于x=x%3以“a+=3”為例來說明,它相當于使a進行一次自加3的操作。即先使a加3,再賦給a。青島農業(yè)大學理信學院3)復合的賦值運算符賦值運算符前面加上其它運算符,就構成復合60
C語言規(guī)定可以使用10種復合賦值運算符:+=,-=,*=,/=,%=,<<=,>>=,&=,∧=,|=
青島農業(yè)大學理信學院C語言規(guī)定可以使用10種復合賦值運算符:青島農業(yè)大學理信學614)賦值表達式由賦值運算符將一個變量和一個表達式連接起來的式子稱為“賦值表達式”。一般形式為<變量><賦值運算符><表達式>
比如a=3就是一個賦值表達式青島農業(yè)大學理信學院4)賦值表達式由賦值運算符將一個變量和一個表達式連接起來的式62賦值表達式的值①求賦值運算符右側的“表達式”的值;②賦給賦值運算符左側的變量;③賦值表達式的值就是右側的計算結果。例子:a=3*5青島農業(yè)大學理信學院賦值表達式的值①求賦值運算符右側的“表達式”的值;青島農業(yè)大63左值和右值左值(lvalue):賦值運算符左側的標識符變量可以作為左值;而表達式就不能作為左值(如a+b);常變量也不能作為左值。
右值(rvalue):出現在賦值運算符右側的表達式左值也可以出現在賦值運算符右側,因而左值都可以作為右值。青島農業(yè)大學理信學院左值和右值左值(lvalue):賦值運算符左側的標識符右64賦值表達式中的“表達式”,又可以是一個賦值表達式。
例如:a=(b=5)分析:括弧內的“b=5”是一個賦值表達式,它的值等于5。執(zhí)行表達式“a=(b=5)”相當于執(zhí)行“b=5”和“a=b”兩個賦值表達式。賦值運算符按照“自右而左”的結合順序,因此,“(b=5)”外面的括弧可以不要,即“a=(b=5)”和“a=b=5”等價。青島農業(yè)大學理信學院賦值表達式中的“表達式”,又可以是一個賦值表分析:括弧內的65賦值表達式∶(a=3*5)=4*3分析:先執(zhí)行括弧內的運算,將15賦給a,然后執(zhí)行4*3的運算,得12,再把12賦給a。最后a的值為12,整個表達式的值為12??梢钥吹健?a=3*5)出現在賦值運算符的左側,因此賦值表達式(a=3*5)是左值注意:在對賦值表達式(a=3*5)求解后,變量a得到值15執(zhí)行(a=3*5)=4*3時,實際上是將4*3的積12賦給變量a,而不是賦給3*5。不能寫成:a=3*5=4*3青島農業(yè)大學理信學院賦值表達式∶(a=3*5)=4*3分析:先執(zhí)行括弧內的運算,66賦值表達式也可以包含復合的賦值運算符。
如:a+=a-=a*a分析:此賦值表達式的求解步驟如下∶①先進行“a-=a*a”的運算,它相當于a=a-a*a,a的值為12-144=-132。②再進行“a+=-132”的運算,相當于a=a+(-132),a的值為-132-132=-264。青島農業(yè)大學理信學院賦值表達式也可以包含復合的賦值運算符。分析:此賦值表達式的求67將賦值表達式作為表達式的一種,使賦值操作不僅可以出現在賦值語句中,而且可以以表達式形式出現在其他語句(如輸出語句、循環(huán)語句等)中。如:printf("%d",a=b);
分析:如果b的值為3,則輸出a的值(也是表達式a=b的值)為3。在一個語句中完成了賦值和輸出雙重功能。青島農業(yè)大學理信學院將賦值表達式作為表達式的一種,使賦值操作不僅可以出現68逗號運算符:將兩個表達式連接起來,又稱為“順序求值運算符”
如:3+5,6+8
一般形式:
表達式1,表達式2求解過程:先求解表達式1,再求解表達式2。整個逗號表達式的值是表達式2的值。
逗號表達式的值為143、逗號運算符和逗號表達式青島農業(yè)大學理信學院逗號運算符:將兩個表達式連接起來,又稱為“順序求一般形69例:逗號表達式a=3*5,a*4
分析:賦值運算符的優(yōu)先級別高于逗號運算符,因此應先求解a=3*5。a的值為15,然后求解a*4,得60。整個逗號表達式的值為60。
一個逗號表達式又可以與另一個表達式組成一個新的逗號表達式如:(a=3*5,a*4),a+5先計算出a的值等于15,再進行a*4的運算得60(但a值未變,仍為15),再進行a+5得20,即整個表達式的值為20。青島農業(yè)大學理信學院例:逗號表達式a=3*5,a*4分析:賦值運算符的優(yōu)先級別70逗號表達式的一般形式可以擴展為
表達式1,表達式2,表達式3,……,表達式n它的值為表達式n的值。逗號運算符是所有運算符中級別最低的例:①x=(a=3,6*3)②x=a=3,6*3賦值表達式,將一個逗號表達式的值賦給x,x的值等于18逗號表達式,包括一個賦值表達式和一個算術表達式,x的值為3,整個逗號表達式的值為18。青島農業(yè)大學理信學院逗號表達式的一般形式可以擴展為逗號運算符是所有運算符中級別最71注意:并不是任何地方出現的逗號都是作為逗號運算符。例如函數參數也是用逗號來間隔的。如:printf(“%d,%d,%d”,a,b,c);“a,b,c”并不是一個逗號表達式,它是printf函數的3個參數printf(“%d,%d,%d”,(a,b,c),b,c)“(a,b,c)”是一個逗號表達式,它的值等于c的值。青島農業(yè)大學理信學院注意:并不是任何地方出現的逗號都是作為逗號運算符。例如函數參72第三章數據類型、運算符
與表達式第三章數據類型、運算符
與表達式73算法處理的對象是數據。數據是以某種特定的形式存在的,如整數、實數、字符等。所謂數據結構,就是指數據的組織形式。完整的程序設計=數據結構+算法
+程序設計方法+語言工具青島農業(yè)大學理信學院算法處理的對象是數據。完整的程序設計=數據結構+算法
+程序74主要內容一、數據類型二、變量與常量三、運算符四、表達式數據成分運算成分青島農業(yè)大學理信學院主要內容一、數據類型數據成分運算成分青島農業(yè)大學理信學院75一、數據類型C語言的數據類型構造類型指針類型*空類型(無值類型)void枚舉類型enum數組類型結構類型struct聯合類型union基本類型整型int字符型char實型(浮點型)單精度實型float雙精度實型double青島農業(yè)大學理信學院一、數據類型C語言的構造類型指針類型*空類型(無值類76二、變量與常量常量:指在程序運行過程中,值不能發(fā)生變化的量。常量可以有不同類型:比如,這些常量稱為字面常量或直接常量整型100,125,-100,0實型3.14,0.125,-3.789字符型‘a’,‘b’,‘2’字符串“a”,“ab”,“1232”青島農業(yè)大學理信學院二、變量與常量常量:指在程序運行過程中,值不能發(fā)生變化的量。77符號常量定義與使用定義:使用#define#definePI3.14使用:area=PI*3*3程序中用#define命令行定義PI代表常量3.14,此后凡在本文件中出現的PI都代表3.14,可以和常量一樣進行運算。PI=3.1415錯誤!常量值不能改變!習慣上,符號常量名用大寫,變量名用小寫優(yōu)點:含義清楚;一改全改青島農業(yè)大學理信學院符號常量定義與使用定義:使用#define青島農業(yè)大學理信學78例3.1#definePRICE30#include<stdio.h>voidmain(){intnum,total;num=10;total=num*PRICE;printf("total=%d",total);}青島農業(yè)大學理信學院例3.1#definePRICE30青島農業(yè)大學理信79變量變量:程序運行期間值可以發(fā)生改變的量。變量代表內存中具有特定屬性的一個存儲單元,它用來存放數據,這就是變量的值。青島農業(yè)大學理信學院變量變量:程序運行期間值可以發(fā)生改變的量。變量代表內存中具有80變量名實際上是一個以一個名字對應代表一個地址。在對程序編譯連接時由編譯系統給每一個變量名分配對應的內存地址。從變量中取值,實際上是通過變量名找到相應的內存地址,從該存儲單元中讀取數據。青島農業(yè)大學理信學院變量名實際上是一個以一個名字對應代表一個地址。青島農業(yè)大學理81變量定義數據類型變量名;比如,inta;floatx,y;青島農業(yè)大學理信學院變量定義數據類型變量名;青島農業(yè)大學理信學院82變量命名變量命名的規(guī)定:C語言規(guī)定標識符只能由字母、數字和下劃線三種字符組成,且第一個字符必須為字母或下劃線。變量名不能與關鍵字重名
例:sum,_total,month,Student_name,lotus_1_2_3,BASIC,li_ling
M.D.John,¥123,3D64,a>b
青島農業(yè)大學理信學院變量命名變量命名的規(guī)定:C語言規(guī)定標識符只能由字母、數字和下83注意:C語言區(qū)分大小寫,即:ABC與Abc認為是兩個不同的變量。建議變量名的長度最好不要超過8個字符。在選擇變量名和其它標識符時,應注意做到“見名知意”,即選有含意的英文單詞(或其縮寫)作標識符。(intStu)要求對所有用到的變量作強制定義,也就是“先定義,后使用”。青島農業(yè)大學理信學院注意:C語言區(qū)分大小寫,即:ABC與Abc認為是兩個不同的變84補充——C語言的關鍵字(附錄B)關鍵字(keywords)是C語言預定義的詞法符號,具有固定含義和用途,不能作為標識符使用。C語言的關鍵字:autobreakcasecharconstcontinuedefaultdodoubleelseenumexternfloatforgotoifintlongregisterreturnshortsignedsizeofstaticstructswitchtypedefunionunsignedvoidvolatilewhile
注意,關鍵字必須小寫。青島農業(yè)大學理信學院補充——C語言的關鍵字(附錄B)關鍵字(keyword851、整型數據在內存中是以二進制形式存放的,整型數據占用兩個字節(jié)的空間(TurboC2.0及TurboC++3.0中為兩個字節(jié),教材例子也假定整型占兩個字節(jié),但是在VC++6.0中則分配4個字節(jié))。數據采用補碼形式表示。青島農業(yè)大學理信學院1、整型數據在內存中是以二進制形式存放的,整型數據占用兩個字861)整型常量十進制整數123,-123八進制整數。以0開頭的數0123,-0123十六進制整數以0x開頭的數0x1A,-0xFD青島農業(yè)大學理信學院1)整型常量十進制整數青島農業(yè)大學理信學院872)整型變量
整型變量在內存中的存放形式整型數據在內存中的存放形式數據在內存中是以二進制形式存放的實際上,數值是以補碼(complement)表示的。+10在內存中的存放青島農業(yè)大學理信學院2)整型變量
整型變量在內存中的存放形式+10在內存中的存放88-10在內存中的存放青島農業(yè)大學理信學院-10在內存中的存放青島農業(yè)大學理信學院89整型變量的分類基本整型int短整型shortint長整型longint三者區(qū)別在于:可以表示的整數范圍不同。青島農業(yè)大學理信學院整型變量的分類基本整型int青島農業(yè)大學理信學院90類型類型說明符長度數的范圍基本型int2字節(jié)-32768~32767短整型short2字節(jié)-215~215-1長整型long4字節(jié)-231~231-1青島農業(yè)大學理信學院類型類型說明符長度91整型的符號整型數據還有有符號數和無符號數之分。signedunsigned青島農業(yè)大學理信學院整型的符號整型數據還有有符號數和無符號數之分。signedu92整型共六種有符號基本整型有符號短整型有符號長整型無符號基本整型無符號短整型無符號長整型(signed)int(signed)short(int)(signed)long(int)unsignedintunsignedshort(int)unsignedlong(int)
注意:括號表示其中的內容是可選的。青島農業(yè)大學理信學院整型共六種有符號基本整型(signed)int注意:括93整數(13為例)在存儲單元中的存儲情況青島農業(yè)大學理信學院整數(13為例)在存儲單元中的存儲情況青島農業(yè)大學理信學院943)整型變量的定義和使用定義:inta,b(指定變量a、b為整型)unsignedshortc,d;(指定變量c、d為無符號短整型)longe,f;(指定變量e、f為長整型)對變量的定義,一般是放在一個函數的開頭的聲明部分(也可以放在函數中某一分程序內,但作用域只限它所在的分程序)使用:a=12;b=10;c=a+b;賦值語句青島農業(yè)大學理信學院3)整型變量的定義和使用定義:賦值語句青島農業(yè)大學理信學院95溢出inta,b;a=32767;b=a+1;0111111111111111a01000000000000000b-32768青島農業(yè)大學理信學院溢出inta,b;0111111111111111a010964)整型常量的類型整型變量可分為int、shortint、longint和unsignedint、unsignedshort、unsignedlong等類別。那么常量呢?在將一個整型常量賦值給上述幾種類別的整型變量時如何做到類型匹配?請注意以下幾點:(1)一個整數,如果其值在-32768~+32767范圍內,認為它是int型,它可以賦值給int型和longint型變量。(2)一個整數,如果其值超過了上述范圍,而在-2147483648~+2147483647范圍內,則認為它是長整型,可以將它賦值給一個longint型變量。青島農業(yè)大學理信學院4)整型常量的類型整型變量可分為int、shortint97(3)如果某一計算機系統的c版本(例如turboc)確定shortint與int型數據在內存中占據的長度相同,則它的表數范圍與int型相同。因此,一個int型的常量也同時是一個shortint型常量,可以賦給int型或shortint型變量。(4)一個整常量后面加一個字母u,認為是unsignedint型,如12345u,在內存中按unsignedint規(guī)定的方式存放。如果寫成-12345u,則先將-12345轉換成其補碼53191,然后按無符號數存儲。(5)整常量后加一個字母l或L,則認為是longint型常量。例如123l、432l、0l等,這往往用于函數調用中。如果函數的形參為longint型,則要求實參也為longint型,此時用123作實參不行,而要用123l作實參。青島農業(yè)大學理信學院(3)如果某一計算機系統的c版本(例如turboc)確定982、浮點型1)浮點型常量兩種表示形式小數指數0.1233e-3注意:字母e(或E)之前必須有數字,且e后面的指數必須為整數:1e3、1.8e-3、-123e-6、-0.1e-3e3、2.1e3.5、.e3、e
青島農業(yè)大學理信學院2、浮點型1)浮點型常量兩種表小數0.123注意:字母e(或99規(guī)范化的指數形式字母e之前的小數中,小數點左邊有且僅有一位非零數字。例如:123.456可以表示為:123.456e0,12.3456e1,1.23456e2,0.123456e3,0.0123456e4,0.00123456e其中的1.23456e2稱為“規(guī)范化的指數形式”。青島農業(yè)大學理信學院規(guī)范化的指數形式字母e之前的小數中,小數點左邊有且僅有一位非100浮點數在內存中的存放一個浮點型數據一般在內存中占4個字節(jié)(32位)。分為小數部分和指數部分,分別存放。青島農業(yè)大學理信學院浮點數在內存中的存放一個浮點型數據一般在內存中占4個字節(jié)(31012)浮點型變量單精度型float雙精度型double長雙精度型longdouble類型位數數的范圍有效數字float3210-37~10386~7位double型6410-307~1030815~16位longdouble12810-4931~10493218~19位青島農業(yè)大學理信學院2)浮點型變量單精度型float類型位102浮點型數據的舍入誤差例3.4main(){floata,b;a=123456,789e5;b=a+20;printf("%f",b);}運行程序得到的a和b的值是12345678848.000000只有7位有效數字時準確的因此,避免將一個很大的數和很小的數相加減青島農業(yè)大學理信學院浮點型數據的舍入誤差例3.4青島農業(yè)大學理信學院103浮點型常量的運算C編譯系統將實型常量作為雙精度來處理。例如已定義一個實型變量f,有如下語句:f=2.45678*4523.65系統將2.45678和4523.65按雙精度數據存儲(占64位)和運算,得到一個雙精度的乘積,然后取前7位賦給實型變量f。(除非在數據后加F或f)一個實型常量可以賦給一個float型、double型或longdouble變量。根據變量的類型截取實型常量中相應的有效位數字。例如,floata;a=111111.111;由于float型變量只能接收7位有效數字青島農業(yè)大學理信學院浮點型常量的運算C編譯系統將實型常量作為雙精度來處理。例如已1043、字符型1)字符常量:單引號括起來的一個字符比如,‘a’‘?’注意:‘a’與‘A’是兩個不同的字符常量。例‘a’,’A’,‘1’‘abc’、“a”青島農業(yè)大學理信學院3、字符型1)字符常量:單引號括起來的一個字符例‘a’,’A105補充——C語言的字符集(附錄A)
C的字符集(characterset)是ASCII碼的子集。標準ASCII碼從0~127,共128個字符。0~31和127是控制字符,屬不可見字符。32~126是可見字符。以下字符的碼值要記憶:32--空格’’48--’0’65--’A’97--’a’擴展ASCII碼,從0~255,共256個字符。128~255是圖形符號。青島農業(yè)大學理信學院補充——C語言的字符集(附錄A)C的字符集(chara106特殊的字符常量——轉義字符以\開頭的字符序列,稱為轉義字符。\n換行\(zhòng)b退格\t橫向跳格\f換頁\r回車\\反斜杠\’單引號\”雙引號\dddddd表示1到3位八進制數字\xhhhh表示1到2位十六進制數字青島農業(yè)大學理信學院特殊的字符常量——轉義字符以\開頭的字符序列,稱為轉義字符。107轉義字符的使用例3.5main(){printf("abc\tde\rf\tg\n");printf("h\ti\b\bjk");}青島農業(yè)大學理信學院轉義字符的使用例3.5青島農業(yè)大學理信學院1082)字符變量定義:charc;使用:c=‘a’;青島農業(yè)大學理信學院2)字符變量定義:青島農業(yè)大學理信學院109字符數據在內存中的存儲一個字符變量在內存中占用一個字節(jié)。內存中實際存儲的并不是字符本身,而是字符的ASCII碼。整型數據和字符型數據存儲形式類似,可以通用。青島農業(yè)大學理信學院字符數據在內存中的存儲一個字符變量在內存中占用一個字節(jié)。青島110例3.6向字符變量賦以整數charc1,c2;c1=97;c2=98;printf(“%c%c\n”,c1,c2);printf(“%d%d\n”,c1,c2);注意:字符數據長一個字節(jié),所以最多只能表示0~255范圍內的整數。其第一位還可以被用作符號位。青島農業(yè)大學理信學院例3.6向字符變量賦以整數charc1,c2;注意:字符111例3.7大小寫轉換#include<stdio.h>voidmain(){ charc; c=‘a’; c=c-32; printf(“%c”,c);}/*字符數據可以和整型數據相互賦值*/C語言允許字符數據與整數直接參與算術運算。青島農業(yè)大學理信學院例3.7大小寫轉換#include<stdio.h>C語1123)字符串常量用雙引號括起來的字符序列如“abc”,“a”C語言規(guī)定:在每個字符串最后加一個‘\0’作為字符串結束標記。比如,“CHINA”這個字符串常量CHINA\0青島農業(yè)大學理信學院3)字符串常量用雙引號括起來的字符序列CHINA\0青島農業(yè)113問題:“a”與‘a’是否相同?答案是不同?!產’是字符常量,而“a”是字符串常量?!癮”相當于‘a’+‘\0’結論:不能把一個字符串常量賦給一個字符變量。charc;c=“a”;錯!青島農業(yè)大學理信學院問題:“a”與‘a’青島農業(yè)大學理信學院114在c語言中沒有專門的字符串變量。如果想將一個字符串存放在變量中,以便保存,必須使用字符數組,即用一個字符型數組來存放一個字符串,數組中每一個元素存放一個字符。青島農業(yè)大學理信學院在c語言中沒有專門的字符串變量。如果想將一個字符串存放在變量1154、變量賦初值C語言允許在定義變量的同時使變量初始化。比如,inta=3;相當于inta;a=3;charc=‘a’;inta,b,c=10;只對一部分變量賦初值inta=1,b=1,c=1; 不要寫成inta=b=c=1;錯!青島農業(yè)大學理信學院4、變量賦初值C語言允許在定義變量的同時使變量初始化。青島農116三、運算符與表達式(1)算術運算符+-*/%(2)關系運算符><==>=<=!=(3)邏輯運算符!&&||(4)位運算符<<>>~|∧&(5)賦值運算符=及其擴展賦值運算符(6)條件運算符?:(7)逗號運算符,(8)指針運算符*和&(9)求字節(jié)數運算符sizeof(10)強制類型轉換運算符(類型))(11)分量運算符.->(12)下標運算符[](13)其他如函數調用運算符()表達式:使用運算符和括號將變量、常量等操作數連接起來的,符合C語法規(guī)則的式子,稱為表達式。青島農業(yè)大學理信學院三、運算符與表達式(1)算術運算符+-*/%(8)1171、算術運算符與算術表達式+加法運算符,或正值運算符,如:3+5、+3-減法運算符,或負值運算符,如:5-2、-3*乘法運算符,如:3*5/除法運算符,如:5/3%模運算符,或稱求余運算符,%兩側均應為整型數據,如:7%4的值為3優(yōu)先級:運算按照優(yōu)先級由高到低進行結合方向(結合性):從左至右,也稱為左結合性青島農業(yè)大學理信學院1、算術運算符與算術表達式+加法運算符,或正值運算符,如:118算術運算符優(yōu)先級和結合性(附錄C)表達式求值的普遍順序(從左向右掃描):圓括號()先內圓括號,后外圓括號;函數引用運算符優(yōu)先級不同,先做優(yōu)先級高的操作,然后做優(yōu)先級低的操作;運算符優(yōu)先級相同,按結合性處理;青島農業(yè)大學理信學院算術運算符優(yōu)先級和結合性(附錄C)表達式求值的普遍順序(從左119類型轉換自動類型轉換如果運算符兩側的數據類型不同,先進行自動類型轉換,再進行運算。強制類型轉換形式:(類型名)(表達式)short、chardoublefloatlongunsignedint高低青島農業(yè)大學理信學院類型轉換自動類型轉換short、chardoublefloa120例floatx;inti,j;x=3.6i=(int)x;j=(int)x%2;i的值是多少?j的值是多少?x的值是多少?青島農業(yè)大學理信學院例floatx;i的值是多少?青島農業(yè)大學理信學院121自增、自減運算符自增++自減--作用:使變量的值增1或者減1這兩個運算符只用于變量,而不用于常量和表達式。例如,5++,(a+b)++
不合法!結合方向是“自右至左”,例如-i++青島農業(yè)大學理信學院自增、自減運算符自增++青島農業(yè)大學理信學院122注意i++和++i的不同i++先使用i的值,再將i加1++i先將i加1,再使用i的值例子:i=3;j=i++;j=++i;青島農業(yè)大學理信學院注意i++和++i的不同i++青島農業(yè)大學理信學院123有關表達式使用中的問題說明歧義問題書寫程序,注意避免歧義青島農業(yè)大學理信學院有關表達式使用中的問題說明歧義問題青島農業(yè)大學理信學院1242、賦值運算符和賦值表達式1)賦值運算符=作用:將右邊的數據賦給左邊的變量i=3i=x+y青島農業(yè)大學理信學院2、賦值運算符和賦值表達式1)賦值運算符=青島農業(yè)大學理信1252)類型轉換如果賦值運算符兩側類型不一致,但都是數值型或字符型時,賦值時會自動進行類型轉換。將實型數據(包括單、雙精度)賦給整型變量時,舍棄實數的小數部分。將整型數據賦給單、雙精度變量時,數值不變,但以浮點數形式存儲到變量中。將一個double型數據賦給float變量時,截取其前面7位有效數字,存放到float變量的存儲單元(32位)中。但應注意數值范圍不能溢出。將一個float型數據賦給double變量時,數值不變,有效位數擴展到16位,在內存中以64位(bit)存儲。青島農業(yè)大學理信學院2)類型轉換如果賦值運算符兩側類型不一致,但都是數值型或字符126(4)字符型數據賦給整型變量時,由于字符只占1個字節(jié),需考慮是否有符號,有符號位需“符號擴展”。unsignedsigned青島農業(yè)大學理信學院(4)字符型數據賦給整型變量時,由于字符只占1個字節(jié),需考127(5)將一個int、short、long型數據賦給一個char型變量時,只將其低8位原封不動地送到char型變量(即截斷)。青島農業(yè)大學理信學院(5)將一個int、short、long型數據賦給一個ch128(6)將帶符號的整型數據(int型)賦給long型變量時,要進行符號擴展。反之,若將一個long型數據賦給一個int型變量,只將long型數據中低16位原封不動地送到整型變量(即截斷)。青島農業(yè)大學理信學院(6)將帶符號的整型數據(int型)賦給long型變量時,129(7)將unsignedint型數據賦給longint型變量時,不存在符號擴展問題,只需將高位補0即可。將一個unsigned類型數據賦給一個占字節(jié)數相同的整型變量(例如:unsignedint=>int,unsignedlong=>long,unsignedshort=>short),將unsigned型變量的內容原樣送到非unsigned型變量中,但如果數據范圍超過相應整型的范圍,則會出現數據錯誤。將非unsigned型數據賦給長度相同的unsigned型變量,也是原樣照賦(連原有的符號位也作為數值一起傳送)。青島農業(yè)大學理信學院(7)將unsignedint型數據賦給longint130青島農業(yè)大學理信學院青島農業(yè)大學理信學院1313)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年骨科關節(jié)用藥合作協議書
- 2022-2023學年廣西欽州市四年級(上)期末數學試卷
- 2025年逆變式電焊機合作協議書
- 2025年九年級班主任心得樣本(2篇)
- 2025年買賣協議參考范文(2篇)
- 2025年五人股東合作的協議(2篇)
- 2025年代課教師勞動合同標準版本(4篇)
- 2025年代交社會保險協議(三篇)
- 2025年二年級美術教學工作總結(5篇)
- 2025年買賣房屋定金協議簡單版(三篇)
- 2025年三人合伙投資合作開店合同模板(三篇)
- 2025年合資經營印刷煙包盒行業(yè)深度研究分析報告
- 天津市五區(qū)縣重點校2024-2025學年高一上學期1月期末聯考試題 化學 含答案
- 人教版高一數學上冊期末考試試卷及答案
- 安全學原理第2版-ppt課件(完整版)
- 機動車登記證書
- 彈性力學第十一章彈性力學的變分原理
- 鉭鈮礦開采項目可行性研究報告寫作范文
- 小升初數學銜接班優(yōu)秀課件
- 出口食品生產企業(yè)備案自我評估表
- Jane eyre《簡愛》英文原版
評論
0/150
提交評論