C語言基本數(shù)據(jù)描述_第1頁
C語言基本數(shù)據(jù)描述_第2頁
C語言基本數(shù)據(jù)描述_第3頁
C語言基本數(shù)據(jù)描述_第4頁
C語言基本數(shù)據(jù)描述_第5頁
已閱讀5頁,還剩77頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

會計(jì)學(xué)1C語言基本數(shù)據(jù)描述(1)大、小寫英文字母:A,B,…,Z,a,b,…z(2)數(shù)字:0,1,2,…,9(3)運(yùn)算符:+–*/%><=&|?!^~(4)括號:(){}[](5)標(biāo)點(diǎn)符號:'":;(6)特殊符號:\_$#(7)空白符:空格符、換行符、制表符。C語言的字符集合包括:第1頁/共82頁(1)字母或下劃線中的任一字符打頭。(2)在第一個字符后,可以是任意的數(shù)字、字母、下劃線組成的序列。長度不超過8個。

關(guān)鍵字(保留字)標(biāo)識符的分類:特定字

用戶定義字任何一個標(biāo)識符必須符合下列語法規(guī)則:第2頁/共82頁

關(guān)鍵字:又稱保留字,一般為小寫字母。關(guān)鍵字是C編譯程序預(yù)先登錄的標(biāo)識符,它們代表固定的意義,用戶不能隨便使用。若隨便使用,可能出現(xiàn)意想不到的錯誤,編譯能通過,但運(yùn)行結(jié)果不對,且不容易檢查錯誤之所在。關(guān)鍵字(保留字)第3頁/共82頁

特定字

特定字:具有特殊含義的標(biāo)識符。它們雖然不是關(guān)鍵字,但是在習(xí)慣上把它們看成關(guān)鍵字。所以一般用戶定義的標(biāo)識符也不要使用它們。特定字包括:

defineundefincludeifdefifndefendifline第4頁/共82頁

用戶按照語法規(guī)則定義的標(biāo)識符。用戶定義字可以用來標(biāo)識用戶自己使用的變量,符號常量、數(shù)據(jù)類型以及函數(shù)等。

注意

(1)不能使用關(guān)鍵字和特定字。

(2)用戶定義字為了標(biāo)識不同的對象,標(biāo)識符的前8個(甚至7個)字符要有區(qū)別。

(3)標(biāo)識符最好有含義。

(4)避免使用容易混淆的字符。如l與1,0與o,z與2等。

(5)大、小寫代表不同的意義。

(6)盡量不要與某個庫函數(shù)同名。用戶定義字第5頁/共82頁2.1.2變量與常量

變量變量是由程序命名的一塊計(jì)算機(jī)內(nèi)存區(qū)域,是用來存儲一個可以變化的數(shù)值。

