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

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

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

C語(yǔ)言的預(yù)處理命令都是以“#”號(hào)開頭。stdio.h是一個(gè)頭文件

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

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

printf是C語(yǔ)言的內(nèi)部函數(shù)名,因?yàn)樗竺娓?),其功能是將“TheisaCprogram!\n”顯示在計(jì)算機(jī)的屏幕上(雙引號(hào)和\n不顯示)

C語(yǔ)言規(guī)定:語(yǔ)句以分號(hào)結(jié)束

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

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

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

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

3【例2】計(jì)算輸入的兩個(gè)整數(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ù)帶有三個(gè)參數(shù),以“,”分隔。&表示取變量的地址。調(diào)用內(nèi)部函數(shù),輸出計(jì)算的和數(shù)求和的值給Z假設(shè)輸入:1020↙

運(yùn)行結(jié)果:thesumoftwointegeris3042.2C程序常見符號(hào)分類

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

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

C語(yǔ)言是大小寫敏感的語(yǔ)言,因此hello和Hello是不同的標(biāo)識(shí)符。

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

C的運(yùn)算符有以下幾類:(1)算術(shù)運(yùn)算符(+-*/%)(2)關(guān)系運(yùn)算符(><==>=<=!=)(3)邏輯運(yùn)算符(?。Γ|)(4)位運(yùn)算符(<<>>~|∧&)(5)賦值運(yùn)算符(=及其擴(kuò)展賦值運(yùn)算符)(6)條件運(yùn)算符(?:)(7)逗號(hào)運(yùn)算符(,)(8)指針運(yùn)算符(*和&)(9)求字節(jié)數(shù)運(yùn)算符(sizeof)(10)強(qiáng)制類型轉(zhuǎn)換運(yùn)算符((類型))(11)分量運(yùn)算符(.->)(12)下標(biāo)運(yùn)算符([])(13)其他(如函數(shù)調(diào)用運(yùn)算符())關(guān)鍵字(Keyword)又稱為保留字,C語(yǔ)言中預(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è)語(yǔ)句塊“/*”和“*/”是程序注釋所需的定界符數(shù)據(jù)(Data)變量(Variable)常量(Constant)2.3數(shù)據(jù)類型(DataType)數(shù)據(jù)為什么要區(qū)分類型?不同類型的數(shù)據(jù)代表不同的數(shù)據(jù)表示形式合法的取值范圍占用內(nèi)存空間大小可參與的運(yùn)算種類從基本數(shù)據(jù)類型到抽象數(shù)據(jù)類型無(wú)數(shù)據(jù)類型基本數(shù)據(jù)類型構(gòu)造數(shù)據(jù)類型抽象數(shù)據(jù)類型

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

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

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

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

無(wú)符號(hào)整型unsigned2字節(jié)0~65535

無(wú)符號(hào)短整型unsignedshort2字節(jié)0~65535

無(wú)符號(hào)長(zhǎng)整型unsignedlong4字節(jié)0~(232-1)共六種有符號(hào)基本整型有符號(hào)短整型有符號(hào)長(zhǎng)整型無(wú)符號(hào)基本整型無(wú)符號(hào)短整型無(wú)符號(hào)長(zhǎng)整型(signed)int(signed)short(int)(signed)long(int)unsignedintunsignedshort(int)unsignedlong(int)

注意:括號(hào)表示其中的內(nèi)容是可選的.2.3.4標(biāo)識(shí)符命名

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

int,float,for,while,if等某些功能的變量采用習(xí)慣命名如:for語(yǔ)句所采用的循環(huán)變量習(xí)慣用i,j,kWindows風(fēng)格UNIX風(fēng)格標(biāo)識(shí)符定義:用來(lái)標(biāo)識(shí)變量、常量、函數(shù)等的字符序列組成:只能由字母、數(shù)字、下劃線組成,且第一個(gè)字母必須是字母或下劃線C語(yǔ)言的關(guān)鍵字不能用作變量名大小寫敏感長(zhǎng)度:有效長(zhǎng)度為32個(gè)字符。隨系統(tǒng)而異,但至少前8個(gè)字符有效命名原則:變量名和函數(shù)名中的英文字母一般用小寫,以增加可讀性

見名知意不宜混淆如l與I,o與0

在TC2.0及BC3.1中,變量名(標(biāo)識(shí)符)的有效長(zhǎng)度為1~32個(gè)字符,缺省值為32,但在VC中其長(zhǎng)度可達(dá)到255例:判斷下列標(biāo)識(shí)符號(hào)合法性sumSumM.D.JohndayDate3daysstudent_name#33lotus_1_2_3chara>b_above$123M.D.John3days#33char$123a>b

