第2章 數(shù)據(jù)類型運算符和表達式1_第1頁
第2章 數(shù)據(jù)類型運算符和表達式1_第2頁
第2章 數(shù)據(jù)類型運算符和表達式1_第3頁
第2章 數(shù)據(jù)類型運算符和表達式1_第4頁
第2章 數(shù)據(jù)類型運算符和表達式1_第5頁
已閱讀5頁,還剩72頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第2章數(shù)據(jù)類型、運算符與表達式C語言大學實用教程12.1一個簡單的C程序例子了解了C語言的基本特性及其應用以后,接下來就來看看C語言程序是什么樣子。一個C語言程序可以是非常簡單的,也可以是特別復雜的,這取決于程序所要實現(xiàn)的功能。我們先來認識一個最為簡單的C程序?!纠?】最簡單的C程序。/*ThisisthefirstCprogram*/#include<stdio.h>voidmain(){printf(“TheisaCprogram!\n");}注釋信息預處理命令無返回值無參數(shù)、無返回值的主函數(shù)主函數(shù)名函數(shù)開始內(nèi)部函數(shù)名參數(shù)回車換行符函數(shù)調(diào)用函數(shù)體語句結(jié)束標志函數(shù)結(jié)束運行結(jié)果:TheisaCprogram!在C程序中,注釋由“/*”開始,由“*/”結(jié)束,可以實現(xiàn)多行注釋。在C++程序中也可使用“//”進行單行注釋。例如://注釋信息

C語言的預處理命令都是以“#”號開頭。stdio.h是一個頭文件

C程序中允許插入若干行空行,它不影響程序的功能,同注釋一樣。為了程序的易讀性,在編寫C程序時,根據(jù)需要可插入一定的空行

main是主函數(shù)名,一個C語言程序有且僅有一個main函數(shù)。C程序執(zhí)行時就是從main函數(shù)開始,具體講就是從“{”開始,到“}”結(jié)束。

printf是C語言的內(nèi)部函數(shù)名,因為它后面跟著(),其功能是將“TheisaCprogram!\n”顯示在計算機的屏幕上(雙引號和\n不顯示)

C語言規(guī)定:語句以分號結(jié)束

C語言程序的函數(shù)由兩部分構(gòu)成:一部分定義變量(變量代表數(shù)據(jù)),稱為聲明部分;另一部分代表操作,由C語句構(gòu)成,稱為執(zhí)行部分。在C程序中,要求函數(shù)的聲明部分在前面,執(zhí)行在后面,它們的順序不能顛倒,也不能交叉。但在C++程序中,聲明部分和執(zhí)行部分可以相互交叉,沒有嚴格的界限,當然執(zhí)行部分中所使用的變量只要在其之前進行定義即可。//C語言程序voidmain(){inta;a=10;intb;b=a+20;}變量定義放到了執(zhí)行部分之后。

//C++語言程序voidmain(){inta;a=10;intb;b=a+20;}只要執(zhí)行部分所使用的變量在前面已經(jīng)定義

//C或C++語言程序voidmain(){inta;a=10;b=a+20;intb;}變量定義放到了執(zhí)行部分之后。

再次強調(diào):在C語言程序中,變量必須先定義,后使用,順序不能顛倒?。?!

3【例2】計算輸入的兩個整數(shù)的和。/*ThisisthesecondCprogram*/#include<stdio.h>voidmain(){intx,y,z;scanf("%d%d",&x,&y);z=x+y;printf("thesumoftwointegeris%d\n",z);}數(shù)據(jù)類型名定義的變量名,以“,”分隔調(diào)用內(nèi)部函數(shù),接受鍵盤輸入數(shù)據(jù)帶有三個參數(shù),以“,”分隔。&表示取變量的地址。調(diào)用內(nèi)部函數(shù),輸出計算的和數(shù)求和的值給Z假設輸入:1020↙

運行結(jié)果:thesumoftwointegeris3042.2C程序常見符號分類

C語言中變量和函數(shù)都有自己的名字,它們都必須是合法的標識符。

