譚浩強C語言第3章數據類型講課教案_第1頁
譚浩強C語言第3章數據類型講課教案_第2頁
譚浩強C語言第3章數據類型講課教案_第3頁
譚浩強C語言第3章數據類型講課教案_第4頁
譚浩強C語言第3章數據類型講課教案_第5頁
已閱讀5頁,還剩63頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

第三章數據類型、運算符與表達式各種進制之間的轉換(zhuǎnhuàn)二進制、八進制、十六進制轉換(zhuǎnhuàn)成十進制方法:按權相加1第一頁,共68頁。各種進制之間的轉換(整數)二進制、八進制、十六進制(shíliùjìnzhì)轉換成十進制方法:按權相加十進制轉換成二進制、八進制、十六進制(shíliùjìnzhì)原理:方法(fāngfǎ):連續除以基,從低到高記錄余數,直至商為0例把十進制數59轉換成二進制數5922921427232120(59)10=(111011)2110111111011余余余余余余例把十進制數159轉換成八進制數1598198280(159)10=(237)8237余7余3余2例把十進制數459轉換成十六進制數4591628161160(459)10=(1CB)161CB余11余12余12第二頁,共68頁。二進制與八進制之間的轉換二進制轉換成八進制:從右向左,每3位一組(不足(bùzú)3位左補0),轉換成八進制八進制轉換成二進制:用3位二進制數代替每一位八進制數例(1101001)2=(001,101,001)2=(151)8例(246)8=(010,100,110)2=(10100110)2000~0001~1010~2011~3100~4101~5110~6111~73第三頁,共68頁。二進制與十六進制之間的轉換(zhuǎnhuàn)二進制轉換(zhuǎnhuàn)成十六進制:從右向左,每4位一組(不足4位左補0),轉換(zhuǎnhuàn)成十六進制十六進制轉換(zhuǎnhuàn)成二進制:用4位二進制數代替每一位十六進制數例(11010101111101)2=(0011,0101,0111,1101)2=(357D)16例(4B9E)16=(0100,1011,1001,1110)2=(100101110011110)20000~00001~10010~20011~30100~40101~50110~60111~71000~81001~91010~A1011~B1100~C1101~D1110~E1111~F4第四頁,共68頁。字節和位內存以字節為單元組成(zǔchénɡ)每個字節有一個地址一個字節一般由8個二進制位組成(zǔchénɡ)每個二進位的值是0或101234567012345678910……...5第五頁,共68頁。數值的表示方法——原碼、反碼和補碼原碼:最高位為符號位,其余各位為數值本身的絕對值反碼:正數(zhèngshù):反碼與原碼相同負數:符號位為1,其余位對原碼取反補碼:正數(zhèngshù):原碼、反碼、補碼相同負數:最高位為1,其余位為原碼取反,再對整個數加13126912457810119-5=49+7=16=(4)126第六頁,共68頁。原碼反碼補碼+7000001110000011100000111-7100001111111100011111001+0000000000000000000000000-0100000001111111100000000數的范圍01111111~11111111(-127~+127)01111111~10000000(-127~+127)01111111~10000000(-128~+127)(用一字節表示數)負數補碼(bǔmǎ)轉換成十進制數:最高位不動,其余位取反加1例補碼(bǔmǎ):11111001取反:10000110加1:10000111=-77第七頁,共68頁。3.1數據類型數據類型總表C數據類型基本類型構造類型指針類型空類型void定義類型typedef字符類型char枚舉類型enum整型實型單精度型float雙精度型double數組結構體struct共用體union短整型short長整型long整型int數據類型決定:1.數據占內存字節數2.數據取值范圍(fànwéi)3.其上可進行的操作8第八頁,共68頁。基本(jīběn)數據類型類型符號關鍵字數的表示范圍所占位數整型字符(zìfú)型實型有無(signed)int16-32768~32767(signed)short16-32768~32767(signed)long32-2147483648~214748364716unsigned

int0~65535320~4294967295unsigned