常量與變量一樣,常量也是存儲在內(nèi)存中的,但是,常量的數(shù)值在程序執(zhí)行過程中不會發(fā)生改變。無名常量(或稱文字常量)符號常量(用預(yù)處理命令#define為常量命名)第6頁/共82頁

在使用一個變量之前,程序員必須為每個變量起個名字,同時還要聲明它的數(shù)據(jù)類型,以便編譯系統(tǒng)根據(jù)不同的數(shù)據(jù)類型為其靜態(tài)地分配內(nèi)存空間。我們稱之為定義變量。定義變量的格式為:

類型說明符變量名表;

不定值

定義變量第7頁/共82頁2.2.1C語言的數(shù)據(jù)類型

整型int

基本數(shù)據(jù)類型浮點(diǎn)型floatdouble

字符型char

數(shù)組

以[]為標(biāo)志

結(jié)構(gòu)

struct構(gòu)造類型

復(fù)雜數(shù)據(jù)類型

聯(lián)合

union

枚舉

enum

指針類型

以*為標(biāo)志

C語言的數(shù)據(jù)類型第8頁/共82頁整型

短整型

shortint

長整型

longint

普通整型

int浮點(diǎn)型

普通浮點(diǎn)型

float

雙精度浮點(diǎn)型

double字符型

char

不同數(shù)據(jù)類型的數(shù)據(jù)由于其在內(nèi)存的存儲方式不同,存儲所占的二進(jìn)制位(bit)大多不相同。即使是相同類型的數(shù)據(jù)在不同種類的計(jì)算機(jī)所占位(bit)數(shù)也不完全相同。第9頁/共82頁2.2.2整型數(shù)據(jù)

整型變量整型常量用printf顯示整型數(shù)據(jù)用scanf輸入整型數(shù)

第10頁/共82頁按照整型變量所占的二進(jìn)制位數(shù)來分類:

short(短整型)

int(普通整型)

long(長整型)根據(jù)整型變量是否帶符號位來分類:不帶符號的整型變量帶符號的整型變量無符號用關(guān)鍵字unsigned表示說明整型變量的語法是:

限定詞int變量名表;

第11頁/共82頁

在IBMPC機(jī)上,普通整型占16位(bit),短整型也占16位(bit),而長整型占32位(bit)。根據(jù)整型數(shù)據(jù)所占的位數(shù),計(jì)算一個整型數(shù)據(jù)能表示的數(shù)據(jù)的取值范圍。第0位是符號位,如果符號位為0,表示是正整數(shù),從0到15位全為1時表示的數(shù)最大。0111…

…1

+1=21515個1

則16bit能表示的最大整數(shù)是215–1,即32767。如果符號位為1,表示是負(fù)整數(shù),從0到15位都為0時表示的數(shù)最小。10……00

15個0

在計(jì)算機(jī)中,這個數(shù)是-215的補(bǔ)碼表示。因此,最小整數(shù)是-215,即-32768。

第12頁/共82頁整型常量表示:

十進(jìn)制表示

八進(jìn)制表示

以數(shù)字0開頭

十六進(jìn)制表示

以數(shù)字0和x開頭。

inta,b,c;a=10;b=010;c=0x10;

長整型:要在數(shù)字后加上字母L。

longs;s=10L;第13頁/共82頁

需要注意的是:如果整型常量超過機(jī)器所能表示的范圍,則會發(fā)生溢出,而在C語言中的整數(shù)溢出并不會使程序出錯,而是得到一個非正確的值。

inta,b;a=10000;b=10000000;

變量b的值會被系統(tǒng)認(rèn)為是-27008。第14頁/共82頁%d表示把數(shù)據(jù)按十進(jìn)制整型輸出;%o表示把數(shù)據(jù)按八進(jìn)制整型輸出;%x表示把數(shù)據(jù)按十六進(jìn)制整型輸出;%u表示把數(shù)據(jù)參數(shù)按無符號整型輸出。注意:除了%d,其余的格式都將數(shù)據(jù)作為無符號數(shù)輸出。printf("%ld",100000L);正確printf("%d",100000L);

結(jié)果-31072用printf顯示整型數(shù)據(jù)

第15頁/共82頁例2.1#include"stdio.h"voidmain(){intx,y,z;x=129,y=0127,z=0x128;printf("%d,%d,%d\n",x,y,z);printf("%o,%o,%o\n",x,y,z);printf("%x,%x,%x\n",x,y,z);}

運(yùn)行結(jié)果:129,87,296201,127,45081,57,128第16頁/共82頁例2.2#include"stdio.h"voidmain(){intx,y,z;x=-129,y=-0127,z=-0x128; printf("%d,%d,%d\n",x,y,z); printf("%o,%o,%o\n",x,y,z); printf("%x,%x,%x\n",x,y,z);}運(yùn)行結(jié)果:-129,-87,-296177577,177651,177330ff7f,ffa9,fed8說明:-0127和-0x128并不是八進(jìn)制和十六進(jìn)制常量,“-”實(shí)際是運(yùn)算符;使用%o和%x顯示的常量和變量是無符號數(shù)。第17頁/共82頁使用域?qū)捄蛯R方式來控制顯示格式在%和轉(zhuǎn)換說明符之前加整數(shù)數(shù)字,表示數(shù)據(jù)顯示的域?qū)?

在%后面加符號“-”,數(shù)據(jù)顯示時左對齊,沒有符號“-”,數(shù)據(jù)顯示時右對齊。

printf("%-6x%-6x%-6x\n",x,y,z);第18頁/共82頁例2.3#include"stdio.h"voidmain(){intx,y,z;x=129,y=0127,z=0x128;printf("%6d%6d%6d\n",x,y,z);printf("%6o%6o%6o\n",x,y,z);printf("%-6x%-6x%-6x\n",x,y,z);}運(yùn)行結(jié)果:

129872962011274508157128第19頁/共82頁scanf是格式輸入函數(shù),其功能是按指定的格式將標(biāo)準(zhǔn)輸入設(shè)備(例如鍵盤)輸入的內(nèi)容送入變量中。

scanf函數(shù)的使用格式:

scanf("格式信息",輸入項(xiàng)1,輸入項(xiàng)2,…);

其中,“格式信息”與printf的用法相似,可以在其中使用%和轉(zhuǎn)換字符來指定數(shù)據(jù)的輸入方式。需要注意的是,輸入項(xiàng)必須使用地址,普通變量的地址是在變量名前加取地址符&。用scanf輸入整型數(shù)

第20頁/共82頁

輸入整型數(shù)據(jù)的轉(zhuǎn)換字符有d,o,x,u%d表示把數(shù)據(jù)按十進(jìn)制整型輸入;%o表示把數(shù)據(jù)按八進(jìn)制整型輸入;%x表示把數(shù)據(jù)按十六進(jìn)制整型輸入;%u表示把數(shù)據(jù)參數(shù)按無符號整型輸入。

與printf函數(shù)類似,如果希望輸入的數(shù)據(jù)是長整型,需要在轉(zhuǎn)換字符前加l。第21頁/共82頁例2.4#include"stdio.h"voidmain(){intx,y,z1;longz2; scanf("%d%o%x%ld",&x,&y,&z1,&z2); printf("\n%d,%d,%d,%ld",x,y,z1,z2);}若輸入為:

101010100000↙(回車符)顯示結(jié)果為10,8,16,100000第22頁/共82頁注意(1)scanf讀入一組整數(shù)時,scanf掃視輸入信息,跳過空格、tab或換行,尋找下一個輸入域。一個輸入域就是一個連續(xù)的非空白字符的數(shù)字串。例如,若輸入為:

78231920↙(回車符)38則輸入域有四個。(2)格式信息中除了有

%開始的轉(zhuǎn)換說明,還可以有普通字符,只是這些字符不是顯示在屏幕上的,而是要求使用者在輸入數(shù)據(jù)時,要在相應(yīng)位置輸入相同的字符(除了空格、tab或換行符)。

第23頁/共82頁例2.5#include"stdio.h"voidmain(){intx,y,z1,z2; scanf("x=%dy=%oz1=%xz2=%u",&x,&y,&z1,&z2); printf("\n%d,%d,%d,%d",x,y,z1,z2);}如果輸入為:

10101010↙(回車符)則顯示結(jié)果為是0,484,2971,0正確的輸入?第24頁/共82頁2.2.3浮點(diǎn)數(shù)

浮點(diǎn)變量浮點(diǎn)常量用printf顯示浮點(diǎn)數(shù)據(jù)用scanf輸入浮點(diǎn)數(shù)

第25頁/共82頁浮點(diǎn)變量單精度浮點(diǎn)數(shù)(float)雙精度浮點(diǎn)數(shù)(double)

longdouble

定義浮點(diǎn)變量:

floata,b;doublec,d;

單精度浮點(diǎn)數(shù)和雙精度浮點(diǎn)數(shù)兩者在計(jì)算機(jī)上的表示方式是完全相似的,只是所占的二進(jìn)制位數(shù)不同,單精度浮點(diǎn)數(shù)的有效數(shù)字(或稱精度)和取值范圍與雙精度浮點(diǎn)數(shù)不同。第26頁/共82頁

浮點(diǎn)數(shù)在機(jī)器中的表示一般分為三部分:符號位、階碼、尾數(shù)。

32位浮點(diǎn)數(shù)的有效數(shù)字的個數(shù)是7位十進(jìn)制數(shù)字,取值范圍為10-38~1038,64位浮點(diǎn)數(shù)的有效數(shù)字的個數(shù)是15位十進(jìn)制數(shù)字,取值范圍為10-308~10308。不同的機(jī)器可能會有一些微小的差別。

第27頁/共82頁浮點(diǎn)常量小數(shù)表示法127.3

科學(xué)計(jì)數(shù)法1.273×102

在C語言中,實(shí)際上也是用這兩種方式,只不過102用E+2表示。

C程序中的浮點(diǎn)常數(shù)由整數(shù)部分、小數(shù)部分、指數(shù)部分構(gòu)成。浮點(diǎn)常量構(gòu)成規(guī)則是:(1)整數(shù)部分可以不寫,小數(shù)部分也可以不寫,但不能同時不寫。(2)指數(shù)部分可以省略(相當(dāng)于使用小數(shù)表示法)(3)若有指數(shù)部分,e(或E)兩邊都至少有一位數(shù)。(4)指數(shù)的數(shù)字必須是整數(shù)(范圍為1到3位的整數(shù)),可以為負(fù)或正,正號可以省略。第28頁/共82頁例如,

4.50E3、1.0、1.、.1234、123.4都是合法的浮點(diǎn)常量。

注意:浮點(diǎn)常量在存儲時按double類型存儲,即占32位(bit)。浮點(diǎn)常量也象整型常量一樣,如果浮點(diǎn)常量超過機(jī)器所能表示的范圍,則會發(fā)生溢出。浮點(diǎn)溢出也不會使程序出錯,而是得到一個非正確的值。第29頁/共82頁%f顯示小數(shù)表示的普通浮點(diǎn)數(shù)%e顯示科學(xué)記數(shù)法表示的浮點(diǎn)數(shù)輸出雙精度(double)類型時,還需要在轉(zhuǎn)換字符前加上字母l。輸出浮點(diǎn)數(shù)時控制輸出域?qū)捄陀行唬涸?與f(或e)之間加上兩個數(shù)字并在兩個數(shù)字之間加一個句點(diǎn)“.”。例如,%10.3f表示輸出格式是域?qū)?0,有效位3。