標識符就是一個名字,C語言規(guī)定標識符只能由字母、數(shù)字和下劃線三種字符構(gòu)成,并且第一個字符必須是字母或下劃線。

C語言是大小寫敏感的語言,因此hello和Hello是不同的標識符。

C語言中有一些特別的標識符,它們的用途已經(jīng)事先規(guī)定好了,程序員不能再將它們另做它用。這些特別的標識符被稱為關(guān)鍵字(也稱保留字)。到目前為止,我們見過的關(guān)鍵字有void、int、main、if、else、return。以后隨著學習的深入,我們將會遇到越來越多的關(guān)鍵字(C語言關(guān)鍵字可參考附錄B)。5C運算符簡介

C的運算符有以下幾類:(1)算術(shù)運算符(+-*/%)(2)關(guān)系運算符(><==>=<=?。剑?3)邏輯運算符(?。Γ|)(4)位運算符(<<>>~|∧&)(5)賦值運算符(=及其擴展賦值運算符)(6)條件運算符(?:)(7)逗號運算符(,)(8)指針運算符(*和&)(9)求字節(jié)數(shù)運算符(sizeof)(10)強制類型轉(zhuǎn)換運算符((類型))(11)分量運算符(.->)(12)下標運算符([])(13)其他(如函數(shù)調(diào)用運算符())關(guān)鍵字(Keyword)又稱為保留字,C語言中預先規(guī)定的具有固定含義的一些單詞標識符(Identifier)系統(tǒng)預定義標識符用戶自定義標識符運算符(Operator)34種,詳見附錄2

分隔符(Separator)空格、回車/換行、逗號等其它符號大花括號“{”和“}”通常用于標識函數(shù)體或者一個語句塊“/*”和“*/”是程序注釋所需的定界符數(shù)據(jù)(Data)變量(Variable)常量(Constant)2.3數(shù)據(jù)類型(DataType)數(shù)據(jù)為什么要區(qū)分類型?不同類型的數(shù)據(jù)代表不同的數(shù)據(jù)表示形式合法的取值范圍占用內(nèi)存空間大小可參與的運算種類從基本數(shù)據(jù)類型到抽象數(shù)據(jù)類型無數(shù)據(jù)類型基本數(shù)據(jù)類型構(gòu)造數(shù)據(jù)類型抽象數(shù)據(jù)類型

數(shù)據(jù)類型(DataType)數(shù)據(jù)類型基本類型構(gòu)造類型指針類型空類型整型實型(浮點型)字符型枚舉類型數(shù)組類型結(jié)構(gòu)體類型共用體類型單精度實型雙精度實型基本整型長整型短整型無符號整型2.3.3數(shù)據(jù)類型修飾符shortshortint,短整數(shù),一般2個字節(jié)長。通常簡寫為shortlonglongint,長整數(shù),一般是4個字節(jié)長。通常簡寫為longlongdouble,長雙精度(高精度)浮點數(shù),一般是10個字節(jié)長。signed用來修飾char、int、short和long,說明他們是有符號的整數(shù)(正整數(shù)、0和負整數(shù))。一般缺省都是有符號的,所以這個修飾符通常省略unsigned用來修飾char、int、short和long,說明他們是無符號的整數(shù)(正整數(shù)和0)整數(shù)類型的有關(guān)數(shù)據(jù):

類型類型說明符長度數(shù)的范圍基本型int2字節(jié)-32768~32767

短整型short2字節(jié)-215~215-1

長整型long4字節(jié)-231~231-1

無符號整型unsigned2字節(jié)0~65535

無符號短整型unsignedshort2字節(jié)0~65535

無符號長整型unsignedlong4字節(jié)0~(232-1)共六種有符號基本整型有符號短整型有符號長整型無符號基本整型無符號短整型無符號長整型(signed)int(signed)short(int)(signed)long(int)unsignedintunsignedshort(int)unsignedlong(int)

注意:括號表示其中的內(nèi)容是可選的.2.3.4標識符命名

變量名函數(shù)名由英文字母、數(shù)字和下劃線組成,大小寫敏感不可以是數(shù)字開頭直觀,見名知意,便于記憶和閱讀最好使用英文單詞或其組合切忌使用漢語拼音下劃線和大小寫通常用來增強可讀性variablenamevariable_nameVariableName,variableName不允許使用關(guān)鍵字作為標識符的名字

