1- C語(yǔ)言語(yǔ)法基礎(chǔ)_第1頁(yè)
1- C語(yǔ)言語(yǔ)法基礎(chǔ)_第2頁(yè)
1- C語(yǔ)言語(yǔ)法基礎(chǔ)_第3頁(yè)
1- C語(yǔ)言語(yǔ)法基礎(chǔ)_第4頁(yè)
1- C語(yǔ)言語(yǔ)法基礎(chǔ)_第5頁(yè)
已閱讀5頁(yè),還剩50頁(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)介

教學(xué)內(nèi)容: 第1章:C語(yǔ)言語(yǔ)法基礎(chǔ)第2章:C程序設(shè)計(jì)基礎(chǔ)第3章:利用數(shù)組處理同類型的批量數(shù)據(jù)第4章:利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)第5章:靈活使用指針第6章:結(jié)構(gòu)體、共用體、枚舉類型及其應(yīng)用第7章:常用的三種線性數(shù)據(jù)結(jié)構(gòu)第8章:利用文件進(jìn)行數(shù)據(jù)管理第9章:嵌入式技術(shù)基礎(chǔ)實(shí)踐方法C語(yǔ)言程序設(shè)計(jì)第1章C語(yǔ)言語(yǔ)法基礎(chǔ)【學(xué)習(xí)內(nèi)容】1.1C語(yǔ)言程序的特點(diǎn)1.2數(shù)據(jù)的基本類型及其表現(xiàn)形式

1.3運(yùn)算符及表達(dá)式【學(xué)習(xí)目標(biāo)】1.了解通用計(jì)算機(jī)和嵌入式計(jì)算機(jī)的區(qū)別;2.熟悉C語(yǔ)言程序的特點(diǎn);

3.熟練使用VC++2010開發(fā)環(huán)境;

4.掌握C語(yǔ)言基本的數(shù)據(jù)類型(整型、字符型、實(shí)型),常量和變量;

5.掌握“算術(shù)、強(qiáng)制類型轉(zhuǎn)換、賦值、關(guān)系、邏輯、位、逗號(hào)”7種運(yùn)算符及其表達(dá)式。1.1C語(yǔ)言程序的特點(diǎn)

產(chǎn)生于20世紀(jì)70年代的C語(yǔ)言是國(guó)際上廣泛流行的計(jì)算機(jī)高級(jí)編程語(yǔ)言,其優(yōu)點(diǎn):①語(yǔ)法靈活、運(yùn)算符豐富;②模塊化和結(jié)構(gòu)化設(shè)計(jì),程序可讀性好;③可直接對(duì)硬件進(jìn)行操作,能實(shí)現(xiàn)匯編語(yǔ)言的大部分功能;④生成的目標(biāo)代碼質(zhì)量高,程序執(zhí)行效率高;⑤程序可移植性好(與匯編語(yǔ)言相比),可用于各種型號(hào)的計(jì)算機(jī)和各種操作系統(tǒng)。

C語(yǔ)言既是通用計(jì)算機(jī)軟件設(shè)計(jì)的基礎(chǔ)語(yǔ)言,也是當(dāng)前嵌入式軟件設(shè)計(jì)的主流語(yǔ)言。通過(guò)本書的學(xué)習(xí),可以奠定C語(yǔ)言的編程基礎(chǔ),同時(shí)也可以掌握嵌入式軟件設(shè)計(jì)方法。1.1C語(yǔ)言程序的特點(diǎn)1、通用計(jì)算機(jī)與嵌入式計(jì)算機(jī)

微型計(jì)算機(jī)具有很大的通用性,所以又稱通用計(jì)算機(jī)。測(cè)控領(lǐng)域的計(jì)算機(jī)系統(tǒng)是嵌入到應(yīng)用系統(tǒng)中,以計(jì)算機(jī)技術(shù)為基礎(chǔ),軟硬件可裁剪,適應(yīng)應(yīng)用系統(tǒng)對(duì)功能、成本、體積、可靠性、功耗嚴(yán)格要求的專用計(jì)算機(jī)系統(tǒng),即嵌入式計(jì)算機(jī)系統(tǒng),簡(jiǎn)稱嵌入式系統(tǒng)(EmbeddedSystem)。通俗地說(shuō),除了通用計(jì)算機(jī)(如臺(tái)式計(jì)算機(jī)和筆記本計(jì)算機(jī))外,所有包含CPU的系統(tǒng)都是嵌入式系統(tǒng),其中以微控制器(MicroControllerUnit,MCU,國(guó)內(nèi)也稱為單片機(jī))為核心的嵌入式系統(tǒng)應(yīng)用最廣泛。MCU的硬件集成度越來(lái)越高,使得嵌入式硬件設(shè)計(jì)難度不斷降低,因此嵌入式軟件設(shè)計(jì)在整個(gè)嵌入式系統(tǒng)開發(fā)中所占的分量越來(lái)越大。社會(huì)對(duì)嵌入式軟件設(shè)計(jì)人才的需求量也越來(lái)越大,其就業(yè)薪酬高。嵌入式軟件設(shè)計(jì)的主流語(yǔ)言是C語(yǔ)言。C語(yǔ)言程序設(shè)計(jì)一般要經(jīng)過(guò)4個(gè)基本步驟(VC++2010開發(fā)環(huán)境的使用方法和步驟請(qǐng)掃描教材中的二維碼詳細(xì)學(xué)習(xí)):