注意:域?qū)挼暮x、缺省有效位、與數(shù)據(jù)本身的域?qū)挼年P(guān)系用printf顯示浮點(diǎn)數(shù)據(jù)

第30頁/共82頁例2.6#include"stdio.h"voidmain(){floatx;doubley;x=12.3456789;y=987654.321098;printf("\n%e,%le",x,y);①printf("\n%f,%lf",x,y);②printf("\n%.3f,%.3lf",x,y);③printf("\n%14.3f,%14.3lf",x,y);④printf("\n%-14.3f,%-14.3lf",x,y);⑤printf("\n%8.3f,%8.3lf",x,y);⑥printf("\n%14f,%14lf",x,y);⑦}第31頁/共82頁例2.7voidmain(){doublex,y;scanf("%lf%le",&x,&y);printf("\n%lf,%lf",x,y);printf("\n%le,%le",x,y);}若輸入為123.567891.2345678e17則運(yùn)行結(jié)果為:123.567890,123456780000000000.0000001.234568e+3,1.234568e+17用scanf輸入浮點(diǎn)數(shù)

第32頁/共82頁2.2.4字符型數(shù)據(jù)

字符變量字符常量用printf顯示字符

用scanf輸入字符用getchar輸入字符和用putchar輸出字符字符串常量