int,float,for,while,if等某些功能的變量采用習慣命名如:for語句所采用的循環(huán)變量習慣用i,j,kWindows風格UNIX風格標識符定義:用來標識變量、常量、函數(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)鍵字

>字符非法

$不可作首字符

2.4常量常量:在程序運行過程中,其值不能被改變的量稱為常量常量區(qū)分為不同的類型:整型100,125,-100,0實型3.14,0.125,-3.789字符型‘a(chǎn)’,‘b’,‘2’字符串‘a(chǎn)’,‘a(chǎn)b’,‘1232’符號常量:用一個標識符來代表常量,即給某個常量取個有意義的名字,這種常量稱為符號常量。常量定義:程序運行時其值不能改變的量(即常數(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ù)(Constant)整型常數(shù)18、-31長整型常量123l、123L、123456l、123456L無符號型常量123u、123U浮點常數(shù)十進制小數(shù)形式123.45、456.78指數(shù)形式1e-2、4.5e3單精度實型常量123.45f、456.78F、1e-2f、4.5e3F長雙精度型常量123.45l、456.78L、1e-2l、4.5e3L八進制與十六進制常數(shù)以數(shù)字“0”開始的整型常數(shù)是八進制數(shù)022、-037010和10大小不一樣因為八進制并不常用,所以此種表示法比較少見以“0x”或者“0X”開始的整型常數(shù)是十六進制A~F和a~f用來表示十進制的10~15十六進制的形式比較常用,尤其在進行位一級的控制的時候0x12、-0x1F,-0x1f實型數(shù)據(jù)提供的有效數(shù)字位數(shù)float型數(shù)據(jù)提供7位有效數(shù)字double型數(shù)據(jù)提供16位有效數(shù)字使用不當導致舍入誤差#include<stdio.h>main(){

floata;

doubleb; a=123456.789e4; b=123456.789e4;

printf("%f\n%f\n",a,b);}字符型數(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é)果:屏幕顯示:=打印機輸出:¥字符串常量

定義:用雙引號(“”)括起來的字符序列

存儲:每個字符串尾自動加一個‘\0’作為字符串結(jié)束標志例1:字符串“HELLO”在內(nèi)存中0x480x450x4C0x4C0x4F0低地址高地址‘H’‘E’‘L’‘L’‘O’‘\0’字符串結(jié)束標志例2:空串“”\0

字符常量與字符串常量不同0x41

0x41\0例‘A’“A”例:charch;ch=“A”;例:charch;ch=‘A’;字符串(String)常數(shù)用雙引號括住的由0個或多個字符組成的字符序列"Iamastring"""表示空字符串轉(zhuǎn)義字符也可以在字符串中使用引號只作為字符串開始和結(jié)束的標志C語言內(nèi)部用’\0’表示字符串的結(jié)束除注釋外,是唯一可以出現(xiàn)中文的地方"x"和’x’是不同的<string.h>里定義了一系列專門的字符串處理函數(shù)宏常量宏常量也稱符號常量一般采用大寫字母表示#define標識符字符串不是語句,而是一種編譯預處理命令宏替換(MacroSubstitulition)#include<stdio.h>#definePI3.14159#defineR5.3main(){

printf("area=%f\n",PI*R*R);

printf("circumference=%f\n",2*PI*R);}枚舉(Enumeration)常量用途:如果一個變量只有幾種可能的值,就可以定義成枚舉類型枚舉類型的定義

enum

枚舉類型名{取值表};例:enumweekdays{Sun,Mon,Tue,Wed,Thu,Fri,Sat};枚舉變量的定義----與結(jié)構(gòu)體變量定義類似間接定義:enumweekdayswork;

直接定義:enumweekdays{Sun,Mon,Tue,Wed,Thu,Fri,Sat}work;

說明:(1)枚舉型僅適應于取值有限的數(shù)據(jù)。例:1周7天,1年12個月。(2)取值表中的值稱為枚舉元素,其含義由程序解釋。例:不是因為寫成“Sun”就自動代表“星期天”。事實上,