(1)編輯源程序(.c文件或

.h文件);

(2)對(duì)源程序進(jìn)行編譯,生成二進(jìn)制目標(biāo)文件(.obj文件);

(3)連接若干個(gè)源文件和庫(kù)函數(shù)對(duì)應(yīng)的多個(gè)目標(biāo)程序,生成可執(zhí)行文件(.exe文件);(4)運(yùn)行程序。2、VC++2010開發(fā)環(huán)境的使用方法和步驟1.1C語(yǔ)言程序的特點(diǎn)【例1.1】將兩個(gè)整數(shù)求和,并將這兩個(gè)整數(shù)及求和結(jié)果輸出在PC屏幕上。3、初識(shí)簡(jiǎn)單的C程序1.1C語(yǔ)言程序的特點(diǎn)#include<stdio.h>

//(1)預(yù)處理命令:包含輸入輸出頭文件intmain(void)

//(2)主函數(shù){ inta,b,s;

//(3)數(shù)據(jù)聲明:定義3個(gè)整型變量a=123;b=456;

//(4)分別對(duì)變量a和b進(jìn)行賦值s=a+b;

//(5)將求和結(jié)果賦給變量sprintf("ThisismyfirstCprogram.\n");//(6)原樣輸出一串字符printf("a=%d,b=%d,sum=%d\n",a,b,s);//(7)以十進(jìn)制形式輸出三個(gè)變量的值return0;

//(8)如程序正常結(jié)束,返回函數(shù)值0}可省略不寫格式輸出函數(shù)printf的用法1.1C語(yǔ)言程序的特點(diǎn)3、初識(shí)簡(jiǎn)單的C程序【例1.2】使用函數(shù)將兩個(gè)整數(shù)求和,并將這兩個(gè)整數(shù)及求和結(jié)果輸出在PC屏幕上。#include<stdio.h>

//(1)預(yù)處理命令:包含輸入輸出頭文件intadd(intx,inty);

//(2)函數(shù)聲明intmain(void)

//(3)主函數(shù){inta,b,s;

//(4)數(shù)據(jù)聲明:定義3個(gè)整型變量a=123;b=456;

//(5)分別對(duì)變量a和b進(jìn)行賦值s=add(a,b);

//(6)調(diào)用add函數(shù)(兩個(gè)實(shí)際參數(shù)a、b)printf("ThisismysecondCprogram.\n");//(7)原樣輸出一串字符printf("a=%d,b=%d,sum=%d\n",a,b,s);//(8)以十進(jìn)制形式輸出三個(gè)變量的值}intadd(intx,inty)

//(10)定義add函數(shù)(兩個(gè)形式參數(shù)x、y){

intz;

//(11)定義變量

z=x+y;

//(12)將求和結(jié)果賦給變量zreturn(z);

//(13)向主調(diào)函數(shù)求和結(jié)果}s=add(a,b);

(main函數(shù))intadd(intx,inty)(add函數(shù)){

intz; z=x+y;

return(z);

}1.2數(shù)據(jù)的基本類型及其表現(xiàn)形式

1.2.1常量和變量1、常量1.2數(shù)據(jù)的基本類型及其表現(xiàn)形式

在程序執(zhí)行過(guò)程中,其值不發(fā)生改變的量稱為常量。根據(jù)書寫方式,常量可分為直接常量和符號(hào)常量。(1)直接常量:如4、23;1.23;'a'、'b';''CHINA''等(2)符號(hào)常量:用#define指令,指定一個(gè)標(biāo)識(shí)符代表一個(gè)常量。

例如,#definePI3.1415926//定義符號(hào)常量PI(代表常量3.1415926)

關(guān)于#define指令的使用方法,將在任務(wù)2.5中詳細(xì)介紹。1.2.1常量和變量1、常量1.2數(shù)據(jù)的基本類型及其表現(xiàn)形式

用戶定義的標(biāo)識(shí)符不能與系統(tǒng)提供的關(guān)鍵字(參見附錄B)同名。另外,標(biāo)識(shí)符區(qū)分大小寫,如Sum和sum是兩個(gè)不同的標(biāo)識(shí)符。說(shuō)明:標(biāo)識(shí)符是用來(lái)標(biāo)識(shí)變量名、符號(hào)常量名、函數(shù)名、數(shù)組名、類型名、宏名、文件名的有效字符序列。C語(yǔ)言的標(biāo)識(shí)符只能由字母、數(shù)字、下畫線3種字符組成,且第一個(gè)字符必須是字母或下畫線。