longunsigned

short160~65535有float323.4e-38~3.4e38有double641.7e-308~1.7e308有char8-128~127無unsignedchar80~255說明:數據類型所占字節數隨機器(jīqì)硬件不同而不同,上表以IBMPC機為例:9第九頁,共68頁。3.2常量與變量標識符定義:用來標識變量、常量、函數等的字符序列組成(zǔchénɡ):只能由字母、數字、下劃線組成(zǔchénɡ),且第一個字母必須是字母或下劃線大小寫敏感不能使用關鍵字長度:最長32個字符命名原則:見名知意不宜混淆如l與I,o與0例:判斷(pànduàn)下列標識符號合法性sumSumM.D.JohndayDate3daysstudent_name#33lotus_1_2_3chara>b_above$123M.D.John3days#33char$123a>b10第十頁,共68頁。一般用大寫字母是宏定義預處理命令(mìnglìng),不是C語句如#definePRICE30常量定義(dìngyì):程序運行時其值不能改變的量(即常數)分類:符號常量:用標識符代表常量定義(dìngyì)格式:#define符號常量常量例符號(fúhào)常量舉例(ch2_1.c)#definePRICE30main(){intnum,total;num=10;total=num*PRICE;printf("total=%d",total);}運行結果:total=300說明:

程序中用#define命令行定義PRICE代表常量30,此后凡在本文件中出現的PRICE都代表30,可以和常量一樣進行運算說明:如再用賦值語句給PRICE賦值是錯的PRICE=40;/*錯誤,不能給符號常量賦值3.2常量與變量11第十一頁,共68頁。變量變量代表內存中具有特定屬性的一個存儲單元,它用來存放數據,這就是變量的值。變量名實際上是一個以一個名字(míngzi)對應代表一個地址,在對程序編譯連接時由編譯系統給每一個變量名分配對應的內存地址。從變量中取值,實際上是通過變量名找到相應的內存地址,從該存儲單元中讀取數據。12第十二頁,共68頁。編譯程序根據變量定義為其分配指定字節的內存單元…...地址inta=1,b=-3,c;abc2字節2字節2字節地址地址…...內存1-3隨機數變量概念:其值可以改變的量變量名與變量值變量定義(dìngyì)的一般格式:數據類型變量1[,變量2,…,變量n];變量(biànliàng)初始化:定義時賦初值例:inta,b,c;floatdata;決定分配字節數和數的表示(biǎoshì)范圍合法標識符例:inta=2,b,c=4;floatdata=3.67;charch=‘A’;intx=1,y=1,z=1;

intx=y=z=1;變量的使用:先定義,后使用例1intstudent;stadent=19;//Undefinedsymbol‘statent’infunctionmain

例2floata,b,c;c=a%b;//Illegaluseoffloatingpointinfunctionmain