枚舉元素用什么表示都可以。(3)枚舉元素按常量處理,它們的值是定義時的順序號(從0開始),所以枚舉元素可以進行比較,比較規(guī)則是:序號大者為大!例:上例中的Sun的值為0、Mon的值為1、……、Sat的值為6,所以Mon>Sun,Sat最大。(4)枚舉元素的值也是可以人為改變的:在定義時由程序指定。例:如果enumweekdays{Sun=7,Mon=1,Tue,Wed,Thu,Fri,Sat};則Sun=7,Mon=1,從Tue=2開始,依次增1。

注意:不同的枚舉元素不可以指定相同的值(5)一個整數(shù)不能直接賦值給枚舉變量例:workday=2;(非法,因為類型不同)改寫成:workday=(enumweekday)2;

變量的定義:在程序運行過程中,其值可以被改變的量稱為變量。例:inti;floatf;charc;變量的兩個要素:(1)變量名。每個變量都必須有一個名字──變量名。一個變量名對應于一定的內(nèi)存單元。變量名實際上是一個符號地址,在對程序編譯連接時由系統(tǒng)給每一個變量名分配一個內(nèi)存地址。對變量的所有操作實際是對相應內(nèi)存單元的操作。(2)變量值。在程序運行過程中,變量值存儲在內(nèi)存中。在程序中,通過變量名來引用變量的值。例:inta=3;變量名a對應于地址1002;

1002

1003存儲單元3變量值2.5變量變量定義:程序運行時其值可以被改變的量

變量的兩要素:變量名、變量值變量的定義格式:變量的初始化:定義時賦初始值變量的使用:先定義,后賦值變量定義位置:一般放在函數(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);}Const類型修飾符用const修飾定義的變量為常量constfloatpi=3.1425926;

常量只能在定義時賦值,然后不能再改變其值常數(shù)、const常量、宏常量和枚舉常量,都可以用來表示一個永遠不會改變的數(shù)前者不建議直接使用,而用后三者代替基本數(shù)據(jù)類型int整數(shù),在目前絕大多數(shù)機器上占4個字節(jié)。TC2中是2個字節(jié)float單精度浮點數(shù),一般是4個字節(jié)長double雙精度浮點數(shù),一般是8個字節(jié)長char字符,一般是1個字節(jié)長用來表示256個ASCII字符,或者0~255的整數(shù)整型變量的定義int變量名[,變量名2,……,變量名n];int必須小寫至少一個空格必須為合法的標識符以逗號,分隔以分號;結(jié)尾定義時可以賦初值,方法:在變量名后面增加“=數(shù)值”

例:

inta;intx,y,z;intm=2,y=-3;

當程序中定義了一個變量時,計算機會為這個變量分配一個相應大小的內(nèi)存單元。因此,這個變量是有值的,它的值就是對應內(nèi)存單元的值。如果定義時沒有賦初值,則這個值程序員是無法預知的。

整型變量的分類

修飾符控制變量是否有符號: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)存中的實際存放形式(假設在BC3.1下)

無符號基本型(unsignedint或unsigned)

unsignedinta=2;//定義一個無符號整型變量a,并賦初值2

unsigneda=2;

占用的內(nèi)存單元字節(jié)數(shù)同int類型。與inta=2;等價。

unsignedinta=-2;//定義一個無符號整型變量a,并賦初值-2