第33頁/共82頁

字符變量數(shù)據(jù)類型說明符char例如,charaloha,beta,c;

一個字符變量能存儲一個字節(jié)的信息,每個字符有固定的編碼,最常用的就是ASCII編碼。標(biāo)準(zhǔn)ASCII編碼是把每個字符和與0~127的數(shù)值聯(lián)系起來,用7位二進(jìn)制表示,再將最高位充0,就是一個字節(jié)了。例如,在ASCII編碼表中,A用數(shù)值65表示,其8位二進(jìn)制表示是:

01000001第34頁/共82頁

字符常量

C語言中的字符常量是用單引號將一個字符括起來。例如'a'、'b'。可以用字符常量為字符變量賦值:charalpha='a';charbeta='b';注意:(1)引號中的字符只能是一個字符。(2)不能用雙引號括起一個字符表示單個字符常量。(3)非圖形字符,如退格,換行等,也可以表示成字符型常量。表示方法是使用轉(zhuǎn)義符\與一些特殊字符構(gòu)成轉(zhuǎn)義序列。例如‘\n’就是一個轉(zhuǎn)義序列,表示“回車換行”。(4)字符型數(shù)據(jù)可以像整型數(shù)據(jù)一樣參與四則運(yùn)算。'b'-'a'=198-97=1第35頁/共82頁用printf顯示字符使用轉(zhuǎn)換說明%c就可以輸出單個字符了。例2.8#include"stdio.h"voidmain(){charc='H';chard='I';chare='!';printf("%c%c%c\n",c,d,e);}運(yùn)行結(jié)果為:HI!第36頁/共82頁用scanf輸入字符

%c控制輸入單個字符。

注意:盡量不要將%c與其它轉(zhuǎn)換說明一起使用。當(dāng)scanf讀入一組數(shù)據(jù)時,如果不使用%c做轉(zhuǎn)換時,scanf掃視輸入信息,跳過空格、tab或換行,尋找下一個輸入域。但是若使用%c做轉(zhuǎn)換時,情況則不同,scanf不會跳過空格、tab或換行,而是直接把下一個字符輸入給參數(shù),不論它是什么。第37頁/共82頁例如,