變量定義位置:一般放在函數開頭main(){inta,b=2;floatdata;a=1;data=(a+b)*1.2;printf(“data=%f\n”,data);}變量定義可執行語句main(){inta,b=2;a=1;floatdata;data=(a+b)*1.2;printf(“data=%f\n”,data);}13第十三頁,共68頁。3.2常量與變量標識(biāozhì)符定義:用來標識(biāozhì)變量、常量、函數等的字符序列組成:只能由字母、數字、下劃線組成,且第一個字母必須是字母或下劃線大小寫敏感不能使用關鍵字長度:最長32個字符命名原則:見名知意不宜混淆如l與I,o與0例:判斷(pànduàn)下列標識符號合法性sumSumM.D.JohndayDate3daysstudent_name#33lotus_1_2_3chara>b_above$123M.D.John3days#33char$123a>b建議(jiànyì)變量名的長度最好不要超過8個字符.14第十四頁,共68頁。整型常量(整常數)三種形式:十進制整數:由數字(shùzì)0~9和正負號表示.如123,-456,0八進制整數:由數字(shùzì)0開頭,后跟數字(shùzì)0~7表示.如0123,011十六進制整數:由0x開頭,后跟0~9,a~f,A~F表示.如0x123,0xff例12與12L例30000為int型65536為longint型整型常量的類型根據(gēnjù)其值所在范圍確定其數據類型在整常量后加字母l或L,認為它是longint型常量問題:0123=()100x123=()100xff=()1083291255問題(wèntí):0123=()100x123=()100xff=()103.3整型數據15第十五頁,共68頁。3.3.2整型變量(1)整型數據在內存中的存放形式數據在內存中是以二進制形式存放的。如:inti;/*定義(dìngyì)為整型變量*/i=10;/*給i賦以整數10*/注意:十進制數10的二進制形式為1010,TurboC2.0和TurboC++3.0為一個整型變量在內存中分配2個字節的存儲單元(cúnchǔdānyuán)(不同的編譯系統為整型數據分配的字節數是不相同的,VC++6.0則分配4個字節)。數值是以補碼(complement)表示的。16第十六頁,共68頁。(2)整型變量(biànliàng)的分類共六種有符號(fúhào)基本整型有符號(fúhào)短整型有符號(fúhào)長整型無符號(fúhào)基本整型無符號(fúhào)短整型無符號(fúhào)長整型(signed)int(signed)short(int)(signed)long(int)unsignedintunsignedshort(int)unsignedlong(int)注意:括號表示(biǎoshì)其中的內容是可選的.17第十七頁,共68頁。整數(zhěngshù)類型的有關數據:類型類型說明符長度數的范圍(fànwéi)基本型int2字節-32768~32767短整型short2字節-215~215-1長整型long4字節-231~231-1無符號整型unsigned2字節0~65535無符號短整型unsignedshort2字節0~65535無符號長整型unsignedlong4字節0~(232-1)18第十八頁,共68頁。例如:整數(zhěngshù)13在內存中實際存放的情況:19第十九頁,共68頁。例3.2整型變量的定義與使用(shǐyòng)

#include<stdio.h>

voidmain()

{inta,b,c,d;/*指定a、b、c、d為整型變量*/

unsignedu;/*指定u為無符號整型變量*/

a=12;b=-24;u=10;

c=a+u;d=b+u;

printf(″a+u=%d,b+u=%d\n″,c,d);

}說明:可以看到不同種類的整型數據(shùjù)可以進行算術運算運行(yùnxíng)結果:a+u=22,b+u=-1420第二十頁,共68頁。例3.3整型數據(shùjù)的溢出

#include<stdio.h>

voidmain()

{inta,b;

a=32767;

b=a+1;

printf(“%d,%d\n”,a,b);

}

說明:數值是以補碼(bǔmǎ)表示的。一個整型變量只能容納-32768~32767范圍內的數,無法表示大于32767或小于-32768的數。遇此情況就發生“溢出”。運行(yùnxíng)結果:32767,-3276821第二十一頁,共68頁。3.3.3整型常量的類型(1)一個整數,如果其值在-32768~+32767范圍內,認為它是int型,它可以賦值給int型和longint型變量。(2)一個整數,如果其值超過了上述范圍,而在-2147483637~+2147483647范圍內,則認為它是為長整型。可以將它賦值給一個longint型變量。(3)如果所用的C版本(如TurboC)分配給shortint與int型數據在內存中占據的長度相同,則它的表數范圍與int型相同。因此(yīncǐ)一個int型的常量同時也是一個shortint型常量,可以賦給int型或shortint型變量。