1.2.1常量和變量2、變量1.2數(shù)據(jù)的基本類型及其表現(xiàn)形式

在程序執(zhí)行過(guò)程中,其值可以改變的量稱為變量。變量必須“先定義,后使用”。定義變量后,編譯系統(tǒng)為每個(gè)變量名分配對(duì)應(yīng)的內(nèi)存地址,即一個(gè)變量名對(duì)應(yīng)一個(gè)存儲(chǔ)單元。1.2.2整型數(shù)據(jù)1、整型常量1.2數(shù)據(jù)的基本類型及其表現(xiàn)形式

(3)十六進(jìn)制整數(shù):以0x開頭的數(shù)。如0x123表示十六進(jìn)制數(shù)123。在C語(yǔ)言中,整型常量(整型常數(shù))有3種表示形式:(1)十進(jìn)制整數(shù):如123、-456、7。(2)八進(jìn)制整數(shù):以0開頭的數(shù)。如0123表示八進(jìn)制數(shù)123。歸納起來(lái),有10種整型變量,在VC++系統(tǒng)中對(duì)應(yīng)的數(shù)值范圍如下:(1)整型變量的分類1.2.2整型數(shù)據(jù)2、整型變量1.2數(shù)據(jù)的基本類型及其表現(xiàn)形式

1.2.2整型數(shù)據(jù)2、整型變量1.2數(shù)據(jù)的基本類型及其表現(xiàn)形式

(2)整型變量在內(nèi)存中的存儲(chǔ)形式(以單字節(jié)整型數(shù)據(jù)為例)(3)定義整型變量的方法1.2.2整型數(shù)據(jù)2、整型變量1.2數(shù)據(jù)的基本類型及其表現(xiàn)形式

1)定義一個(gè)變量的格式:類型標(biāo)識(shí)符變量名;

例如:inti;//定義有符號(hào)基本整型變量i

unsignedintj;//定義無(wú)符號(hào)基本整型變量j2)同時(shí)定義多個(gè)同類型變量的格式:類型標(biāo)識(shí)符

變量名1,變量名2,變量名3,…;

例如:inti,j,k;//同時(shí)定義三個(gè)基本整型變量i、j、k

定義變量后,系統(tǒng)將根據(jù)變量的類型給變量分配對(duì)應(yīng)大小的內(nèi)存空間,用于存儲(chǔ)該變量。例如:

shortint

i;//定義短整型變量i

i=10;//給變量i賦值練習(xí):【例1.3】整型變量的定義、賦值和輸出。1.2.3字符型數(shù)據(jù)1、字符常量1.2數(shù)據(jù)的基本類型及其表現(xiàn)形式

練習(xí):【例1.4】輸出轉(zhuǎn)義字符。

用一對(duì)單撇號(hào)括起來(lái)的一個(gè)字符,稱為字符常量,例如:'A','6','+'等。

C語(yǔ)言還有一種以

\開頭的字符序列,稱為轉(zhuǎn)義字符。

請(qǐng)參考附錄A,熟悉字符0~9、大寫字母A~Z、小寫字母a~z對(duì)應(yīng)的ASCII碼值。1.2.3字符型數(shù)據(jù)2、字符變量1.2數(shù)據(jù)的基本類型及其表現(xiàn)形式

字符變量用來(lái)存放字符,并且只能存放1個(gè)字符。其類型標(biāo)識(shí)符是char。

例如:charc1,c2;//定義字符變量c1、c2c1='a';c2='b';//給變量c1賦值'a',變量c2賦值'b'3、字符型數(shù)據(jù)在內(nèi)存中的存儲(chǔ)形式及使用方法

一個(gè)字符變量在內(nèi)存中占一個(gè)字節(jié)。字符型數(shù)據(jù)在內(nèi)存中存儲(chǔ)的是該字符對(duì)應(yīng)的ASCII碼。

字符型數(shù)據(jù)的存儲(chǔ)形式與單字節(jié)整型數(shù)據(jù)相同。因此,字符型可以當(dāng)作單字節(jié)整型。

#include<stdio.h>intmain(void){

charc1,c2,c3,c4;

//定義字符變量c1='a';c2='A';//給字符變量賦字符常量

c3=97;c4=65;//給字符變量賦整數(shù)(ASCII碼值)printf("%c,%c,%c,%c\n",c1,c2,c3,c4);//以字符形式輸出字符變量的值printf("%d,%d,%d,%d\n",c1,c2,c3,c4);//以十進(jìn)制形式輸出字符變量的值printf("%x,%x,%x,%x\n",c1,c2,c3,c4);//以十六進(jìn)制形式輸出字符變量的值}1.2.3字符型數(shù)據(jù)1.2數(shù)據(jù)的基本類型及其表現(xiàn)形式

【例1.5】字符變量的定義、賦值和輸出。#include<stdio.h>intmain(void){charc1,c2;//定義字符變量

