




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
C語言程式設(shè)計(jì)
1
專案1C語言概論1專案導(dǎo)讀專案目標(biāo)專案任務(wù)
本項(xiàng)目主要對C語言的一些基礎(chǔ)知識及其字元集和辭彙進(jìn)行介紹,使讀者在學(xué)習(xí)C語言之前對其有個(gè)全面的認(rèn)識。專案導(dǎo)讀●安裝、配置TC2.0和VC++6.0,成功啟動(dòng)TC2.0和VC++6.0?!衲芫帉懸粋€(gè)簡單的C程式的原始檔案,並編譯該原始檔案,鏈接目標(biāo)檔得到可執(zhí)行檔。專案目標(biāo)任務(wù)1.1C語言的發(fā)展與特點(diǎn)
C語言是1972年由美國的DennisRitchie設(shè)計(jì)發(fā)明的,並首次在配備了UNIX操作系統(tǒng)的DECPDP-11電腦上實(shí)現(xiàn)。它由早期的編程語言BCPL(BasicCombinedProgrammingLanguage)發(fā)展演變而來。C語言的特點(diǎn)1、C語言是中級語言2、C語言是結(jié)構(gòu)化語言3、C語言功能齊全4、C語言適用範(fàn)圍廣
任務(wù)1.2認(rèn)識C語言
本任務(wù)通過幾個(gè)簡單的C程式,介紹C語言的基本組成和格式。案例1.1main(){printf(“Thisisacprogram.\n”);}本程式的功能是輸入下列一行資訊:Thisisacprogram.任務(wù)1.2認(rèn)識C語言程式說明:main函數(shù)是“主函數(shù)”,每一個(gè)C程式必須有一個(gè)main函數(shù)。函數(shù)體由大括弧{}括起來。本例中,主函數(shù)內(nèi)只有一個(gè)輸出語句,printf(“Thisisacprogram.\n”);是C語言的輸出函數(shù)(具體詳見專案3)。雙引號內(nèi)的字串將照原樣輸出?!癨n”是換行符,即在輸出“Thisisacprogram.”後換行。分號是C語句的基本構(gòu)成,每一個(gè)C語句後都應(yīng)再加上分號,分號是語句的結(jié)束標(biāo)誌。任務(wù)1.2認(rèn)識C語言
本任務(wù)通過幾個(gè)簡單的C程式,介紹C語言的基本組成和格式。案例1.2main()/*求兩數(shù)之和*/{inta,b,sum;/*本行開始的以下4條為C語句*/a=123;b=456;sum=a+b;printf(“sumis%d\n”,sum);}本程式的功能是求兩數(shù)之和。任務(wù)1.2認(rèn)識C語言程式說明:/*……*/是注釋語句,此信息對編譯和運(yùn)行不起作用。(2)程式第二行的含義是定義a、b和sum為整體變數(shù)。(3)“sum=a+b;”的含義是把變數(shù)a和b的和賦給變數(shù)sum。(4)該程式的輸出結(jié)果是:sumis579。任務(wù)1.2認(rèn)識C語言案例1.3
main()/*求一個(gè)數(shù)的絕對值*/{intx,y;
scanf(“%d”,&x);y=abs(x);printf(“abs=%d”,y);}intabs(intz){intw;if(z>=0)w=z;elsew=-z;return(w);}本程式的功能是求z的絕對值。任務(wù)1.2認(rèn)識C語言程式說明:(1)本程式包括兩個(gè)函數(shù):主函數(shù)main和被調(diào)用函數(shù)abs。(2)函數(shù)abs的作用是將z的絕對值返回給主調(diào)函數(shù)main(返回值是通過函數(shù)名abs帶回到main函數(shù)的調(diào)用處的)。(3)程式中的scanf函數(shù)的作用是從鍵盤上輸入x的值。&x中的“&”的含義是“取地址”,此scanf函數(shù)的作用是將數(shù)值輸入到變數(shù)x的地址所標(biāo)誌的單元中去,也就是輸入給變數(shù)x。關(guān)於scanf函數(shù)詳見專案3。(4)main函數(shù)中的第四行為調(diào)用abs函數(shù),在調(diào)用時(shí)將實(shí)際參數(shù)x傳給abs函數(shù)中的形式參數(shù)z,然後輸入y的值。(5)printf函數(shù)中雙引號內(nèi)的abs=%d,在輸出時(shí),其中的%d將由y值取代,“abs=”原樣輸出。該程式的運(yùn)行結(jié)果是:假定從鍵盤上輸入x的值為:-6↙
則y=6(6)本例用到了函數(shù)調(diào)用、實(shí)際參數(shù)和形式參數(shù)等概念,只是做了簡單的解釋,讀者若對此不大理解,可先不予深究,在學(xué)到函數(shù)專案後的相關(guān)知識後,問題自會迎刃而解。這裏介紹此案例的目的,是想讓讀者對C語言的組成和形式有一個(gè)初步瞭解。任務(wù)1.2認(rèn)識C語言
通過以上三個(gè)例子,我們可以得到以下幾點(diǎn):
1、C程式是由函數(shù)構(gòu)成的。一個(gè)C根源程式至少包含一個(gè)main函數(shù),也可以包含一個(gè)main函數(shù)和若干個(gè)其他函數(shù)。因此,函數(shù)是C語言的基本單位。被調(diào)用函數(shù)可以是系統(tǒng)提供的庫函數(shù)(例如printf函數(shù)和scanf函數(shù)),也可以是用戶根據(jù)需要自編譯的用戶函數(shù)(例如案例1.3中的abs函數(shù))。
2、函數(shù)及其結(jié)構(gòu)。一個(gè)函數(shù)由兩部分組成:即函數(shù)首部和函數(shù)體。函數(shù)首部包括函數(shù)類型、函數(shù)名、函數(shù)參數(shù)(形參)、形參類型;函數(shù)體一般包括說明部分和執(zhí)行部分。函數(shù)結(jié)構(gòu)如下:
函數(shù)類型函數(shù)名(形參表)
{↓
說明部分:函數(shù)體執(zhí)行部分;↑
﹜
函數(shù)體以左花括弧“{”開始,以右花括弧“}”結(jié)束,其間可以有說明部分和執(zhí)行部分。在某些情況下,甚至可以既無說明部分,也無執(zhí)行部分。如:dump(){}它是一個(gè)空函數(shù),表示什麼也不做,但它是合法的任務(wù)1.2認(rèn)識C語言3、一個(gè)C程式中,不論main函數(shù)在整個(gè)程式中的位置如何(main函數(shù)可以放在程式最前頭,也可以放在程式最後頭,或在一些函數(shù)之前,或在另一些函數(shù)之後),但程式執(zhí)行時(shí),總是從main函數(shù)開始執(zhí)行。
4、C程式書寫格式自由,一行中可以書寫多個(gè)語句,一個(gè)語句也可以書寫在連續(xù)的多行上。當(dāng)一行寫不下時(shí),用連字元“-”連接,並且每條語句的後面以分號“;”作為結(jié)束標(biāo)記。
5、C語言本身沒有輸入輸出語句。C語言的函數(shù)庫提供了標(biāo)準(zhǔn)輸入輸出函數(shù)。
6、可以用/*······*\對C程式中的任何一部分做注釋,以增加程式的可讀性。C語言中,為解決具體問題,需要採用多種類型的數(shù)據(jù);本項(xiàng)目將主要介紹C語言的數(shù)據(jù)類型、常用運(yùn)算符和運(yùn)算式。專案導(dǎo)讀●學(xué)會聲明整型變數(shù),為聲明的變數(shù)賦值,交換變數(shù)的值,輸出變數(shù)的值。●學(xué)會聲明浮點(diǎn)型變數(shù),為聲明的浮點(diǎn)型變數(shù)賦值,對浮點(diǎn)型變數(shù)值進(jìn)行加法運(yùn)算,並將運(yùn)算結(jié)果存放到浮點(diǎn)型變數(shù)中,輸出浮點(diǎn)型變數(shù)的值?!駥W(xué)會聲明字元型變數(shù),為聲明的字元型變數(shù)賦值,按%d或%c格式輸出變數(shù)的值。專案目標(biāo)任務(wù)2.1常量、變數(shù)和標(biāo)示符2.1.1識別字在電腦高級語言中,用來對變數(shù)、符號常量名、函數(shù)、數(shù)組、類型等命名的有效字元序列統(tǒng)稱為識別字(identifier)。簡單地說,識別字就是一個(gè)對象的名字。
C語言規(guī)定識別字只能由字母、數(shù)字和下劃線組成,且第1個(gè)字元必須為字母或下劃線。下麵列出的是合法的識別字,可以作為變數(shù)名:
Sum,average,_total,Class,day,month,Student_name,lotus_1_2_3,BASIC,li_ling.
下麵是不合法的識別字和變數(shù)名:
M.D.John,¥123,#33,3D64,a>b
注意:編譯系統(tǒng)將大寫字母和小寫字母認(rèn)為是兩個(gè)不同的字元。因此,sum和SUM是兩個(gè)不同的變數(shù)名。同樣,Class和class也是兩個(gè)不同的變數(shù)名。通常,變數(shù)名用小寫字母表示,習(xí)慣用對應(yīng)的英文字母縮寫形式,做到見名知意,與人們?nèi)粘A?xí)慣一致,以增加可讀性。任務(wù)2.1常量、變數(shù)和標(biāo)示符2.1.2常量和變數(shù)1、常量
在程式運(yùn)行過程中,其值不能被改變的量稱為常量。如案例2.1程式中的5,9,32和案例2.2程式中的1000,0.0036,0.0225,0.0198都是常量。數(shù)值常量就是數(shù)學(xué)中的常數(shù)。常用的常量有以下幾類:⑴整型常量。如1000,12345,0,-345等都是整型常量。⑵實(shí)型常量。有兩種表現(xiàn)形式:①十進(jìn)位小數(shù)形式,由數(shù)字和小數(shù)點(diǎn)組成。如122.456,0.345,-55.79,0.0,12.0等。②指數(shù)形式,如12.34e3(代表12.34×103),-345.87e-25(代表-345.87×10-25),0.145E25(代表0.145×10-25)等。由於在電腦輸入或輸出時(shí),無法表示上標(biāo)或下標(biāo),故規(guī)定以字母e或E代表以10為底的指數(shù)。但應(yīng)注意:e或E之前必須有數(shù)字,且e或E後面必須為整數(shù)。如不能寫成e4,12e2.5。任務(wù)2.1常量、變數(shù)和標(biāo)示符⑶字元常量。有兩種形式的字元常量:①普通字元,用單撇號括起來的一個(gè)字元,如‘a(chǎn)’,‘Z’,‘3’,‘?’,‘#’。
注意:單撇號只是界限符,字元常量只能是一個(gè)字元,不包括單撇號?!產(chǎn)’和‘A’是不同的字元常量。字元常量存儲在電腦存儲單元中時(shí),並不是存儲字元(如a,z,#等)本身,而是以其代碼(一般採用ASCII代碼)存儲的,例如字元‘A’的ASCII話代碼是97,因此,在存儲單元中存放的是97(以二進(jìn)位形式存放)。ASCII字元與代碼對照表見附錄Ⅰ。
②轉(zhuǎn)義字元,除了以上形式的字元常量外,C還允許用一種特殊形式的字元常量,就是以字元﹨開頭的字元序列。例如,前面已經(jīng)遇到過的,在printf函數(shù)中的‘﹨n’它代表一個(gè)“換行”符。常用的以“﹨”開頭的特殊字元見表2.1任務(wù)2.1常量、變數(shù)和標(biāo)示符表2.1任務(wù)2.1常量、變數(shù)和標(biāo)示符⑷字串常量。如“boy”,“123”等,用雙撇號把若干個(gè)字元括起來,字串常量是雙撇號中的全部字元(但不包括雙撇號本身)。注意不能錯(cuò)寫成‘CHINA’,‘boy’,‘123’。單撇號內(nèi)只能包含一個(gè)字元,雙撇號內(nèi)可以包含一個(gè)字串。⑸符號常量。用#define指令,指定用一個(gè)符號名稱代表一個(gè)常量。如:
#definePI3.1416∥注意行末沒有分號經(jīng)過以上的指定後,本文件中從此行開始所有的PI都代表3.1416。在對程式進(jìn)行編譯前,預(yù)處理器先對PI進(jìn)行處理,把所有的PI全部置換為3.1416。這種用一個(gè)符號名代表一個(gè)常量的,稱為符號常量。在預(yù)編譯後,符號常量全部變成字面常量(3.14159)。使用符號常量有以下好處。
①含義清楚。
②在需要改變程式中多處用到的同一個(gè)常量時(shí),能做到“一改全改”。
任務(wù)2.1常量、變數(shù)和標(biāo)示符2、變數(shù)變數(shù)代表一個(gè)有名字的、具有特定屬性的存儲單元。它用來存放數(shù)據(jù),也就是存放變數(shù)的值。在程式運(yùn)行期間,變數(shù)的值是可以改變的。變數(shù)必須先定義,後使用。在定義時(shí)指定該變數(shù)的名字和類型。一個(gè)變數(shù)應(yīng)該有一個(gè)名字,以便被引用。請注意區(qū)分變數(shù)名和變數(shù)值這兩個(gè)不同的概念,圖2.1中a是變數(shù)名,3是變數(shù)a的值,即存放在變數(shù)a的記憶體單元中的數(shù)據(jù)。變數(shù)名的實(shí)質(zhì)是以一個(gè)名字代表的一個(gè)存儲地址。在對程式編譯連接時(shí)由編譯系統(tǒng)給每一個(gè)變數(shù)名分配對應(yīng)的記憶體地址。從變數(shù)中取值,實(shí)際上是通過變數(shù)名找到相應(yīng)的記憶體地址,從該儲存單元中讀取數(shù)據(jù)。圖2.1任務(wù)2.1常量、變數(shù)和標(biāo)示符3、常變數(shù)如constinta=3表示a被定義為一個(gè)整型變數(shù),指定其值為3,而且在變數(shù)存在期間其值不能改變。常變數(shù)與常量的異同是:常變數(shù)具有變數(shù)的基本屬性,有類型,占存儲單元,只是不允許改變其值??梢哉f,常變數(shù)是有名字的不變量,而常量是沒有名字的不變量,有名字就便於在程式中被引用。任務(wù)2.2數(shù)據(jù)類型
在定義變數(shù)時(shí)需要指定變數(shù)的類型。C語言要求在定義所有的變數(shù)時(shí)都要指定變數(shù)的類型。常量也是區(qū)分類型的。所謂類型,就是對數(shù)據(jù)分配存儲單元的安排,包括存儲單元的長度(占多少位元組)以及數(shù)據(jù)的存儲形式。不同的類型分配不同的長度和存儲形式。
C語言允許使用的類型見圖2.2。圖2.2任務(wù)2.2數(shù)據(jù)類型2.2.1整型數(shù)據(jù)
1、整型數(shù)據(jù)的分類
⑴基本整型(int型)
編譯系統(tǒng)為int型數(shù)據(jù)分配2個(gè)位元組或4個(gè)位元組(有具體的C編譯系統(tǒng)自行決定)。如Turbo C2.0為每一個(gè)整型數(shù)據(jù)分配2個(gè)位元組(16個(gè)二進(jìn)位),而VisualC++為每一個(gè)整型數(shù)據(jù)分配4個(gè)位元組(32位)。在存儲單元中的存儲方式是:用整數(shù)的補(bǔ)數(shù)(complement)形式存放。5的補(bǔ)數(shù)-5的補(bǔ)數(shù)任務(wù)2.2數(shù)據(jù)類型⑵短整型(shortint)
類型名為shortint或short。如用VisualC++5.0,編譯系統(tǒng)分配給int數(shù)據(jù)4個(gè)位元組,短整型2個(gè)位元組。存儲方式與int型相同。一個(gè)短整型變數(shù)的值的範(fàn)圍是-32768~32767。⑶長整型(longint)
類型名為longint或long。一個(gè)longint型變數(shù)的值的範(fàn)圍是-231~(231-1),即-2147483648~2147483647(VisualC++5.0),編譯系統(tǒng)分配給long數(shù)據(jù)4個(gè)位元組。⑷雙長整型(longlongint)或longlong,一般分配8個(gè)位元組。說明:C標(biāo)準(zhǔn)沒有具體規(guī)定各種類型數(shù)據(jù)所佔(zhàn)用存儲單元的長度,這是由各編譯系統(tǒng)自行決定的。C標(biāo)準(zhǔn)只要求long型數(shù)據(jù)長度不短於int型,short型不長於int型。即
Sizeof(short)≦sizeof(int)≦sizeof(longlong)Sizeof是測量類型或變數(shù)長度的運(yùn)算符。任務(wù)2.2數(shù)據(jù)類型2、整型變數(shù)的符號屬性
以上介紹的幾種類型,變數(shù)值在存儲單元中都是以補(bǔ)數(shù)形式存儲的,存儲單元中的第1個(gè)二進(jìn)位制代表符號。整型變數(shù)的值的範(fàn)圍包括負(fù)數(shù)到正數(shù)(見表2.2)。表2.2整型數(shù)據(jù)常見的存儲空間和值的範(fàn)圍任務(wù)2.2數(shù)據(jù)類型
在實(shí)際應(yīng)用中,有的數(shù)據(jù)的範(fàn)圍常常只有正值(如學(xué)號、年齡、庫存量、存款額等)。為了充分利用變數(shù)的值的範(fàn)圍,可以將變數(shù)定義為“無符號”類型。可以在類型符號前面加上修飾符unsigned,表示指定該變數(shù)是“無符號整數(shù)”類型。如果加上修飾符signed,則是“有符號”類型。因此,在以上4種整型數(shù)據(jù)的基礎(chǔ)上可以擴(kuò)展為以下8種整型數(shù)據(jù)。即有符號基本整型[signed]int;
無符號基本整型unsignedint;
有符號短整型[signed]short[int];
無符號短整型unsignedshort[int];
有符號長整型[signed]long[int];
無符號長整型unsignedlong[int];
有符號雙長整型[signed]longlong[int];
無符號雙長整型unsignedlonglong[int];
以上方括號表示其中的內(nèi)容是可選的,既可以有,也可以沒有。如果既未指定為signed也未指定為unsigned的,默認(rèn)為“有符號類型”。如signedinta和inta等價(jià)。任務(wù)2.2數(shù)據(jù)類型2.2.2字元型數(shù)據(jù)
1.字元與字元代碼字元與字元代碼並不是任意寫一個(gè)字元,程式都能識別的。例如圓周率π在程式中是不能識別的,只能使用系統(tǒng)的字元集中的字元,目前大多數(shù)系統(tǒng)採用ASCII字元集。各種字元集(包括ASCII字元集)的基本集都包括了127個(gè)字元。其中包括:●字母:大寫英文字母A~Z,小寫英文字母a~z?!駭?shù)字:0~9。●專門符號:29個(gè):!”#&‘()*+,-·∕:;﹤=﹥?[﹨]^-{|}~●空白字元:空格、水準(zhǔn)跳位字元(tab)、換行、換頁(formfeed)。●不能顯示的字元:空(null)字元(以‘﹨0’表示)、警告(以‘﹨a’表示)、退格(以‘﹨b’表示)、回車(以‘﹨r’表示)等。任務(wù)2.2數(shù)據(jù)類型
2、字元變數(shù)字元變數(shù)使用類型符char定義字元變數(shù)。Char是英文character(字元)的縮寫,見名即可知意。如:charc=;‘?’
定義c為字元型變數(shù)並使初值為字元‘?’?!?’的ASCII代碼是63,系統(tǒng)把整數(shù)63賦給變數(shù)c。c是字元變數(shù),實(shí)質(zhì)上是一個(gè)位元組的整形變數(shù),由於它常用來存放字元。所以稱為字元變數(shù)??梢园?~127之間的整數(shù)賦給一個(gè)字元變數(shù)。在輸出字元變數(shù)的值時(shí),可以選擇以十進(jìn)位整數(shù)形式輸出,或以字元形式輸出。如:
printf(“%d%c﹨n”,c,c);輸出結(jié)果是:
63?用“%d”格式輸出十進(jìn)位整數(shù)63,用%c格式用字符形式輸出字元‘?’。任務(wù)2.2數(shù)據(jù)類型2.2.3浮點(diǎn)型數(shù)據(jù)浮點(diǎn)型數(shù)據(jù)是用來表示具有小數(shù)點(diǎn)的實(shí)數(shù)的。浮點(diǎn)數(shù)類型包括float(單精確度浮點(diǎn)型)、double(雙精度浮點(diǎn)型)、longdouble(長雙精度浮點(diǎn)型)。(1)float型(單精確度浮點(diǎn)型)。編譯系統(tǒng)為每一個(gè)float型變數(shù)分配4個(gè)位元組,數(shù)值以規(guī)範(fàn)化的二進(jìn)位數(shù)值形式存放在存儲單元中。在存儲時(shí),系統(tǒng)將實(shí)型數(shù)據(jù)分成小數(shù)部分和指數(shù)部分兩個(gè)部分,分別存放。小數(shù)部分的小數(shù)點(diǎn)前面的數(shù)為0.如3.14159在內(nèi)存中的存放形式可以用圖2.9表示。圖2.9任務(wù)2.2數(shù)據(jù)類型⑵double型(雙精度浮點(diǎn)型)。為了擴(kuò)大能表示的數(shù)值範(fàn)圍,用8個(gè)位元組存儲一個(gè)double型數(shù)據(jù),可以得到15位有效數(shù)字,數(shù)值範(fàn)圍為-1.7×10-308~1.7×10308。在C語言中進(jìn)行浮點(diǎn)數(shù)的算術(shù)運(yùn)算時(shí),將float型數(shù)據(jù)都自動(dòng)轉(zhuǎn)換為double型,然後進(jìn)行運(yùn)算。⑶longdouble型(長雙精度)型,不同的編譯系統(tǒng)對longdouble型的處理方法不同,TurboC對longdouble型分配16個(gè)位元組。而VisualC++6.0則對longdouble型和double型一樣處理,分配8個(gè)位元組。請讀者在使用不同的編譯系統(tǒng)時(shí)注意其差別。表2.4列出實(shí)型數(shù)據(jù)的有關(guān)情況表2.4任務(wù)2.3運(yùn)算符和運(yùn)算式2.3.1基本的算術(shù)運(yùn)算符表2.5最常用的算術(shù)運(yùn)算符
任務(wù)2.3運(yùn)算符和運(yùn)算式2.3.2自增、自減運(yùn)算符
作用是使變數(shù)的值加1或減1,例如:
++i,--i(在使用i之前,先使i的值加(減)1)i++,i--(在使用i之後,使i的值加(減)1)
粗略地看,++i和i++的作用相當(dāng)於i=i+1。但++i和i++的不同之處在於++i是先執(zhí)行i=i+1後,再使用i的值;而i++是先使用i的值後,再執(zhí)行i=i+1。如果i的原值等於3,請分析下麵的賦值語句:
j=++i;(i的值先變成4,再賦給j,j的值為4)
j=i++;(先將i的值3賦給j,j的值為3,然後i變?yōu)?)
又例如:
i=3;printf(“%d”,i++);輸出4。若改為
Printf(“%d﹨n”,i++);
則輸出3。任務(wù)2.3運(yùn)算符和運(yùn)算式2.3.3算術(shù)運(yùn)算式和運(yùn)算符的優(yōu)先順序與結(jié)合性
用算術(shù)運(yùn)算符和括弧將運(yùn)算對象(也稱運(yùn)算元)連接起來的、符合C語法規(guī)則的式子,稱為C算術(shù)運(yùn)算式。運(yùn)算對象包括常量、變數(shù)、函數(shù)等。例如,下麵是一個(gè)合法的C算術(shù)運(yùn)算式:
a*b∕c-1.5+‘a(chǎn)’C語言除了規(guī)定了運(yùn)算符的優(yōu)先順序外,還規(guī)定了運(yùn)算符的結(jié)合性。在運(yùn)算式求值時(shí),先按運(yùn)算符的優(yōu)先順序別順序執(zhí)行,例如先乘除後加減。如運(yùn)算式a-b*c,b的左側(cè)為減號,右側(cè)為乘號,而乘號優(yōu)先順序高於減號,因此,相當(dāng)於a-(b*c)。如果在一個(gè)運(yùn)算對象兩側(cè)的運(yùn)算符的優(yōu)先順序別相同,如a-b+c,則按規(guī)定的“結(jié)合方向”處理。C語言規(guī)定了各種運(yùn)算符的結(jié)合方向(結(jié)合性),算術(shù)運(yùn)算符的結(jié)合方向都是“自左至右”,及先左後右,因此b先與減號結(jié)合,執(zhí)行a-b的運(yùn)算,然後再執(zhí)行加c的運(yùn)算?!白宰笾劣业慕Y(jié)合方向”又稱“左結(jié)合性”,即運(yùn)算對象先於左面的運(yùn)算符結(jié)合。以後可以看到有些運(yùn)算符的結(jié)合方向?yàn)椤白杂抑磷蟆?,即右結(jié)合性(例如,賦值運(yùn)算符,若有a=b=c,按從右到左順序,先把變數(shù)c的值賦給變數(shù)b,然後把變數(shù)b的值賦給變數(shù)a)。
任務(wù)2.3運(yùn)算符和運(yùn)算式2.3.4不同類型數(shù)據(jù)間的混合運(yùn)算在程式中經(jīng)常會遇到不同類型的數(shù)據(jù)進(jìn)行運(yùn)算,如5*3.5。如果一個(gè)運(yùn)算符的兩側(cè)的數(shù)據(jù)類型不同,則先自動(dòng)進(jìn)行類型轉(zhuǎn)換,使二者具有同一種類型,然後進(jìn)行運(yùn)算。因此整型、實(shí)型、字元型數(shù)據(jù)間可以進(jìn)行混合運(yùn)算。規(guī)律為:
(1)+、-、*、∕運(yùn)算的兩個(gè)數(shù)中有一個(gè)數(shù)為float或double型,結(jié)果是double型,因?yàn)橄到y(tǒng)將所有float型數(shù)據(jù)都先轉(zhuǎn)換為double型,然後進(jìn)行運(yùn)算。
(2)如果int型與float或double型數(shù)據(jù)進(jìn)行運(yùn)算,先把int型和float型數(shù)據(jù)轉(zhuǎn)換為double型,然後再進(jìn)行運(yùn)算,結(jié)果是double型。
(3)字元(char)型數(shù)據(jù)與整型數(shù)據(jù)進(jìn)行運(yùn)算,就是把字元的ASCII代碼與整型數(shù)據(jù)進(jìn)行運(yùn)算。如:12+‘A’,由於字元A的ASCII代碼是65,相當(dāng)於12+65,等於77。字元數(shù)據(jù)可以直接與整型數(shù)據(jù)進(jìn)行運(yùn)算。如果字元型數(shù)據(jù)與實(shí)型數(shù)據(jù)進(jìn)行運(yùn)算,則將字元的ASCII代碼轉(zhuǎn)換為double型數(shù)據(jù),然後進(jìn)行運(yùn)算。任務(wù)2.3運(yùn)算符和運(yùn)算式
示例2.1編程:給定一個(gè)大寫字母,要求用小寫字母輸出。編寫程式:
#include﹤stdio.h>intmain(){charc1,c2;c1=‘A’∥將字元‘A’的ASCII代碼放到c1變數(shù)中
c2=c1+32;∥得到字元‘a(chǎn)’的ASCII代碼,放在c2變數(shù)中
printf(“%c﹨n”,c2);∥輸出c2的值,是一個(gè)字元
printf(“%d﹨n”,c2);∥輸出c2的值,是字元‘a(chǎn)’的ASCII代碼
reurn0}
運(yùn)行結(jié)果:
a97任務(wù)2.3運(yùn)算符和運(yùn)算式2.3.6C運(yùn)算符
除了算術(shù)運(yùn)算符外,C還提供其他運(yùn)算符,共有以下幾類:⑴關(guān)係運(yùn)算符(﹥﹤==﹥=﹤=!=)⑵邏輯運(yùn)算符(!&&||)⑶位運(yùn)算符(﹤﹤﹥﹥~|^&)⑷賦值運(yùn)算符(=及其擴(kuò)展賦值運(yùn)算符)⑸條件運(yùn)算符(?:)⑹逗號運(yùn)算符(,)⑺指針運(yùn)算符(*和&)⑻求位元組數(shù)運(yùn)算符(sizeof)⑼強(qiáng)制類型轉(zhuǎn)換運(yùn)算符((類型))⑽成員運(yùn)算符(-﹥)⑾下標(biāo)運(yùn)算符([])⑿其他(如函數(shù)調(diào)用運(yùn)算符())任務(wù)2.3運(yùn)算符和運(yùn)算式2.3.5強(qiáng)制類型轉(zhuǎn)換運(yùn)算符可以利用強(qiáng)制類型轉(zhuǎn)換運(yùn)算符將一個(gè)運(yùn)算式轉(zhuǎn)換成所需類型。例如:(double)a(將a轉(zhuǎn)換成double類型)
(int)(x+y)(將x+y的值轉(zhuǎn)換成int型)
(float)(5%3)(將5%3的值轉(zhuǎn)換成float型)
其一般形式為
(類型名)(運(yùn)算式)
注意,運(yùn)算式應(yīng)該用括弧括起來。如果寫成
(int)x+y
則只將x轉(zhuǎn)換成整型,然後與y相加。需要說明的是,在強(qiáng)制類型轉(zhuǎn)換時(shí),得到一個(gè)所需類型的中間數(shù)據(jù),而原來變數(shù)的類型未發(fā)生變化。例如:
a=(int)x
如果已定義x為float型變數(shù),a為整型變數(shù),進(jìn)行強(qiáng)制類型運(yùn)算(int)x後得到一個(gè)int類型的臨時(shí)值,它的值等於x的整數(shù)部分,把它賦給a,注意x的值和類型都未變化,仍為float型。該臨時(shí)值在賦值後就不存在了。任務(wù)2.4賦值語句
在C程式中,最常用的語句是:賦值語句和輸入輸出語句。其中最基本的是賦值語句。程式中的計(jì)算功能大部分是由賦值語句實(shí)現(xiàn)的,幾乎每一個(gè)有實(shí)用價(jià)值的程式都包括賦值語句。有的程式中的大部分語句都是賦值語句。先分析一個(gè)例子。給出三角形的三邊長,求三角形面積。解題思路:假設(shè)給定的三個(gè)邊符合構(gòu)成三角形的條件:任意兩邊之和大於第三邊。解此題的關(guān)鍵是要找到求三角形面積的公式。從數(shù)學(xué)知識已知求三角形面積的公式為:其中s=(a+b+c)∕2。任務(wù)2.4賦值語句
編寫程式:根據(jù)上面的公式編寫程式如下:#include﹤stdio.h﹥#include﹤math.h﹥intmain(){doublea,b,c,s,area;∥定義各變數(shù),均為double型a=2.67;∥對邊長a賦值b=4.43;∥對邊長b賦值c=5.21;∥對邊長c賦值s=(a+b+c)/2;∥計(jì)算sarea=sqrt(s*(s-a)*(s-b)*(s-c));∥計(jì)算areaprintf(“a=%f﹨tb=%f﹨t%f﹨n”,a,b,c);∥輸出三邊a,b,c的值printf(“area=%f﹨n”,area);∥輸出面積area的值return0;}運(yùn)行結(jié)果:a=2.670000b=4.4300005.210000area=8.903431任務(wù)2.4賦值語句
2.4.1賦值運(yùn)算符賦值符號=就是賦值運(yùn)算符,它的作用是將一個(gè)數(shù)據(jù)賦給一個(gè)變數(shù)。如a=3的作用是執(zhí)行一次賦值操作(或稱賦值運(yùn)算)。把常量3賦給變數(shù)a。也可以將一個(gè)運(yùn)算式的值賦給一個(gè)變數(shù)。2.4.2複合的賦值運(yùn)算符在賦值符=之前加上其他運(yùn)算符,可以構(gòu)成複合的運(yùn)算符。如果在“=”前加一個(gè)“+”運(yùn)算符就成了複合運(yùn)算符“+=”。例如可以有以下的複合賦值運(yùn)算:
a+=3等價(jià)於a=a+3x*=y+8等價(jià)於x=x*(y+8)
x%=3等價(jià)於x=x%3
以“a+=3”為例來說明,它相當(dāng)於使a進(jìn)行一次自加3的操作。即:先使a加3,再賦給a。同樣,“x*=y+8”的作用是使x乘以(y+8),再賦給x。任務(wù)2.4賦值語句
2.4.3賦值運(yùn)算式由賦值運(yùn)算符將一個(gè)變數(shù)和一個(gè)運(yùn)算式連接起來的式子稱為“賦值運(yùn)算式”。它的一般形式為變數(shù)賦值運(yùn)算符運(yùn)算式賦值運(yùn)算式的作用是將一個(gè)運(yùn)算式的值賦給一個(gè)變數(shù),因此賦值運(yùn)算式具有計(jì)算和賦值的雙重功能。如a=3*5是一個(gè)賦值運(yùn)算式。對賦值運(yùn)算式求解的過程是:先求賦值運(yùn)算符右側(cè)的“運(yùn)算式”的值,然後賦給賦值運(yùn)算符左側(cè)的變數(shù)。既然是一個(gè)運(yùn)算式,就應(yīng)該有一個(gè)值。賦值運(yùn)算式a=3*5的值為15,對運(yùn)算式求解後,變數(shù)a的值和運(yùn)算式的值都是15。2.4.4賦值過程中的類型轉(zhuǎn)換如果賦值運(yùn)算符兩側(cè)的類型一致,則直接進(jìn)行賦值。如:
i=234;∥設(shè)已定義i為整型變數(shù)此時(shí)直接將整數(shù)234存入變數(shù)i的存儲單元中。如果賦值運(yùn)算符兩側(cè)的類型不一致,但都是算術(shù)類型時(shí),在賦值時(shí)要進(jìn)行類型轉(zhuǎn)換。類型轉(zhuǎn)換是由系統(tǒng)自動(dòng)進(jìn)行的。
在專案2仲介紹了C程式中用到的一些基本要素,如常量、變數(shù)、運(yùn)算符、運(yùn)算式等。本項(xiàng)目將介紹編寫簡單的C程式所必需的一些內(nèi)容。專案導(dǎo)讀●使用scanf函數(shù)從鍵盤為變數(shù)輸入值?!袷褂胮rintf函數(shù)輸出數(shù)據(jù)?!衲芫帉懞唵蔚腃程式的原始檔案,並運(yùn)行程式。思考專案目標(biāo)任務(wù)3.1順序程式設(shè)計(jì)舉例
示例3.1用溫度計(jì)測量出用華氏法表示的溫度(如69°F),今要求把它轉(zhuǎn)換為以攝氏法表示的溫度(如20℃)。解題思路:這個(gè)問題的演算法很簡單,關(guān)鍵在於找到二者之間的轉(zhuǎn)換公式。根據(jù)物理學(xué)知識,知道以下轉(zhuǎn)換公式:
c=5/9(f-32)其中f代表華氏溫度,c代表攝氏溫度。據(jù)此可以用N-S圖表示演算法,見圖3.1。圖3.1
演算法由3個(gè)步驟組成,這是一個(gè)簡單的順序結(jié)構(gòu)。編寫程式:有了N-S圖,很容易用C語言表示,寫出求此問題的C程式。任務(wù)3.1順序程式設(shè)計(jì)舉例
#include〈stdio.h〉intmain()
{floatf,c;∥定義f和c為單精確度浮點(diǎn)型變數(shù)
f=63.0;∥定義f的值
c=(5/9)*(f-32);∥利用公式計(jì)算c的值
printf(“f=%﹨nc=%﹨n”,f,c);∥輸出c的值
return0;
}
運(yùn)行結(jié)果:
f=63.000000c=16.777778任務(wù)3.1順序程式設(shè)計(jì)舉例
示例3.2
計(jì)算存款利息。有1000元,想存一年。有三種方法可選:⑴活期,年利率為r1;⑵一年期定期,年利率為r2;⑶存兩次半年定期,年利率為r3。請分別計(jì)算出一年後按三種方法所得到的本息和。解題思路:關(guān)鍵是確定計(jì)算本息和的公式。從數(shù)學(xué)知識可知,若存款額為p0,則:活期存款一年後本息和為p1=p0(1+r1)。一年期定期存款,一年後本息和為p2=p0(1+r2)。兩次半年定期存款,一年後本息和為p3=p0(1+r3/2)(1+r3/2)。畫出N-S流程圖,見圖3.2。圖3.2任務(wù)3.1順序程式設(shè)計(jì)舉例
#include〈stdio.h〉intmain(){floatp0=1000,r1=0.0036,r2=0.0225,r3=0.0198,p1,p2,p3;∥定義變數(shù)p1=p0*(1+r1);∥計(jì)算活期本息和p2=p0*(1+r2);∥計(jì)算一年定期本息和p3=p0*(1+r3/2)*(1+r3/2);∥計(jì)算存兩次半年定期的本息和
printf(“p1=%f﹨np2=%fnp3=%f﹨n”,p1,p2,p3);∥輸出結(jié)果
return0;}運(yùn)行結(jié)果:P1=1002.599976P2=1022.500000P3=1018.898010任務(wù)3.2C語句概述
C程式的執(zhí)行部分是由語句組成的。程式的功能也是由執(zhí)行語句實(shí)現(xiàn)的,C程式主要包含運(yùn)算式語句、函數(shù)調(diào)用語句、控制語句、複合語句和空語句,其中控制語句包含多種情況,本任務(wù)將分別進(jìn)行介紹。
C程式結(jié)構(gòu)可以用圖3.3表示。即一個(gè)C程式可以由若干個(gè)根源程式檔(編譯時(shí)以檔模組為單位)組成,一個(gè)原始檔案可以由若干個(gè)函數(shù)和預(yù)處理指令以及全局變數(shù)聲明部分組成(關(guān)於“全局變數(shù)”見專案7)。一個(gè)函數(shù)由數(shù)據(jù)聲明部分和執(zhí)行語句組成。圖3.3任務(wù)3.2C語句概述
C語句分為以下5類:
(1)控制語句。控制語句用於完成一定的控制功能。C語句只有9種控制語句,它們的形式是:①if()…else…(條件語句)②for()…(迴圈語句)③while()…(迴圈語句)④do…while()(迴圈語句)⑤continue(結(jié)束本次迴圈語句)⑥break(中斷執(zhí)行switch或迴圈語句)⑦switch(多分支選擇語句)⑧return(從函數(shù)返回語句)⑨goto(轉(zhuǎn)向語句,在結(jié)構(gòu)化程式中基本不用goto語句)
上面9種語句表示形式中的()表示括弧中是一個(gè)“判別條件”,“…”表示內(nèi)嵌的語句。例如上面的“if()…else…”的具體語句可以寫成:
if(x﹥y)z=x;elsez=y;任務(wù)3.2C語句概述
(2)函數(shù)調(diào)用語句。函數(shù)調(diào)用語句由一個(gè)函數(shù)調(diào)用加一個(gè)分號構(gòu)成,例如:printf(“Thisisacstatement.”);
其中printf(“Thisisacstatement.”)是一個(gè)函數(shù)調(diào)用,加一個(gè)分號成為一個(gè)語句。⑶運(yùn)算式語句。運(yùn)算式語句由一個(gè)運(yùn)算式加一個(gè)分號構(gòu)成,最典型的是,有賦值運(yùn)算式構(gòu)成一個(gè)賦值語句。例如:
a=3
是一個(gè)賦值運(yùn)算式,而
a=3;是一個(gè)賦值語句。⑷空語句。下麵是一個(gè)空語句:;此語句只有一個(gè)分號,它什麼也不做。那麼它有什麼用呢?可以用來作為流程的轉(zhuǎn)向點(diǎn)(流程從程式其他地方轉(zhuǎn)到此語句處),也可以用來作為迴圈語句中的循環(huán)體(循環(huán)體是空語句,表示循環(huán)體什麼也不做)。任務(wù)3.2C語句概述
⑸複合語句??梢杂脅}把一些語句和聲明括起來成為複合語句(又稱語句塊)。例如下麵是一個(gè)複合語句:{floatpi=2.14159,r=2.5,area;∥定義變數(shù)area=pi*r*r;printf(“area=%f”,area);}
可以在複合語句中包含聲明部分(如上面的第2行),C99允許將聲明部分放在複合語句中的任何位置,但習(xí)慣上把它放在語句塊開頭位置。複合語句常用在if語句或迴圈中,此時(shí)程式需要連續(xù)執(zhí)行一組數(shù)據(jù)。
注意:複合語句中最後一個(gè)語句中最後的分號不能忽略不寫。
C語言允許一行寫幾個(gè)語句,也允許一個(gè)語句拆開寫在幾行上,書寫格式無固定要求任務(wù)3.3數(shù)據(jù)的輸入/輸出3.3.1輸入輸出舉例
案例3.3求ax2+bx+c=0方程的根。a,b,c由鍵盤輸入,設(shè)b2-4ac≧0。解題思路:首先要知道求方程式的根的方法。由數(shù)學(xué)知識已知:如果b2-4ac≧0,則一元二次方程有兩個(gè)實(shí)根:
,可以將上面的分式分為兩項(xiàng):
,則x1=p+q,x2=p-q有了這些式子,只要知道a,b,c的值,就能順利的求出方程的兩個(gè)根。任務(wù)3.3數(shù)據(jù)的輸入/輸出
#include<stdio.h>#include<math.h>∥程式重要調(diào)用求平方根函數(shù)sqrtintmain(
)
{doublea,b,c,disc,x1,x2,p,q;∥disc用來存放判別式(b*b-4ac)的值scanf(“%1f%1f%1f”,&a,&b,&c);∥輸入雙精度變數(shù)型的值要用格式聲明“%1f”disc=b*b-4*a*c;p=-b∕(2.0*a);q=sqrt(disc)∕(2.0*a);x1=p+q;x2=p-q;∥求出方程的兩個(gè)根printf(“x1=%6.2f﹨nx2=%6.2f﹨n”,x1,x2);∥輸出方程的兩個(gè)根return0;}運(yùn)行結(jié)果:132X1=-1.00X2=-2.00任務(wù)3.3數(shù)據(jù)的輸入/輸出3.3.2有關(guān)數(shù)據(jù)輸入輸出的概念從前面的程式可以看到:幾乎每一個(gè)C程式都包含輸入輸出。因?yàn)橐M(jìn)行運(yùn)算,就必須給出數(shù)據(jù),而運(yùn)算的結(jié)果當(dāng)然需要輸出,以便人們應(yīng)用。沒有輸出的程式是沒有意義的。輸入輸出是程式中最基本的操作之一。在討論程式的輸入輸出時(shí)首先要注意以下幾點(diǎn)。⑴所謂輸入輸出是以電腦主機(jī)為主體而言的。⑵C語言本身不提供輸入輸出語句,輸入和輸出操作是由C標(biāo)準(zhǔn)函數(shù)庫中的函數(shù)來實(shí)現(xiàn)的。⑶在使用系統(tǒng)庫函數(shù)時(shí),要在程式檔的開頭用預(yù)處理指令#include把有關(guān)頭檔放在本程式中如:#include<stdio.h>
注意:應(yīng)養(yǎng)成這樣的習(xí)慣:只要在本程式檔中使用標(biāo)準(zhǔn)輸入輸出庫函數(shù)時(shí),一律加上#include<stdio.h>指令。任務(wù)3.3數(shù)據(jù)的輸入/輸出3.3.3用printf函數(shù)輸出數(shù)據(jù)在C程式中用來實(shí)現(xiàn)輸出和輸入的,主要是printf函數(shù)和scanf函數(shù)。這兩個(gè)函數(shù)是格式輸入輸出函數(shù)。用到兩個(gè)函數(shù)時(shí),程式設(shè)計(jì)人員必須制定輸入輸出數(shù)據(jù)的格式,即根據(jù)數(shù)據(jù)的不同類型指定不同的格式。
1、printf函數(shù)的一般格式
printf函數(shù)的一般格式為
printf(格式控制,輸出表列)
例如:printf(“%d,%c﹨n”,i,c)2、格式字元
(1)d格式字元。用來輸出一個(gè)有符號的十進(jìn)位整數(shù)??梢栽诟袷铰暶髦兄付ㄝ敵鰯?shù)據(jù)的域?qū)挘ㄋ嫉牧袛?shù)),如用“%5d”,指定輸出數(shù)據(jù)占5列,輸出的數(shù)據(jù)顯示在此5列區(qū)域的右側(cè)。如:
printf(“%5d﹨n%5d﹨n”,12,-345);輸出結(jié)果為
12(12前面有3個(gè)空格)-345(-345前面有1個(gè)空格)
任務(wù)3.3數(shù)據(jù)的輸入/輸出
(2)c格式符。用來輸出一個(gè)字元。例如;charch=‘a(chǎn)’;printf(“%c”,ch);
運(yùn)行時(shí)輸出
a
一個(gè)整數(shù),如果在0~127範(fàn)圍中,也可以用“%c”使之按字元形式輸出,在輸出前,系統(tǒng)會將該整數(shù)作為ASCII碼轉(zhuǎn)換成相應(yīng)的字元;如:
shorta=121;printf(“%c”,a);輸出字元y。(3)s格式符。用來輸出一個(gè)字串。如:
printf(“%s”,“CHINA”);
執(zhí)行此函數(shù)時(shí)在顯示幕上輸出字串“CHINA”(不包括雙引號)。任務(wù)3.3數(shù)據(jù)的輸入/輸出
(4)f格式符。用來輸出實(shí)數(shù)(包括單、雙精度、長雙精度)。以小數(shù)形式輸出,有幾種用法:① 基本型,用%f。不指定輸出數(shù)據(jù)的長度,由系統(tǒng)根據(jù)數(shù)據(jù)的實(shí)際情況決定數(shù)據(jù)所占的列數(shù)。系統(tǒng)處理的方法一般是:實(shí)數(shù)中的整數(shù)部分全部輸出,小數(shù)部分輸出6位。示例3.4
用%f輸出實(shí)數(shù),只能得到6位小數(shù)。#include<stdio.h>intmain(){doublea=1.0;printf(“%f﹨n”,a∕3);return0;}運(yùn)行結(jié)果:0.333333
雖然a是雙精度型,a∕3的結(jié)果也是雙精度型,但是用%f格式聲明只能輸出6位小數(shù)。任務(wù)3.3數(shù)據(jù)的輸入/輸出
②指定數(shù)據(jù)寬度和小數(shù)位數(shù),用%m.nf。如果想在示例3.4輸出雙精度變數(shù)a的15位小數(shù),可以採用案例3.3所用的方法,用“%20.15f﹨n”,a/3)運(yùn)行結(jié)果:
0.333333333333333
注意:在用%f輸出時(shí)要注意數(shù)據(jù)本身能提供的有效數(shù)字,如float型數(shù)據(jù)的存儲單元只能保證6位有效數(shù)字。double型數(shù)據(jù)能保證15位有效數(shù)字。不要以為電腦輸出的所有數(shù)字都是絕對精確有效的。③輸出的數(shù)據(jù)向左對齊,用%-m.nf。在m.n的前面加一個(gè)負(fù)號,其作用與%m.nf形式作用基本相同,但當(dāng)數(shù)據(jù)長度不超過m時(shí),數(shù)據(jù)向左靠,右端補(bǔ)空格。如:
printf(“%-24.15f,%24.15f﹨n”,a,a);
運(yùn)行結(jié)果:3332.3333333333335003332.333333333333500
第1次輸出a時(shí)輸出結(jié)果向左端靠,右端空5列。第2次輸出a使輸出結(jié)果向右端靠,左端空5列。任務(wù)3.3數(shù)據(jù)的輸入/輸出
(5)e格式符。用格式聲明%e指定以指數(shù)形式輸出實(shí)數(shù)。例如:
printf(“%e”,122.456);
輸出如下:
1.234560e+002
所輸出的實(shí)數(shù)共占13列寬度(注:不同系統(tǒng)的規(guī)定略有不同)。也可以用“%m.ne”形式的格式聲明,如:
printf(“%12.2e”,122.456);
輸出為
1.23e+002(數(shù)的前面有4個(gè)空格)格式符e也可以寫成大寫E形式,因此輸出的數(shù)據(jù)中的指數(shù)不是以小寫字母e表示而以大寫字母E表示,如1.23460E+002。任務(wù)3.3數(shù)據(jù)的輸入/輸出表3.1printf函數(shù)中用到的格式字元
任務(wù)3.3數(shù)據(jù)的輸入/輸出3.3.4scanf函數(shù)輸入數(shù)據(jù)
1.scanf函數(shù)的一般形式
scanf(格式控制,地址表列)“格式控制”的含義同printf函數(shù)?!暗刂繁砹小笔怯扇舾蓚€(gè)地址組成的的表列,可以是變數(shù)的地址,或字串的首地址。
2.scanf函數(shù)中的格式聲明與printf函數(shù)中的格式聲明相似,以%開始,以一個(gè)格式字元結(jié)束,中間可以插入附加的字元。表3-4scanf函數(shù)中用到的格式附加字元
任務(wù)3.3數(shù)據(jù)的輸入/輸出表3-3scanf函數(shù)中所用到的格式字元
任務(wù)3.3數(shù)據(jù)的輸入/輸出3.3.5字元數(shù)據(jù)的輸入輸出除了可以用printf函數(shù)和scanf函數(shù)輸出和輸入字元外,C函數(shù)庫還提供了一些專門用於輸入和輸出字元的函數(shù)。⒈用putchar函數(shù)輸出一個(gè)字元
putchar函數(shù)的一般形式為
putchar(c)
示例3.6
先後輸出BOY三個(gè)字元。解題思路:定義3個(gè)變數(shù),分別賦以初值‘B’,‘O’,‘Y’,然後用putchar函數(shù)輸出這3個(gè)字元變數(shù)的值。任務(wù)3.3數(shù)據(jù)的輸入/輸出
#include<stdio.h>intmain(){chara=‘B’,b=‘O’,c=‘Y’;∥定義3個(gè)字元變數(shù)並初始化putchar(a);∥向顯示器輸出字元Bputchar(b);∥向顯示器輸出字元Oputchar(c);∥向顯示器輸出字元Yputchar(‘﹨n’);∥向顯示器輸出一個(gè)換行符return0;}運(yùn)行結(jié)果:BOY連續(xù)輸出B,O,Y3個(gè)字元,然後換行。任務(wù)3.3數(shù)據(jù)的輸入/輸出
⒉用getchar函數(shù)輸入一個(gè)字元
為了向電腦輸入一個(gè)字元,可以調(diào)用系統(tǒng)函數(shù)庫中的getchar函數(shù)(字元輸入函數(shù))。getchar函數(shù)的一般形式為
getchar()
示例3.7
從鍵盤輸入BOY3個(gè)字元,然後把它們輸出到螢?zāi)?。解題思路:用3個(gè)getchar函數(shù)先後從鍵盤向電腦輸入BOY3個(gè)字元,然後用putchar函數(shù)輸出。任務(wù)3.3數(shù)據(jù)的輸入/輸出
#include<stdio.h>intmain(){chara,b,c;∥定義字元變數(shù)a,b,ca=getchar();∥從鍵盤輸入一個(gè)字元,送給字元變數(shù)ab=getchar();∥從鍵盤輸入一個(gè)字元,送給字元變數(shù)bc=getchar();∥從鍵盤輸入一個(gè)字元,送給字元變數(shù)cputchar(a);∥將變數(shù)a的值輸出putchar(b);∥將變數(shù)b的值輸出putchar(c);∥將變數(shù)c的值輸出putchar(‘﹨n’);∥換行return0;}運(yùn)行結(jié)果:BOYBOY任務(wù)3.4順序結(jié)構(gòu)的程式設(shè)計(jì)
示例3.9輸入三角形的三邊長,求三角形面積。為簡單起見,設(shè)輸入的三邊長a,b,c能構(gòu)成三角形。從數(shù)學(xué)知識已知三角形的面積的公式為
其中s=(a+b+c)∕2據(jù)此編寫程式如下;
#include<math.h>main(){floata,b,c,s,area;scanf(“%f,%f,%f”,&a,&b,&c);s=1.0∕2*(a+b+c);area=sqrt(s*(s-a)*(s-b)*(s-c));printf(“a=%6.2f,b=%6.2f,c=%6.2f,s=%6.2f\n”,a,b,c);printf(“area=%6.2f\n”,area);}
選擇結(jié)構(gòu)是三種基本結(jié)構(gòu)之一,在大多數(shù)程式中都會包含選擇結(jié)構(gòu)。本項(xiàng)目將介紹如何用C語言編寫含選擇結(jié)構(gòu)的程式。專案導(dǎo)讀●瞭解if和if-else語句的用法以及瞭解多重條件下if語句的嵌套使用?!裾莆誷witch開關(guān)語句的用法。●熟悉條件運(yùn)算符的使用。思考專案目標(biāo)任務(wù)4.1if語句4.1.1
選擇結(jié)構(gòu)簡介
選擇結(jié)構(gòu)體現(xiàn)了程式的判斷能力。在程式執(zhí)行過程中能依據(jù)運(yùn)行時(shí)某些變數(shù)的值確定某些操作是否執(zhí)行,或者確定若干個(gè)操作中選擇哪個(gè)操作執(zhí)行,這種程式結(jié)構(gòu)稱為選擇結(jié)構(gòu),又稱為分支結(jié)構(gòu)。
C語言提供了兩種分支語句:if條件語句和switch多分支選擇語句用於實(shí)現(xiàn)選擇程式的設(shè)計(jì),其中,if語句又分三種結(jié)構(gòu)。在程式設(shè)計(jì)過程中,根據(jù)各語句的結(jié)構(gòu)特點(diǎn),靈活應(yīng)用。任務(wù)4.1if語句4.1.2
簡單的if語句
if結(jié)構(gòu)是一種常用的分支結(jié)構(gòu),用它可以構(gòu)成複雜的判斷選擇。
if語句是最簡單的一種單分支結(jié)構(gòu),其一般形式為:
if(<運(yùn)算式>)<語句A>
其中,<運(yùn)算式>一般為條件運(yùn)算式或邏輯運(yùn)算式,if結(jié)構(gòu)的功能是:先判斷<運(yùn)算式>的邏輯值,若該邏輯值為“真”,則執(zhí)行<語句A>,否則,什麼也不執(zhí)行。
if結(jié)構(gòu)的流程圖如圖4.1所示。圖4.1任務(wù)4.1if語句
示例4.1設(shè)x與y有如下函數(shù)關(guān)係,試根據(jù)輸入的x值,求出y的值。解題思路:依題意知:當(dāng)x>0時(shí),y=x-7;當(dāng)x=0時(shí),y=2;當(dāng)x<0時(shí),y=3*x*x;其程式流程圖如圖4.2所示。
圖4.2程式流程圖任務(wù)4.1if語句程式代碼如下:
#include<stdio.h>voidmain(){floatx,y;
printf("請輸入x的值:");
scanf("%f",&x);
if(x>0)y=x-7;/*x為正數(shù)時(shí)*/if(x==0)y=2;if(x<0)y=3*x*x;/*x為負(fù)數(shù)時(shí)*/printf("y的值是:%2f\n",y);}
任務(wù)4.1if語句4.1.3if-else語句
雙分支結(jié)構(gòu)是按照某個(gè)條件判斷出執(zhí)行兩個(gè)語句(可以是複合語句)中的哪個(gè)語句。雙分支結(jié)構(gòu)如圖4.3所示。
在C語言中,使用if-else語句可以實(shí)現(xiàn)雙分支結(jié)構(gòu)。其格式為:
if(運(yùn)算式)語句1;
else
語句2;功能:計(jì)算運(yùn)算式的值,如果為真(非0),則執(zhí)行“語句1”;否則執(zhí)行“語句2”。圖4.3雙分支結(jié)構(gòu)任務(wù)4.1if語句
示例4.3設(shè)計(jì)一個(gè)猜數(shù)遊戲,由電腦產(chǎn)生一個(gè)亂數(shù)magic,從鍵盤輸入一個(gè)數(shù)guess,若輸入的數(shù)guess的大小等於亂數(shù)magic,則輸出“恭喜你,猜對了!”。否則,輸出“很遺憾,猜錯(cuò)了!”。
#include<stdio.h>
#include<stdlib.h>main(){intguess,magic;magic=rand();/*獲取一個(gè)亂數(shù)字*/printf("請輸入你猜的數(shù)字:");
scanf("%d",&guess);
if(guess==magic)
printf("恭喜你,猜對了!");
elseprintf("很遺憾,猜錯(cuò)了!");
}任務(wù)4.1if語句4.1.4if-else-if語句
if-else-if結(jié)構(gòu)是分支嵌套常用的一種形式,它並不是C語言的一種語句。它常用於多分支處理,其常用結(jié)構(gòu)為:
if(運(yùn)算式1)語句1elseif(運(yùn)算式2)語句2;
elseif(運(yùn)算式3)語句3;
else…
該語句執(zhí)行過程是:先判斷條件1(運(yùn)算式1),若條件1成立,則執(zhí)行語句1後,退出該if結(jié)構(gòu);否則,再判斷條件2(運(yùn)算式2)。若條件2成了,則執(zhí)行語句2後,退出該if結(jié)構(gòu);否則,再判斷條件3(運(yùn)算式3)。若條件3成立,則執(zhí)行語句3後,退出該if結(jié)構(gòu)……任務(wù)4.1if語句
示例4.6運(yùn)輸公司對用戶計(jì)算運(yùn)費(fèi),路程(s)越遠(yuǎn),每千米運(yùn)費(fèi)越低。標(biāo)準(zhǔn)如下:s<250km沒有折扣250≤s<500km2%折扣500≤s<1000km5%折扣1000≤s<2000km8%折扣2000≤s<3000km10%折扣3000≤s15%折扣設(shè)每千米每噸貨物的基本運(yùn)費(fèi)為p,貨物重量為w,距離為s,折扣為d,總的運(yùn)費(fèi)為f。任務(wù)4.1if語句
#include<stdio.h>voidmain(){ints;floatp,w,d,f;printf("請輸入每千米每噸貨物的基本運(yùn)費(fèi)p、貨物運(yùn)費(fèi)w和距離s:\n");scanf("%f%f%d",&p,&w,&s);if(s<250)d=0;elseif(s<500)d=2;elseif(s<1000)d=5;elseif(s<2000)d=8;elseif(s<3000)d=10;elseifd=15;f=p*w*s*(1-d/100.0);/*依據(jù)不同折扣計(jì)算總運(yùn)費(fèi)*/printf("1-d/100.0::%f\n",1-d/100.0);printf("總的運(yùn)費(fèi)為:%f\n",f);}任務(wù)4.1if語句
說明:依題意知,當(dāng)S<250時(shí),沒有折扣;當(dāng)250≤s<500時(shí),折扣d=2%;當(dāng)500≤s<1000時(shí),折扣d=5%;當(dāng)1000≤s<2000時(shí),折扣d=8%;當(dāng)2000≤s<3000時(shí),折扣d=10%;當(dāng)3000≤s時(shí),折扣d=15%。則得其流程圖如圖4.4所示。圖4.4程式流程圖任務(wù)4.1if語句4.1.5if語句的嵌套
if結(jié)構(gòu)可以嵌套使用。當(dāng)然,還可以相互嵌套使用,如簡單if結(jié)構(gòu)中可以包含if-else結(jié)構(gòu),if-else結(jié)構(gòu)中也可以包含簡單if結(jié)構(gòu)等。
1.簡單if語句的嵌套一般形式為:
if(運(yùn)算式1)if(運(yùn)算式2)語句A
單分支if語句的內(nèi)嵌語句本身又是一個(gè)單分支if語句。程式在執(zhí)行時(shí)先判斷運(yùn)算式1,若條件1成立,再判斷運(yùn)算式2。當(dāng)條件2成立時(shí),才會執(zhí)行語句A,否則退出if語句,如圖4.5所示。圖4.5簡單if語句的套嵌結(jié)構(gòu)圖任務(wù)4.1if語句示例4.8簡單if結(jié)構(gòu)的嵌套。#include<stdio.h>#include<math.h>voidmain(){floatx,y,z,q,area;printf("請輸入三角形的三條邊:");scanf("%f,%f,%f",&x,&y,&z);if(x+y>z)if(y+z>x)if(z+x>y){d=1/2.0*(x+y+z);area=sqrt(q*(q-x)*(q-y)*(q-z));/*求三角形的面積*/printf("三角形的面積為:%f\n",area);}說明:輸入三角形的三條邊,判斷是否構(gòu)成三角形,是則計(jì)算三角形的面積並輸出。
任務(wù)4.2switch語句
當(dāng)需要判斷的
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- (高清版)DB13∕T 5055-2019 600MPa級高強(qiáng)鋼筋混凝土結(jié)構(gòu)應(yīng)用技術(shù)導(dǎo)則
- (高清版)DB13∕T 2944-2019 重力式沉箱碼頭棱體強(qiáng)夯處理規(guī)范
- 2025二手車買賣合同正式版
- 2025天津市企業(yè)員工勞動(dòng)合同示范文本
- 農(nóng)業(yè)產(chǎn)業(yè)化發(fā)展促進(jìn)協(xié)議
- 2025年長期供貨協(xié)議合同范本
- 青春的色彩議論文分享(8篇)
- 環(huán)境科學(xué)城市污染治理答題卡
- 汽車維修與保養(yǎng)技術(shù)測試卷設(shè)計(jì)
- 經(jīng)濟(jì)學(xué)市場供需分析知識要點(diǎn)
- GB∕T 33917-2017 精油 手性毛細(xì)管柱氣相色譜分析 通用法
- 高壓氧治療操作規(guī)程以及護(hù)理常規(guī)
- 高中人教物理選擇性必修二專題05 單雙桿模型-學(xué)生版
- 二手車評估作業(yè)表簡單實(shí)際樣本
- 人民幣小學(xué)學(xué)具圖
- 物資出入庫單模板
- 新能源汽車的研究論文
- (完整word版)電梯管理證復(fù)審申請表
- 防錯(cuò)系統(tǒng)“紅兔子”使用作業(yè)指導(dǎo)文件PPT課件
- 北師大版小學(xué)數(shù)學(xué)五年級下冊單元測試題含答案(全冊)
- 護(hù)理技術(shù)—鼻飼法課件
評論
0/150
提交評論