22第二十二頁,共68頁。(4)一個整常量后面加一個字母u或U,認為是unsignedint型,如12345u,在內存中按unsignedint規定的方式存放(存儲單元中最高位不作為符號位,而用來存儲數據)。如果寫成-12345u,則先將-12345轉換成其補碼(bǔmǎ)53191,然后按無符號數存儲。(5)在一個整常量后面加一個字母l或L,則認為是longint型常量。例如:123l.432L.0L用于函數調用中。如果函數的形參為longint型,則要求實參也為longint型。23第二十三頁,共68頁。實型常量(實數或浮點數)表示形式:十進制數形式:(必須有小數點)如0.123,.123,123.0,0.0,123.指數(zhǐshù)形式:(e或E之前必須有數字;指數(zhǐshù)必須為整數)如12.3e3,123E2,1.23e4,e-5,1.2E-3.5實型常量的類型默認(mòrèn)double型在實型常量后加字母f或F,認為它是float型C編譯系統將浮點型常量作為雙精度來處理。例如:f=2.45678*4523.65系統先把2.45678和4523.65作為雙精度數,然后進行相乘的運算,得到的乘也是一個雙精度數。最后取其前7位賦給浮點型變量f。如是在數的后面加字母(zìmǔ)f或F(如1.65f,654.87F),這樣編譯系統就會把它們按單精度(32位)處理.24第二十四頁,共68頁。規范化的指數形式:在字母e(或E)之前的小數部分中,小數點左邊(zuǒbian)應有一位(且只能有一位)非零的數字.例如:123.456可以表示為:123.456e0,12.3456e1,1.23456e2,0.123456e3,0.0123456e4,0.00123456e其中的1.23456e3稱為“規范化的指數形式”。25第二十五頁,共68頁。3.4.2浮點型變量(1)浮點型數據在內存中的存放形式一個浮點型數據一般在內存中占4個字節(32位)。與整型數據的存儲方式不同,浮點型數據是按照指數形式存儲的。系統把一個浮點型數據分成(fēnchénɡ)小數部分和指數部分,分別存放。指數部分采用規范化的指數形式。26第二十六頁,共68頁。類型位數數的范圍(fànwéi)有效數字float3210-37~10386~7位double型6410-307~1030815~16位longdouble12810-4931~10493218~19位3.4浮點型數據(shùjù)(2)浮點型變量的分類(fēnlèi)浮點型變量分為單精度(float型)、雙精度(double型)和長雙精度型(longdouble)三類形式。例floata;a=111111.111;/*a=111111.1*/doubleb;b=111111.111;/*b=111111.111*/27第二十七頁,共68頁。例3.4浮點型數據(shùjù)的舍入誤差

#include<stdio.h>

voidmain()

{floata,b;

a=123456.789e5;

b=a+20;

printf(“%f\n”,b);

}

說明:一個浮點型變量只能(zhīnénɡ)保證的有效數字是7位有效數字,后面的數字是無意義的,并不準確地表示該數。應當避免將一個很大的數和一個很小的數直接相加或相減,否則就會“丟失”小的數運行(yùnxíng)結果:123456.789e528第二十八頁,共68頁。字符常量定義:用單引號括起來(qǐlái)的單個普通字符或轉義字符.字符(zìfú)常量的值:該字符(zìfú)的ASCII碼值<轉義字符及其含義:轉義字符含義\n\v\r\a\‘\ddd\t\b\f\\\“\xhh轉義字符含義換行垂直制表回車響鈴單引號3位8進制數代表的字符水平制表退格換頁反斜線雙引號2位16進制數代表的字符如‘\101’-----------‘A’‘\012’-----------’\n’‘\376’-----------’’‘\x61’-----------’a’‘\60’-----------’0’‘\483’----------()例:‘A’-------’\101’-------’\x41’--------65如‘A’——65,‘a’——97,‘0’——48,‘\n’——10如‘a’‘A’‘?’‘\n’‘\101’轉義字符:反斜線后面跟一個字符或一個代碼(dàimǎ)值表示例轉義字符舉例(ch2_001.c,ch2_004.c)