.字符非法

數(shù)字3不可作首字符

#字符非法

char是關(guān)鍵字

>字符非法

$不可作首字符

2.4常量常量:在程序運(yùn)行過(guò)程中,其值不能被改變的量稱為常量常量區(qū)分為不同的類型:整型100,125,-100,0實(shí)型3.14,0.125,-3.789字符型‘a(chǎn)’,‘b’,‘2’字符串‘a(chǎn)’,‘a(chǎn)b’,‘1232’符號(hào)常量:用一個(gè)標(biāo)識(shí)符來(lái)代表常量,即給某個(gè)常量取個(gè)有意義的名字,這種常量稱為符號(hào)常量。常量定義:程序運(yùn)行時(shí)其值不能改變的量(即常數(shù))

常量的分類

:直接常量(值常量)

整型常量:

10、15、-10、-30

實(shí)型常量:

12.5、30.0、-1.5

字符常量:

‘A’、‘b’、‘c’

字符串常量:

“sum”、“A”、“123”符號(hào)常量

用標(biāo)識(shí)符來(lái)代表常量。 其定義格式為:

#define符號(hào)常量常量

#defineNUM20#definePI3.1415926

#include<stdio.h>#definePRICE30voidmain(){intnum,total;num=10;total=num*PRICE;printf("total=%d",total);}

運(yùn)行結(jié)果:total=300

行尾不能有分號(hào)

define前面一定要有#

符號(hào)常量名最好使用大寫符號(hào)常量名最好有意義

常數(shù)(Constant)整型常數(shù)18、-31長(zhǎng)整型常量123l、123L、123456l、123456L無(wú)符號(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長(zhǎng)雙精度型常量123.45l、456.78L、1e-2l、4.5e3L八進(jìn)制與十六進(jìn)制常數(shù)以數(shù)字“0”開始的整型常數(shù)是八進(jìn)制數(shù)022、-037010和10大小不一樣因?yàn)榘诉M(jìn)制并不常用,所以此種表示法比較少見以“0x”或者“0X”開始的整型常數(shù)是十六進(jìn)制A~F和a~f用來(lái)表示十進(jìn)制的10~15十六進(jìn)制的形式比較常用,尤其在進(jìn)行位一級(jí)的控制的時(shí)候0x12、-0x1F,-0x1f實(shí)型數(shù)據(jù)提供的有效數(shù)字位數(shù)float型數(shù)據(jù)提供7位有效數(shù)字double型數(shù)據(jù)提供16位有效數(shù)字使用不當(dāng)導(dǎo)致舍入誤差#include<stdio.h>main(){

floata;

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

printf("%f\n%f\n",a,b);}字符型數(shù)據(jù)和字符串常量

字符型常量

定義:用單引號(hào)括起來(lái)的單個(gè)普通字符或轉(zhuǎn)義字符.

如‘a(chǎn)’‘A’‘?’‘\n’‘\101’

字符常量的值:該字符的ASCII碼值如‘A’——65,‘a(chǎn)’——97,‘0’——48,‘\n’——10

轉(zhuǎn)義字符:反斜線后面跟一個(gè)字符或一個(gè)代碼值表示<轉(zhuǎn)義字符及其含義:轉(zhuǎn)義字符含義\n\v\r\a\‘\ddd\t\b\f\\\“\xhh轉(zhuǎn)義字符含義換行垂直制表回車響鈴單引號(hào)3位8進(jìn)制數(shù)代表的字符水平制表退格換頁(yè)反斜線雙引號(hào)2位16進(jìn)制數(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\'");}運(yùn)行結(jié)果:(屏幕顯示)ABCIsay:”Howareyou?”\CProgram\Visual‘C’例:voidmain(){printf(“Y\b=\n”);}運(yùn)行結(jié)果:屏幕顯示:=打印機(jī)輸出:¥字符串常量

定義:用雙引號(hào)(“”)括起來(lái)的字符序列

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

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

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

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

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

enum

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

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

說(shuō)明:(1)枚舉型僅適應(yīng)于取值有限的數(shù)據(jù)。例:1周7天,1年12個(gè)月。(2)取值表中的值稱為枚舉元素,其含義由程序解釋。例:不是因?yàn)閷懗伞癝un”就自動(dòng)代表“星期天”。事實(shí)上,

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

注意:不同的枚舉元素不可以指定相同的值(5)一個(gè)整數(shù)不能直接賦值給枚舉變量例:workday=2;(非法,因?yàn)轭愋筒煌└膶懗桑簑orkday=(enumweekday)2;

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

1002