unsigneda=-2;1111111011111111無符號整型變量在內(nèi)存中的實際存放形式(假設在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);------有符號輸出,則為-2printf(“%u”,a);------無符號輸出,則為65534有符號短整型(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類型是等價的

。有符號長整型(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ù)處理方法是一樣的。

【例】各種整型變量的定義

#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表示負,則其所對應的十進制數(shù)就為-1。使用變量要注意不要對變量所占的內(nèi)存空間字節(jié)數(shù)想當然用sizeof獲得變量或者數(shù)據(jù)類型的長度現(xiàn)場演示程序在TurboC2.0和VisualC下的運行結(jié)果注意!#include<stdio.h>main(){

printf("DatatypeNumberofbytes\n");

printf("---------------------------------\n");

printf("char%d\n",sizeof(char));

printf("int%d\n",sizeof(int));

printf("shortint%d\n",sizeof(short));

printf("longint%d\n",sizeof(long));

printf("float%d\n",sizeof(float));

printf("double%d\n",sizeof(double));}變量聲明使用變量的基本原則變量必須先定義,后使用所有變量必須在第一條可執(zhí)行語句前定義聲明的順序無關(guān)緊要一條聲明語句可聲明若干個同類型的變量聲明變量,是初始化變量的最好時機不被初始化的變量,其值為危險的隨機數(shù) charesc='a'; inti=1; intsum=0; floateps=1.0e-5;數(shù)據(jù)在內(nèi)存中的存儲格式整型實型字符型階碼符號階碼的數(shù)值尾數(shù)符號尾數(shù)的數(shù)值階碼j尾數(shù)S字符型變量字符型數(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ù)據(jù)在內(nèi)存中的存儲形式及其使用方法一個字符常量存放到一個字符變量中,實際上并不是把該字符的字型放到內(nèi)存中去,而是將該字符的相應的ASCII代碼放到存儲單元中。這樣使字符型數(shù)據(jù)和整型數(shù)據(jù)之間可以通用。注意:

一個字符數(shù)據(jù)既可以以字符形式輸出,也可以以整數(shù)形式輸出。char型與int型之間的關(guān)系小寫字母轉(zhuǎn)換為大寫字母#include<stdio.h>main(){

charch='b';

ch='b'-32;

printf("%c,%d\n",ch,ch);}#include<stdio.h>main(){

charch='b';

ch='b'-('a'-'A')

;

printf("%c,%d\n",ch,ch);}實型數(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ù)據(jù)

實型數(shù)據(jù)的精度

類型精確表示的數(shù)字個數(shù)

float

7~8

double

16~17

longdouble

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.456789printf("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是隨機的

C運算符簡介

C的運算符有以下幾類:(1)算術(shù)運算符(+-*/%)(2)關(guān)系運算符(><==>=<=?。剑?3)邏輯運算符(!&&||)(4)位運算符(<<>>~|∧&)(5)賦值運算符(=及其擴展賦值運算符)(6)條件運算符(?:)(7)逗號運算符(,)(8)指針運算符(*和&)(9)求字節(jié)數(shù)運算符(sizeof)(10)強制類型轉(zhuǎn)換運算符((類型))(11)分量運算符(.->)(12)下標運算符([])(13)其他(如函數(shù)調(diào)用運算符())運算符的優(yōu)先級和結(jié)合性詳見附錄D算術(shù)運算符+,-,*,/加、減、乘、除運算四則混合運算中,先算乘除,后算加減,

按從左向右的順序計算,左結(jié)合%求余運算兩個整數(shù)相除仍為整數(shù),余數(shù)的符號取決于被除數(shù)的符號。常用的標準數(shù)學函數(shù)函數(shù)名功能函數(shù)名功能sqrt(x)計算x的平方根,x應大于等于0exp(x)計算ex的值fabs(x)計算x的絕對值pow(x,y)計算xy的值log(x)計算lnx的值sin(x)計算sinx的值,x為弧度值log10(x)計算lgx的值cos(x)計算cosx的值,x為弧度值在表達式求值時,先按運算符的優(yōu)先級別高低次序執(zhí)行,例如先乘除后加減。C規(guī)定了各種運算符的結(jié)合方向(結(jié)合性)

算術(shù)運算符的結(jié)合方向為“自左至右”,即先左后右。關(guān)系運算符>,>=,<,<=,==,!=大于,大于等于,小于,小于等于,等于,不等于關(guān)系運算符運算出的結(jié)果為0和非00,表示假,即該關(guān)系不成立非0,表示真,即該關(guān)系成立絕大多數(shù)編譯器,關(guān)系運算得到的非0結(jié)果為1,但是不要利用這個1>,>=,<,<=的優(yōu)先級別相同,卻高于==,!=(優(yōu)先級別相同)a=3,b=2,c=1a>b>c的比較?邏輯運算符邏輯運算也被稱為布爾(Boolean)運算&&與運算(a>b&&b>c);a大于b,并且b大于c||或運算(a>b||b>c);a大于b,或者b大于c!求反(!a);如果a是0,結(jié)果非0;如果a是非0,結(jié)果是0并不改變a的值實例ch是英文大寫字母(ch>='A')&&(ch<='Z')判斷某一年year是否是閏年的條件是滿足下列兩個條件之一:能被4整除,但不能被100整除;能被400整除;((year%4==0)&&(year%100!=0))||(year%400==0)增一和減一運算符n++,n--,++n,--n++讓參與運算的變量加1,--讓參與運算的變量減1作為后綴運算符時,先取n的值,然后加/減1作為前綴運算符時,先加/減1,然后取n的值m=n++;

等價于m=n;n++;m=++n;

等價于n++;m=n;例如:①j=++i;

i的值先變成4,再賦給j,j的值均為4②j=i++;先將i的值3賦給j,j的值為3,然后i變?yōu)椋丛鲆缓蜏p一運算符良好的程序設計風格提倡:在一行語句中,一個變量只能出現(xiàn)一次加1或者減1運算過多的加1和減1運算混合,不僅可讀性差,而且因為編譯器實現(xiàn)的方法不同,導致不同編譯器產(chǎn)生不同的運行結(jié)果注意:

(1)自增運算符(++),自減運算符(--),只能用于變量,而不能用于常量或表達式,

(2)++和--的結(jié)合方向是“自右至左”。類型轉(zhuǎn)換在進行賦值操作時,會發(fā)生類型轉(zhuǎn)換將取值范圍小的類型轉(zhuǎn)為取值范圍大的類型是安全的反之是不安全的如果大類型的值在小類型能容納的范圍之內(nèi),則平安無事但是,浮點數(shù)轉(zhuǎn)為整數(shù),會丟失小數(shù)部分,非四舍五入反之,轉(zhuǎn)換后的結(jié)果必然是錯誤的,具體結(jié)果與機器和實現(xiàn)方式有關(guān)。避免如此使用字符串與數(shù)值類型之間的轉(zhuǎn)換inti="123"這樣用是不行地atof(),atoi(),atol()把字符串轉(zhuǎn)為double,int和long定義在stdlib.h中sprintf()可以用來把各種類型的數(shù)值轉(zhuǎn)為字符串定義在stdio.h中自動類型轉(zhuǎn)換同種數(shù)據(jù)類型的運算結(jié)果,還是該類型不同種數(shù)據(jù)類型的運算結(jié)果,是兩種類型中取值范圍更大的那種long

double>double>float>long>int>short>char把數(shù)據(jù)賦值給另外一種類型變量也會發(fā)生自動類型轉(zhuǎn)換從小到大,順利轉(zhuǎn)換從大到小,可能丟失信息(好的編譯器會發(fā)出警告)類型強轉(zhuǎn)(Casting)消除從大到小的警告l=(long)i;可以通過“(類型)表達式”的方式把表達式的值轉(zhuǎn)為任意類型強轉(zhuǎn)時,你必須知道你在做什么強轉(zhuǎn)與指針,并稱C語言兩大神器,用好了可以呼風喚雨,用壞了就損兵折將#include<stdio.h>main(){

intm=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);}位操作運算符&按位與運算|按位或運算^按位異或運算<<按位左移運算>>按位右移運算~按位求反賦值運算符下面兩個語句是等價的i=i+2;i+=2;+、-、*、/、%、<<、>>、&、^、|運算符都可以按此種方式處理這種形式看起來更直觀,而且執(zhí)行效率一般也能更高一些一般形式為:

<變量><賦值運算符><表達式>賦值表達式也可以包含復合的賦值運算符。