main(){printf("\101\x42C\n");printf("Isay:\"Howareyou?\"\n");printf("\\CProgram\\\n");printf("Turbo\'C\'");}運行結果:(屏幕顯示)ABCIsay:”Howareyou?”\CProgram\Turbo‘C’例main(){printf(“Y\b=\n”);}運行結果:屏幕顯示:=打印機輸出:¥29第二十九頁,共68頁。3.5字符(zìfú)型數據3.5.2字符變量字符型變量用來存放字符常量,注意只能放一個字符。字符變量的定義形式如下:charc1,c2;可以用下面語句對c1,c2賦值:c1=‘a’;c2=‘b’;一個字符變量在內存(nèicún)中占一個字節。30第三十頁,共68頁。3.5字符(zìfú)型數據3.5.3字符數據在內存中的存儲形式及其使用方法一個(yīɡè)字符常量存放到一個(yīɡè)字符變量中,實際上并不是把該字符的字型放到內存中去,而是將該字符的相應的ASCII代碼放到存儲單元中。這樣使字符型數據和整型數據之間可以通用。注意(zhùyì):一個字符數據既可以以字符形式輸出,也可以以整數形式輸出。31第三十一頁,共68頁。例3.6向字符(zìfú)變量賦以整數。

#include<stdio.h>

voidmain()

{charc1,c2;

c1=97;

c2=98;

printf(“%c%c\n”,c1,c2);

printf(“%d%d\n”,c1,c2);

}說明:在第3和第4行中,將整數97和98分別(fēnbié)賦給c1和c2,它的作用相當于以下兩個賦值語句: c1=′a′;c2=′b′;因為’a’和’b’的ASCII碼為97和98運行(yùnxíng)結果:ab979832第三十二頁,共68頁。例3.7大小寫字母的轉換(zhuǎnhuàn)

#include<stdio.h>

voidmain()

{charc1,c2;

c1=’a’;

c2=’b’;

c1=c1-32;

c2=c2-32;

printf(“%c%c″,c1,c2);

}說明:程序的作用是將兩個小寫字母a和b轉換成大寫字母A和B。從ASCII代碼表中可以看到每一個小寫字母比它相應的大寫字母的ASCII碼大32。C語言允許字符數據與整數直接進行算術(suànshù)運算。運行(yùnxíng)結果:AB

33第三十三頁,共68頁。說明:有些系統(如TurboC)將字符變量定義為signedchar型。其存儲單元中的最高位作為符號位,它的取值范圍是-128~127。如果在字符變量中存放一個ASCII碼為0~127間的字符,由于字節中最高位為0,因此(yīncǐ)用%d輸出字符變量時,輸出的是一個正整數。如果在字符變量中存放一個ASCII碼為128~255間的字符,由于在字節中最高位為1,用%d格式符輸出時,就會得到一個負整數。

34第三十四頁,共68頁。字符(zìfú)常量與字符(zìfú)串常量不同字符串常量定義:用雙引號(“”)括起來的字符序列存儲(cúnchǔ):每個字符串尾自動加一個‘\0’作為字符串結束標志hello\0例字符串“hello”在內存中aa\0例‘a’“a”例空串“”\0例:charch;ch=“A”;例:charch;ch=‘A’;結論:不能把一個字符(zìfú)串常量賦給一個字符(zìfú)變量。35第三十五頁,共68頁。3.6變量(biànliàng)賦初值(1)C語言允許在定義變量(biànliàng)的同時使變量(biànliàng)初始化如:inta=3;//指定a為整型變量(biànliàng),初值為3

floatf=3.56;//指定f為浮點型變量(biànliàng),初值為3.56