c1='a';c2='b';

//給字符變量賦字符常量

c1=c1-32;c2=c2-32;

//將字符變量對(duì)應(yīng)的ASCII碼值更新

printf("%c,%c\n",c1,c2);//以字符形式輸出變量c1和c2的值

}1.2.3字符型數(shù)據(jù)1.2數(shù)據(jù)的基本類型及其表現(xiàn)形式

【例1.6】輸出給定小寫字母對(duì)應(yīng)的大寫字母。4、字符串常量

1.2.3字符型數(shù)據(jù)1.2數(shù)據(jù)的基本類型及其表現(xiàn)形式

字符串常量是由一對(duì)雙撇號(hào)括起來(lái)的字符序列。例如:"CHINA","Cprogram","a","$12.5"字符常量和字符串常量的區(qū)別:因此字符串常量"CHINA"在內(nèi)存中占用6個(gè)字節(jié)?!舅伎肌孔址A?a'和字符串常量"a"有何區(qū)別?練習(xí):【例1.7】輸出字符串常量及其占用內(nèi)存的字節(jié)數(shù)。1.2.4實(shí)型數(shù)據(jù)1.2數(shù)據(jù)的基本類型及其表現(xiàn)形式

1、實(shí)型常量

(2)指數(shù)形式。如123e3或123E3都代表123×103。要注意字母e(或E)之前必須要有數(shù)字,且e后面的指數(shù)必須為整數(shù),如e2、4e2.5、.e3、e都不是合法的指數(shù)形式。

實(shí)型常量也稱實(shí)數(shù),在C語(yǔ)言中,實(shí)數(shù)有兩種表示形式:

(1)十進(jìn)制小數(shù)形式。它由數(shù)字和小數(shù)點(diǎn)組成(注意,必須要有小數(shù)點(diǎn))。如:0.123、123.、123.0、0.0。

一個(gè)實(shí)數(shù)可以有多種指數(shù)表示形式。在程序中以指數(shù)形式輸出一個(gè)實(shí)數(shù)時(shí),會(huì)以規(guī)范化的指數(shù)形式輸出。

例如123.456的規(guī)范化指數(shù)形式是1.23456e2。2、實(shí)型變量

根據(jù)數(shù)據(jù)的數(shù)值范圍和精度,實(shí)型變量的類型主要有單精度(float)型和雙精度(double)型。需要注意:實(shí)型數(shù)據(jù)在計(jì)算機(jī)內(nèi)存中的存儲(chǔ)精度有限,不可能得到完全精確的數(shù)值。1.2.4實(shí)型數(shù)據(jù)1.2數(shù)據(jù)的基本類型及其表現(xiàn)形式

#include<stdio.h>intmain(void){

floatx;//定義實(shí)型變量xx=12.3;//將實(shí)型常數(shù)12.3賦給變量xprintf("%f\n",x);//以小數(shù)形式輸出變量x的數(shù)值printf("%e\n",x);//以指數(shù)形式輸出變量x的數(shù)值}【例1.8】實(shí)型變量的定義、賦值和輸出。練習(xí):【例1.9】利用sizeof運(yùn)算符測(cè)試系統(tǒng)中數(shù)據(jù)類型的長(zhǎng)度。1.2.5變量的初始化1.2數(shù)據(jù)的基本類型及其表現(xiàn)形式

C語(yǔ)言允許在定義變量的同時(shí),對(duì)變量賦初值,即變量的初始化。例如:

inta=3;

//定義整型變量a,并賦初值3floatb=1.23;//定義實(shí)型變量b,并賦初值1.23charc='a';

//定義字符變量c,并賦初值'a'

當(dāng)一次定義同類型的多個(gè)變量時(shí),可以給全部變量或部分變量賦初值。inta,b,c=5;

//定義a、b、c三個(gè)整型變量,只給c賦初值5注意,對(duì)3個(gè)變量賦相同的初值3時(shí),不能寫成:inta=b=c=3;inta=1,b=2,c=3;

//定義a、b、c三個(gè)整型變量,并賦不同的初值inta=3,b=3,c=3;

//定義a、b、c三個(gè)整型變量,并賦相同的初值3練習(xí):【例1.10】變量的初始化和輸出。1.2.6常變量1.2數(shù)據(jù)的基本類型及其表現(xiàn)形式

練習(xí):【例1.11】常變量的初始化與輸出。

在定義變量并對(duì)變量初始化時(shí),如果加上關(guān)鍵字const,則變量的值在程序運(yùn)行期間不再改變,這種變量稱為常變量(constantvariable),也稱為只讀變量。例如:constinta=5;

//用const聲明整型變量a為常變量,其值始終是51.3運(yùn)算符及表達(dá)式

1.3.1算術(shù)運(yùn)算符及其表達(dá)式1.3.2強(qiáng)制類型轉(zhuǎn)換運(yùn)算符及其表達(dá)式1.3.3賦值運(yùn)算符及其表達(dá)式1.3.4關(guān)系運(yùn)算符及其表達(dá)式1.3.5邏輯運(yùn)算符及其表達(dá)式1.3.6位運(yùn)算符及其表達(dá)式1.3.7