1003存儲(chǔ)單元3變量值2.5變量變量定義:程序運(yùn)行時(shí)其值可以被改變的量

變量的兩要素:變量名、變量值變量的定義格式:變量的初始化:定義時(shí)賦初始值變量的使用:先定義,后賦值變量定義位置:一般放在函數(shù)開頭[存儲(chǔ)類型]數(shù)據(jù)類型變量名1[,變量名2,…,變量名n];intx,y,z;floatradius,length,area;

charch;決定分配字節(jié)數(shù)和數(shù)的表示范圍合法標(biāo)識(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隨機(jī)數(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í)行語(yǔ)句voidmain(){inta,b=2;a=1;floatdata;data=(a+b)*1.2;printf(“data=%f\n”,data);}Const類型修飾符用const修飾定義的變量為常量constfloatpi=3.1425926;

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

例:

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

當(dāng)程序中定義了一個(gè)變量時(shí),計(jì)算機(jī)會(huì)為這個(gè)變量分配一個(gè)相應(yīng)大小的內(nèi)存單元。因此,這個(gè)變量是有值的,它的值就是對(duì)應(yīng)內(nèi)存單元的值。如果定義時(shí)沒(méi)有賦初值,則這個(gè)值程序員是無(wú)法預(yù)知的。

整型變量的分類

修飾符控制變量是否有符號(hào):signed(有符號(hào))和unsigned(無(wú)符號(hào))控制整型變量的值域范圍:short(短)和long(長(zhǎng))。

有符號(hào)基本型(int)

inta=-2;//定義一個(gè)有符號(hào)整型變量a,并賦初值-2

占一個(gè)機(jī)器字大小的內(nèi)存單元。TC或BC3.1下,變量占2個(gè)字節(jié)(16位)的內(nèi)存單元;VC6.0下,變量占4個(gè)字節(jié)(32位)的內(nèi)存單元。

如果定義變量時(shí),不指定signed,也不指定unsigned,則默認(rèn)為signed(有符號(hào))

1111111011111111低地址高地址低字節(jié)高字節(jié)符號(hào)位變量a占用的內(nèi)存單元(2字節(jié))有符號(hào)整型變量在內(nèi)存中的實(shí)際存放形式(假設(shè)在BC3.1下)

無(wú)符號(hào)基本型(unsignedint或unsigned)

unsignedinta=2;//定義一個(gè)無(wú)符號(hào)整型變量a,并賦初值2

unsigneda=2;

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

unsignedinta=-2;//定義一個(gè)無(wú)符號(hào)整型變量a,并賦初值-2

unsigneda=-2;1111111011111111無(wú)符號(hào)整型變量在內(nèi)存中的實(shí)際存放形式(假設(shè)在BC3.1下)

低字節(jié)高字節(jié)低地址高地址數(shù)據(jù)位變量a占用的內(nèi)存單元(2字節(jié))其值為:65534!注意:對(duì)于有符號(hào)數(shù)也好還是無(wú)符號(hào)數(shù)也好,其實(shí)在計(jì)算機(jī)內(nèi)存中表示是不加區(qū)分的,都是以其補(bǔ)碼形式表示,只是我們?cè)鯓涌创罡叨M(jìn)制位的問(wèn)題,如果把最高位當(dāng)成符號(hào)位看待,則為有符號(hào)數(shù),如果把最高位當(dāng)成數(shù)據(jù)位看待,則變?yōu)闊o(wú)符號(hào)數(shù)。例如:unsignedinta=-2;

printf(“%d”,a);------有符號(hào)輸出,則為-2printf(“%u”,a);------無(wú)符號(hào)輸出,則為65534有符號(hào)短整型(shortint或short)

shortinta=2;//定義一個(gè)有符號(hào)短整型變量a,并賦初值2

shorta=2;

占用的內(nèi)存單元為2個(gè)字節(jié),無(wú)論是TC、BC,還是VC。無(wú)符號(hào)短整型(unsignedshortint或unsignedshort)

unsignedshortinta=2;//定義一個(gè)無(wú)符號(hào)短整型變量a,并賦初值2

unsignedshorta=2;

占用的內(nèi)存單元字節(jié)數(shù)同short類型。在TC2.0和BC3.1下,unsignedshort類型與unsignedint類型是等價(jià)的

。有符號(hào)長(zhǎng)整型(longint或long)

longinta=234567;//定義一個(gè)有符號(hào)長(zhǎng)整型變量a,并賦初值234567

longa=234567;

占用的內(nèi)存單元為4個(gè)字節(jié),無(wú)論是TC、BC,還是VC。無(wú)符號(hào)長(zhǎng)整型(unsignedlongint或unsignedlong)