scanf("%d%c",&i,&c);鍵盤輸入

29wc的內(nèi)容不是字符‘w’,而是空格。

解決的方法是在控制字符串中加空格分隔。

scanf("%d%c",&i,&c);第38頁/共82頁用getchar輸入字符和用putchar輸出字符

getchar()函數(shù)的用法

getchar()是接收一個從標(biāo)準(zhǔn)輸入輸出設(shè)備上輸入的字符。一般的標(biāo)準(zhǔn)輸入設(shè)備是鍵盤。該函數(shù)沒有參數(shù),函數(shù)返回的數(shù)據(jù)類型為整型,值為字符的ASCII碼值。

第39頁/共82頁例2.9#include"stdio.h"voidmain(){intc;c=getchar();printf("%c",c);}第40頁/共82頁putchar()函數(shù)的用法

putchar()是向標(biāo)準(zhǔn)輸入輸出設(shè)備上輸出一個字符,一般的標(biāo)準(zhǔn)輸出設(shè)備是屏幕終端。

putchar()與getchar()不同,輸出字符做為函數(shù)的參數(shù),放在括號里。所以括號里的內(nèi)容是不能缺省的。putchar()函數(shù)返回的數(shù)據(jù)類型為整型,值為字符的ASCII碼值。第41頁/共82頁若想輸出字符a,可以用幾種方式?intc;c='a';putchar(c);

以及putchar('a');

和putchar(97);對于不可打印的字符,輸出方式有兩種:putchar(007);

和putchar('\007');第42頁/共82頁例2.10輸入一個字符,按字符原封不動輸出。#include"stdio.h"voidmain(){intc,i;c=getchar();i=putchar(c);}或者#include"stdio.h"voidmain(){putchar(getchar())*/}

什么叫“系統(tǒng)的仿效返回

”?第43頁/共82頁字符串常量用雙引號括起來的字符序列是字符串常量。

"howareyou""1234.5"

字符串的存儲與字符不同。C編譯程序在存儲字符串常量時自動采用\0作為字符串結(jié)束標(biāo)志。

"how"實(shí)際上所占的字節(jié)數(shù)是4。

“a”與‘a(chǎn)’是完全不同的,前者是字符串常量,占的字節(jié)數(shù)是2,后者是字符常量,占的字節(jié)數(shù)是1。字符串常量的輸出

printf("howareyou");

printf("%s","howareyou");第44頁/共82頁2.3.1表達(dá)式表達(dá)式的概念表達(dá)式是用運(yùn)算符與圓括號將操作數(shù)連接起來所構(gòu)成的式子。C語言的操作數(shù)包括常量、變量、函數(shù)值等。

根據(jù)表達(dá)式進(jìn)行運(yùn)算,得到的數(shù)值即為表達(dá)式的解。

表達(dá)式與簡單語句在C語言中,在一個表達(dá)式的后面加上分號“;”就構(gòu)成了簡單語句。

有意義的簡單語句

無意義的簡單語句

第45頁/共82頁2.3.2算術(shù)運(yùn)算符

種類及運(yùn)算

+-*/%注意:

兩個整數(shù)相除,結(jié)果仍為整數(shù),商向下取整。取模運(yùn)算符%實(shí)際上是數(shù)學(xué)運(yùn)算的求余數(shù)運(yùn)算,其兩個操作對象都必須是整數(shù)。減法運(yùn)算符還可以用做單目運(yùn)算符,是取負(fù)運(yùn)算。其余操作符均為雙目運(yùn)算符。

第46頁/共82頁算術(shù)表達(dá)式及算術(shù)運(yùn)算符的優(yōu)先級

算術(shù)表達(dá)式就是用算術(shù)運(yùn)算符和圓括號將操作數(shù)連接起來的式子。算術(shù)表達(dá)式的解就是經(jīng)過算術(shù)運(yùn)算得到的表達(dá)式的值。算術(shù)運(yùn)算符的優(yōu)先級與數(shù)學(xué)基本相同,即先乘除,后加減。取模運(yùn)算的優(yōu)先級與乘除相同。函數(shù)和圓括號的優(yōu)先級最高。

第47頁/共82頁

注意:

算術(shù)表達(dá)式應(yīng)能正確的表達(dá)數(shù)學(xué)公式。例如:數(shù)學(xué)表達(dá)式是

3+x

2a

相應(yīng)的C語言表達(dá)式應(yīng)該是什么呢?算術(shù)表達(dá)式的結(jié)果應(yīng)該不超過其所能表示的數(shù)的范圍。例如,最大的整型數(shù)是32767,那么,32767+3就不會是正確的結(jié)果。而

32767L+3的結(jié)果是正確的,因?yàn)?2767L是長整型數(shù)。第48頁/共82頁算術(shù)運(yùn)算符的結(jié)合性

運(yùn)算符的結(jié)合性是指如果一個操作數(shù)左邊和右邊的兩個運(yùn)算符的優(yōu)先級相同,應(yīng)該優(yōu)先計(jì)算的操作符。例如:a+b-c

操作數(shù)b左右的運(yùn)算符+和-的優(yōu)先級相同,那么,是先計(jì)算b-c,還是先計(jì)算a+b呢?C語言規(guī)定雙目算術(shù)運(yùn)算符的結(jié)合性是自左至右,也就是b先與左邊a結(jié)合,再與右邊c結(jié)合。所以是先計(jì)算a+b,然后用a+b的結(jié)果減c。雙目運(yùn)算符的結(jié)合性與數(shù)學(xué)運(yùn)算并無不同。第49頁/共82頁2.3.3賦值運(yùn)算符

普通賦值運(yùn)算符

賦值表達(dá)式的一般形式是:變量名=表達(dá)式賦值語句的一般形式是:變量名=表達(dá)式;

賦值運(yùn)算符的優(yōu)先級小于算術(shù)運(yùn)算符。賦值運(yùn)算符的結(jié)合性是自右至左,

以a=b=2為例

第50頁/共82頁復(fù)合賦值運(yùn)算符

把賦值運(yùn)算符與算術(shù)、位邏輯、移位運(yùn)算符放在一起,就構(gòu)成復(fù)合賦值運(yùn)算符。復(fù)合算術(shù)賦值運(yùn)算符有5個+=、-=、*=、/=、%=。還有與移位和位邏輯結(jié)合的復(fù)合賦值運(yùn)算符5個(<<=、>>=、&=、^=、|=)。

復(fù)合賦值運(yùn)算符的使用規(guī)則是:Xop=Y與X=XopY等價。第51頁/共82頁2.3.4不同數(shù)據(jù)類型數(shù)據(jù)間的混合運(yùn)算

自動轉(zhuǎn)換

強(qiáng)制轉(zhuǎn)換

賦值表達(dá)式的類型轉(zhuǎn)換第52頁/共82頁自動轉(zhuǎn)換

所謂“自動轉(zhuǎn)換”就是系統(tǒng)根據(jù)規(guī)則自動將兩個不同數(shù)據(jù)類型的運(yùn)算對象轉(zhuǎn)換成同一種數(shù)據(jù)類型的過程。而且,對某些數(shù)據(jù)類型,即使是兩個運(yùn)算對象的數(shù)據(jù)類型完全相同,也要做轉(zhuǎn)換,例如float。第53頁/共82頁強(qiáng)制轉(zhuǎn)換

在C語言中,允許程序員根據(jù)自己的意愿將一種數(shù)據(jù)類型強(qiáng)制轉(zhuǎn)換成另一種數(shù)據(jù)類型。強(qiáng)制轉(zhuǎn)換的格式為:

(數(shù)據(jù)類型名)操作對象注意,強(qiáng)制轉(zhuǎn)換并不改變操作對象的數(shù)據(jù)類型和數(shù)值。例如,(int)f的確切含義是將f轉(zhuǎn)換成為整型值參與運(yùn)算,而f本身的數(shù)據(jù)類型和數(shù)值都沒有任何改變。第54頁/共82頁賦值表達(dá)式的類型轉(zhuǎn)換當(dāng)賦值運(yùn)算符左邊的變量與賦值運(yùn)算符右邊的表達(dá)式的數(shù)據(jù)類型相同時,不需要進(jìn)行數(shù)據(jù)類型的轉(zhuǎn)換。當(dāng)賦值運(yùn)算符左邊的變量與賦值運(yùn)算符右邊的表達(dá)式的數(shù)據(jù)類型不相同時,系統(tǒng)負(fù)責(zé)將右邊的數(shù)據(jù)類型轉(zhuǎn)換成左邊的數(shù)據(jù)類型。此時,會有兩種情況產(chǎn)生,一種是轉(zhuǎn)換以后會丟失數(shù)據(jù),另一種是轉(zhuǎn)換以后不會丟失數(shù)據(jù)。這與賦值號兩邊的表達(dá)式的數(shù)據(jù)類型所占的字節(jié)數(shù)及存儲表示方式有關(guān)。(詳細(xì)內(nèi)容自學(xué))第55頁/共82頁例3.1#include"stdio.h"voidmain(){intc;/*charc;*/c='B';printf("c=%c",c+'a'-'A');}