逗號(hào)運(yùn)算符及其表達(dá)式1.3.1算術(shù)運(yùn)算符及其表達(dá)式1、基本的算術(shù)運(yùn)算符1.3運(yùn)算符及表達(dá)式

(2)-

減法運(yùn)算符,或負(fù)值運(yùn)算符,如7-2、-4

(1)+

加法運(yùn)算符,或正值運(yùn)算符,如2+3、+5

(4)/

除法運(yùn)算符,如5/2、5.0/2

(3)*乘法運(yùn)算符,如2*3

(5)%模運(yùn)算符,或稱求余運(yùn)算符,%兩側(cè)均應(yīng)為整型數(shù)據(jù),如5%2的值為1

說(shuō)明:

【例1.12】將三位十進(jìn)制整數(shù)的百位數(shù)、十位數(shù)和個(gè)位數(shù)分離。#include<stdio.h>intmain(void){inta=123;

intb,c,d;//3個(gè)變量分別存放個(gè)位數(shù)、十位數(shù)和百位數(shù)

b=a%10;//獲得個(gè)位數(shù)

a=a/10;//右移1位,變量a的值更新為12

c=a%10;//獲得十位數(shù)

a=a/10;//右移1位,變量a的值更新為1

d=a%10;//獲得百位數(shù)

printf("123的百位數(shù)=%d\n",d);//輸出百位數(shù)

printf("123的十位數(shù)=%d\n",c);//輸出十位數(shù)

printf("123的個(gè)位數(shù)=%d\n",b);//輸出個(gè)位數(shù)}1.3.1算術(shù)運(yùn)算符及其表達(dá)式1、基本的算術(shù)運(yùn)算符1.3運(yùn)算符及表達(dá)式

練習(xí):【例1.13】將一個(gè)正整數(shù)倒序輸出?!纠?.14】不同類型數(shù)據(jù)之間的混合運(yùn)算。自增運(yùn)算符++:使變量的值自增1,相當(dāng)于i=i+1。自減運(yùn)算符--:使變量的值自減1,相當(dāng)于i=i-1。有以下4種形式的表達(dá)式:

i++

表達(dá)式先用i的值,然后對(duì)i的值加1(先用后加)

++i

先對(duì)i的值加1,然后表達(dá)式用i加1的值(先加后用)--i

先對(duì)i的值減1,然后表達(dá)式用i減1的值(先減后用)

i--

表達(dá)式先用i的值,然后對(duì)i的值減1(先用后減)1.3.1算術(shù)運(yùn)算符及其表達(dá)式2、自增、自減運(yùn)算符1.3運(yùn)算符及表達(dá)式

可見,由自增(自減)運(yùn)算符構(gòu)成不同形式的表達(dá)式時(shí),對(duì)變量而言,自增1(自減1)都具有相同的效果,但對(duì)表達(dá)式而言卻有著不同的值。1.3.1算術(shù)運(yùn)算符及其表達(dá)式2、自增、自減運(yùn)算符【例1.15】自增、自減運(yùn)算符的應(yīng)用。1.3運(yùn)算符及表達(dá)式

說(shuō)明:

(1)自增、自減運(yùn)算符只能用于變量,不能用于常量或表達(dá)式。如5++或(a+b)++都是不合法的。(2)自增、自減運(yùn)算符常用在循環(huán)語(yǔ)句中,使循環(huán)變量自動(dòng)加1、減1,這將在后續(xù)單元中學(xué)習(xí)。#include<stdio.h>intmain(void){int

i=3,j=3,k=3,x=3;

printf("%d\t",i++);printf("i=%d\n",i);

printf("%d\t",++j);printf("j=%d\n",j);

printf("%d\t",k--);printf("k=%d\n",k);

printf("%d\t",--x);printf("x=%d\n",x);}3、算術(shù)表達(dá)式和運(yùn)算符的優(yōu)先級(jí)與結(jié)合性1.3.1算術(shù)運(yùn)算符及其表達(dá)式1.3運(yùn)算符及表達(dá)式

算術(shù)表達(dá)式:用算術(shù)運(yùn)算符和括號(hào)將運(yùn)算對(duì)象(常量、變量或表達(dá)式)連接起來(lái)的、符合C語(yǔ)法規(guī)則的式子。例如:a+b*c-5/2+'a'。C語(yǔ)言規(guī)定了運(yùn)算符的優(yōu)先級(jí)和結(jié)合性。在表達(dá)式求值時(shí),先按運(yùn)算符的優(yōu)先級(jí)高低次序執(zhí)行,例如:x-y*z相當(dāng)于x-(y*z)。如果在一個(gè)運(yùn)算對(duì)象兩側(cè)的運(yùn)算符的優(yōu)先級(jí)相同,則按照規(guī)定的“結(jié)合方向(結(jié)合性)”處理。