charc=‘a’;//指定c為字符變量(biànliàng),初值為‘a’36第三十六頁,共68頁。3.6變量(biànliàng)賦初值(2)可以使被定義的變量的一部分賦初值。如:inta,b,c=5;表示指定a、b、c為整型變量,但只對c初始化,c的初值為5(3)如果(rúguǒ)對幾個變量賦以同一個初值,應寫成:inta=3,b=3,c=3;表示a、b、c的初值都是3。不能寫成∶inta=b=c=3;注意:初始化不是在編譯階段(jiēduàn)完成的而是在程序運行時執行本函數時賦初值的,相當于有一個賦值語句。37第三十七頁,共68頁。2.3不同類型數據間的轉換隱式轉換什么情況下發生運算轉換------不同類型數據混合運算時賦值轉換------把一個值賦給與其類型不同的變量(biànliàng)時輸出轉換------輸出時轉換成指定的輸出格式函數調用轉換------實參與形參類型不一致時轉換運算轉換規則:不同類型數據運算時先自動轉換成同一類型<>38第三十八頁,共68頁。doublefloatlongunsignedintchar,short低高說明:必定的轉換運算對象類型不同時轉換例charch;inti;floatf;doubled;ch/i+f*d-(f+i)intintdoubledoubledoubledoubledoubledoubleintintdoubledoubledoubledoubledoubledouble10+‘a’+i*f-d/l例inti;floatf;doubled;longl;<>39第三十九頁,共68頁。顯式轉換(強制轉換)一般形式(xíngshì):(類型名)(表達式)例(int)(x+y)(int)x+y(double)(3/2)(int)3.6說明:強制轉換得到所需類型的中間變量,原變量類型不變例main(){floatx;inti;x=3.6;i=(int)x;printf(“x=%f,i=%d”,x,i);}結果(jiēguǒ):x=3.600000,i=3精度損失(sǔnshī)問題較高類型向較低類型轉換時可能發生<>40第四十頁,共68頁。2.4