運(yùn)行結(jié)果:c=b第56頁/共82頁例3.2#include"stdio.h"voidmain(){charc;inti=0x3241;printf("i=%c\n",i);c=i;printf("c=%d\n",c);printf("i=%d\n",i);}運(yùn)行結(jié)果i=Ac=65i=12865第57頁/共82頁2.3.5關(guān)系運(yùn)算符

所謂關(guān)系運(yùn)算,實(shí)際上就是比較兩個數(shù)值的大小。那么,比較兩個數(shù)值的大小的運(yùn)算符就是關(guān)系運(yùn)算符。關(guān)系運(yùn)算符有六個>、>=、<、<=、==、!=。由關(guān)系運(yùn)算符連接起來的表達(dá)式就是關(guān)系表達(dá)式。關(guān)系表達(dá)式的解一般應(yīng)為真或假,C語言用整數(shù)1表示真,整數(shù)0表示假。

第58頁/共82頁

初學(xué)者經(jīng)常會混淆關(guān)系運(yùn)算符“==”和賦值運(yùn)算符“=”,因此要注意區(qū)分這兩個運(yùn)算符。例3.3#include"stdio.h"voidmain(){intx,y,z1,z2;x=2;y=2;z1=(x=y);z2=(x==y);printf("%d,%d\n",z1,z2);}第59頁/共82頁

六個關(guān)系運(yùn)算符中的“!=”和“==”的優(yōu)先級小于其余四個運(yùn)算符。

關(guān)系運(yùn)算符的優(yōu)先級小于算術(shù)運(yùn)算符,大于賦值運(yùn)算符。關(guān)系運(yùn)算符的結(jié)合性均為自左至右。

當(dāng)多種運(yùn)算符在一個表達(dá)式中同時使用時,要注意運(yùn)算符的優(yōu)先級,防止記錯運(yùn)算符優(yōu)先級的最好方法是加圓括號。

第60頁/共82頁例3.4注意,不贊成按本例這樣編寫程序。

#include"stdio.h"voidmain(){intx,y,z,i,j;x=4,y=3,z=2;i=y>z;j=x>y>z;printf("%2d,%2d,",i,j);printf("%2d,",z>y==3);printf("%2d,",y+z<x);printf("%2d\n",y+2>=z+1);}運(yùn)行結(jié)果為:1,0,0,0,1第61頁/共82頁2.3.6邏輯運(yùn)算符

如果將“與、或、非”運(yùn)算應(yīng)用于邏輯值(邏輯真和邏輯假)則稱為邏輯運(yùn)算。

C語言中的邏輯運(yùn)算符有三個:邏輯與&&、邏輯或||和邏輯非!

其中邏輯與和邏輯或是雙目運(yùn)算符,而邏輯非是單目運(yùn)算符。第62頁/共82頁

邏輯運(yùn)算的規(guī)則與二進(jìn)制的位邏輯是相似的。邏輯運(yùn)算的規(guī)則下表:第63頁/共82頁

C語言系統(tǒng)對任何非0值都認(rèn)定為是邏輯真,而將0認(rèn)定為邏輯假。如果一個表達(dá)式參與邏輯運(yùn)算,只要這個表達(dá)式的解為非0,則系統(tǒng)就認(rèn)為這個表達(dá)式的結(jié)果是邏輯真。但是要注意,系統(tǒng)邏輯運(yùn)算的結(jié)果仍然只有兩個:1(邏輯真)和0(邏輯假)。

邏輯運(yùn)算符經(jīng)常與關(guān)系運(yùn)算符一起使用。

C語言表達(dá)式(x>=10)&&(x<=100)的數(shù)學(xué)含義是:10≤x≤100

第64頁/共82頁

邏輯運(yùn)算符的優(yōu)先級!&&||