算術(shù)運(yùn)算符的結(jié)合方向?yàn)椤白宰笙蛴遥ㄗ蠼Y(jié)合性)”,即先左后右。因此a+b-c相當(dāng)于(a+b)-c。附錄C給出了C語(yǔ)言運(yùn)算符的優(yōu)先級(jí)和結(jié)合性,供查詢參考。1.3.2強(qiáng)制類型轉(zhuǎn)換運(yùn)算符及其表達(dá)式1.3運(yùn)算符及表達(dá)式

強(qiáng)制類型轉(zhuǎn)換表達(dá)式的一般形式:(類型標(biāo)識(shí)符)(表達(dá)式)例如:

(int)i

將i轉(zhuǎn)換為整型(int)x+y

將x轉(zhuǎn)換成整型后,再與y相加(float)(x+y)

將x+y的結(jié)果轉(zhuǎn)換為float型#include<stdio.h>intmain(void){inti;//定義整型變量i

floatx=2.4F;//定義實(shí)型變量x,并賦初值

i=(int)x;//將實(shí)型變量x強(qiáng)制轉(zhuǎn)換為int型

printf("x=%f,i=%d\n",x,i);}【例1.16】將實(shí)型數(shù)據(jù)強(qiáng)制轉(zhuǎn)換為整型。練習(xí):【例1.17】將整型數(shù)據(jù)強(qiáng)制轉(zhuǎn)換為實(shí)型。1、簡(jiǎn)單賦值運(yùn)算符“=”及其表達(dá)式1.3.3賦值運(yùn)算符及其表達(dá)式1.3運(yùn)算符及表達(dá)式

簡(jiǎn)單賦值表達(dá)式的形式:變量=

表達(dá)式

賦值表達(dá)式中的“表達(dá)式”,又可以是一個(gè)賦值表達(dá)式。賦值運(yùn)算符是按照“自右向左”的結(jié)合順序。

根據(jù)附錄C,賦值運(yùn)算符的優(yōu)先級(jí)僅高于逗號(hào)運(yùn)算符,而低于其他運(yùn)算符。因此賦值表達(dá)式a=3*5等價(jià)于a=(3*5),i=a+b等價(jià)于i=(a+b)。

賦值表達(dá)式“

a=5”的值是5。執(zhí)行運(yùn)算后,變量a的值也是5。【思考】分析下面各賦值表達(dá)式中變量a的值。a=5+(c=7)a=b=c=33a=(b=6)/(c=2)a=(b=2)+(c=5)1273

因此

a=b=5與

a=(b=5)等價(jià)。2、復(fù)合的賦值運(yùn)算符及其表達(dá)式1.3.3賦值運(yùn)算符及其表達(dá)式1.3運(yùn)算符及表達(dá)式

在簡(jiǎn)單賦值運(yùn)算符“=”之前加上其他運(yùn)算符,可構(gòu)成復(fù)合的賦值運(yùn)算符。a*=3等價(jià)于a=a*3a-=3等價(jià)于a=a-3a*=b+2等價(jià)于a=a*(b+2)a+=3等價(jià)于a=a+3a/=3等價(jià)于a=a/3a%=3等價(jià)于a=a%3①a*=b+2②

a*=b+2(將“a*”移到“=”右側(cè))③a=a*

(b+2)

(在“=”左側(cè)補(bǔ)上變量名a,并對(duì)b+2外加括號(hào))練習(xí):【例1.18】復(fù)合賦值運(yùn)算符的使用。3、類型轉(zhuǎn)換

如果賦值運(yùn)算符“=”兩側(cè)的數(shù)據(jù)類型不一致,但同為數(shù)值型數(shù)據(jù),在賦值時(shí),系統(tǒng)會(huì)自動(dòng)進(jìn)行類型轉(zhuǎn)換。下面介紹3種常見的情況。1.3.3賦值運(yùn)算符及其表達(dá)式(1)將整型數(shù)據(jù)賦給整型變量1.3運(yùn)算符及表達(dá)式

【例1.19】將無(wú)符號(hào)整型數(shù)據(jù)賦給有符號(hào)整型變量。正數(shù)變成了負(fù)數(shù)

#include<stdio.h>intmain(void){

unsignedchara=255;

signedcharb;b=a;printf("a=%d\n",a);printf("b=%d\n",b);}3、類型轉(zhuǎn)換1.3.3賦值運(yùn)算符及其表達(dá)式

如果賦值運(yùn)算符“=”兩側(cè)的數(shù)據(jù)類型不一致,但同為數(shù)值型數(shù)據(jù),在賦值時(shí),系統(tǒng)會(huì)自動(dòng)進(jìn)行類型轉(zhuǎn)換。下面介紹3種常見的情況。(1)將整型數(shù)據(jù)賦給整型變量1.3運(yùn)算符及表達(dá)式

