版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第3章數(shù)據(jù)類型、運(yùn)算符和表達(dá)式3.1數(shù)據(jù)類型常量3.2變量3.33.4運(yùn)算符和表達(dá)式3.5數(shù)據(jù)類型轉(zhuǎn)換本章內(nèi)容導(dǎo)讀本章主要介紹C語(yǔ)言的基本數(shù)據(jù)類型以及變量的定義方法,基本運(yùn)算符的運(yùn)算規(guī)則、優(yōu)先級(jí)和結(jié)合性以及表達(dá)式的構(gòu)成等。通過(guò)學(xué)習(xí)本章,讀者應(yīng)掌握以下內(nèi)容:了解C語(yǔ)言的各種數(shù)據(jù)類型和運(yùn)算符;掌握各種基本數(shù)據(jù)類型常量和字符串常量的書(shū)寫(xiě)方法;掌握常量和變量的定義、初始化和賦值方法;掌握基本運(yùn)算符的運(yùn)算規(guī)則、優(yōu)先級(jí)和結(jié)合性;掌握表達(dá)式計(jì)算和變量賦值時(shí)數(shù)據(jù)類型轉(zhuǎn)換的規(guī)則。C語(yǔ)言提供的數(shù)據(jù)結(jié)構(gòu),以數(shù)據(jù)類型的形式出現(xiàn)。包括:基本類型包括整型、實(shí)型(又稱浮點(diǎn)型)、字符型和枚舉型四種。構(gòu)造類型由基本數(shù)據(jù)類型按一定規(guī)則組合而成的復(fù)雜數(shù)據(jù)類型,包括數(shù)組類型、結(jié)構(gòu)體類型和共用體類型三種。指針類型用來(lái)表示內(nèi)存地址??疹愋蛷恼Z(yǔ)法完整性角度給出的數(shù)據(jù)類型,表示不需要數(shù)據(jù)值,因而沒(méi)有類型。C語(yǔ)言中的數(shù)據(jù),有常量和變量之分,分別屬于上述的類型。本章主要介紹基本類型中的整型、實(shí)型和字符型三種。3.1數(shù)據(jù)類型概念在程序運(yùn)行過(guò)程中,其值不能改變的量,又稱為常數(shù)。
分類
(1)整型常量(2)實(shí)型常量(3)字符型常量
(4)字符串常量(5)符號(hào)常量常量的類型,系統(tǒng)可通過(guò)書(shū)寫(xiě)形式自動(dòng)識(shí)別,無(wú)需定義。3.2常量表示形式又稱為整數(shù),C語(yǔ)言中有三種形式:(1)十進(jìn)制整型常量,例如10、36。(2)八進(jìn)制整型常量(必須以數(shù)字0開(kāi)頭),例如012。(3)十六進(jìn)制整型常量(必須以0X或0x開(kāi)頭),例如0x36。分類(1)基本整型(2)長(zhǎng)整型(在數(shù)值后面加L或l):對(duì)超出基本整型值域的整型常量,可使用長(zhǎng)整型常量表示,例如123l、315L等。(3)短整型1、整型常量3.2常量類型匹配規(guī)則一個(gè)整型常量,可以賦給能容納下其值的整型變量。例如,其值在-215至(215-1)的整型常量,可以賦給int型變量和longint型變量;其值在-231至(231-1)的整型常量,則只能賦給longint型變量。注意:常量沒(méi)有unsigned型。但一個(gè)非負(fù)整型常量,只要其值不超過(guò)相應(yīng)變量的取值范圍,也可以賦給unsigned型變量。1、整型常量3.2常量表示形式
又稱為浮點(diǎn)型常量或?qū)崝?shù),有兩種表達(dá)形式:
(1)十進(jìn)制小數(shù)形式,例如3.14、9.8。(2)指數(shù)形式:<尾數(shù)>E(或e)<整型指數(shù)>,例如3.0E+5等。說(shuō)明
實(shí)型常量不分float型和double型。一個(gè)實(shí)型常量,可以賦給一個(gè)實(shí)型變量(float型或double型)。2、實(shí)型常量3.2常量定義用一對(duì)單引號(hào)括起來(lái)的單個(gè)字符,例如'a'、'+'等。轉(zhuǎn)義字符C語(yǔ)言還允許使用一種特殊形式的字符常量,以反斜杠“\”開(kāi)頭的轉(zhuǎn)義字符。注意(1)如果反斜杠或單引號(hào)或雙引號(hào)本身作為字符常量,必須寫(xiě)成轉(zhuǎn)義字符的形式,即
'\\'、'\''、'\"',而不能直接寫(xiě)成
'\'、'''、'"'。(2)C語(yǔ)言規(guī)定字符常量中的字母是區(qū)分大小寫(xiě)的,例如
'x'和'X'是不同的字符常量。(3)C語(yǔ)言中空字符和空格符號(hào)不同??兆址棉D(zhuǎn)義字符'\0'表示,其值是0;空格符號(hào)是ASCII字符集中的一個(gè)可顯示字符,其ASCII值是32,在屏幕上顯示為空格。3、字符常量3.2常量定義字符串常量是用一對(duì)雙引號(hào)括起來(lái)的若干字符序列。長(zhǎng)度字符串中字符的個(gè)數(shù)稱為字符串長(zhǎng)度。長(zhǎng)度為0的字符串(即一個(gè)字符都沒(méi)有的字符串)稱為空串,表示為""
(一對(duì)緊連的雙引號(hào))。例如
"Howdoyoudo."、"Goodmorning."等,都是字符串常量,其長(zhǎng)度分別為14和13(空格也是一個(gè)字符)。
如果反斜杠和雙引號(hào)作為字符串中的有效字符,則必須使用轉(zhuǎn)義字符。例如(1)C:\msdos\v6.22→"C:\\msdos\\v6.22"
(2)Isay:"Goodbye!"→"Isay:\"Goodbye!\""
4、字符串常量3.2常量存儲(chǔ)C語(yǔ)言規(guī)定:存儲(chǔ)字符串常量時(shí),由系統(tǒng)在字符串的末尾自動(dòng)加一個(gè)'\0'作為字符串的結(jié)束標(biāo)志。注:在源程序中書(shū)寫(xiě)字符串常量時(shí),不必加結(jié)束字符'\0'
,否則畫(huà)蛇添足。
例如字符串"CHINA",其在內(nèi)存中實(shí)際存儲(chǔ)為:最后一個(gè)字符'\0'是系統(tǒng)自動(dòng)加上的,占用6個(gè)字節(jié)而非5個(gè)字節(jié)的內(nèi)存空間。CHINA\0說(shuō)明:字符常量'A'與字符串常量"A"是不同的。(1)定界符不同:字符常量使用單引號(hào),而字符串常量使用雙引號(hào);(2)長(zhǎng)度不同:字符常量的長(zhǎng)度固定為1,而字符串常量的長(zhǎng)度,可以是0,也可以是某個(gè)整數(shù)。4、字符串常量3.2常量格式為了在程序中明確表示某些常量的含義,可以給常量取一個(gè)容易識(shí)別的名字,且符合標(biāo)識(shí)符的命名規(guī)則。#define符號(hào)常量常量其中,常量可以是任意類型。#define是一個(gè)編譯預(yù)處理命令,稱為宏定義命令。
注:符號(hào)常量一般采用大寫(xiě)字母表示,而變量一般采用小寫(xiě)字母表示。符號(hào)常量使用之前必須先定義。符號(hào)常量的定義一般放在程序的開(kāi)頭,每個(gè)定義必須獨(dú)占一行,因?yàn)椴皇钦Z(yǔ)句,所以后面沒(méi)有分號(hào);。5、符號(hào)常量3.2常量定義在程序運(yùn)行過(guò)程中,其值可以改變的量。特點(diǎn)(1)變量名。每個(gè)變量都必須有一個(gè)名字,變量命名遵循標(biāo)識(shí)符命名規(guī)則。(2)變量值。在程序運(yùn)行過(guò)程中,變量值存儲(chǔ)在內(nèi)存中。程序中通過(guò)變量名引用變量的值。變量值的數(shù)據(jù)類型與變量的數(shù)據(jù)類型一致。命名規(guī)則(1)有效字符:只能由字母、數(shù)字和下劃線組成,且以字母或下劃線開(kāi)頭。(2)有效長(zhǎng)度:隨系統(tǒng)而異。3.3變量例如,由于student_name和student_number的前8?jìng)€(gè)字符相同,有的系統(tǒng)認(rèn)為這兩個(gè)變量相同而不加區(qū)別。(3)C語(yǔ)言的關(guān)鍵字不能用作變量名。注意:C語(yǔ)言對(duì)英文字母的大小寫(xiě)敏感,即同一字母的大小寫(xiě),被認(rèn)為是兩個(gè)不同的字符。習(xí)慣上,變量名和函數(shù)名中的英文字母用小寫(xiě),以增加可讀性。標(biāo)識(shí)符命名的良好習(xí)慣──見(jiàn)名知意所謂“見(jiàn)名知意”即通過(guò)變量名就知道變量值的含義。通常應(yīng)選擇能表示數(shù)據(jù)含義的英文單詞(或縮寫(xiě))作變量名,或漢語(yǔ)拼音字頭作變量名。例如,name/xm(姓名)、sex/xb(性別)、age/nl(年齡)、salary/gz(工資)。3.3變量C語(yǔ)言中,要求對(duì)所有變量,必須先定義、后使用;在定義變量的同時(shí)進(jìn)行賦初值的操作稱為變量初始化。
定義格式
數(shù)據(jù)類型符變量名1[,變量名2,……];例如floatradius,length,area;
初始化格式
數(shù)據(jù)類型符變量名1[=初值1][,變量名2[=初值2],……];
例如floatradius=2.5,length,area;3.3變量分類根據(jù)占用內(nèi)存字節(jié)數(shù)的不同,整型變量分為四類:(1)基本整型(類型關(guān)鍵字int)(2)短整型(類型關(guān)鍵字short[int])(3)長(zhǎng)整型(類型關(guān)鍵字long[int])(4)無(wú)符號(hào)整型。又分為無(wú)符號(hào)基本整型(unsigned[int])、無(wú)符號(hào)短整型(unsignedshort)和無(wú)符號(hào)長(zhǎng)整型(unsignedlong)三種,只能用來(lái)存儲(chǔ)無(wú)符號(hào)整數(shù)。
1、整型變量3.3變量占用內(nèi)存字節(jié)數(shù)與值域上述各類整型變量占用的內(nèi)存字節(jié)數(shù),因系統(tǒng)而異。16位系統(tǒng)中,一般用2字節(jié)表示一個(gè)int型變量,且long型(4字節(jié))≧int型(2字節(jié))≧short型(2字節(jié))。不同類型的整型變量,其值域不同。占用內(nèi)存字節(jié)數(shù)為n的(有符號(hào))整型變量,其值域?yàn)?2n*8-1至2n*8-1-1;無(wú)符號(hào)整型變量的值域?yàn)?至2n*8-1。例如,PC機(jī)中的一個(gè)int型變量,其值域?yàn)?22*8-1至22*8-1-1,即-32768至32767;一個(gè)unsigned型變量的值域?yàn)?至22*8-1,即0至65535。1、整型變量3.3變量分類
(1)單精度型。類型關(guān)鍵字為float,一般占4字節(jié),提供7位有效數(shù)字。
(2)雙精度型。類型關(guān)鍵字為double,一般占8?jìng)€(gè)字節(jié),提供15至16位有效數(shù)字。
2、實(shí)型變量3.3變量字符型變量的類型關(guān)鍵字為char,占用1字節(jié)內(nèi)存單元。存儲(chǔ)
字符型變量用來(lái)存儲(chǔ)字符常量。將一個(gè)字符常量存儲(chǔ)到一個(gè)字符變量中,實(shí)際上是將該字符的ASCII碼值(無(wú)符號(hào)整數(shù))存儲(chǔ)到內(nèi)存單元中。例如charch1,ch2;/*定義兩個(gè)字符變量ch1、ch2*/
ch1='a';ch2='b';/*給字符變量賦值*/特點(diǎn)
字符數(shù)據(jù)在內(nèi)存中存儲(chǔ)的是字符的ASCII碼─一個(gè)無(wú)符號(hào)整數(shù),其形式與整數(shù)的存儲(chǔ)形式一樣,所以C語(yǔ)言允許字符型數(shù)據(jù)與整型數(shù)據(jù)之間通用。(1)一個(gè)字符型數(shù)據(jù),既可以字符形式輸出,也可以整數(shù)形式輸出。(2)允許對(duì)字符數(shù)據(jù)進(jìn)行算術(shù)運(yùn)算,即對(duì)其ASCII碼值進(jìn)行算術(shù)運(yùn)算。
3、字符型變量3.3變量【例3-1】字符型變量的字符形式輸出和整數(shù)形式輸出。
#include<stdio.h>intmain(void)
{ charch1,ch2;
ch1='a';ch2='b';
printf("ch1=%c,ch2=%c\n",ch1,ch2);
printf("ch1=%d,ch2=%d\n",ch1,ch2); return0;
}
程序運(yùn)行結(jié)果:
ch1=a,ch2=b
ch1=97,ch2=983、字符型變量3.3變量
C語(yǔ)言中,如果定義了變量并賦予其初值,但不希望在程序中對(duì)其值進(jìn)行修改,則可以將該變量定義為有名常量。定義格式const
數(shù)據(jù)類型符變量名1=初值1[,變量名2=初值2,…];注:有名常量主要用于程序運(yùn)行過(guò)程中,其值不允許改變的量。定義后,若在程序中改變其值,將出錯(cuò)。4、有名常量3.3變量C語(yǔ)言中,除控制語(yǔ)句和輸入輸出函數(shù)外,其它所有基本操作都作為運(yùn)算符處理。
基本算術(shù)運(yùn)算符+、-(減法/取負(fù))、*、/、%(求余數(shù))注意:兩個(gè)整數(shù)相除,其商為整數(shù),小數(shù)部分被舍棄。例如,5/2=2。對(duì)于求余數(shù)運(yùn)算%,要求兩側(cè)的操作數(shù)均為整型數(shù)據(jù),否則出錯(cuò)。表達(dá)式用運(yùn)算符和括號(hào)將運(yùn)算對(duì)象(常量、變量和函數(shù)等)連接起來(lái)的、符合C語(yǔ)言語(yǔ)法規(guī)則的式子,稱為表達(dá)式。單個(gè)常量、變量或函數(shù),可看作是表達(dá)式的一種特例。將單個(gè)常量、變量或函數(shù)構(gòu)成的表達(dá)式稱為簡(jiǎn)單表達(dá)式,其它表達(dá)式稱為復(fù)雜表達(dá)式。3.4運(yùn)算符和表達(dá)式優(yōu)先級(jí)運(yùn)算符結(jié)合性1[]()->.從左至右2!~++---*&sizeof從右至左3*/%從左至右4+-從左至右5<<>>從左至右6<<=>>=從左至右7==!=從左至右8&從左至右9^從左至右10|從左至右11&&從左至右12||從左至右13?:從右至左14=+=-=*=/=%=&=^=|=>>=<<=從右至左15,從左至右優(yōu)先級(jí)和結(jié)合性結(jié)合性是指當(dāng)一個(gè)操作數(shù)兩側(cè)的運(yùn)算符具有相同的優(yōu)先級(jí)時(shí),該操作數(shù)是先與左邊的運(yùn)算符結(jié)合,還是先與右邊的運(yùn)算符結(jié)合。自左向右的結(jié)合方向,稱為左結(jié)合性。反之,稱為右結(jié)合性。結(jié)合性是C語(yǔ)言的獨(dú)有概念。除單目運(yùn)算符、賦值運(yùn)算符和條件運(yùn)算符是右結(jié)合性外,其它運(yùn)算符都是左結(jié)合性。運(yùn)算規(guī)則(1)按運(yùn)算符的優(yōu)先級(jí)高低次序執(zhí)行。例如,先乘除后加減。(2)如果在一個(gè)運(yùn)算對(duì)象(或稱操作數(shù))兩側(cè)的運(yùn)算符的優(yōu)先級(jí)相同,則按C語(yǔ)言規(guī)定的結(jié)合方向進(jìn)行。例如,算術(shù)運(yùn)算符的結(jié)合方向是“自左至右”,即執(zhí)行a-b+c時(shí),先執(zhí)行a-b;然后再執(zhí)行加c的運(yùn)算。3.4運(yùn)算符和表達(dá)式算術(shù)運(yùn)算符包括+、-、*、/、%、+(取正)和-(取負(fù))。
名稱運(yùn)算符運(yùn)算對(duì)象個(gè)數(shù)功能運(yùn)算對(duì)象類型結(jié)果類型結(jié)合性正+單目前綴取正整型或?qū)嵭驼突驅(qū)嵭蛷挠抑磷筘?fù)-取負(fù)加+雙目中綴加法從左至右減-減法乘*乘法除/除法模%整除取余整型整型1、算術(shù)運(yùn)算符和算術(shù)表達(dá)式3.4運(yùn)算符和表達(dá)式自增(++)、自減(--)運(yùn)算符
單目運(yùn)算符,用于對(duì)整型、字符型和指針型變量的值加1和減1的運(yùn)算,運(yùn)算結(jié)果仍是原來(lái)的數(shù)據(jù)類型。使用方法(1)前置運(yùn)算──運(yùn)算符放在變量之前:++變量、--變量。
先使變量的值增(或減)1,然后再以變化后的值參與其它運(yùn)算,即先增減、后運(yùn)算。(2)后置運(yùn)算──運(yùn)算符放在變量之后:變量++、變量--。
變量先參與其它運(yùn)算,然后再使變量的值增(或減)1,即先運(yùn)算、后增減。
1、算術(shù)運(yùn)算符和算術(shù)表達(dá)式3.4運(yùn)算符和表達(dá)式說(shuō)明(1)自增、自減運(yùn)算,常用于循環(huán)語(yǔ)句中,使循環(huán)控制變量加(或減)1,以及指針變量中,使指針指向下(或上)一個(gè)地址。(2)自增、自減運(yùn)算符,不能用于常量和表達(dá)式。例如,5++、--(a+b)等都是非法的。(3)在表達(dá)式中,連續(xù)使同一變量進(jìn)行自增或自減運(yùn)算時(shí),很容易出錯(cuò),所以最好避免這種用法。1、算術(shù)運(yùn)算符和算術(shù)表達(dá)式3.4運(yùn)算符和表達(dá)式【例3-2】自增、自減運(yùn)算符的用法與運(yùn)算規(guī)則。#include<stdio.h>
intmain(void){
intx=6,y;
printf("x=%d\n",x);/*輸出x的初值*/ y=++x; /*前置運(yùn)算*/
printf("y=++x:x=%d,y=%d\n",x,y); y=x--; /*后置運(yùn)算*/
printf("y=x--:x=%d,y=%d\n",x,y); return0;}程序運(yùn)行結(jié)果:x=6y=++x:x=7,y=7y=x--:x=6,y=7“關(guān)系運(yùn)算”實(shí)際上是“比較運(yùn)算”,即將兩個(gè)數(shù)據(jù)進(jìn)行比較,判定兩個(gè)數(shù)據(jù)是否符合給定的關(guān)系。例如,a>b中的>表示大于關(guān)系運(yùn)算。如果a的值是5,b的值是3,則大于關(guān)系運(yùn)算的結(jié)果為“真”,即條件成立;如果a的值是2,b的值是3,則大于關(guān)系運(yùn)算的結(jié)果為“假”,即條件不成立。關(guān)系運(yùn)算符
<(小于)<=(小于或等于)>(大于),
>=(大于或等于)==(等于)!=(不等于)注意:“等于”關(guān)系運(yùn)算符是雙等號(hào)“==”,而不是單等號(hào)“=”(賦值運(yùn)算符)。
2、關(guān)系運(yùn)算符和關(guān)系表達(dá)式3.4運(yùn)算符和表達(dá)式優(yōu)先級(jí)和結(jié)合性(1)>、>=、<、<=優(yōu)先于==、!=;(2)>、>=、<、<=的優(yōu)先級(jí)相同,結(jié)合性是從左至右;(3)==、!=的優(yōu)先級(jí)相同,結(jié)合性是從左至右。(4)關(guān)系運(yùn)算符的優(yōu)先級(jí)低于算術(shù)運(yùn)算符,但高于賦值運(yùn)算符。關(guān)系表達(dá)式(1)概念關(guān)系表達(dá)式是指用關(guān)系運(yùn)算符將兩個(gè)表達(dá)式連接起來(lái)進(jìn)行關(guān)系運(yùn)算的式子。例如下面的關(guān)系表達(dá)式都是合法的:
a>b,a+b>c-d,(a=3)<=(b=5),'a'>='b',(a>b)==(b>c)
(2)關(guān)系表達(dá)式的值——邏輯值(非“真”即“假”)。2、關(guān)系運(yùn)算符和關(guān)系表達(dá)式3.4運(yùn)算符和表達(dá)式假設(shè)n1=3,n2=4,n3=5,則:(1)n1>n2的值是0。(2)(n1>n2)!=n3的值是1。(3)n1<n2<n3的值是1。(4)(n1<n2)+n3的值是6,因?yàn)閚1<n2的值是1,1+5=6。注意:由于C語(yǔ)言沒(méi)有邏輯型數(shù)據(jù),用整數(shù)“1”表示“邏輯真”,用整數(shù)“0”表示“邏輯假”。所以,關(guān)系表達(dá)式的值,還可以參與其它種類的運(yùn)算,例如算術(shù)運(yùn)算、邏輯運(yùn)算等。2、關(guān)系運(yùn)算符和關(guān)系表達(dá)式3.4運(yùn)算符和表達(dá)式關(guān)系表達(dá)式只能描述單一條件,例如x>=0。如果需要描述x>=0同時(shí)x<10,則需借助于邏輯表達(dá)式。邏輯運(yùn)算符&& 邏輯與(相當(dāng)于“同時(shí)”)|| 邏輯或(相當(dāng)于“或者”)! 邏輯非(相當(dāng)于“否定”)例如下面的表達(dá)式都是合法的邏輯表達(dá)式:(x>=0)&&(x<10)(x<1)||(x>5)!(x==0)
(year%4==0)&&(year%100!=0)||(year%400==0)3、邏輯運(yùn)算符和邏輯表達(dá)式3.4運(yùn)算符和表達(dá)式運(yùn)算規(guī)則例如,假設(shè)x=5,則(x>=0)&&(x<10)的值為“真”,(x<-1)||(x>5)的值為“假”。aba&&ba||b0(假)0(假)0(假)0(假)0(假)非0(真)0(假)1(真)非0(真)0(假)0(假)1(真)非0(真)非0(真)1(真)1(真)3、邏輯運(yùn)算符和邏輯表達(dá)式3.4運(yùn)算符和表達(dá)式優(yōu)先級(jí)和結(jié)合性(1)!優(yōu)先于雙目算術(shù)運(yùn)算符優(yōu)先于關(guān)系運(yùn)算符優(yōu)先于&&優(yōu)先于||;(2)單目邏輯運(yùn)算符!和單目算術(shù)運(yùn)算符的優(yōu)先級(jí)相同,結(jié)合性是從右至左;(3)雙目邏輯運(yùn)算符&&和||的結(jié)合性是從左至右。邏輯表達(dá)式邏輯表達(dá)式是指用邏輯運(yùn)算符將一個(gè)或多個(gè)表達(dá)式連接起來(lái),進(jìn)行邏輯運(yùn)算的式子。C語(yǔ)言中,用邏輯表達(dá)式表示多個(gè)條件的組合。例如(year%4==0)&&(year%100!=0)||(year%400==0)是判斷一個(gè)年份是否是閏年的邏輯表達(dá)式。3、邏輯運(yùn)算符和邏輯表達(dá)式3.4運(yùn)算符和表達(dá)式邏輯值的真假判定──0和非0C語(yǔ)言用整數(shù)1表示“邏輯真”、用0表示“邏輯假”。但在判斷一個(gè)數(shù)據(jù)的“真”或“假”時(shí),卻以0和非0為根據(jù):如果為0,則判定為“邏輯假”;如果為非0,則判定為“邏輯真”。例如假設(shè)n=12,則!n的值=0,n>=1&&n<=31的值=1,n||n>31的值=1。說(shuō)明(1)邏輯運(yùn)算符兩側(cè)的操作數(shù),除可以是0和非0的整數(shù)外,也可以是其它任何類型的數(shù)據(jù),如實(shí)型、字符型等。3、邏輯運(yùn)算符和邏輯表達(dá)式3.4運(yùn)算符和表達(dá)式
(2)一旦“&&”和“||”能夠確定表達(dá)式的值,則不再繼續(xù)運(yùn)算,即并不是所有的表達(dá)式都被運(yùn)算。①對(duì)于邏輯與運(yùn)算,如果第一個(gè)操作數(shù)被判定為“假”,系統(tǒng)不再判定或求解第二操作數(shù)。②對(duì)于邏輯或運(yùn)算,如果第一個(gè)操作數(shù)被判定為“真”,系統(tǒng)不再判定或求解第二操作數(shù)。例如假設(shè)n1、n2、n3、n4、x、y的值分別為1、2、3、4、1、1,則求解表達(dá)式(x=n1>n2)&&(y=n3>n4)后,x的值變?yōu)?,而y的值不變,仍等于1。3、邏輯運(yùn)算符和邏輯表達(dá)式3.4運(yùn)算符和表達(dá)式賦值運(yùn)算符
賦值運(yùn)算符分為基本賦值運(yùn)算符(又稱賦值運(yùn)算符)、復(fù)合賦值運(yùn)算符(+=、-=、*=、/=、%=、&=、^=、|=、<<=、>>=)?;举x值運(yùn)算符
基本賦值運(yùn)算符即賦值運(yùn)算符“=”,它是雙目運(yùn)算符,賦值運(yùn)算符的左邊必須是變量,右邊是表達(dá)式,其作用是將一個(gè)表達(dá)式的值賦給一個(gè)變量。
例如,x=5
y=(float)5/2如果表達(dá)式值的類型,與被賦值變量的類型不一致,但都是數(shù)值型或字符型時(shí),系統(tǒng)自動(dòng)地將表達(dá)式的值轉(zhuǎn)換成被賦值變量的數(shù)據(jù)類型,然后再賦值給變量。
4、賦值運(yùn)算符和賦值表達(dá)式3.4運(yùn)算符和表達(dá)式復(fù)合賦值運(yùn)算復(fù)合賦值運(yùn)算符由賦值運(yùn)算符之前再加一個(gè)雙目運(yùn)算符構(gòu)成。格式
變量雙目運(yùn)算符=表達(dá)式
└─┬─┘
復(fù)合賦值運(yùn)算符等價(jià)于
變量=變量雙目運(yùn)算符(表達(dá)式)。
當(dāng)表達(dá)式為簡(jiǎn)單表達(dá)式時(shí),表達(dá)式外的一對(duì)圓括號(hào)才可缺省,否則可能出錯(cuò)。例如,x+=3 /*等價(jià)于x=x+3*/y*=x+6 /*等價(jià)于y=y*(x+6),而不是y=y*x+6*/C語(yǔ)言規(guī)定的10種復(fù)合賦值運(yùn)算符如下:+=,-=,*=,/=,%=; /*復(fù)合算術(shù)運(yùn)算符(5個(gè))*/&=,^=,|=,<<=,>>=; /*復(fù)合位運(yùn)算符(5個(gè))*/4、賦值運(yùn)算符和賦值表達(dá)式3.4運(yùn)算符和表達(dá)式優(yōu)先級(jí)和結(jié)合性(1)算術(shù)運(yùn)算符優(yōu)先于關(guān)系運(yùn)算符優(yōu)先于雙目邏輯運(yùn)算符優(yōu)先于復(fù)合賦值運(yùn)算符;(2)復(fù)合賦值運(yùn)算符和賦值運(yùn)算符的優(yōu)先級(jí)相同,結(jié)合性是從右至左。賦值表達(dá)式由賦值運(yùn)算符或復(fù)合賦值運(yùn)算符,將一個(gè)變量和一個(gè)表達(dá)式連接起來(lái)的表達(dá)式,稱為賦值表達(dá)式。格式變量=表達(dá)式變量復(fù)合賦值運(yùn)算符表達(dá)式4、賦值運(yùn)算符和賦值表達(dá)式3.4運(yùn)算符和表達(dá)式又稱順序求值運(yùn)算符,所連接起來(lái)的式子稱為逗號(hào)表達(dá)式。格式
表達(dá)式1,表達(dá)式2,……,表達(dá)式n求解過(guò)程自左向右,依次計(jì)算各表達(dá)式的值,“表達(dá)式n”的值即為整個(gè)逗號(hào)表達(dá)式的值。例如逗號(hào)表達(dá)式a=3*5,a*4的值=60,即先求解a=3*5,得a=15;再求a*4=60,所以逗號(hào)表達(dá)式的值是60。又如逗號(hào)表達(dá)式(a=3*5,a*4),a+5的值=20,即先求解a=3*5,得a=15;再求a*4=60;最后求解a+5=20,所以逗號(hào)表達(dá)式的值是20。注意:并不是任何地方出現(xiàn)的逗號(hào),都是逗號(hào)運(yùn)算符。很多情況下,逗號(hào)僅用作分隔符。5、逗號(hào)運(yùn)算符和逗號(hào)表達(dá)式3.4運(yùn)算符和表達(dá)式格式表達(dá)式1?表達(dá)式2:表達(dá)式3條件表達(dá)式中的表達(dá)式1、表達(dá)式2、表達(dá)式3的類型可以各不相同。運(yùn)算規(guī)則如果“表達(dá)式1”的值為非0(即邏輯真),則運(yùn)算結(jié)果等于“表達(dá)式2”的值;否則,運(yùn)算結(jié)果等于“表達(dá)式3”的值。優(yōu)先級(jí)與結(jié)合性條件運(yùn)算符的優(yōu)先級(jí),高于賦值運(yùn)算符,但低于關(guān)系運(yùn)算符和算術(shù)運(yùn)算符。其結(jié)合性為從右到左(即右結(jié)合性)。
6、條件運(yùn)算符和條件表達(dá)式3.4運(yùn)算符和表達(dá)式【例3-3】從鍵盤(pán)上輸入一個(gè)字符,如果是大寫(xiě)字母,則將其轉(zhuǎn)換成小寫(xiě)字母輸出;否則,直接輸出。#include<stdio.h>intmain(void){charch;
printf("Inputacharacter:");
scanf("%c",&ch);
ch=(ch>='A'&&ch<='Z')?(ch+32):ch;
printf("ch=%c\n",ch); return0;}
6、條件運(yùn)算符和條件表達(dá)式3.4運(yùn)算符和表達(dá)式為了為了節(jié)省內(nèi)存空間,在系統(tǒng)中常將多個(gè)標(biāo)志狀態(tài)簡(jiǎn)單地組合在一起,存儲(chǔ)到一個(gè)字節(jié)(或字)中。C語(yǔ)言提供了將標(biāo)志狀態(tài)從標(biāo)志字節(jié)中分離出來(lái)的位運(yùn)算功能。位運(yùn)算是按二進(jìn)制位進(jìn)行的運(yùn)算,運(yùn)算對(duì)象只能是整型(包括字符型)數(shù)據(jù),運(yùn)算結(jié)果仍為整型。位運(yùn)算符分為位邏輯運(yùn)算符和位移位運(yùn)算符。位邏輯運(yùn)算符位邏輯運(yùn)算符將數(shù)據(jù)中的每個(gè)二進(jìn)制位上的“0”或“1”作為邏輯值,按位進(jìn)行邏輯運(yùn)算。位邏輯運(yùn)算符分為按位非、按位與、按位或和按位異或(又稱按位加)四種。優(yōu)先級(jí)和結(jié)合性(1)~優(yōu)先于算術(shù)運(yùn)算符優(yōu)先于關(guān)系運(yùn)算符優(yōu)先于&優(yōu)先于^優(yōu)先于|優(yōu)先于雙目邏輯運(yùn)算符;(2)~與單目的邏輯運(yùn)算符、自增、自減、算術(shù)、長(zhǎng)度運(yùn)算符的優(yōu)先級(jí)相同,結(jié)合性是從右至左。
7、位運(yùn)算符和位運(yùn)算表達(dá)式3.4運(yùn)算符和表達(dá)式按位與&
對(duì)應(yīng)位均為1時(shí)才為1,否則為0:3&9=1。例如,3&9=1:0011&1001 ──── 0001=1
其作用是取(或保留)1個(gè)數(shù)的某(些)位,其余各位置0。
按位或|
對(duì)應(yīng)位均為0時(shí)才為0,否則為1:3|9=11。例如,3|9=11:0011 |1001──── 1011=11
其作用是將1個(gè)數(shù)的某(些)位置1,其余各位不變。
7、位運(yùn)算符和位運(yùn)算表達(dá)式3.4運(yùn)算符和表達(dá)式(3)按位異或^對(duì)應(yīng)位相同時(shí)為0,不同時(shí)為1:3^9=10。其作用是使1個(gè)數(shù)的某(些)位翻轉(zhuǎn)(即原來(lái)為1的位變?yōu)?,為0的變?yōu)?),其余各位不變。(4)按位取反~各位翻轉(zhuǎn),即原來(lái)為1的位變成0,原來(lái)為0的位變成1:在IBM-PC機(jī)中,~0=0xffff,~9=0xfff6。其作用是間接地構(gòu)造一個(gè)數(shù),以增強(qiáng)程序的可移植性。位移位運(yùn)算符位移位運(yùn)算符是將數(shù)據(jù)作為二進(jìn)制數(shù),進(jìn)行向左或向右移動(dòng)若干位的運(yùn)算,分為左移(<<)和右移(>>)兩種,均為雙目運(yùn)算符,其中第一個(gè)運(yùn)算對(duì)象是移位對(duì)象,第二個(gè)運(yùn)算對(duì)象是移動(dòng)的二進(jìn)制位數(shù)。移位規(guī)則優(yōu)先級(jí)和結(jié)合性(1)算術(shù)運(yùn)算符優(yōu)先于位移位運(yùn)算符優(yōu)先于關(guān)系運(yùn)算符;(2)位移位運(yùn)算符的優(yōu)先級(jí)相同,結(jié)合性是從左至右。無(wú)符號(hào)數(shù)左移舍去←←←…←←
←0補(bǔ)入無(wú)符號(hào)數(shù)右移補(bǔ)入0→→→…→→→舍去
有符號(hào)數(shù)左移舍去←←←…←←
←0補(bǔ)入
有符號(hào)數(shù)右移
→→…→→→舍去
格式長(zhǎng)度運(yùn)算符是單目運(yùn)算符,其運(yùn)算對(duì)象可以是任何數(shù)據(jù)類型符或變量。sizeof(數(shù)據(jù)類型符)或sizeof(變量)優(yōu)先級(jí)和結(jié)合性(1)與單目算術(shù)運(yùn)算符、單目邏輯運(yùn)算符、自增和自減運(yùn)算符的優(yōu)先級(jí)相同。(2)上述相同優(yōu)先級(jí)的運(yùn)算符的結(jié)合性是從右至左。8、長(zhǎng)度運(yùn)算符3.4運(yùn)算符和表達(dá)式自動(dòng)類型轉(zhuǎn)換參與運(yùn)算的各個(gè)數(shù)據(jù)都轉(zhuǎn)換成數(shù)據(jù)長(zhǎng)度較長(zhǎng)的數(shù)據(jù)類型,然后計(jì)算,結(jié)果的類型就是數(shù)據(jù)長(zhǎng)度較長(zhǎng)的數(shù)據(jù)類型。本質(zhì)上是較低類型向較高類型的轉(zhuǎn)換,即“就高不就低”或“就長(zhǎng)不就短”的原則。
說(shuō)明(1)橫向向左的箭頭,表示必須的轉(zhuǎn)換。char和short型必須轉(zhuǎn)換成int型,float型必須轉(zhuǎn)換成double型。(2)縱向向上的箭頭,表示不同類型的轉(zhuǎn)換方向。例如int型與double型數(shù)據(jù)進(jìn)行混合運(yùn)算,則先將int型數(shù)據(jù)轉(zhuǎn)換成double型,然后在兩個(gè)同類型的數(shù)據(jù)間進(jìn)行運(yùn)算,結(jié)果為double型。注意:箭頭方向只表示數(shù)據(jù)類型由低向高轉(zhuǎn)換,不要理解為int型先轉(zhuǎn)換成unsigned型,再轉(zhuǎn)換成long型,最后轉(zhuǎn)換成double型。3.5數(shù)據(jù)類型轉(zhuǎn)換賦值類型轉(zhuǎn)換先將運(yùn)算結(jié)果的數(shù)據(jù)類型自動(dòng)轉(zhuǎn)換為左邊變量的數(shù)據(jù)類型,然后再賦予該變量。本質(zhì)上是“就左不就右”的轉(zhuǎn)換規(guī)則。例如運(yùn)算結(jié)果為單精度實(shí)型,而要賦值的變量是雙精度實(shí)型,則先將運(yùn)算結(jié)果自動(dòng)轉(zhuǎn)換為雙精度實(shí)型,然后再賦予雙精度實(shí)型的變量。
例如,int
a=1;floatb=2.1;charc='a';則表達(dá)式a=b+c的計(jì)算過(guò)程是先計(jì)算b+c,按照“就高不就低”的規(guī)則,將c轉(zhuǎn)換為實(shí)型(字符c的值是97,轉(zhuǎn)換后為97.0),計(jì)算結(jié)果是實(shí)型,即99.1,由于變量a是整型,按照“就左不就右”的規(guī)則,所以將實(shí)型自動(dòng)轉(zhuǎn)換為整型賦予變量a,即99賦值給變量a。3.5數(shù)據(jù)類型轉(zhuǎn)換強(qiáng)制類型轉(zhuǎn)換除自動(dòng)轉(zhuǎn)換外,C語(yǔ)言也允許強(qiáng)制轉(zhuǎn)換。一般格式為:
(數(shù)據(jù)類型)(表達(dá)式)C語(yǔ)言首先按照自動(dòng)類型轉(zhuǎn)換原則計(jì)算表達(dá)式的值,然后將其轉(zhuǎn)換為指定的數(shù)據(jù)類型。需要注意的是,若表達(dá)式僅僅是單個(gè)常量或變量時(shí),外面的一對(duì)圓括號(hào)可以缺?。蝗羰呛羞\(yùn)算符的表達(dá)式,則必須用一對(duì)圓括號(hào)括起來(lái)。(double)a/*等價(jià)于(double)(a),將變量a的值轉(zhuǎn)換成double型*/(int)(x+y)
/*將x+y的結(jié)果轉(zhuǎn)換成int型*/(float)5/2/*等價(jià)于(float)(5)/2,將5轉(zhuǎn)換成實(shí)型,再除以2(=2.5)*/(float)(5/2)
/*將5整除2的結(jié)果,(2)轉(zhuǎn)換成實(shí)型(2.0)*/注意:強(qiáng)制轉(zhuǎn)換類型得到的是一個(gè)所需類型的中間量,原表達(dá)式類型并不發(fā)生變化。例如(double)a只是將變量a的值轉(zhuǎn)換成一個(gè)double型的中間量,其數(shù)據(jù)類型并未轉(zhuǎn)換成double型。3.5數(shù)據(jù)類型轉(zhuǎn)換ThankYou!第4章結(jié)構(gòu)化程序設(shè)計(jì)4.1結(jié)構(gòu)化程序設(shè)計(jì)方法結(jié)構(gòu)化程序三種基本結(jié)構(gòu)4.2順序結(jié)構(gòu)程序設(shè)計(jì)4.34.4選擇結(jié)構(gòu)程序設(shè)計(jì)4.5循環(huán)結(jié)構(gòu)程序設(shè)計(jì)本章內(nèi)容導(dǎo)讀本章主要介紹結(jié)構(gòu)化程序設(shè)計(jì)方法以及與三種基本結(jié)構(gòu)相關(guān)的語(yǔ)句。通過(guò)學(xué)習(xí)本章,讀者應(yīng)掌握以下內(nèi)容:了解結(jié)構(gòu)化程序的三種基本結(jié)構(gòu);掌握字符和格式輸入/輸出函數(shù)的調(diào)用格式和功能;掌握單、雙和多分支選擇語(yǔ)句的格式和功能;掌握while語(yǔ)句、do-while語(yǔ)句、for語(yǔ)句、break語(yǔ)句和continue語(yǔ)句的格式和功能。結(jié)構(gòu)化程序設(shè)計(jì)(StructuredProgramming)以模塊功能和處理過(guò)程設(shè)計(jì)為主的詳細(xì)設(shè)計(jì)的基本原則。1965年由E.W.Dijkstra
提出。基本思路把一個(gè)復(fù)雜問(wèn)題的求解過(guò)程分階段進(jìn)行,每一階段處理的問(wèn)題都控制在人們?nèi)菀桌斫夂吞幚淼姆秶鷥?nèi)。具體方法自頂向下,逐步求精模塊化設(shè)計(jì)結(jié)構(gòu)化編碼4.1結(jié)構(gòu)化程序設(shè)計(jì)方法一、順序結(jié)構(gòu)二、選擇結(jié)構(gòu)三、
循環(huán)結(jié)構(gòu)4.2結(jié)構(gòu)化程序三種基本結(jié)構(gòu)
順序結(jié)構(gòu)是按書(shū)寫(xiě)順序依次執(zhí)行語(yǔ)句操作。1、順序結(jié)構(gòu)4.2結(jié)構(gòu)化程序三種基本結(jié)構(gòu)單分支選擇結(jié)構(gòu)僅包含一個(gè)條件,其功能是根據(jù)條件是否成立,決定是否執(zhí)行某個(gè)操作。
注:表達(dá)式可以是任意表達(dá)式,若“非0”則執(zhí)行操作。
操作條件否是2、選擇結(jié)構(gòu)4.2結(jié)構(gòu)化程序三種基本結(jié)構(gòu)雙分支選擇結(jié)構(gòu)
僅包含一個(gè)條件,其功能是根據(jù)條件是否成立,決定從兩個(gè)操作中選取一個(gè)操作執(zhí)行。操作1操作2條件是否2、選擇結(jié)構(gòu)4.2結(jié)構(gòu)化程序三種基本結(jié)構(gòu)多分支選擇結(jié)構(gòu)
包含n(n>1)個(gè)條件,其功能是根據(jù)某個(gè)條件是否成立,從n+1個(gè)操作中選取一個(gè)操作執(zhí)行。表達(dá)式1否操作2是操作1表達(dá)式2否表達(dá)式n否操作n+1操作n
是是2、選擇結(jié)構(gòu)4.2結(jié)構(gòu)化程序三種基本結(jié)構(gòu)
當(dāng)型循環(huán)結(jié)構(gòu)直到型循環(huán)結(jié)構(gòu)次數(shù)型循環(huán)結(jié)構(gòu)3、循環(huán)結(jié)構(gòu)4.2結(jié)構(gòu)化程序三種基本結(jié)構(gòu)順序結(jié)構(gòu)的程序組成(1)程序開(kāi)頭的編譯預(yù)處理命令。
程序中要使用的庫(kù)函數(shù)(又稱系統(tǒng)函數(shù)),除了printf()和scanf()函數(shù)外,其它的都必須使用編譯預(yù)處理命令將相應(yīng)的頭文件包含進(jìn)來(lái)。(2)順序結(jié)構(gòu)的程序由完成具體功能的各個(gè)語(yǔ)句和運(yùn)算組成。主要包括:變量類型的說(shuō)明提供數(shù)據(jù)的語(yǔ)句運(yùn)算部分輸出部分4.3順序結(jié)構(gòu)程序設(shè)計(jì)格式一變量=表達(dá)式;功能:計(jì)算表達(dá)式的值,然后賦予變量。格式二變量復(fù)合賦值運(yùn)算符表達(dá)式;功能:將變量和表達(dá)式進(jìn)行指定的算術(shù)或位運(yùn)算后,再將運(yùn)算結(jié)果賦予變量。C語(yǔ)言中事先編好的函數(shù)(稱為庫(kù)函數(shù)或系統(tǒng)函數(shù))或用戶自定義函數(shù)(用戶函數(shù))都是通過(guò)函數(shù)調(diào)用實(shí)現(xiàn)其功能的,并獲得函數(shù)的返回值。格式函數(shù)名(參數(shù)1,參數(shù)2,…,參數(shù)n);
功能:調(diào)用指定的庫(kù)函數(shù)或用戶自定義函數(shù),對(duì)圓括號(hào)中的參數(shù)進(jìn)行該函數(shù)指定的運(yùn)算,運(yùn)算結(jié)果作為函數(shù)的返回值返回。1、賦值語(yǔ)句2、函數(shù)調(diào)用語(yǔ)句4.3順序結(jié)構(gòu)程序設(shè)計(jì)格式表達(dá)式;功能:計(jì)算表達(dá)式的值。格式
{語(yǔ)句1;語(yǔ)句2;…語(yǔ)句n;
}功能:依次執(zhí)行語(yǔ)句1,語(yǔ)句2,…,語(yǔ)句n。說(shuō)明(1)復(fù)合語(yǔ)句可以包含多條語(yǔ)句,但整體上是作為一條語(yǔ)句看待。(2)復(fù)合語(yǔ)句中若有數(shù)據(jù)定義語(yǔ)句,則應(yīng)放在復(fù)合語(yǔ)句中其它語(yǔ)句的前面。3、表達(dá)式語(yǔ)句4、復(fù)合語(yǔ)句4.3順序結(jié)構(gòu)程序設(shè)計(jì)C語(yǔ)言中的輸入和輸出操作,均是利用C語(yǔ)言編譯系統(tǒng)提供的庫(kù)函數(shù)實(shí)現(xiàn)的,C語(yǔ)言本身并沒(méi)有提供這兩類語(yǔ)句。
字符輸出函數(shù)putchar()調(diào)用格式:putchar(ch)功能:把一個(gè)字符輸出到標(biāo)準(zhǔn)輸出設(shè)備(顯示器)。
參數(shù):ch可以是一個(gè)整型變量、字符型變量、整型常量或字符型常量,也可以是一個(gè)轉(zhuǎn)義字符或整型表達(dá)式,但不能是字符串。
返回值:輸出ch對(duì)應(yīng)的單個(gè)字符。
說(shuō)明:源程序(文件)開(kāi)頭需要加入編譯預(yù)處理命令#include<stdio.h>或#include"stdio.h"。5、字符輸入/輸出函數(shù)4.3順序結(jié)構(gòu)程序設(shè)計(jì)
字符輸入函數(shù)getchar()
調(diào)用格式:getchar()功能:從標(biāo)準(zhǔn)輸入設(shè)備(鍵盤(pán))上讀入一個(gè)字符。
參數(shù):無(wú)參數(shù)。
返回值:輸入的單個(gè)字符。
說(shuō)明(1)getchar()函數(shù)只能用于單個(gè)字符的輸入,一次輸入一個(gè)字符。輸入的數(shù)字也是按字符處理。當(dāng)輸入多于一個(gè)字符時(shí),只接收第一個(gè)字符。(2)getchar()函數(shù)輸入的字符可以賦給一個(gè)字符變量或整型變量,也可以不賦給任何變量,而作為表達(dá)式的一部分。(3)源程序(文件)開(kāi)頭需要加入編譯預(yù)處理命令#include<stdio.h>或#include"stdio.h"。5、字符輸入/輸出函數(shù)4.3順序結(jié)構(gòu)程序設(shè)計(jì)格式輸出函數(shù)printf()調(diào)用格式:printf(格式控制字符串,輸出項(xiàng)表)功能:按照用戶指定的格式把指定的數(shù)據(jù)顯示到標(biāo)準(zhǔn)輸出設(shè)備(顯示器)。
說(shuō)明(1)格式說(shuō)明符與輸出項(xiàng)一一對(duì)應(yīng),若格式說(shuō)明符的個(gè)數(shù)少于輸出項(xiàng)個(gè)數(shù)時(shí),則多余的輸出項(xiàng)不輸出;若格式說(shuō)明符的個(gè)數(shù)多于輸出項(xiàng)個(gè)數(shù)時(shí),則對(duì)缺少的項(xiàng)輸出不確定值。(2)不需要編譯預(yù)處理命令。格式輸入函數(shù)scanf()調(diào)用格式:scanf(格式控制字符串,輸入項(xiàng)首地址表)功能:從鍵盤(pán)按照“格式控制字符串”中規(guī)定的格式讀取若干個(gè)數(shù)據(jù),然后按照“輸入項(xiàng)首地址表”中的順序,依次將數(shù)據(jù)存入相應(yīng)的變量。
說(shuō)明:不需要編譯預(yù)處理命令。6、格式輸入/輸出函數(shù)4.3順序結(jié)構(gòu)程序設(shè)計(jì)printf(格式控制字符串,輸出項(xiàng)表)普通字符(原樣輸出)格式說(shuō)明符
%+/-0m.nl格式字符正號(hào)左對(duì)齊域?qū)捵笱a(bǔ)0當(dāng)輸出實(shí)型數(shù)據(jù)時(shí),表示輸出n位小數(shù);當(dāng)輸出字符串時(shí),表示截取前n個(gè)字符輸出。在格式字符d、o、x和u之前輸出長(zhǎng)整型數(shù)據(jù);在格式字符e、f、g之前輸出雙精度實(shí)型數(shù)據(jù)。d:以有符號(hào)的十進(jìn)制整數(shù)形式輸出;o:以八進(jìn)制無(wú)符號(hào)形式輸出整型數(shù);X或x:以十六進(jìn)制無(wú)符號(hào)形式輸出整型數(shù);c:輸出一個(gè)字符(只占一列寬度);s:輸出字符串;f:以小數(shù)形式、按系統(tǒng)默認(rèn)的寬度,輸出單精度和雙精度實(shí)數(shù)。
scanf(格式控制字符串,輸入項(xiàng)首地址表)普通字符(原樣輸入)格式說(shuō)明符
%mhl*格式字符域?qū)捿斎攵陶蛿?shù)據(jù),可用在格式字符d、i、o、x之前。表示本輸入項(xiàng)在讀入后不賦予相應(yīng)的變量。在格式字符d、o、x和u之前輸入長(zhǎng)整型數(shù)據(jù);在格式字符e、f、g之前輸入雙精度實(shí)型數(shù)據(jù)。d:以十進(jìn)制有符號(hào)形式輸入整型數(shù)據(jù);o:以八進(jìn)制無(wú)符號(hào)形式輸入整型數(shù)據(jù);X或x:以十六進(jìn)制無(wú)符號(hào)形式輸入整型數(shù)據(jù);c:輸入一個(gè)字符;s:將一個(gè)字符串輸入到字符數(shù)組;f、e:輸入實(shí)型數(shù)據(jù)。注意①如果相鄰兩個(gè)格式字符之間,沒(méi)有指定數(shù)據(jù)分隔符(如逗號(hào)、冒號(hào)等),則相應(yīng)的兩個(gè)輸入數(shù)據(jù)之間,至少用一個(gè)空格分開(kāi),或者用Tab鍵分開(kāi),或者輸入一個(gè)數(shù)據(jù)后按回車,然后再輸入下一個(gè)數(shù)據(jù)。例如int
num1,num2;
scanf("%d%d",&num1,&num2);若num1輸入12,num2輸入36,則正確的輸入操作如下:12□36←┘或者12←┘36←┘②輸入實(shí)數(shù)時(shí)不能規(guī)定精度。例如,floatx;
scanf("%7.2f",&x);是錯(cuò)誤的。
注意③格式控制字符串”中出現(xiàn)的普通字符(包括轉(zhuǎn)義字符),務(wù)必原樣輸入。例如int
num1,num2;scanf("%d,%d",&num1,&num2);若num1輸入12,num2輸入36,則正確的輸入操作如下:12,36←┘
&變量名④在以%d、%f、%lf、%e輸入數(shù)值型數(shù)據(jù)時(shí),遇到以下情況,系統(tǒng)認(rèn)為數(shù)據(jù)輸入結(jié)束。遇到空格或回車鍵或者Tab鍵輸入結(jié)束,可用它們作為數(shù)據(jù)之間的分隔符。遇到寬度結(jié)束。例如“%3d”,只取3列,即系統(tǒng)自動(dòng)按域?qū)捊厝∷钄?shù)據(jù)。遇到輸入數(shù)據(jù)與格式說(shuō)明符類型不一致,則輸入結(jié)束。遇到非法輸入結(jié)束。例如在輸入數(shù)值型數(shù)據(jù)時(shí),遇到字母等非數(shù)值符號(hào)(數(shù)值符號(hào)僅由數(shù)字字符0~9、小數(shù)點(diǎn)和正、負(fù)號(hào)構(gòu)成)。注意⑤在“格式控制字符串”中除了格式字符外還有其它字符,則在輸入數(shù)據(jù)時(shí)應(yīng)輸入與這些字符相同的字符。例如int
x,y;scanf("%d,%d",&x,&y);則正確的輸入操作如下:1,2←┘⑥以“%c”輸入單個(gè)字符時(shí),空格、回車鍵和轉(zhuǎn)義字符均作為有效字符輸入,因此輸入的數(shù)據(jù)之間不需要分隔符。例如charch1,ch2,ch3;
scanf("%c%c%c",&ch1,&ch2,&ch3);若從鍵盤(pán)輸入A□B□C←┘則將'A'賦值給ch1,空格'□'賦值給ch2,'B'賦值給ch3。正確的輸入是連續(xù)輸入3個(gè)字符,中間不加空格,即:xyz←┘單分支選擇語(yǔ)句格式if(表達(dá)式)語(yǔ)句;功能:計(jì)算表達(dá)式的值,若為“真”(非0),則執(zhí)行語(yǔ)句;否則不執(zhí)行語(yǔ)句。
注:表達(dá)式可以是任意表達(dá)式,語(yǔ)句可以是任何語(yǔ)句(除了數(shù)據(jù)定義語(yǔ)句),也可以是另一個(gè)if語(yǔ)句(稱為嵌套的if語(yǔ)句,后面將介紹)。語(yǔ)句表達(dá)式0非04.4選擇結(jié)構(gòu)程序設(shè)計(jì)if-else語(yǔ)句(雙分支選擇語(yǔ)句)格式if(表達(dá)式)語(yǔ)句1;
else語(yǔ)句2;功能:計(jì)算表達(dá)式的值,若為“真”(非0),則執(zhí)行語(yǔ)句1;否則執(zhí)行語(yǔ)句2。語(yǔ)句1語(yǔ)句2表達(dá)式非004.4選擇結(jié)構(gòu)程序設(shè)計(jì)【例4-1】輸入一個(gè)整數(shù),判斷奇偶。#include<stdio.h>intmain(void){
intn;
printf("Inputanumber\n");
scanf("%d",&n);
if(n%2==0)
printf("Thenumberiseven\n");
else
printf("Thenumberisodd\n");return0;}
Inputanumber
100ThenumberisevenInputanumber25Thenumberisodd例
if
(n>0)
if(a>b)c=a;
elsec=b;if語(yǔ)句允許嵌套,在if語(yǔ)句中包括一個(gè)或多個(gè)if語(yǔ)句。if語(yǔ)句的嵌套(分支嵌套的一般形式)這種嵌套是在if-else語(yǔ)句的任一分支上嵌套單分支的if選擇結(jié)構(gòu)或雙分支的if選擇結(jié)構(gòu)。注:else總是與前面最近的并且沒(méi)有與其他else匹配的if相匹配。例
if(n>0){if(a>b)c=a;}
elsec=b;
4.4選擇結(jié)構(gòu)程序設(shè)計(jì)【例4-2】求一個(gè)點(diǎn)所在的象限。#include<stdio.h>intmain(void){ floatx,y;
printf("Inputthecoordinateofapoint\n");
printf("x=");
scanf("%f",&x);
printf("y=");
scanf("%f",&y);
if(x>0)
if(y>0)printf("Thepointisin1stquadrant.\n");elseprintf("Thepointisin4thquadrant.\n");else
if(y>0)printf("Thepointisin2ndquadrant.\n");elseprintf("Thepointisin3rdquadrant.\n");return0;}
Inputthecoordinateofapointx=5y=3Thepointisin1stquadrant.Inputthecoordinateofapointx=-2y=-7Thepointisin3rdquadrant.
if-else-if語(yǔ)句的嵌套(分支嵌套的特殊形式)這種嵌套是在每一層else分支下嵌套一個(gè)if-else語(yǔ)句。if(表達(dá)式1)語(yǔ)句1Elseif(表達(dá)式2)語(yǔ)句2
elseif(表達(dá)式3)語(yǔ)句3
……
elseif(表達(dá)式n)語(yǔ)句n
else語(yǔ)句n+1表達(dá)式1假(0)語(yǔ)句2真(非0)語(yǔ)句1表達(dá)式2假(0)表達(dá)式n假(0)語(yǔ)句n+1語(yǔ)句n真(非0)真(非0)4.4選擇結(jié)構(gòu)程序設(shè)計(jì)switch-case語(yǔ)句(多分支選擇語(yǔ)句)格式switch(表達(dá)式){case常量表達(dá)式1:
語(yǔ)句組1
break;
case常量表達(dá)式2:
語(yǔ)句組2
break;
……case常量表達(dá)式n:
語(yǔ)句組nbreak;
default:
語(yǔ)句組n+1}表達(dá)式語(yǔ)句組1語(yǔ)句組2語(yǔ)句組n語(yǔ)句組n+1=常量表達(dá)式1=常量表達(dá)式2=常量表達(dá)式n=default…………breakbreakbreak說(shuō)明(1)每個(gè)case后面的“常量表達(dá)式”的值,必須各不相同,否則會(huì)出現(xiàn)相互矛盾的現(xiàn)象(即對(duì)表達(dá)式的同一值,有兩種或兩種以上的操作)。(2)case后面的“常量表達(dá)式”僅起到語(yǔ)句標(biāo)號(hào)的作用,并不進(jìn)行條件判斷。系統(tǒng)一旦找到入口標(biāo)號(hào),即從此標(biāo)號(hào)開(kāi)始執(zhí)行,不再進(jìn)行標(biāo)號(hào)判斷,所以必須加上break語(yǔ)句,以便結(jié)束switch語(yǔ)句。(3)程序的執(zhí)行結(jié)果與各case和default子句的先后次序無(wú)關(guān)。(4)多個(gè)case子句,可共用同一個(gè)語(yǔ)句(組)。(5)switch語(yǔ)句實(shí)現(xiàn)的多分支選擇結(jié)構(gòu),完全可以用if語(yǔ)句或if語(yǔ)句的嵌套來(lái)實(shí)現(xiàn)。(6)break語(yǔ)句是C語(yǔ)言的一種語(yǔ)句,其功能是中斷正在執(zhí)行的語(yǔ)句,將在本章第五節(jié)介紹。在switch語(yǔ)句中它的作用是執(zhí)行完某一語(yǔ)句(組)后,退出該switch語(yǔ)句,無(wú)條件轉(zhuǎn)至switch語(yǔ)句的下一條語(yǔ)句。若省略break語(yǔ)句,則執(zhí)行完某一語(yǔ)句(組)后,將繼續(xù)執(zhí)行switch語(yǔ)句中其后的所有語(yǔ)句(組)。(7)default及其后面的語(yǔ)句(組)可以省略。省略時(shí),若表達(dá)式的值和n個(gè)常量表達(dá)式的值均不同,則不執(zhí)行任何操作就退出該switch語(yǔ)句。(8)語(yǔ)句組不需要用一對(duì)花括號(hào){}括起來(lái)。(9)switch語(yǔ)句允許嵌套?!纠?-3】switch語(yǔ)句嵌套的實(shí)例。#include<stdio.h>intmain(void){
intx=1,y=0,a=0,b=0;
switch(x){case1:switch(y){case0:a++;break;case1:b++;break;}case2:a++;b++;break;case3:a++;b++;}
printf("a=%d,b=%d\n",a,b);return0;}
a=2,b=1例如,計(jì)算1-100的累計(jì)和。根據(jù)已有的知識(shí),可以用1+2+……+100求解,但顯然很繁瑣?,F(xiàn)在換個(gè)思路來(lái)考慮:首先設(shè)置一個(gè)累計(jì)器sum,其初值為0,利用sum+=n計(jì)算(n依次取1、2、……、100),只要解決以下3個(gè)問(wèn)題即可:將n的初值置為1;每執(zhí)行1次sum+=n后,n增1;
當(dāng)n增到101時(shí),停止計(jì)算。此時(shí),sum的值就是1至100的累計(jì)和。
根據(jù)已有的知識(shí),單獨(dú)實(shí)現(xiàn)每一步都不難。但是,由于需要經(jīng)常使用這種重復(fù)計(jì)算結(jié)構(gòu)(稱為循環(huán)結(jié)構(gòu)),C語(yǔ)言提供了當(dāng)型循環(huán)結(jié)構(gòu)、直到型循環(huán)結(jié)構(gòu)和次數(shù)型循環(huán)三種循環(huán)結(jié)構(gòu)實(shí)現(xiàn)。提供了while、do-while和for三種循環(huán)語(yǔ)句實(shí)現(xiàn)上述三種循環(huán)結(jié)構(gòu)。4.5循環(huán)結(jié)構(gòu)程序設(shè)計(jì)格式
while(表達(dá)式)語(yǔ)句;功能:計(jì)算表達(dá)式的值,當(dāng)其值為“真”(非0),則執(zhí)行語(yǔ)句;重復(fù)執(zhí)行上述操作,直至表達(dá)式的值為“假”(0)時(shí)為止。說(shuō)明(1)語(yǔ)句又稱為“循環(huán)體”,可以是任何語(yǔ)句(除了數(shù)據(jù)定義語(yǔ)句外),通常是復(fù)合語(yǔ)句。(2)表達(dá)式稱為“循環(huán)控制條件”,可以是任何類型的表達(dá)式,常用關(guān)系型或邏輯型表達(dá)式。(3)先判斷,后執(zhí)行循環(huán)體,即表達(dá)式不成立時(shí),循環(huán)體最少執(zhí)行0次;(4)當(dāng)循環(huán)體內(nèi)無(wú)改變表達(dá)式的語(yǔ)句(如
i++)時(shí),while(1)是死循環(huán)。(5)若循環(huán)體中又含有“循環(huán)語(yǔ)句”,則稱為循環(huán)的嵌套,即多重循環(huán)。while表達(dá)式語(yǔ)句0非01、while語(yǔ)句4.5循環(huán)結(jié)構(gòu)程序設(shè)計(jì)格式
do語(yǔ)句;
while(表達(dá)式);功能(1)執(zhí)行語(yǔ)句;(2)計(jì)算表達(dá)式,如果其值為“真”(非0),則轉(zhuǎn)至(1)繼續(xù)循環(huán);否則,轉(zhuǎn)至(3);(3)執(zhí)行do-while語(yǔ)句的下一條語(yǔ)句。說(shuō)明(1)先執(zhí)行循環(huán)體,后判斷。無(wú)論表達(dá)式成立不成立,循環(huán)體最少執(zhí)行1次。(2)
do-while語(yǔ)句能夠?qū)崿F(xiàn)的功能for語(yǔ)句也能實(shí)現(xiàn),而且更簡(jiǎn)潔。do表達(dá)式語(yǔ)句0非02、do-while語(yǔ)句4.5循環(huán)結(jié)構(gòu)程序設(shè)計(jì)格式for(表達(dá)式1;表達(dá)式2;表達(dá)式3)語(yǔ)句;說(shuō)明①表達(dá)式1的作用變量賦初值;表達(dá)式2的作用是控制循環(huán)的條件;表達(dá)式3的作用是循環(huán)后修正變量,使循環(huán)趨向結(jié)束。②表達(dá)式1可以是任何類型,其后面有一個(gè)分號(hào),表達(dá)式1可以省略
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 沈陽(yáng)理工大學(xué)《車輛人機(jī)工程學(xué)》2021-2022學(xué)年第一學(xué)期期末試卷
- 國(guó)家著作權(quán)軟件著作權(quán)轉(zhuǎn)讓合同
- 2024-2025學(xué)年新教材高中歷史第5課古代非洲與美洲課時(shí)素養(yǎng)評(píng)價(jià)含解析新人教版必修中外歷史綱要下
- 高中歷史第六單元資本主義運(yùn)行機(jī)制的調(diào)節(jié)第19課當(dāng)代資本主義的新變化史料解讀素材北師大版必修2
- 大班音樂(lè)《粗心的小畫(huà)家》課件
- 2024房屋維修工程施工合同
- 2024裝修合同簽署小常識(shí)分享
- 2024辦公設(shè)備采購(gòu)合同范本
- 2024【服務(wù)協(xié)議模板】代駕服務(wù)協(xié)議合同范本
- 2024裝修合同制定的注意事項(xiàng)
- 籃球社團(tuán)教案
- 2024 美國(guó)中概股上市公司發(fā)展現(xiàn)狀白皮書(shū)
- 喪葬費(fèi)家庭協(xié)議書(shū)范文范本
- 公司對(duì)公司走賬協(xié)議書(shū)范文模板
- 留置導(dǎo)尿并發(fā)癥的預(yù)防及處理
- 消防安全宣傳教育-開(kāi)展“消防安全大家談”、“消防公益說(shuō)”專題講座
- 中小學(xué)119消防宣傳月活動(dòng)方案3篇
- 部編版五年級(jí)語(yǔ)文上冊(cè)快樂(lè)讀書(shū)吧測(cè)試題及答案
- 中匯富能排矸場(chǎng)設(shè)計(jì)
- 江蘇省2024-2025學(xué)年八年級(jí)上學(xué)期期中專題復(fù)習(xí)最值問(wèn)題專題訓(xùn)練
- 人教版2024新版八年級(jí)全一冊(cè)信息技術(shù)第1課 開(kāi)啟物聯(lián)網(wǎng)之門 教學(xué)設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論