如:a+=a-=a*a分析:此賦值表達式的求解步驟如下∶①先進行“a-=a*a”的運算,它相當于a=a-a*a,a的值為12-144=-132。②再進行“a+=-132”的運算,相當于a=a+(-132),a的值為-132-132=-264。將賦值表達式作為表達式的一種,使賦值操作不僅可以出現(xiàn)在賦值語句中,而且可以以表達式形式出現(xiàn)在其他語句(如輸出語句、循環(huán)語句等)中。如:printf("%d",a=b);分析:如果b的值為3,則輸出a的值(也是表達式a=b的值)為3。在一個語句中完成了賦值和輸出雙重功能。賦值過程中的類型轉(zhuǎn)換

如果賦值運算符兩側(cè)的類型不一致,但都是數(shù)值型或字符型時,在賦值時要進行類型轉(zhuǎn)換。①將浮點型數(shù)據(jù)(包括單、雙精度)賦給整型變量時,舍棄浮點數(shù)的小數(shù)部分。如:i為整型變量,執(zhí)行“i=3.56”的結(jié)果是使i的值為3,以整數(shù)形式存儲在整型變量中.

②將整型數(shù)據(jù)賦給單、雙精度變量時,數(shù)值不變,但以浮點數(shù)形式存儲到變量中

如:

將23賦給float變量f,即執(zhí)行f=23,先將23轉(zhuǎn)換成23.00000,再存儲在f中。將23賦給double型變量d,即執(zhí)行d=23,系統(tǒng)將23補足有效位數(shù)字為23.00000000000000,然后以雙精度浮點數(shù)形式存儲到變量d中。

③將一個double型數(shù)據(jù)賦給float變量時,截取其前面7位有效數(shù)字,存放到float變量的存儲單元(4個字節(jié))中。但應注意數(shù)值范圍不能溢出。

如:floatf;doubled=123.456789e100;f=d;

就出現(xiàn)溢出的錯誤。

如果將一個float型數(shù)據(jù)賦給double變量時,數(shù)值不變,有效位數(shù)擴展到16位,在內(nèi)存中以8個字節(jié)存儲④字符型數(shù)據(jù)賦給整型變量時,由于字符只占1個字節(jié),而整型變量為2個字節(jié),因此將字符數(shù)據(jù)(8個二進位)放到整型變量存儲單元的低8位中。⑤將一個int、short、long型數(shù)據(jù)賦給一個char型變量時,只將其低8位原封不動地送到char型變量(即截斷)。例如:inti=289;charc=′a′;c=i;c的值為33,如果用“%c”輸出c,將得到字符“!”!的ASCII碼為33。

賦值情況:

將帶符號的整型數(shù)據(jù)(int型)賦給long型變量時,要進行符號擴展,將整型數(shù)的16位送到long型低16位中:如果int型數(shù)據(jù)為正值(符號位為0),則long型變量的高16位補0;如果int型變量為負值(符號位為1),則long型變量的高16位補1,以保持數(shù)值不改變。反之,若將一個long型數(shù)據(jù)賦給一個int型變量,只將long型數(shù)據(jù)中低16位原封不動地送到整型變量(即截斷)。⑦將unsignedint型數(shù)據(jù)賦給longint型變量時,不存在符號擴展問題,只需將高位補0即可。將一個unsigned類型數(shù)據(jù)賦給一個占字節(jié)數(shù)相同的非unsigned型整型變量(例如:unsignedint->int,unsignedlong->long,unsignedshort->short),將unsigned型變量的內(nèi)容原樣送到非unsigned型變量中,但如果數(shù)據(jù)范圍超過相應整型的范圍,則會出現(xiàn)數(shù)據(jù)錯誤。賦值運算符兩側(cè)的數(shù)據(jù)類型不一致時,賦值運算符右端的表達式計算結(jié)果要轉(zhuǎn)換為賦值運算符左端變量的類型。注意:表達式的值是否超過變量所屬類型的取值范圍。

實型數(shù)據(jù)整型變量取整數(shù)部分,但注意范圍(1)實型變量整型數(shù)據(jù)以浮點形式存儲(2)double數(shù)據(jù)float變量取7位有效數(shù)字,但注意范圍(3)double變量float數(shù)據(jù)有效位數(shù)擴展char數(shù)據(jù)整型變量字符數(shù)據(jù)送到整型變量低8位但注意符號

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論