【例1.20】將有符號(hào)整型數(shù)據(jù)賦給無(wú)符號(hào)整型變量。負(fù)數(shù)變成了正數(shù)

#include<stdio.h>intmain(void){

signed

chara=-1;

unsignedcharb;b=a;printf("a=%d\n",a);printf("b=%d\n",b);}3、類型轉(zhuǎn)換1.3.3賦值運(yùn)算符及其表達(dá)式

如果賦值運(yùn)算符“=”兩側(cè)的數(shù)據(jù)類型不一致,但同為數(shù)值型數(shù)據(jù),在賦值時(shí),系統(tǒng)會(huì)自動(dòng)進(jìn)行類型轉(zhuǎn)換。下面介紹3種常見的情況。(1)將整型數(shù)據(jù)賦給整型變量1.3運(yùn)算符及表達(dá)式

【例1.21】將短字節(jié)整型數(shù)據(jù)賦給長(zhǎng)字節(jié)整型變量。無(wú)誤#include<stdio.h>intmain(void){

unsignedchar

a=255;

unsignedint

b;b=a;printf("a=%d\n",a);printf("b=%d\n",b);}3、類型轉(zhuǎn)換1.3.3賦值運(yùn)算符及其表達(dá)式

如果賦值運(yùn)算符“=”兩側(cè)的數(shù)據(jù)類型不一致,但同為數(shù)值型數(shù)據(jù),在賦值時(shí),系統(tǒng)會(huì)自動(dòng)進(jìn)行類型轉(zhuǎn)換。下面介紹3種常見的情況。(1)將整型數(shù)據(jù)賦給整型變量【例1.22】將長(zhǎng)字節(jié)整型數(shù)據(jù)賦給短字節(jié)整型變量。1.3運(yùn)算符及表達(dá)式

有誤!如何解決?#include<stdio.h>intmain(void){

unsignedchar

a=255,b=1;

unsignedchar

c;c=a+b;printf("a=%d\n",a);printf("b=%d\n",b);printf("c=%d\n",c);}3、類型轉(zhuǎn)換1.3.3賦值運(yùn)算符及其表達(dá)式

如果賦值運(yùn)算符“=”兩側(cè)的數(shù)據(jù)類型不一致,但同為數(shù)值型數(shù)據(jù),在賦值時(shí),系統(tǒng)會(huì)自動(dòng)進(jìn)行類型轉(zhuǎn)換。下面介紹3種常見的情況。(2)將實(shí)型數(shù)據(jù)賦給整型變量【例1.23】將實(shí)型數(shù)據(jù)賦給整型變量。1.3運(yùn)算符及表達(dá)式

只取了整數(shù)部分#include<stdio.h>intmain(void){

floata=1234.567F;

intb;b=a;printf("a=%f\n",a);printf("b=%d\n",b);}3、類型轉(zhuǎn)換1.3.3賦值運(yùn)算符及其表達(dá)式1.3運(yùn)算符及表達(dá)式

數(shù)值不變,但變成了實(shí)數(shù)

如果賦值運(yùn)算符“=”兩側(cè)的數(shù)據(jù)類型不一致,但同為數(shù)值型數(shù)據(jù),在賦值時(shí),系統(tǒng)會(huì)自動(dòng)進(jìn)行類型轉(zhuǎn)換。下面介紹3種常見的情況。(3)將整型數(shù)據(jù)賦給實(shí)型變量【例1.24】將整型數(shù)據(jù)賦給實(shí)型變量。

通過(guò)上述例題可以看出,在賦值運(yùn)算中,需要根據(jù)數(shù)據(jù)的類型和數(shù)值的范圍為變量指定合適的類型,必要時(shí)還需要借助強(qiáng)制類型轉(zhuǎn)換運(yùn)算符,以防出錯(cuò)。

#include<stdio.h>intmain(void){

inta=1234;

floatb;b=a;printf("a=%d\n",a);printf("b=%f\n",b);}1.3.4關(guān)系運(yùn)算符及其表達(dá)式1、關(guān)系運(yùn)算符及其優(yōu)先級(jí)次序

優(yōu)先級(jí)相同(高)優(yōu)先級(jí)相同(低)③>大于①<小于②<=小于或等于⑥!=不等于④>=大于或等于⑤==等于

關(guān)系運(yùn)算符的優(yōu)先級(jí)低于算術(shù)運(yùn)算符,高于賦值運(yùn)算符。a=b>c等價(jià)于

a=(b>c)例如:

c>a+b等價(jià)于

c>(a+b)a==b<c等價(jià)于

a==(b<c)a>b==c等價(jià)于

(a>b)==c1.3運(yùn)算符及表達(dá)式

2、關(guān)系表達(dá)式1.3.4關(guān)系運(yùn)算符及其表達(dá)式1.3運(yùn)算符及表達(dá)式

用關(guān)系運(yùn)算符將兩個(gè)表達(dá)式連接起來(lái)的式子,稱為關(guān)系表達(dá)式。a+b>c+d(a=3)>(b=5)'a'<'b'a==3例如:a>ba!=3

