版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第3章基本數(shù)據(jù)類型、運算符與表達式制作人:王敬華第2章:基本數(shù)據(jù)類型、運算符與表達式學(xué)習的意義
學(xué)習C語言的目的是什么?
目的可能是為了:
期末考試等級考試研究生考試程序員考試
……語言程序設(shè)計教程第二版第三章基本數(shù)據(jù)類型C最終目的是:用C語言編寫程序來解決實際問題!程序是什么?程序是解決某種問題的一組指令的有序集合。著名計算機科學(xué)家沃思(NikiklausWirth)提出一個公式:程序=數(shù)據(jù)結(jié)構(gòu)+算法
學(xué)習的意義
程序是什么?對數(shù)據(jù)的描述。在C語言中,體現(xiàn)為數(shù)據(jù)類型的描述!對數(shù)據(jù)處理的描述。是為解決一個問題而采取的方法和步驟,是程序的靈魂!
<<數(shù)據(jù)結(jié)構(gòu)>><<算法設(shè)計與分析>>結(jié)論:學(xué)好C語言首先就必須十分了解C語言的數(shù)據(jù)類型、與算符與表達式。語言程序設(shè)計教程第二版第三章基本數(shù)據(jù)類型C掌握變量和常量的概念;理解各種類型的數(shù)據(jù)在內(nèi)存中的存放形式;掌握各種類型數(shù)據(jù)的常量的使用方法;掌握各種整型、字符型、浮點型變量的定義和引用方法;了解調(diào)用printf函數(shù)輸出各種類型數(shù)據(jù)的方法;掌握數(shù)據(jù)類型轉(zhuǎn)換的規(guī)則以及強制數(shù)據(jù)類型轉(zhuǎn)換的方法;掌握賦值運算符、算術(shù)運算符、位運算符、逗號運算符以及sizeof的使用方法;理解運算符的優(yōu)先級和結(jié)合性的概念,記住所學(xué)的各種運算符的優(yōu)先級關(guān)系和結(jié)合性。學(xué)習目標
語言程序設(shè)計教程第二版第三章基本數(shù)據(jù)類型C3.1C語言數(shù)據(jù)類型C數(shù)據(jù)類型基本類型構(gòu)造類型指針類型空類型void定義類型typedef字符類型char枚舉類型enum整型實型單精度型float雙精度型double數(shù)組結(jié)構(gòu)體struct共用體union短整型short長整型long整型int數(shù)據(jù)類型決定:1.數(shù)據(jù)占內(nèi)存字節(jié)數(shù)2.數(shù)據(jù)取值范圍3.其上可進行的操作本章所介紹的數(shù)據(jù)類型語言程序設(shè)計教程第二版第三章基本數(shù)據(jù)類型C3.2
常量、變量和標識符1.標識符定義:用來標識變量、常量、函數(shù)等的字符序列組成:只能由字母、數(shù)字、下劃線組成,且第一個字母必須是字母或下劃線C語言的關(guān)鍵字不能用作變量名大小寫敏感長度:有效長度為32個字符。隨系統(tǒng)而異,但至少前8個字符有效命名原則:變量名和函數(shù)名中的英文字母一般用小寫,以增加可讀性
見名知意不宜混淆如l與I,o與0
在TC2.0及BC3.1中,變量名(標識符)的有效長度為1~32個字符,缺省值為32,但在VC中其長度可達到255例:判斷下列標識符號合法性sumSumM.D.JohndayDate3daysstudent_name#33lotus_1_2_3chara>b_above$123M.D.John3days#33char$123a>b
.字符非法
數(shù)字3不可作首字符
#字符非法
char是關(guān)鍵字
>字符非法
$不可作首字符語言程序設(shè)計教程第二版第三章基本數(shù)據(jù)類型C3.2
常量、變量和標識符2.常量定義:程序運行時其值不能改變的量(即常數(shù))
常量的分類
:直接常量(值常量)
整型常量:
10、15、-10、-30
實型常量:
12.5、30.0、-1.5
字符常量:
‘A’、‘b’、‘c’
字符串常量:
“sum”、“A”、“123”符號常量
用標識符來代表常量。 其定義格式為:
#define符號常量常量
#defineNUM20#definePI3.1415926
#include<stdio.h>#definePRICE30voidmain(){
intnum,total;num=10;total=num*PRICE;
printf("total=%d",total);}
運行結(jié)果:total=300
行尾不能有分號
define前面一定要有#
符號常量名最好使用大寫符號常量名最好有意義
語言程序設(shè)計教程第二版第三章基本數(shù)據(jù)類型C3.2
常量、變量和標識符3.變量定義:程序運行時其值可以被改變的量
變量的兩要素
:變量名、變量值變量的定義格式
:變量的初始化:定義時賦初始值變量的使用:先定義,后賦值變量定義位置:一般放在函數(shù)開頭[存儲類型]數(shù)據(jù)類型變量名1[,變量名2,…,變量名n];intx,y,z;floatradius,length,area;
charch;決定分配字節(jié)數(shù)和數(shù)的表示范圍合法標識符例:
inta=2,b,c=4;floatdata=3.67;charch=‘A’;
intx=1,y=1,z=1;
intx=y=z=1;編譯程序根據(jù)變量定義為其分配指定字節(jié)的內(nèi)存單元地址shortinta=1,b=-3,c;abc2字節(jié)2字節(jié)2字節(jié)地址地址內(nèi)存…...…...1-3隨機數(shù)例1:
intstudent;
stadent=19;//Undefinedsymbol‘statent’infunctionmain
例2:
floata,b,c;c=a%b;//Illegaluseoffloatingpointinfunctionmain
voidmain(){inta,b=2;floatdata;a=1;data=(a+b)*1.2;
printf(“data=%f\n”,data);}變量定義可執(zhí)行語句voidmain(){inta,b=2;a=1;floatdata;data=(a+b)*1.2;
printf(“data=%f\n”,data);}語言程序設(shè)計教程第二版第三章基本數(shù)據(jù)類型C3.3簡單數(shù)據(jù)類型與表示范圍1.整型數(shù)據(jù)
整型常量
十進制整數(shù):由數(shù)字0~9和正負號表示
.
如:123,-456,0八進制整數(shù):由數(shù)字0開頭,后跟數(shù)字0~7表示.如:0123,011十六進制整數(shù):由0x或0X開頭,后跟0~9,a~f,A~F表示.如0x123,0Xff定義整數(shù)的符號常量
#defineNUM120//十進制數(shù)20#defineNUM2020//八進制數(shù)(十進制16)
#defineNUM30x2a//十六進制數(shù)(十進制42)思考題:下列整型常量哪些是非法的?
012,oX7A,00,078,0x5Ac,-0xFFFF,0034,7B。首字符不能是字母o八進制數(shù)中不能有數(shù)字8
十進制數(shù)中不能有字母B
語言程序設(shè)計教程第二版第三章基本數(shù)據(jù)類型C2.整數(shù)在內(nèi)存中的表示
整數(shù)的數(shù)值在內(nèi)存中用補碼的形式存放。
求一個整數(shù)補碼的方法:(假設(shè)用n個二進制位的內(nèi)存單元來存儲它)
如果是正整數(shù),采用符號-絕對值表示,即最高有效位(符號位)為0表示正,數(shù)的其余部分則表示數(shù)的絕對值;
如果是負整數(shù),則先寫出與該負數(shù)相對應(yīng)的正數(shù)的補碼表示,然后將其按位求反,最后在末位(最低位)加1;然后將上述求得的補碼的低n位存放于內(nèi)存單元之中,就得到了該整數(shù)在內(nèi)存中的表示,內(nèi)存單元的最高位是符號位(0表示正,1表示負)。
在TC2.0或BC3.1下,一個整數(shù)默認情況下需要2個字節(jié)(16位)的內(nèi)存單元存放;而在VC6.0下,則需要4個字節(jié)(32位)。
語言程序設(shè)計教程第二版第三章基本數(shù)據(jù)類型C2.整數(shù)在內(nèi)存中的表示十進制整數(shù)+14:對于16位的內(nèi)存單元:符號位(表示正)0000111000000000低字節(jié)高字節(jié)低地址高地址符號位十進制數(shù)+14兩個字節(jié)的內(nèi)存實際存放形式
(+14)補
=00000000
00001110
語言程序設(shè)計教程第二版第三章基本數(shù)據(jù)類型C2.整數(shù)在內(nèi)存中的表示十進制整數(shù)+14:對于32位的內(nèi)存單元:符號位(表示正)低字節(jié)高字節(jié)低地址高地址十進制數(shù)+14四個字節(jié)的內(nèi)存實際存放形式
(+14)補
=00000000
0000
0000
0000
000000001110
00001110000000000000000000000000符號位記?。簲?shù)據(jù)在內(nèi)存中的存放位置是高字節(jié)放在高地址的存儲單元中,低字節(jié)放在低地址的存儲單元中。語言程序設(shè)計教程第二版第三章基本數(shù)據(jù)類型C2.整數(shù)在內(nèi)存中的表示十進制整數(shù)-
14:對于16位的內(nèi)存單元:符號位(表示負)1111001011111111低字節(jié)高字節(jié)低地址高地址符號位十進制數(shù)-14兩個字節(jié)的內(nèi)存實際存放形式
(+14)補
=00000000
00001110
(-14)補
=1111111111110010
按位求反,末位加1
語言程序設(shè)計教程第二版第三章基本數(shù)據(jù)類型C2.整數(shù)在內(nèi)存中的表示十進制整數(shù)-
14:對于32位的內(nèi)存單元:符號位(表示負)低字節(jié)高字節(jié)低地址高地址十進制數(shù)-14四個字節(jié)的內(nèi)存實際存放形式
(+14)補
=00000000
0000
0000
0000
000000001110
11110010111111111111111111111111符號位(-14)補
=11111111
1111
1111
1111
1111
11110010
按位求反,末位加1
語言程序設(shè)計教程第二版第三章基本數(shù)據(jù)類型C2.整數(shù)在內(nèi)存中的表示十進制整數(shù)-65537:對于16位的內(nèi)存單元:符號位(表示負)(+65537)補
=0100000000
00000001
(-65537)補
=1011111111
1111
1111
按位求反,末位加1
1111111111111111低地址高地址十進制數(shù)-65537兩個字節(jié)的內(nèi)存實際存放形式
低字節(jié)高字節(jié)符號位取低16位真值為:-1,不是-65537!語言程序設(shè)計教程第二版第三章基本數(shù)據(jù)類型C2.整數(shù)在內(nèi)存中的表示十進制整數(shù)-
65537:對于32位的內(nèi)存單元:符號位(表示負)低字節(jié)高字節(jié)低地址高地址十進制數(shù)-65537四個字節(jié)的內(nèi)存實際存放形式
(+65537)補
=00000000
0000000100000000
00000001
11111111111111111111111011111111符號位,表示負(-65537)補
=11111111
1111111011111111
1111
1111
按位求反,末位加1
真值為:-65537!為什么-65537這個數(shù)在16位內(nèi)存單元中的表示與在32位內(nèi)存單元中的表示不相同呢?
這主要是因為-65537這個數(shù)超出了16位內(nèi)存單元表示數(shù)的范圍,所以實際存儲的值(-1)與要表示的值(-65537)不同,但-32767并沒有超出了32位內(nèi)存單元表示數(shù)的范圍,所以實際存儲的值就是其本身。因此,我們在C語言中對數(shù)據(jù)處理時必須要注意數(shù)據(jù)的表示范圍,以免引起不必要的錯誤。語言程序設(shè)計教程第二版第三章基本數(shù)據(jù)類型C2.整數(shù)在內(nèi)存中的表示八進制整數(shù)034:對于16位的內(nèi)存單元:
034=(011100)2符號位(表示正)0001110000000000低字節(jié)高字節(jié)低地址高地址符號位八進制數(shù)034兩個字節(jié)的內(nèi)存實際存放形式
(034)補
=0000000000011100
對于32位的內(nèi)存單元:
(034)補
=00000000
0000
0000
0000
000000011100符號位(表示正)低字節(jié)高字節(jié)低地址高地址八進制數(shù)034四個字節(jié)的內(nèi)存實際存放形式
00011100000000000000000000000000符號位語言程序設(shè)計教程第二版第三章基本數(shù)據(jù)類型C2.整數(shù)在內(nèi)存中的表示八進制整數(shù)-
034:對于16位的內(nèi)存單元:符號位(表示負)1110010011111111低字節(jié)高字節(jié)低地址高地址符號位八進制數(shù)-034兩個字節(jié)的內(nèi)存實際存放形式
(+034)補
=0000000000011100
(-034)補
=1111111111100100
按位求反,末位加1
對于32位的內(nèi)存單元:(+034)補
=00000000
0000
0000
0000
000000011100
按位求反,末位加1
(-034)補
=11111111
1111
1111
1111
111111100100符號位(表示負)11100100111111111111111111111111低字節(jié)高字節(jié)低地址高地址八進制數(shù)-034四個字節(jié)的內(nèi)存實際存放形式
符號位語言程序設(shè)計教程第二版第三章基本數(shù)據(jù)類型C2.整數(shù)在內(nèi)存中的表示十六進制整數(shù)0X8AB6:對于16位的內(nèi)存單元:
0X8AB6=(1000101010110110)2符號位(表示正)1011011010001010低字節(jié)高字節(jié)低地址高地址符號位表示負十六進制數(shù)0X8AB6兩個字節(jié)的內(nèi)存實際存放形式
(0X8AB6)補
=01000101010110110
取低16位真值為:-30026!
對于32位的內(nèi)存單元:
(0X8AB6)補
=00000000
0000
00001000101010110110符號位(表示正)10110110100010100000000000000000低字節(jié)高字節(jié)十六進制數(shù)0X8AB6四個字節(jié)的內(nèi)存實際存放形式
低地址高地址符號位真值為:+35510!語言程序設(shè)計教程第二版第三章基本數(shù)據(jù)類型C2.整數(shù)在內(nèi)存中的表示十六進制整數(shù)-0X8AB6:對于16位的內(nèi)存單元:符號位(表示負)(+0X8AB6)補
=01000101010110110
(-0X8AB6)補
=10111010101001010
按位求反,末位加1
0100101001110101低地址高地址十六進制數(shù)-0X8AB6兩個字節(jié)的內(nèi)存實際存放形式
低字節(jié)高字節(jié)符號位表示正取低16位真值為:+30026!
對于32位的內(nèi)存單元:
(+0X8AB6)補
=00000000
0000
00001000101010110110
按位求反,末位加1
(-0X8AB6)補
=11111111
1111
11110111010101001010符號位(表示負)01001010011101011111111111111111低字節(jié)高字節(jié)十六進制數(shù)-0X8AB6四個字節(jié)的內(nèi)存實際存放形式
低地址高地址符號位表示負真值為:-35510!語言程序設(shè)計教程第二版第三章基本數(shù)據(jù)類型C3.整型變量整型變量的定義int
變量名[,變量名2,……,變量名n];int必須小寫至少一個空格必須為合法的標識符以逗號,分隔以分號;結(jié)尾定義時可以賦初值,方法:在變量名后面增加“=數(shù)值”
例:
inta;
intx,y,z;
intm=2,y=-3;
當程序中定義了一個變量時,計算機會為這個變量分配一個相應(yīng)大小的內(nèi)存單元。因此,這個變量是有值的,它的值就是對應(yīng)內(nèi)存單元的值。如果定義時沒有賦初值,則這個值程序員是無法預(yù)知的。
整型變量的分類
修飾符控制變量是否有符號:signed(有符號)和unsigned(無符號)控制整型變量的值域范圍:short(短)和long(長)。
有符號基本型(int)
inta=-2;//定義一個有符號整型變量a,并賦初值-2
占一個機器字大小的內(nèi)存單元。TC或BC3.1下,變量占2個字節(jié)(16位)的內(nèi)存單元;VC6.0下,變量占4個字節(jié)(32位)的內(nèi)存單元。
如果定義變量時,不指定signed,也不指定unsigned,則默認為signed(有符號)
1111111011111111低地址高地址低字節(jié)高字節(jié)符號位變量a占用的內(nèi)存單元(2字節(jié))有符號整型變量在內(nèi)存中的實際存放形式(假設(shè)在BC3.1下)
語言程序設(shè)計教程第二版第三章基本數(shù)據(jù)類型C無符號基本型(unsignedint或unsigned)
unsignedinta=2;//定義一個無符號整型變量a,并賦初值2
或
unsigneda=2;
占用的內(nèi)存單元字節(jié)數(shù)同int類型。與inta=2;等價。
unsignedinta=-2;//定義一個無符號整型變量a,并賦初值-2
或
unsigneda=-2;1111111011111111無符號整型變量在內(nèi)存中的實際存放形式(假設(shè)在BC3.1下)
低字節(jié)高字節(jié)低地址高地址數(shù)據(jù)位變量a占用的內(nèi)存單元(2字節(jié))其值為:65534!注意:對于有符號數(shù)也好還是無符號數(shù)也好,其實在計算機內(nèi)存中表示是不加區(qū)分的,都是以其補碼形式表示,只是我們怎樣看待最高二進制位的問題,如果把最高位當成符號位看待,則為有符號數(shù),如果把最高位當成數(shù)據(jù)位看待,則變?yōu)闊o符號數(shù)。例如:unsignedinta=-2;
printf(“%d”,a);------有符號輸出,則為-2
printf(“%u”,a);------無符號輸出,則為65534語言程序設(shè)計教程第二版第三章基本數(shù)據(jù)類型C有符號短整型(shortint或short)
shortinta=2;//定義一個有符號短整型變量a,并賦初值2
或
shorta=2;
占用的內(nèi)存單元為2個字節(jié),無論是TC、BC,還是VC。無符號短整型(unsignedshortint或unsignedshort)
unsignedshortinta=2;//定義一個無符號短整型變量a,并賦初值2
或
unsignedshorta=2;
占用的內(nèi)存單元字節(jié)數(shù)同short類型。在TC2.0和BC3.1下,unsignedshort類型與unsignedint類型是等價的
。語言程序設(shè)計教程第二版第三章基本數(shù)據(jù)類型C有符號長整型(longint或long)
longinta=234567;//定義一個有符號長整型變量a,并賦初值234567
或
longa=234567;
占用的內(nèi)存單元為4個字節(jié),無論是TC、BC,還是VC。無符號長整型(unsignedlongint或unsignedlong)
unsignedlonginta=2;//定義一個無符號長整型變量a,并賦初值2
或
unsignedlonga=2;
占用的內(nèi)存單元字節(jié)數(shù)同long類型。在VC中l(wèi)ong與int類型基本相同,均占四個字節(jié)的內(nèi)存單元;但在TC或BC中,long類型與int類型只是所占字節(jié)不同外(long占4字節(jié),int占2字節(jié)),其它數(shù)據(jù)處理方法是一樣的。
語言程序設(shè)計教程第二版第三章基本數(shù)據(jù)類型C【例】各種整型變量的定義
#include<stdio.h>#defineSUM65535voidmain(){
inta,b=20;
unsignedintc=0xff;longD;a=SUM;D=301;
printf("a=%d\n",a);
printf("b=%d\n",b);
printf("c=%d\n",c);
printf(“D=%d\n”,D);}//文件包含,頭文件說明
//定義符號常量SUM,值為65535
//定義兩個int型變量a和b,b賦初值20
//定義無符號整型變量c,并賦初值0xff
//定義長整型變量D
//對a賦值為SUM,這時a的值是65535
//對D賦值為301
//以有符號十進制形式("%d")顯示a的值
//以有符號十進制形式(“%d”)顯示b的值
//以有符號十進制形式("%d")顯示c的值
//以有符號十進制形式("%d")顯示D的值
變量定義部分語句執(zhí)行部分在BC3.1下運行結(jié)果:
a=-1b=20c=255D=301在VC6.0下運行結(jié)果:
a=65535b=20c=255D=301對于16位的有符號整型變量a來說,因65535在內(nèi)存中的形式為1111111111111111,最高位為1表示負,則其所對應(yīng)的十進制數(shù)就為-1。語言程序設(shè)計教程第二版第三章基本數(shù)據(jù)類型C4.整數(shù)常量的分類
根據(jù)其值所在范圍確定其數(shù)據(jù)類型。在TC2.0或BC3.1下,如果整型常量的值位于-32768~32767之間,C語言認為它是int型常量;如果整型常量的值位于-2147483648~2147483647之間,C語言認為它是long型常量。
整型常量后加字母l或L,認為它是longint
型常量。比如123L、45l、0XAFL。
無符號數(shù)也可用后綴表示,整型常數(shù)的無符號數(shù)的后綴為U或u。例如:358u,0x38Au,235Lu均為無符號數(shù)。
前綴、后綴可同時使用以表示各種類型的數(shù)。如0XA5Lu表示十六進制無符號長整數(shù)A5,其十進制為165。
語言程序設(shè)計教程第二版第三章基本數(shù)據(jù)類型C5.實型數(shù)據(jù)
實型常量(實數(shù)或浮點數(shù))
十進制小數(shù)形式:由數(shù)字0~9和小數(shù)點組成
.
如:0.0,5.6,-5.指數(shù)形式:由十進制數(shù),加階碼標志e或E以及階碼(只能為整數(shù),可以帶符號)組成.
其一般形式為:aEn
其中:a為十進制數(shù),n為十進制整數(shù),都不可缺少。其可表示為a×10n合法的實數(shù)表示:
2.1E5表示2.1×105,3.7E-2表示3.7×10-2。
非法的實數(shù)表示:
345(無小數(shù)點)
,E7(階碼標志E之前無數(shù)字)
,
-5(無階碼標志)
,50.-E3(負號位置不對)
實型變量
單精度實型(float)
floatf=3.14,g;
這種定義的變量在內(nèi)存中占4個字節(jié)(32位)的存儲單元。雙精度實型(double)
doublex,y;
這種定義的變量在內(nèi)存中占8個字節(jié)(64位)的存儲單元。
長雙精度實型(longdouble)
longdoublex,y;
在TC或BC下,這種定義的變量在內(nèi)存中占10個字節(jié)(80位)的存儲單元;在VC下則占8個字節(jié)(64位)。
注意:三種實數(shù)類型中,其精度是
float<double≦longdouble;longfloat實際上就是double,因此,沒有l(wèi)ongfloat類型;所有的實型常量按照double類型處理。語言程序設(shè)計教程第二版第三章基本數(shù)據(jù)類型C5.實型數(shù)據(jù)
實型數(shù)據(jù)的精度
類型精確表示的數(shù)字個數(shù)float
7~8double
16~17longdouble
17~18#include<stdio.h>voidmain(){floata;//定義float型變量adoubleb,c;//定義double型變量b和ca=123.456789;//對變量a賦值為123.456789b=a;//將變量a賦給變量bc=123.456789;//對變量c賦值為123.456789
printf("a=%fb=%lfc=%lf\n",a,b,c);}abc123.456787123.456787123.456789a=123.456787b=123.456787c=123.456789
float型變量最多只能精確表示8個數(shù)字,因此顯示a的值時,只能有效顯示前面8個數(shù)字即123.45678,最后追加一位數(shù)字7是隨機的
語言程序設(shè)計教程第二版第三章基本數(shù)據(jù)類型C6.字符型數(shù)據(jù)和字符串常量
字符型常量
定義:用單引號括起來的單個普通字符或轉(zhuǎn)義字符.
如‘a(chǎn)’‘A’‘?’‘\n’‘\101’字符常量的值:該字符的ASCII碼值如‘A’——65,‘a(chǎn)’——97,
‘0’——48,‘\n’——10
轉(zhuǎn)義字符:反斜線后面跟一個字符或一個代碼值表示<轉(zhuǎn)義字符及其含義:轉(zhuǎn)義字符含義\n\v\r\a\‘\ddd\t\b\f\\\“\xhh轉(zhuǎn)義字符含義換行垂直制表回車響鈴單引號3位8進制數(shù)代表的字符水平制表退格換頁反斜線雙引號2位16進制數(shù)代表的字符如‘\101’-----------‘A’‘\012’-----------’\n’‘\376’-----------’’‘\x61’-----------’a’‘\60’-----------’0’‘\483’----------()例:‘A’-------’\101’-------’\x41’--------65例:轉(zhuǎn)義字符舉例
#include<stdio.h>voidmain(){
printf("\101\x42C\n");
printf("Isay:\"Howareyou?\"\n");
printf("\\CProgram\\\n");
printf("Visual\'C\'");}運行結(jié)果:(屏幕顯示)ABCIsay:”Howareyou?”\CProgram\Visual‘C’例:voidmain(){
printf(“Y\b=\n”);}運行結(jié)果:屏幕顯示:=打印機輸出:¥語言程序設(shè)計教程第二版第三章基本數(shù)據(jù)類型C字符串常量
定義:用雙引號(“”)括起來的字符序列
存儲:每個字符串尾自動加一個‘\0’作為字符串結(jié)束標志例1:字符串“HELLO”在內(nèi)存中0x480x450x4C0x4C0x4F0低地址高地址‘H’‘E’‘L’‘L’‘O’‘\0’字符串結(jié)束標志例2:空串“”\0
字符常量與字符串常量不同0x410x41\0例‘A’“A”例:charch;
ch=“A”;例:charch;
ch=‘A’;語言程序設(shè)計教程第二版第三章基本數(shù)據(jù)類型C字符型變量字符型數(shù)據(jù)類型符是char(字符character)在內(nèi)存中占1個字節(jié)(8位)字符變量存放字符ASCII碼
char與int數(shù)據(jù)間可進行算術(shù)運算存在有符號和無符號之分。默認情況下為有符號例:
charch;unsignedcharC='B';例:
a=‘D’;//a=68;
x=‘A’+5;//x=65+5;
s=‘!’+‘G’//s=33+71;
沒有字符串變量,用字符數(shù)組存放語言程序設(shè)計教程第二版第三章基本數(shù)據(jù)類型C7.簡單數(shù)據(jù)類型的表示范圍
0111111111111111
最大值:+327671000000000000000
最小值:-32768int符號位十六位整型數(shù)所表示的數(shù)據(jù)范圍
1111111111111111
最大值:655350000000000000000
最小值:0unsigned
int數(shù)據(jù)位類型符號關(guān)鍵字占字節(jié)數(shù)數(shù)的表示范圍整型有(signed)int
在16位系統(tǒng)下2-32768~32767在32位系統(tǒng)下4-2147483648~2147483647(signed)short2-32768~32767(signed)long4-2147483648~2147483647無unsignedint
在16位系統(tǒng)下20~65535在32位系統(tǒng)下40~4294967295unsignedshort20~65535unsignedlong40~4294967295實型有float4絕對值10-37~1038有double8絕對值10-307~10308有l(wèi)ongdouble10絕對值10-4931~104932字符型有char1-128~127無unsignedchar10~255語言程序設(shè)計教程第二版第三章基本數(shù)據(jù)類型C【例】變量的存儲范圍#include<stdio.h>
voidmain(){charch;
intx;
ch=80+50;x=80+50;
printf("ch=%d\n",ch);
printf("x=%d\n",x);}ch=-126x=130為什么???十進制數(shù)對應(yīng)的機器數(shù)(補碼)
800
000
000001010000ch
+500
000
00000
0110010—————————————————
0
000
00001
000001010000010符號位真值:-126語言程序設(shè)計教程第二版第三章基本數(shù)據(jù)類型C8.簡單的數(shù)據(jù)輸出
C語言中沒有用于輸出的語句,只能通過標準庫函數(shù)的調(diào)用來完成數(shù)據(jù)的輸出任務(wù)。庫函數(shù)的一般調(diào)用格式為:函數(shù)名(參數(shù)1,參數(shù)2,……,參數(shù)n);
printf函數(shù):printf("variablea=%d",a);參數(shù)1(字符串常量)函數(shù)名參數(shù)2(變量)逗號隔開分號結(jié)束例:printf("Howareyou!");輸出:Howareyou!例:inta=100;
printf("variablea=%d",a);輸出:variablea=100%d:用于顯示有符號整型數(shù)據(jù),如int、short型數(shù)據(jù);%u:用于顯示無符號整型數(shù)據(jù),如unsignedint、unsignedshort型數(shù)據(jù);%f:用于顯示實型數(shù)據(jù),如float型數(shù)據(jù);%c:用于顯示字符型數(shù)據(jù),如char型數(shù)據(jù);%s:用于顯示字符串數(shù)據(jù)。格式控制符語言程序設(shè)計教程第二版第三章基本數(shù)據(jù)類型C例:簡單的數(shù)據(jù)輸出
#include<stdio.h>voidmain(){
inta,b;unsignedintu;longL;charch;floatf;
a=200;b=-1;u=b;L=u;
ch=‘A’;f=32.17;
printf("a=%d\t",a);
printf("b=%d\n",b);
printf("u=%u\t",u);
printf("L=%ld\n",L);
printf("f=%f\n",f);
printf("chis%candvalueis%d\n",ch,ch);
printf("IloveClanguage!\rYou\n");
//I后有三個空格}在VC下:a=200b=-1u=4294967295L=-1f=32.169998chisAandvalueis65YouloveClanguage!在BC下:a=200b=-1u=65535L=65535f=32.169998chisAandvalueis65YouloveClanguage!b的值是-1,在內(nèi)存中表示為:0xffff(BC下),0xffffffff(VC下),當它賦給u時,由于u是無符號數(shù),因此u的值是65535(BC下),4294967295(VC下)。L是有符號長整型,u是無符號整型。在BC下,L占4字節(jié),u占2字節(jié),當把u賦值給L時,L的高2個字節(jié)為全0(因u無符號),故L的值為0x0000ffff,即65535。但在VC下,L和u都占4字節(jié),當把u賦值給L時,L的值為0xffffffff,即-1。語言程序設(shè)計教程第二版第三章基本數(shù)據(jù)類型C3.4C語言的運算符與表達式
變量用來存放數(shù)據(jù),運算符則用來處理數(shù)據(jù)。用運算符將變量和常量連接起來的符合C語法規(guī)則的式子被稱為表達式。
運算符的分類:單目運算符:只帶一個操作數(shù)的運算符。如:++、--運算符。雙目運算符:帶兩個操作數(shù)的運算符。如:+、-運算符。三目運算符:帶三個操作數(shù)的運算符。如:?運算符。
學(xué)習運算符時應(yīng)注意:
運算符的功能:該運算符主要用于做什么運算。與運算量關(guān)系:要求運算量的個數(shù)及運算量的類型。運算符的優(yōu)先級:表達式中包含多個不同運算符時運算符運算的先后次序。運算符的結(jié)合性:同級別運算符的運算順序(指左結(jié)合性還是右結(jié)合性)。運算結(jié)果的類型:表達式運算后最終所得到的值的類型。C運算符算術(shù)運算符:(+-*/%++--)關(guān)系運算符:(<<===>>=!=)邏輯運算符:((!&&||)位運算符:(<<>>~|^&)賦值運算符:(=及其擴展)條件運算符:(?:)逗號運算符:(,)指針運算符:(*&)求字節(jié)數(shù):(sizeof)強制類型轉(zhuǎn)換:(類型)分量運算符:(.->)下標運算符:([])其它:(()-)語言程序設(shè)計教程第二版第三章基本數(shù)據(jù)類型C1.賦值運算符、賦值表達式
賦值運算符(“=”,雙目運算符)
一般形式:變量=常量或變量或表達式功能:將右邊常量或變量或表達式的值賦給左邊變量
例如:
intx,y,z;x=20;y=x;z=x+y;賦值表達式
定義:由賦值運算符或復(fù)合賦值運算符(后面即將介紹),將一個變量和一個表達式連接起來的表達式,稱為賦值表達式。一般格式:變量(復(fù)合)賦值運算符表達式賦值表達式的值:被賦值變量的值。例如:“a=5”這個賦值表達式,變量a的值“5”就是它的值。
語言程序設(shè)計教程第二版第三章基本數(shù)據(jù)類型C賦值語句
例如:
x=8;a=b=c=5;
定義:賦值表達式在其后面加分號就構(gòu)成了賦值語句。
賦值運算符及賦值表達式的使用
多個變量連續(xù)賦值例如:
a=b=c=10;
a=(b=(c=10));
結(jié)果:a、b、c的值都為10賦值表達式的嵌套例如:
a=(b=2)+(c=3)
(a=(b=2)+(c=3))
結(jié)果:b為2,c為3,a為b+c即5注意:
賦值語句“=”左邊必須是變量名或?qū)?yīng)某特定內(nèi)存單元的表達式(后面的章節(jié)會遇到這樣的表達式),不能是常量或其它表達式。例如:30=a;b+2=5;都是錯誤的。
賦值語句中的“=”表示賦值,不是代數(shù)中相等的意思。要表示相等的意思則應(yīng)用關(guān)系運算符“==”表示,二者切勿混淆!語言程序設(shè)計教程第二版第三章基本數(shù)據(jù)類型C2.強制類型轉(zhuǎn)換符
C語言的數(shù)據(jù)類型是可以相互轉(zhuǎn)換的。轉(zhuǎn)換的方法有兩種:一種是自動轉(zhuǎn)換,一種是強制轉(zhuǎn)換。自動轉(zhuǎn)換
例如:inta=2.5;則a的值將是2,而不是2.5。這種自動改變等號右邊表達式值的數(shù)據(jù)類型的操作稱為數(shù)據(jù)類型的自動轉(zhuǎn)換。
首先將等號右邊的表達式的值轉(zhuǎn)換成“=”左邊的數(shù)據(jù)類型。然后再賦值給等號左邊的變量。
(1)短長度的數(shù)據(jù)類型→長長度的數(shù)據(jù)類型
方法:直接將無符號短長度的數(shù)據(jù)類型的數(shù)據(jù)作為長長度的數(shù)據(jù)類型數(shù)據(jù)的低位部分,長長度的數(shù)據(jù)類型數(shù)據(jù)的高位部分補零。
無符號短長度的數(shù)據(jù)類型→無符號或有符號長長度的數(shù)據(jù)類型xx………x無符號短長度的數(shù)據(jù)類型長長度的數(shù)據(jù)類型xx………x00.....0.....高位部分補0例如:
unsignedcharch=0xfc;unsignedinta=0xff00;//假設(shè)int數(shù)據(jù)為16位
intb;unsignedlongu;
b=ch;
//b的值將是0x00fcu=a;
//u的值將是0x0000ff00如果將ch的值賦給-4,問b的值又是多少呢?
0x00fc語言程序設(shè)計教程第二版第三章基本數(shù)據(jù)類型C2.強制類型轉(zhuǎn)換符
自動轉(zhuǎn)換
(1)短長度的數(shù)據(jù)類型→長長度的數(shù)據(jù)類型
方法:直接將有符號短長度的數(shù)據(jù)類型的數(shù)據(jù)作為長長度的數(shù)據(jù)類型數(shù)據(jù)的低位部分,然后將低位部分的最高位(即有符號短長度數(shù)據(jù)的符號位)向長長度的數(shù)據(jù)類型數(shù)據(jù)的高位部分擴展。
有符號短長度的數(shù)據(jù)類型→無符號或有符號長長度的數(shù)據(jù)類型zx………x有符號短長度的數(shù)據(jù)類型長長度的數(shù)據(jù)類型zx………xz符號位向高位部分擴展………zz符號位例如:
charch=2;
inta=-2;
intb;unsignedlongu;b=ch;
//b的值將是2
u=a;
//u的值將是0xfffffffe語言程序設(shè)計教程第二版第三章基本數(shù)據(jù)類型C2.強制類型轉(zhuǎn)換符
自動轉(zhuǎn)換
(2)長長度的數(shù)據(jù)類型→短長度的數(shù)據(jù)類型
方法:直接截取長長度的數(shù)據(jù)類型數(shù)據(jù)的低位部分(長度為短長度的數(shù)據(jù)類型的長度)作為短長度數(shù)據(jù)類型的數(shù)據(jù)。
xx………x短長度的數(shù)據(jù)類型長長度的數(shù)據(jù)類型yy………yxx………x例如:
inta=-32768;//假設(shè)int數(shù)據(jù)為16位
unsignedlongb=0xffffaa00;charch;
intc;
ch=a;
//ch的值將是0c=b;
//c的值將是0xaa00(3)長度相同的數(shù)據(jù)類型轉(zhuǎn)換
方法:數(shù)據(jù)按照原樣復(fù)制即可。
例如:
inta=0xff00;
unsignedintb=a;
//b的值將是0xff00語言程序設(shè)計教程第二版第三章基本數(shù)據(jù)類型C2.強制類型轉(zhuǎn)換符
強制轉(zhuǎn)換
強制類型轉(zhuǎn)換是通過類型轉(zhuǎn)換運算來實現(xiàn)的。其一般形式為:
(類型說明符)(表達式)
功能:把表達式的運算結(jié)果強制轉(zhuǎn)換成類型說明符所表示的類型。其中,(類型說明符)是強制類型轉(zhuǎn)換符,它的優(yōu)先級比較高。例:
floatx=3.5,y=2.1,z;
inta;a=(int)(x+y);//結(jié)果為5z=(int)x+y;//結(jié)果為5.100000z=(double)(3/2);//結(jié)果為1.000000a=(int)3.6;//結(jié)果為3精度損失問題較高類型向較低類型轉(zhuǎn)換時可能發(fā)生注意:在使用強制轉(zhuǎn)換時應(yīng)注意以下問題:類型說明符和表達式都必須加括號(單個變量可以不加括號)。例如:把(int)(x+y)寫成(int)x+y則成了把x轉(zhuǎn)換成int型之后再與y相加了。無論是強制轉(zhuǎn)換或是自動轉(zhuǎn)換,都只是為了本次運算的需要而對變量的數(shù)據(jù)長度進行的臨時性轉(zhuǎn)換,而不改變數(shù)據(jù)說明時對該變量定義的類型。例如,(double)a
只是將變量a的值轉(zhuǎn)換成一個double型的中間量,其數(shù)據(jù)類型并未轉(zhuǎn)換成double型。語言程序設(shè)計教程第二版第三章基本數(shù)據(jù)類型C基本算術(shù)運算符:
+-*/%
結(jié)合方向:從左向右優(yōu)先級:----->*/%----->+-
(2)(3)(4)
說明:
“-”可為單目運算符時,右結(jié)合性兩整數(shù)相除,結(jié)果為整數(shù)
%要求兩側(cè)均為整型數(shù)據(jù)例:
5/2=-5/2.0=例:
5%2=-5%2=1%10=
5%1=5.5%23.算術(shù)運算符、算術(shù)表達式
2-2.51-110()語言程序設(shè)計教程第二版第三章基本數(shù)據(jù)類型C表達式和算術(shù)表達式3.算術(shù)運算符、算術(shù)表達式
表達式:用運算符和括號將運算對象(常量、變量和函數(shù)等)連接起來的、符合C語言語法規(guī)則的式子。算術(shù)表達式:表達式中的運算符都是算術(shù)運算符的表達式。
運算符優(yōu)先級(到目前為止)例:
3+5*8、(x+y)/2-1等類型強制轉(zhuǎn)換運算符的優(yōu)先級
算術(shù)運算符的優(yōu)先級賦值運算符的優(yōu)先級語言程序設(shè)計教程第二版第三章基本數(shù)據(jù)類型C自增、自減運算符++--
作用:使變量值加1或減1
種類:前置++i,--i(先執(zhí)行i=i+1或i=i-1,再使用i值)
后置i++,i--(先使用i值,再執(zhí)行i=i+1或i=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=44.自增自減運算符、符號運算符
負號運算符(“-”)
減號(-)既是一個算術(shù)運算符,又是一個負號運算符。負號運算符是單目運算符。例如:a=2,那么-a的值就是-2。負號運算符的優(yōu)先級比較高,與強制類型轉(zhuǎn)換符是同一個級別。語言程序設(shè)計教程第二版第三章基本數(shù)據(jù)類型C自增、自減運算符注意事項++和--運算符只能用于變量,不能用于常量和表達式。因為++和--蘊含著賦值操作。
例如:5++、--(a+b)都是非法的表達式。負號運算符、++、--和強制類型轉(zhuǎn)換運算符的優(yōu)先級相同,當這些運算符連用時,按照從右向左的順序計算,即具有右結(jié)合性。兩個+和-之間不能有空格。在表達式中,連續(xù)使同一變量進行自增或自減運算時,很容易出錯,所以最好避免這種用法。
例如:++i++是非法的。自增、自減運算,常用于循環(huán)語句中,使循環(huán)控制變變量加(或減)-1,以及指針變量中,使指針指向下(或上)一個地址。4.自增自減運算符、符號運算符例:
intp,i=2,j=3;p=-i++;p=?i=?p=i+++j;p=?i=?j=?p=i+--j;p=?i=?j=?p=i+++--j;p=?i=?j=?p=i+++i++;p=?i=?p=++i+(++i);p=?i=?-235334224324448語言程序設(shè)計教程第二版第三章基本數(shù)據(jù)類型C5.算術(shù)運算符中數(shù)據(jù)類型轉(zhuǎn)換規(guī)則
低高doublefloatlongunsignedintchar,shortlongdouble說明:必定的轉(zhuǎn)換運算對象類型不同時轉(zhuǎn)換例:
charch;
inti;floatf;doubled;ch/i+f*d-(f+i)intintdoubledoubledoubledoubledoubledouble10+‘a(chǎn)’+i*f-d/l例:
inti;floatf;doubled;longl;intintdoubledoubledoubledoubledoubledouble#include<stdio.h>voidmain(){floata,b,c;a=7/2;//計算7/2得int型值3,因此a的值為3.0b=7/2*1.0;//計算7/2得int型值3,再與1.0相乘,因此b的值為3.0c=1.0*7/2;//先計算1.0*7得double型的結(jié)果7.0,然后再計算
7.0/2,因此c的值是3.5
printf("a=%f,b=%f,c=%f",a,b,c);}a=3.000000,b=3.000000,c=3.500000語言程序設(shè)計教程第二版第三章基本數(shù)據(jù)類型C6.位運算符、位運算表達式
位運算符:按位與(&)、按位或(|)、按位取反(~)、按位異或(^)、左移(<<)、右移(>>)六種。左移(<<)
實現(xiàn)將某變量所對應(yīng)的二進制數(shù)往左移位,溢出的最高位被丟掉,空出的低位用零填補。其一般格式為:
返回整型值的表達式<<返回整型值的表達式例:
inta=3;
a<<2:將a所對應(yīng)的二進制數(shù)左移兩位,該表達式的值為12。
2<<a:將2所對應(yīng)的二進制數(shù)左移三位(a的值),該表達式的值為16。
右移(>>)右移運算實現(xiàn)將某變量所對應(yīng)的二進制數(shù)往右移位,溢出的最低位被丟掉,如果變量是無符號數(shù),空出的高位用零填補,如果變量是有符號數(shù),空出的高位用原來的符號位填補(即負數(shù)填1,正數(shù)填0)。其一般格式為:
返回整型值的表達式>>返回整型值的表達式例:inta=8;a>>2:將a所對應(yīng)的二進制數(shù)右移兩位,該表達式的值為2。
例:
將short類型數(shù)據(jù)的高、低位字節(jié)互換
#include<stdio.h>
voidmain(){shorta=0xf245,b,c;b=a<<8;//將a的低8位移到高8位賦值給b,b的值為0x4500c=a>>8;//將a的高8位移到低8位賦值給c,c的值為0xfff2c=c&0x00ff;//將c的高8位清0后賦值給c,c的值為0x00f2a=b+c;//將b和c的值相加賦值給a,a的值為0x45f2
printf("a=%x",a);}a=0x45f2
位運算之間的優(yōu)先級
~→<<、>>→&→^→|語言程序設(shè)計教程第二版第三章基本數(shù)據(jù)類型C7.逗號運算符、逗號表達式
位運算符:,
逗號表達式:用逗號連接起來的表達式。其一般形式為:
表達式1,表達式2,……,表達式k
優(yōu)先級:優(yōu)先級最低。
結(jié)合性:左結(jié)合性。即逗號表達式的求值順序是從左向右依此計算用逗號分隔的各表達式的值。逗號表達式的值:最后一個表達式的值就是整個逗號表達式的值。
用途:常用于循環(huán)for語句中。例如:a+3,b=4,b++
例: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//逗號表達式,表達式值18,x=3//1,2,3//3,2,3例:#include<stdio.h>voidmain(){
intx,y=7;floatz=4;x=(y=y+6,y/z);
printf("x=%d\n",x);}運行結(jié)果:x=3語言程序設(shè)計教程第二版第三章基本數(shù)據(jù)類型C8.sizeof運算符、復(fù)合運算符
sizeof運算符
功能:獲取變量和數(shù)據(jù)類型所占內(nèi)存大?。ㄗ止?jié)數(shù))
格式:sizeof
表達式sizeof(數(shù)據(jù)類型名或表達式)例:
sizeof(int)其值為2(在TC2.0或BC3.1下)
其值為4(在VC6.0下)
sizeof(long)其值是4
sizeof10L其值也是4
unsignedlonga=2;
sizeof(a)其值也是4
復(fù)合賦值運算符
種類:+=-=*=/=%=<<=>>=&=^=|=含義:
exp1op=exp2
exp1=exp1opexp2
定義:將算術(shù)運算符、位運算符與賦值運算符組合在一起就構(gòu)成了復(fù)合賦值運算符。復(fù)合賦值運算符即包含了算術(shù)運算或位運算,又包含了賦值操作。a+=3a=a+3x*=y+8x=x*(y+8)x%=3x=x%3x&=y=3y=3和x&=y例:
a=12;a+=a-=a*a;//a=-264等價于a=a+(a=a-(a*a))例:
inta=2;a%=4-1;a+=a*=a-=a*=3;//a=0等價于a=a+(a=a*(a=a-(a=a*3)))語言程序設(shè)計教程第二版第三章基本數(shù)據(jù)類型C3.5運算符的優(yōu)先級和結(jié)合性優(yōu)先級運算符需要操作數(shù)的個數(shù)結(jié)合性高低()從左向右~++---(負號運算符)sizeof(類型)1(單目運算符)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025對稱信息情況下的最優(yōu)合同
- 2025正規(guī)個人向公司借款合同范本
- 食品加工廠屋面防水工程合同
- 國際和平橋梁建設(shè)合同
- 2025年度水箱設(shè)計、生產(chǎn)、銷售一體化服務(wù)合同3篇
- 互聯(lián)網(wǎng)公司技術(shù)人才合同樣本
- 道路綠化帶施工合同類型
- 企業(yè)勞動合同管理挑戰(zhàn)與機遇
- 礦山工程模板班組施工合同
- 2025年度汽車銷售公司與汽車金融服務(wù)合同3篇
- 2023年CQE客訴工程師年度總結(jié)及下年規(guī)劃
- MQL4命令中文詳解手冊
- 人教版地理七年級上冊期末測試題(4套含答案)
- 水平井施工方案及措施
- 小學(xué)數(shù)學(xué)一年級上冊-期末測試卷(二)含答案-人教版
- 登金陵鳳凰臺
- 小學(xué)四年級數(shù)學(xué)上冊促銷問題
- 初中體育-50米跑教學(xué)設(shè)計學(xué)情分析教材分析課后反思
- 國內(nèi)外中學(xué)數(shù)學(xué)教學(xué)改革與發(fā)展
- 醫(yī)院藥品評價與遴選量化評分表
- 專業(yè)英語四級模擬試卷450(題后含答案及解析)
評論
0/150
提交評論