運算符和表達式C運算符算術運算符:(+-*/%++--)關系運算符:(<<===>>=!=)邏輯運算符:((!&&||)位運算符:(<<>>~|^&)賦值運算符:(=及其擴展)條件運算符:(?:)逗號運算符:(,)指針運算符:(*&)求字節數:(sizeof)強制類型轉換:(類型)分量運算符:(.->)下標運算符:([])其它:(()-)<>41第四十一頁,共68頁。算術運算符和表達式基本算術運算符:+-*/%結合方向:從左向右優先級:----->*/%----->+-(2)(3)(4) 說明:“-”可為單目運算符時,右結合性兩整數(zhěngshù)相除,結果為整數(zhěngshù)%要求兩側均為整型數據例5/2=-5/2.0=例5%2=-5%2=1%10=

5%1=5.5%2<>例5/2=2

-5/2.0=-2.5例5%2=1

-5%2=-11%10=

1

5%1=

05.5%2()42第四十二頁,共68頁。自增、自減運算符++--作用:使變量值加1或減1種類(zhǒnglèi):前置++i,--i(先執行i+1或i-1,再使用i值)后置i++,i--(先使用i值,再執行i+1或i-1)例j=3;k=++j;j=3;k=j++;j=3;printf(“%d”,++j);j=3;printf(“%d”,j++);a=3;b=5;c=(++a)*b;a=3;b=5;c=(a++)*b;<>//k=4,j=4//k=3,j=4//4//3//c=20,a=4//c=15,a=443第四十三頁,共68頁。自增、自減運算符++--作用:使變量值加1或減1種類:前置++i,--i(先執行i+1或i-1,再使用(shǐyòng)i值)后置i++,i--(先使用(shǐyòng)i值,再執行i+1或i-1)說明:++--不能用于常量和表達式,如5++,(a+b)++++--結合(jiéhé)方向:自右向左優先級:-++-------->*/%----->+-(2)(3)(4)例-i++-(i++)i=3;printf(“%d”,-i++);//-3

例j+++k;(j++)+k;例-i++i=3;printf(“%d”,-i++);44第四十四頁,共68頁。(5)有關表達式使用中的問題說明①ANSIC并沒有具體(jùtǐ)規定表達式中的子表達式的求值順序,允許各編譯系統自己安排。例如:對表達式a=f1()+f2()并不是所有的編譯系統都先調用f1(),然后調用f2()。在有的情況下結果可能不同。有時會出現一些令人容易搞混的問題,因此務必要小心謹慎。

45第四十五頁,共68頁。②C語言中有的運算符為一個字符,有的運算符由兩個字符組成,為避免(bìmiǎn)誤解,最好采取大家都能理解的寫法。例如:不要寫成i+++j的形式,而應寫成(i++)+j的形式.46第四十六頁,共68頁。③在調用函數時,實參數的求值順序,C標準并無統一規定。例如(lìrú):i的初值為3,如果有下面的函數調用:printf(″%d,%d″,i,i++)在有的系統中,從左至右求值,輸出“3,3”。在多數系統中對函數參數的求值順序是自右而左,printf函數輸出的是“4,3”。以上這種寫法不宜提倡,最好改寫成j=i++;printf("%d,%d",j,i)47第四十七頁,共68頁。賦值運算符和表達式簡單賦值運算符符號:=格式:變量標識符=表達式作用:將一個(yīɡè)數據(常量或表達式)賦給一個(yīɡè)變量復合(fùhé)賦值運算符種類:+=-=*=/=%=《=》=&=^=|=含義:exp1op=exp2exp1=exp1opexp2a+=3a=a+3x*=y+8x=x*(y+8)x%=3x=x%3<>例a=3;d=func();c=d+2;48第四十八頁,共68頁。說明:結合方向:自右向左優先級:14左側必須(bìxū)是變量,不能是常量或表達式賦值表達式的值與變量值相等(xiāngděng),且可嵌套賦值轉換規則:使賦值號右邊(yòubian)表達式值自動轉換成其左邊變量的類型例3=x-2*y;a+b=3;例

floatf;inti;i=10;f=i;則

f=10.0例inti;i=2.56;//結果i=2;例:a=b=c=5a=(b=5)a=5+(c=6)a=(b=4)+(c=6)a=(b=10)/(c=2)<>//表達式值為5,a,b,c值為5//b=5;a=5//表達式值11,c=6,a=11//表達式值10,a=10,b=4,c=6//表達式值5,a=5,b=10,c=249第四十九頁,共68頁。說明:結合方向:自右向左優先級:12左側必須是變量(biànliàng),不能是常量或表達式賦值表達式的值與變量值相等(xiāngděng),且可嵌套賦值轉換規則:使賦值號右邊(yòubian)表達式值自動轉換成其左邊變量的類型例:a=12;a+=a-=a*a例:inta=2;a%=4-1;a+=a*=a-=a*=3;<>//a=-264等價于a=a+(a=a-(a*a))//a=0等價于a=a+(a=a*(a=a-(a=a*3)))50第五十頁,共68頁。1.將整型數據賦給單、雙精度變量時,數值不變但以浮點數形式存儲到變量中如:將23賦給float變量f,即執行f=23,先將23轉換成23.00000,再存儲在f中。將23賦給double型變量d,即執行d=23,系統(xìtǒng)將23補足有效位數字為23.00000000000000,然后以雙精度浮點數形式存儲到變量d中。51第五十一頁,共68頁。2.將一個double型數據賦給float變量時,截取其前面7位有效數字,存放到float變量的存儲單元(4個字節(zìjié))中。但應注意數值范圍不能溢出。如:floatf;doubled=123.456789e100;f=d;就出現溢出的錯誤。如果將一個float型數據賦給double變量時,數值不變,有效位數擴展到16位,在內存中以8個字節(zìjié)存儲.52第五十二頁,共68頁。3.字符型數據賦給整型變量時,由于(yóuyú)字符只占1個字節,而整型變量為2個字節,因此將字符數據(8個二進位)放到整型變量存儲單元的低8位中.53第五十三頁,共68頁。第一種情況:低位對應(duìyìng)、高位補零若所用系統將字符處理為無符號字符類型,或程序已將字符變量定義為unsignedchar型,則將字符的8位放到整型變量低8位,高8位補零。例如:將字符‘\376’賦給int型變量i第二種情況:符號擴展若所用系統(如TurboC++)將字符處理為帶符號(signedchar)時,若字符最高位為0,則整型變量高8位補0;若字符最高位為1,則高8位全補1。這稱為“符號擴展”,這樣做的目的是使數值保持不變,如變量c(字符‘\376’)以整數形式(xíngshì)輸出為-2,i的值也是-2。54第五十四頁,共68頁。4.將一個int、short、long型數據賦給一個char型變量時,只將其低8位原封不動地送到char型變量(biànliàng)(即截斷)。例如:inti=289;charc=′a′;c=i;c的值為33,如果用“%c”輸出c,將得到(dédào)字符“!”!的ASCII碼為33。賦值情況(qíngkuàng):55第五十五頁,共68頁。5.將帶符號的整型數據(int型)賦給long型變量(biànliàng)時,要進行符號擴展,將整型數的16位送到long型低16位中:如果int型數據為正值(符號位為0),則long型變量(biànliàng)的高16位補0;如果int型變量(biànliàng)為負值(符號位為1),則long型變量(biànliàng)的高16位補1,以保持數值不改變。反之,若將一個long型數據賦給一個int型變量(biànliàng),只將long型數據中低16位原封不動地送到整型變量(biànliàng)(即截斷)。56第五十六頁,共68頁。例如(lìrú):inta;longb=8;a=b賦值情況如下:如果(rúguǒ)b=65536(八進制數0200000),則賦值后a值為0。57第五十七頁,共68頁。6.將unsignedint型數據賦給longint型變量時,不存在符號擴展問題,只需將高位補0即可。將一個unsigned類型數據賦給一個占字節數相同的非unsigned型整型變量(例如:unsignedint->int,unsignedlong->long,unsignedshort->short),將unsigned型變量的內容原樣(yuányànɡ)送到非unsigned型變量中,但如果數據范圍超過相應整型的范圍,則會出現數據錯誤。58第五十八頁,共68頁。逗號運算符和表達式形式:表達式1,表達式2,……表達式n結合性:從左向右優先級:15逗號表達式的值:等于表達式n的值用途:常用(chánɡyònɡ)于循環for語句中例a=3*5,a*4a=3*5,a*4,a+5例x=(a=3,6*3)x=a=3,6*a例a=1;b=2;c=3;printf(“%d,%d,%d”,a,b,c);printf(“%d,%d,%d”,(a,b,c),b,c);<>//a=15,表達式值60//a=15,表達式值20//賦值表達式,表達式值18,x=18//逗號(dòuhào)表達式,表達式值18,x=3//1,2,3//3,2,359第五十九頁,共68頁。逗號運算符和表達式形式:表達式1,表達式2,……表達式n結合性:從左向右優先級:15逗號表達式的值:等于表達式n的值用途(yòngtú):常用于循環for語句中例:/*ch2_6.c*/#include<stdio.h>main(){intx,y=7;floatz=4;x=(y=y+6,y/z);printf("x=%d\n",x);}運行(yùnxíng)結果:x=3<>60第六十頁,共68頁。關系運算符和表達式關系運算符種類(zhǒnglèi):<<===>=>!=結合方向:自左向右優先級別:<<=>>===!=優先級6(高)優先級7(低)例c>a+b//c>(a+b)a>b!=c//(a>b)!=ca==b<c//a==(b<c)a=b>c//a=(b>c)關系(guānxì)表達式的值:是邏輯值“真”或“假”,用1和0表示例inta=3,b=2,c=1,d,f;a>b(a>b)==cb+c<ad=a>bf=a>b>c<>//表達式值1//表達式值1//表達式值0//d=1//f=061第六十一頁,共68頁。關系(guānxì)運算注意:<>例若a=0;b=0.5;x=0.3;則a<=x<=b的值為0例5>2>7>8在C中是允許(yǔnxǔ)的,值為0例inti=1,j=7,a;a=i+(j%4!=0);則a=2例‘a’>0結果(jiēguǒ)為‘A’>100結果(jiēguǒ)為1062第六十二頁,共68頁。關系(guānxì)運算注意:例注意(zhùyì)區分“=”與“==”inta=0,b=1;if(a=b)printf(“aequaltob”);else

溫馨提示

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

評論

0/150

提交評論