關(guān)系表達(dá)式的值是一個(gè)邏輯值:“真”或“假”。例如關(guān)系表達(dá)式“5==3”的值為“假”,“5>=0”的值為“真”。

關(guān)系運(yùn)算結(jié)果,以“1”代表“真”,以“0”代表“假”。關(guān)系表達(dá)式邏輯值(真、假)關(guān)系表達(dá)式的值(1、0)a>ba>b+ca!=b+ca>b>c若a=3,b=2,c=1,則:真假假假1000練習(xí):【例1.25】考察關(guān)系表達(dá)式的值。1.3.5邏輯運(yùn)算符及其表達(dá)式1、邏輯運(yùn)算符及其優(yōu)先級(jí)次序

1.3運(yùn)算符及表達(dá)式

假③!邏輯非①&&邏輯與②||邏輯或

邏輯運(yùn)算的真值表aba&&ba||b!a真真真假假真假假真真假真假真假假真!a==b||c<d等價(jià)于a>b&&c>d等價(jià)于a+b>c&&x+y<d等價(jià)于幾種運(yùn)算符的優(yōu)先級(jí)次序如右圖所示:!(非)

高算術(shù)運(yùn)算符關(guān)系運(yùn)算符&&和||賦值運(yùn)算符低(a+b)(>c)(x+y)(<d)&&(a>b)(c>d)&&(!a)(==b)||(c<d)2、邏輯表達(dá)式的值

1.3.5邏輯運(yùn)算符及其表達(dá)式1.3運(yùn)算符及表達(dá)式

C語(yǔ)言規(guī)定,參與邏輯運(yùn)算的操作數(shù)以非0代表“真”,以0代表“假”。邏輯表達(dá)式的值,即邏輯運(yùn)算結(jié)果,以數(shù)值1代表“真”,以0代表“假”。例如:(1)若a=3,則!a的值:(4)'a'&&'b'的值:(2)若a=3,b=4,則a&&b的值:(3)3&&0||-4的值:0111在邏輯表達(dá)式的求解過(guò)程中,有時(shí)并非所有的運(yùn)算都被執(zhí)行。

例如:

(1)a&&b:只有當(dāng)a為真(非0)時(shí),才需要判斷b的值。只要a為假,就不必判斷b的值,此時(shí)整個(gè)表達(dá)式已確定為假。(2)a||b:只要a為真(非0),就不必判斷b的值。只有a為假,才判斷b?!舅伎寂c練習(xí)】

1.3.5邏輯運(yùn)算符及其表達(dá)式1.3運(yùn)算符及表達(dá)式

分別寫出下列數(shù)學(xué)表達(dá)式對(duì)應(yīng)的C語(yǔ)言表達(dá)式:

(1)80≤i<89

(2)i<0或i≥100

(3)i≠0i>=80&&i<89i<0||

i>=100i!=0練習(xí):【例1.26】考察邏輯表達(dá)式的值。1.3.6位運(yùn)算符及其表達(dá)式1.3運(yùn)算符及表達(dá)式

位運(yùn)算符含義&按位與|按位或^按位異或~按位取反<<左移>>右移說(shuō)明:1)位運(yùn)算符中除“~”以外,均為二目運(yùn)算符,即要求兩側(cè)各有一個(gè)運(yùn)算量。

2)運(yùn)算量只能是整型或字符型數(shù)據(jù),不能是實(shí)型數(shù)據(jù)。

在嵌入式軟件設(shè)計(jì)中,經(jīng)常用到位運(yùn)算符:對(duì)二進(jìn)制位進(jìn)行運(yùn)算。例如,0x23與0x45按位與:00100011(0x23)

&)01000101(0x45)0&0=0,0&1=0,1&0=0,1&1=11、“按位與”運(yùn)算符(&)00000001(0x01)1.3.6位運(yùn)算符及其表達(dá)式1.3運(yùn)算符及表達(dá)式

特殊用途:“與0清零、與1保留”——可對(duì)數(shù)據(jù)的某些位清零,某些位保留不變。例如,將0x23的高4位清零,低4位保留不變。00100011(0x23)

&)00001111(0x0f)0000

0011

(0x03)2、“按位或”運(yùn)算符(|)1.3.6位運(yùn)算符及其表達(dá)式1.3運(yùn)算符及表達(dá)式

例如,0x23與0x45按位或:00100011(0x23)

|)01000101(0x45)

特殊用途:“或1置1、或0保留”——可對(duì)數(shù)據(jù)的某些位置1,某些位保留不變。0|0=0,0|1=1,1|0=1,1|1=1例如,將0x23的高4位置1,低4位保留不變。00100011(0x23)

|)11110000(0xf0)01011101(0x67)1111

0011

(0xf3)例如,0x23與0x45按位異或:00100011(0x23)

^)01000101(0x45)

溫馨提示

  • 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論