unsignedlonginta=2;//定義一個(gè)無(wú)符號(hào)長(zhǎng)整型變量a,并賦初值2

unsignedlonga=2;

占用的內(nèi)存單元字節(jié)數(shù)同long類型。在VC中l(wèi)ong與int類型基本相同,均占四個(gè)字節(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);}//文件包含,頭文件說(shuō)明

//定義符號(hào)常量SUM,值為65535

//定義兩個(gè)int型變量a和b,b賦初值20

//定義無(wú)符號(hào)整型變量c,并賦初值0xff

//定義長(zhǎng)整型變量D

//對(duì)a賦值為SUM,這時(shí)a的值是65535

//對(duì)D賦值為301

//以有符號(hào)十進(jìn)制形式("%d")顯示a的值

//以有符號(hào)十進(jìn)制形式(“%d”)顯示b的值

//以有符號(hào)十進(jìn)制形式("%d")顯示c的值

//以有符號(hào)十進(jìn)制形式("%d")顯示D的值

變量定義部分語(yǔ)句執(zhí)行部分在BC3.1下運(yùn)行結(jié)果:

a=-1b=20c=255D=301在VC6.0下運(yùn)行結(jié)果:

a=65535b=20c=255D=301對(duì)于16位的有符號(hào)整型變量a來(lái)說(shuō),因65535在內(nèi)存中的形式為1111111111111111,最高位為1表示負(fù),則其所對(duì)應(yīng)的十進(jìn)制數(shù)就為-1。使用變量要注意不要對(duì)變量所占的內(nèi)存空間字節(jié)數(shù)想當(dāng)然用sizeof獲得變量或者數(shù)據(jù)類型的長(zhǎng)度現(xiàn)場(chǎng)演示程序在TurboC2.0和VisualC下的運(yùn)行結(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í)行語(yǔ)句前定義聲明的順序無(wú)關(guān)緊要一條聲明語(yǔ)句可聲明若干個(gè)同類型的變量聲明變量,是初始化變量的最好時(shí)機(jī)不被初始化的變量,其值為危險(xiǎn)的隨機(jī)數(shù) charesc='a'; inti=1; intsum=0; floateps=1.0e-5;數(shù)據(jù)在內(nèi)存中的存儲(chǔ)格式整型實(shí)型字符型階碼符號(hào)階碼的數(shù)值尾數(shù)符號(hào)尾數(shù)的數(shù)值階碼j尾數(shù)S字符型變量字符型數(shù)據(jù)類型符是char(字符character)在內(nèi)存中占1個(gè)字節(jié)(8位)字符變量存放字符ASCII碼

char與int數(shù)據(jù)間可進(jìn)行算術(shù)運(yùn)算存在有符號(hào)和無(wú)符號(hào)之分。默認(rèn)情況下為有符號(hào)例:

charch;unsignedcharC='B';例:

a=‘D’;//a=68;

x=‘A’+5;//x=65+5;

s=‘!’+‘G’//s=33+71;

沒(méi)有字符串變量,用字符數(shù)組存放字符數(shù)據(jù)在內(nèi)存中的存儲(chǔ)形式及其使用方法一個(gè)字符常量存放到一個(gè)字符變量中,實(shí)際上并不是把該字符的字型放到內(nèi)存中去,而是將該字符的相應(yīng)的ASCII代碼放到存儲(chǔ)單元中。這樣使字符型數(shù)據(jù)和整型數(shù)據(jù)之間可以通用。注意:

一個(gè)字符數(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í)型數(shù)據(jù)

實(shí)型常量(實(shí)數(shù)或浮點(diǎn)數(shù))

十進(jìn)制小數(shù)形式:由數(shù)字0~9和小數(shù)點(diǎn)組成

.

如:0.0,5.6,-5.指數(shù)形式:由十進(jìn)制數(shù),加階碼標(biāo)志e或E以及階碼(只能為整數(shù),可以帶符號(hào))組成.

其一般形式為:aEn

其中:a為十進(jìn)制數(shù),n為十進(jìn)制整數(shù),都不可缺少。其可表示為a×10n合法的實(shí)數(shù)表示:

2.1E5表示2.1×105,3.7E-2表示3.7×10-2。

非法的實(shí)數(shù)表示:

345(無(wú)小數(shù)點(diǎn))

,E7(階碼標(biāo)志E之前無(wú)數(shù)字)

,

-5(無(wú)階碼標(biāo)志)

,50.-E3(負(fù)號(hào)位置不對(duì))

實(shí)型變量

單精度實(shí)型(float)