高低!的優(yōu)先級高于算術(shù)運(yùn)算符(當(dāng)然也高于關(guān)系運(yùn)算符)和賦值運(yùn)算符

&&和||的優(yōu)先級高于賦值運(yùn)算符,但是低于算術(shù)運(yùn)算符和關(guān)系運(yùn)算符。!單目運(yùn)算符,其結(jié)合性是自右至左;&&和||的結(jié)合性是自左至右。

計(jì)算表達(dá)式7<8&&3||6>9-!0的值

第65頁/共82頁

注意:在C語言中,如果邏輯運(yùn)算符的左操作數(shù)已經(jīng)能夠確定表達(dá)式的解,則系統(tǒng)不再計(jì)算右操作數(shù)的值。

x==1&&y==0

若x此時不為1,在檢測x==1以后,就不會再檢測y==0。因?yàn)閤==1的結(jié)果是邏輯假,邏輯假與任何數(shù)進(jìn)行邏輯與操作結(jié)果都會是邏輯假。

第66頁/共82頁x==y||x=0

若x==y成立,則表達(dá)式的值為真,不需要繼續(xù)做x=0了。但是,若x==y不成立,由于x=0是個賦值表達(dá)式,表達(dá)式的結(jié)果很可能是錯誤的。假設(shè)該表達(dá)式計(jì)算以前,x值為1,y的值為0,x==y的計(jì)算結(jié)果是0,這時需要執(zhí)行賦值x=0,表達(dá)式的結(jié)果仍然是0,而實(shí)際上這時的x和y的值均為0,又滿足了x==y,這不是產(chǎn)生了矛盾嗎?不要在一般的表達(dá)式中夾雜賦值運(yùn)算第67頁/共82頁2.3.7增1/減1運(yùn)算符

++和--。這兩個運(yùn)算符都是單目運(yùn)算符,其功能分別是將變量自身的內(nèi)容增1和減1。

++i和--i是前綴表示法,i++和i--是后綴表示法。如果直接在++i和i++的后面加上分號構(gòu)成C的執(zhí)行語句,即++i;和i++;前綴與后綴并無區(qū)別(減1符號也一樣)。但是,將它們用在表達(dá)式中則前綴與后綴是有區(qū)別的。第68頁/共82頁

前綴表示法是先將i值增/減1,再在表達(dá)式中使用;而后綴表示法是先在表達(dá)式中使用i的值,再將i值增/減1。例如:

i=3;i=3;j=i++;j=++i;

結(jié)果

j的內(nèi)容為3j的內(nèi)容為4i的內(nèi)容為4i的內(nèi)容為4

第69頁/共82頁注意:

增1/減1運(yùn)算符的操作對象是一個變量

2++、--2以及(x/y)++均為非法增1/減1運(yùn)算符的優(yōu)先級高于算術(shù)運(yùn)算符,與單目運(yùn)算符-(取負(fù))、!(邏輯非)的優(yōu)先級相同,結(jié)合方向自右至左。例如表達(dá)式-i++等價于-(i++)副作用:printf(“%d,%d”,i,i++);在不同的編譯環(huán)境下結(jié)果有可能不同。盡量不要在一般的表達(dá)式中將增1/減1運(yùn)算符與其它運(yùn)算符混合使用。第70頁/共82頁2.3.8位邏輯運(yùn)算符~<<>>&|^按位取反左移右移按位與按位或按位異或操作數(shù)在實(shí)現(xiàn)位操作時按二進(jìn)制進(jìn)行運(yùn)算,7一般應(yīng)為無符號型整數(shù)。

第71頁/共82頁按位與&

按位與的運(yùn)算規(guī)則是:0&0=00&1=01&0=01&1=1例如:charw1,w2,w3;w1=10;w2=8;w3=w1&w2;w3的內(nèi)容可以通過下式運(yùn)算:

0000101000001000(按位與&)

00001000(結(jié)果)

第72頁/共82頁&運(yùn)算經(jīng)常用于把特定位清零(屏蔽)。例如,

a的值為11011010,b的值為11110000,

a&b11011010&1111000011010000

相當(dāng)于把a(bǔ)的低4位屏蔽,高4位不變。

第73頁/共82頁按位或|按位或的運(yùn)算規(guī)則是:0|0=00|1=11|0=11|1=1例如:charw1,w2,w3;w1=10;w2=8;w3=w1|w2;w3的內(nèi)容可以通過下式運(yùn)算:

000010100

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論