floatf=3.14,g;

這種定義的變量在內(nèi)存中占4個(gè)字節(jié)(32位)的存儲(chǔ)單元。雙精度實(shí)型(double)

doublex,y;

這種定義的變量在內(nèi)存中占8個(gè)字節(jié)(64位)的存儲(chǔ)單元。

長(zhǎng)雙精度實(shí)型(longdouble)

longdoublex,y;

在TC或BC下,這種定義的變量在內(nèi)存中占10個(gè)字節(jié)(80位)的存儲(chǔ)單元;在VC下則占8個(gè)字節(jié)(64位)。

注意:三種實(shí)數(shù)類型中,其精度是

float<double≦longdouble;longfloat實(shí)際上就是double,因此,沒(méi)有l(wèi)ongfloat類型;所有的實(shí)型常量按照double類型處理。實(shí)型數(shù)據(jù)

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

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

float

7~8

double

16~17

longdouble

17~18#include<stdio.h>voidmain(){floata;//定義float型變量adoubleb,c;//定義double型變量b和ca=123.456789;//對(duì)變量a賦值為123.456789b=a;//將變量a賦給變量bc=123.456789;//對(duì)變量c賦值為123.456789printf("a=%fb=%lfc=%lf\n",a,b,c);}abc123.456787123.456787123.456789a=123.456787b=123.456787c=123.456789

float型變量最多只能精確表示8個(gè)數(shù)字,因此顯示a的值時(shí),只能有效顯示前面8個(gè)數(shù)字即123.45678,最后追加一位數(shù)字7是隨機(jī)的

C運(yùn)算符簡(jiǎn)介

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

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

算術(shù)運(yùn)算符的結(jié)合方向?yàn)椤白宰笾劣摇保聪茸蠛笥?。關(guān)系運(yùn)算符>,>=,<,<=,==,!=大于,大于等于,小于,小于等于,等于,不等于關(guān)系運(yùn)算符運(yùn)算出的結(jié)果為0和非00,表示假,即該關(guān)系不成立非0,表示真,即該關(guān)系成立絕大多數(shù)編譯器,關(guān)系運(yùn)算得到的非0結(jié)果為1,但是不要利用這個(gè)1>,>=,<,<=的優(yōu)先級(jí)別相同,卻高于==,!=(優(yōu)先級(jí)別相同)a=3,b=2,c=1a>b>c的比較?邏輯運(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;例如:①j=++i;

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

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

(2)++和--的結(jié)合方向是“自右至左”。類型轉(zhuǎn)換在進(jìn)行賦值操作時(shí),會(huì)發(fā)生類型轉(zhuǎn)換將取值范圍小的類型轉(zhuǎn)為取值范圍大的類型是安全的反之是不安全的如果大類型的值在小類型能容納的范圍之內(nèi),則平安無(wú)事但是,浮點(diǎn)數(shù)轉(zhuǎn)為整數(shù),會(huì)丟失小數(shù)部分,非四舍五入反之,轉(zhuǎn)換后的結(jié)果必然是錯(cuò)誤的,具體結(jié)果與機(jī)器和實(shí)現(xiàn)方式有關(guān)。避免如此使用字符串與數(shù)值類型之間的轉(zhuǎn)換inti="123"這樣用是不行地atof(),atoi(),atol()把字符串轉(zhuǎn)為double,int和long定義在stdlib.h中sprintf()可以用來(lái)把各種類型的數(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;可以通過(guò)“(類型)表達(dá)式”的方式把表達(dá)式的值轉(zhuǎn)為任意類型強(qiáng)轉(zhuǎn)時(shí),你必須知道你在做什么強(qiáng)轉(zhuǎn)與指針,并稱C語(yǔ)言兩大神器,用好了可以呼風(fēng)喚雨,用壞了就損兵折將#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);}位操作運(yùn)算符&按位與運(yùn)算|按位或運(yùn)算^按位異或運(yùn)算<<按位左移運(yùn)算>>按位右移運(yùn)算~按位求反賦值運(yùn)算符下面兩個(gè)語(yǔ)句是等價(jià)的i=i+2;i+=2;+、-、*、/、%、<<、>>、&、^、|運(yùn)算符都可以按此種方式處理這種形式看起來(lái)更直觀,而且執(zhí)行效率一般也能更高一些一般形式為:

<變量><賦值運(yùn)算符><表達(dá)式>賦值表達(dá)式也可以包含復(fù)合的賦值運(yùn)算符。

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

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

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

如:

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

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

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

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

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

賦值情況:

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

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

溫馨提示

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

評(píng)論

0/150

提交評(píng)論