版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
圖1-1程序從編輯到運行的過程1.1.3認識簡單的C程序1.函數(shù)C語言源程序由函數(shù)構(gòu)成,函數(shù)又由程序設(shè)計語言提供的具有一定功能的語句構(gòu)成。一個源程序其中必不可少且只能有一個的是主函數(shù)(main函數(shù)),程序從主函數(shù)開始運行。在第3章之前針對僅包含主函數(shù)的程序進行討論。為了說明C語言源程序結(jié)構(gòu)的特點,先看一個簡單的程序,以便讀者了解C語言源程序基本組成結(jié)構(gòu)。#include<stdio.h>main(){printf("Hello!");}以上例子是一個可以編譯運行的最簡單的C語言程序,僅包括一個主函數(shù),其功能是把字符串“Hello!”送到顯示器并顯示。printf函數(shù)調(diào)用語句的功能就是顯示(或稱為輸出)。C語言的函數(shù)由三部分組成:(1)使用輸出庫函數(shù)時要用到頭文件stdio.h,源文件開頭應(yīng)有以下預(yù)編譯命令:#include<stdio.h>(2)函數(shù)首部:由函數(shù)名——main和一對括號()構(gòu)成。(3)函數(shù)體:由一對{}和其中的一條或多條語句構(gòu)成。2.語句程序(或函數(shù))的基本組成是語句。語句一般有輸入、輸出、賦值或控制等功能,是3.書寫格式C語言函數(shù)體中的每一個語句都是以“;”分號為結(jié)束符的。它們的書寫非常自由,可以在一行的任意位置開始寫程序語句,一個語句可寫成多行,一行可以寫多個語句。從便于閱讀理解和維護的角度出發(fā),在書寫程序時應(yīng)遵循:每個語句占一行。4.注釋注釋是供編程人員閱讀的,與程序的運行沒有任何關(guān)系。注釋的格式為“/*…*/”。注釋語句可以出現(xiàn)在程序的任意位置,在C++語言環(huán)境下也可以用“//…”注釋格式,只能出現(xiàn)在語句的行尾或獨立為一行。例如:#include<stdio.h>main(){printf("Hello!");/*輸出*/}或{/*輸出*/printf("Hello!");}或{printf("Hello!");//輸出}1.2C語言基本數(shù)據(jù)類型前面已經(jīng)討論程序的主要功能就是處理數(shù)據(jù),C語言能夠處理哪些類型的數(shù)據(jù)?計算機是如何表示和存儲數(shù)據(jù)呢?下面進行介紹。1.2.1計算機中數(shù)據(jù)存儲基礎(chǔ)1.存儲空間的單位計算機存儲數(shù)據(jù)的電器元件多數(shù)是二態(tài)的,因此計算機的指令和數(shù)據(jù)都是以二進制進行存儲的。一個電器元件的存儲量定義為位(b),是存儲的最小單位。1b能表示2個狀態(tài),可以表示數(shù)值0和1;2b能表示4個狀態(tài),可以表示數(shù)值0(00),1(01),2(10),3(11)…計算機存儲的基本單位是字節(jié)(B),1B=8b,能表示28=256個狀態(tài),可以表示數(shù)值0,1,2,…,255。00000000表示0,00000001表示1,00000010表示2,…,11111111表示255。2.二進制轉(zhuǎn)十進制十進制是滿十進一,所以1236=1000+200+30+6=1×103+2×102+3×101+6×100同樣的道理,二進制是滿二進一,所以二進制轉(zhuǎn)化為十進制過程如下:二進制0001001=23+20=9,二進制00011010=24+23+21=263.十進制轉(zhuǎn)二進制十進制數(shù)1236÷10=123…6,123÷10=12…3,12÷10=1…2,1÷10=0…1,從后向前余數(shù)就是這個十進制數(shù)1236。同樣的道理,十進制轉(zhuǎn)化為二進制的過程如下:26÷2=13…0,13÷2=6…1,6÷2=3…0,3÷2=1…1,1÷2=0…1,從后向前余數(shù)就是26的二進制數(shù)表示11010。數(shù)據(jù)都是以二進制形式存儲在計算機中的,關(guān)于計算機中數(shù)據(jù)的存儲這里就介紹這么多,更多的知識在計算機導(dǎo)論課程中介紹。1.2.2數(shù)據(jù)類型首先,C程序設(shè)計語言可以存儲和處理的數(shù)據(jù)類型如圖1-2所示。圖1-2數(shù)據(jù)類型表1.2.3數(shù)據(jù)類型的作用通過數(shù)據(jù)類型的定義,決定了該類型數(shù)據(jù)的存儲空間的大小和存儲方式,進而決定了該類數(shù)據(jù)的取值范圍和精度;另外數(shù)據(jù)類型還決定了數(shù)據(jù)運算(操作)的規(guī)則,這一點在1.2.6節(jié)介紹運算符時會詳細說明。1.?dāng)?shù)據(jù)存儲舉例(1)unsignedshort類型數(shù)據(jù)占2字節(jié),16位全部存儲數(shù)值,如:1000000000000001表示215+20=32769。【問題思考】思考unsignedshort類型的數(shù)據(jù)最小值、最大值各是多少?(2)short類型數(shù)據(jù)占2字節(jié),最高位存儲符號,0表示正數(shù),1表示負數(shù);其余15位存儲數(shù)值,如:0100000000000001表示214+20=16385。1111111111110110表示–10的補碼。數(shù)值是以補碼表示的:正數(shù)的補碼和原碼相同。負數(shù)的補碼:將該數(shù)的絕對值的二進制形式按位取反再加1。例如,求–10的補碼:10的原碼:0000000000001010按位取反:1111111111110101再加1,得–10的補碼:1111111111110110由此可知,左面的第一位是表示符號的?!締栴}思考】思考short類型的數(shù)據(jù)最小值、最大值各是多少?(3)float類型數(shù)據(jù)占4字節(jié)(32位)內(nèi)存空間,按指數(shù)形式存儲。實數(shù)3.14159在內(nèi)存中的存放形式如下:+3.141591符號位小數(shù)部分指數(shù)最高位存儲符號;小數(shù)部分占的位數(shù)愈多,數(shù)的有效數(shù)字愈多,精度愈高;指數(shù)部分占的位數(shù)愈多,則能表示的數(shù)值范圍愈大。2.數(shù)據(jù)的取值范圍和精度整型數(shù)據(jù)在取值范圍內(nèi)都是精確存儲,不同整數(shù)類型的數(shù)據(jù)取值范圍如表1-1所示。表1-1整數(shù)表名稱數(shù)據(jù)類型描述符字節(jié)數(shù)取值范圍有符號整數(shù)int2(C編譯系統(tǒng)下)4(VisualC++編譯系統(tǒng)下)–32768~+32767–2147483648~2147483647短shortshortint2–32768~+32767長longlongint4–2147483648~2147483647無符號整數(shù)基本型unsignedunsignedint2(C編譯系統(tǒng)下)4(VisualC++編譯系統(tǒng)下)0~655350~4294967295短unsignedshort20~65535長unsignedlong40~4294967295實型數(shù)據(jù)由于小數(shù)的存儲空間有限,不能精確存儲,不同類型的數(shù)據(jù)取值范圍和精度(有效數(shù)字)如表1-2所示。表1-2實數(shù)表名稱類型描述符字節(jié)數(shù)取值范圍有效數(shù)字(十進制的位)單精度實型float4±(10–37~1038)6~7位雙精度實型double8±(10–307~10308)15~16位長雙精度longdouble16±(10–4931~104932)18~19位例如,在計算機中123456789123456789.0存儲為123456789123456784.03.123456789123456789存儲為3.12345678912345681這就是表1-2中所描述的有效位。注意:當(dāng)數(shù)據(jù)超出范圍(稱為“數(shù)據(jù)溢出”)時,其他高級程序設(shè)計語言輸出的結(jié)果以*代表,提示程序設(shè)計人員改寫程序中的數(shù)據(jù)類型。C語言的輸出方式,不容易發(fā)現(xiàn)這類錯誤,因輸出為–32768。顯然輸出的結(jié)果與真實結(jié)果完全背離,因此在編程時一定要認真分析實際問題中數(shù)據(jù)可能的范圍,并依此來選擇數(shù)據(jù)類型。3.?dāng)?shù)據(jù)類型與運算關(guān)于運算的細節(jié)在1.2.6節(jié)表達式中詳細講解,這里僅就數(shù)據(jù)運算與數(shù)據(jù)類型密切關(guān)系進行介紹。(1)C語言限定求余運算只對整數(shù)進行,C語言對整數(shù)的求余運行符為“%”。(2)C語言規(guī)定同類型數(shù)據(jù)運算結(jié)果類型不變,如整數(shù)與整數(shù)運算的結(jié)果一定是整數(shù),舍去小數(shù)。所以,4/5的運算結(jié)果為0,7/2的運算結(jié)果為3。(3)數(shù)據(jù)運算與數(shù)據(jù)類型相關(guān)的實例還有很多,在后面的學(xué)習(xí)過程中請讀者自己總結(jié)。1.2.4數(shù)據(jù)表示——常量數(shù)據(jù)有兩種基本表示形式,在程序中以常量和變量出現(xiàn)。常量是在程序運行過程中不可改變的量,其類型根據(jù)其書寫形式和范圍決定。1.整型常量整型常量由數(shù)字和常量后綴(L或l表示長整型數(shù)、U或u表示無符號數(shù))構(gòu)成,C語言的整型常量有八進制、十六進制和十進制三種:十進制整數(shù)(基本數(shù)字0~9):110456139L32769U233445(為長整型)等。八進制整數(shù)(以0打頭,基本數(shù)字0~7):037010L–0260776等。十六進制整數(shù)(以0X打頭,基本數(shù)字0~9,而10至15記為A至F):0X3310X00X3AC0–0XAF等。2.實型常量(常量后綴F或f表示浮點數(shù))實型常量也稱為實數(shù)或浮點數(shù)。在C語言中規(guī)定,實數(shù)只采用十進制,實型常數(shù)不分單、雙精度,都按雙精度double型處理。實型常量由數(shù)字、小數(shù)點和常量后綴(F或f表示浮點數(shù))構(gòu)成。它有兩種表示形式:十進制小數(shù)形式和指數(shù)形式。(1)十進制小數(shù)形式:由數(shù)碼0~9和小數(shù)點組成(后綴為f或F表示該數(shù)為浮點數(shù)),如0.0、25.0、5.789、0.13、–456.789、234F、67f等均為合法的實數(shù)。特別地,123.0可以表示為123.、0.123可以表示為.123。(2)指數(shù)形式:由尾數(shù)(a)和階碼(En或en)組成。數(shù)學(xué)表達式a×10n的C語言表達式為aEn(a為十進制數(shù),n為十進制整數(shù))。其中,尾數(shù)a為十進制數(shù);e或E為指數(shù)標志;n為階數(shù),只能為整數(shù),可以帶符號。例如:2.1E5(等于2.1*105)、3.7E–2(等于3.7*10–2)、1E5(等于105)、0.5E7(等于0.5*107)、–2.8E–2(等于–2.8*10–2)。以下不是合法的實數(shù):345(無小數(shù)點或浮點數(shù)后綴)。E7(無尾數(shù))。53.–E3(負號位置不對)。7E(無階碼)。注意:(1)數(shù)學(xué)意義上的常量在程序設(shè)計語言中不一定是常量,如1/2、π、e(自然數(shù))等。特別是23%,在程序設(shè)計語言中既不是常量,也不是后面將介紹的表達式。(2)實型常量為雙精度型,有效位為15~16位,超出部分進行四舍五入。3.字符常數(shù)1)一般字符常數(shù)字符常數(shù)就是單個字符,字符可以是鍵盤上的任意一個可顯示的字符,程序中字符常量寫在一對單引號內(nèi)(單引號稱為定界符)。例如,'*'、'A'、'7'、'&'等。2)特殊字符特殊字符包括不可顯示字符和在C語言中具有特殊意義的字符(如'為字符常量的定界符)。為了表示這些特殊字符,C語言提供了轉(zhuǎn)義字符來表示他們。轉(zhuǎn)義字符包括反斜線、被轉(zhuǎn)義的字符和一對單引號。例如,'\n'將n轉(zhuǎn)義為不可顯示的回車換行字符。'\''將定界符'轉(zhuǎn)義為普通的單引號字符。它們被當(dāng)作一個單字符,也是字符常數(shù)。常用轉(zhuǎn)義字符如表1-3所示。表1-3轉(zhuǎn)義字符表符號序列名稱符號序列名稱\n回車換行\(zhòng)'單引號\t水平制表\''雙引號\b退格\\反斜線\r回車不換行\(zhòng)ddd八進制ASCII碼值(0~377)\f換頁\xdd十六進制ASCII碼值(0~F9)3)以ASCII碼值顯示字符除了表中提供的特殊字符,其他不可顯示字符可以用相應(yīng)的八進制或十六進制ASCII碼值表示,表示方式如表1-3中的后兩項,同樣需要單引號作為定界符。例如,'\t'也可以表示為'\11'(Tab鍵的八進制ASCII為11)。每個轉(zhuǎn)義字符均被看做一個單字符常量,當(dāng)然一般字符常數(shù)也可以這樣表示,只是可讀性差。4)字符的存儲程序中字符常量寫在一對單引號內(nèi)(單引號稱為定界符),定界符不存儲,只存儲字符對應(yīng)的ASCII碼值(參見附錄D)。每個字符占1字節(jié),字符0的ASCII碼是48,存儲它占一個字節(jié)。數(shù)值類型也是按類型分配存儲空間的,整型的0、48、197和1297等都是占2字節(jié)。5)字符的操作字符類型與數(shù)值類型的操作方式是有區(qū)別的。大多數(shù)程序設(shè)計語言規(guī)定,字符類型的數(shù)據(jù)只是一個符號,不能參與算術(shù)運算。但在C語言中允許字符以ASCII碼值參與算術(shù)運算,其結(jié)果以字符格式或數(shù)值格式輸出。例如,'A'的ASCII碼為65?!皃rintf("%d",'A'+3);”的輸出結(jié)果為68("%d"表示按十進制整型操作)。printf("%c",'A'+3);的輸出結(jié)果為D("%c"表示按字符型操作)。又如“printf("%d",'0'+3);”的輸出結(jié)果為51,“printf("%c",'0'+3);”的輸出結(jié)果為3。4.字符串常數(shù)字符串常量是一個字符序列,且被括在雙引號中(雙引號稱為定界符)。字符串的語法形式是characters。characters可以是零個或多個字符集中的字符,包括任意轉(zhuǎn)義字符。其中若出現(xiàn)雙引號、反斜線或回車換行符必須用其轉(zhuǎn)義字符(\",\\,\n)表示。例如,"123Cprogram","11.11%","123\nabc"等都是合法的字符串常量。特別地,定界符中沒有字符時,""稱為空串。字符常量占一個字節(jié)的內(nèi)存空間。字符串常量占的內(nèi)存字節(jié)數(shù)等于字符串中字符的個數(shù)加1。增加的一個字節(jié)中存放字符"\0"(ASCII碼為0),這是字符串結(jié)束的標志。例如,字符常量'a'和字符串常量"a"雖然都只有一個字符,但在內(nèi)存中的情況是不同的。'a'在內(nèi)存中占一個字節(jié),存儲為:a"a"在內(nèi)存中占二個字節(jié),存儲為:a\0"\"a\""在內(nèi)存中占四個字節(jié),存儲為:"a"\0和字符一樣,字符串定界符也不存儲。1.2.5數(shù)據(jù)表示——變量1.變量和變量名表面上理解“變量”就是可以改變的量。就其實質(zhì),變量就是數(shù)據(jù)的存儲空間。之所以變量能改變,是因為變量存儲空間中的數(shù)據(jù)是可以更改的。變量的存儲空間是開辟在內(nèi)存中的,無須清楚它具體的物理地址,只要知道變量的邏輯名稱——變量名就可以使用它了。變量名是對數(shù)據(jù)存儲空間的一個抽象名稱,一方面代表存儲空間(其地址表示方式:&變量名,&為C語言的地址符);另一方面又代表其中存儲的數(shù)據(jù)(表示方式:變量名本身),因此通過變量名就可以對它空間中的內(nèi)容進行改變或引用。C語言的變量名命名規(guī)則是,“以字母或下劃線開頭的,字母、數(shù)字或下劃線的序列”。變量名可以是任意長度,但編譯器只識別31個或更少(因編譯系統(tǒng)不同而不同)。C語言的關(guān)鍵詞是不可以作為變量名,參見附錄A中有關(guān)標識符的內(nèi)容。注意:在對變量名命名時應(yīng)注意:(1)所有語言都允許26個英文大小字母出現(xiàn)在變量名中,特別要注意C語言認為A與a是不同的變量,即C語言的變量名是區(qū)分大小寫的。(2)變量名最好與其所存儲的數(shù)據(jù)意義有關(guān),這樣可增加程序的可讀性。例如,“累加和”用sum或s做變量名,“姓名”用name或xm做變量名,圓周率(3.1415926)用pi做變量名等。(3)變量名最好不要用到字母l(小寫L)、o、z或I(大寫i)等易與數(shù)字混淆的字母。2.變量定義變量需先定義后使用。所謂變量定義就是說明變量類型,其功能是為說明的每一個變量按類型開辟存儲空間(編譯系統(tǒng)在對程序進行“編譯時”,根據(jù)變量定義的類型為其分配邏輯空間,運行時分配物理的內(nèi)存空間)。從而決定其存儲數(shù)據(jù)的范圍精度和參與運算的種類等。變量定義的格式如下:類型描述符變量表;其中,變量類型描述是指C語言允許使用的有效類型(見表1-1和表1-2),變量表是由一個或多個被定義的變量名組成,若定義多個變量,則變量之間用逗號‘,’分隔,如“inti,j,k;”。注意:(1)變量類型的選擇是根據(jù)其所存儲數(shù)據(jù)的邏輯意義決定的。例如,工資一般是實型數(shù)據(jù)又不會太大,相關(guān)變量應(yīng)該定義為float型;年齡,身高等數(shù)據(jù)一般為整型且不會很大,相關(guān)變量應(yīng)該定義為int型。當(dāng)有些整型數(shù)據(jù)或其運行結(jié)果較大時,可以考慮定義為長整型。當(dāng)整型意義的數(shù)據(jù)或運算結(jié)果很大時,如n!、1+2+22+23+…+2n等,在不考慮精度的情況下,應(yīng)考慮用實型變量存儲數(shù)據(jù)或運算結(jié)果。(2)還可以加注釋語句,說明變量的意義,這樣對程序以后的維護也很有好處。例如:floata,b,c; /*三角形的三條邊*/3.變量賦值變量=算術(shù)表達式;(=稱為賦值號,不是等號)稱為賦值語句,操作過程為先計算表達式的值,然后將計算結(jié)果存儲在變量中。例如:shorta; /*定義*/a=8; /*賦值*/a=9; /*賦值*/a=a+9; /*計算后賦值*/執(zhí)行這些語句的功能是,先為變量a開辟2字節(jié)的整型數(shù)據(jù)存儲空間,然后存入8,變量值為8;再將9存入變量a,以前存入的8被覆蓋,變量值為9。第三個賦值語句,右面是一個表達式,要先計算其值:取變量a的值為9,9+8等于17,將17存入變量a,變量的值就變成17了。4.變量賦初值在定義變量的同時,還可以對其中全部或部分的變量賦初始值,例如:inti,j,k=1,s=0,n=k+6,m;注意:變量除了需要先定義后使用外,還必須先賦值后引用??闯绦蚨危篿nti;i=i+1;經(jīng)過定義后的變量i,可以存儲數(shù)據(jù)了,但在計算i+1時,其他程序設(shè)計l語言認為這是語法錯誤,在編譯時會指出“變量沒有賦初始值”的錯誤,只有改正后程序才能通過編譯,然后運行。C語言“不做錯誤指示”,即可以通過編譯,那么它又是怎么運行的呢?很簡單,C語言就是將i空間“原有”的值加1后再賦給i。那么“原有的”值是什么呢?又是從哪兒來的?有計算機基礎(chǔ)的人都知道,當(dāng)刪除一個文件時,這個文件其實并沒有真正被刪除,只是在文件目錄中對該文件做一個刪除“標記”,文件內(nèi)容(“尸體”)仍保持在原來的空間中。若該文件空間沒有被占用,只需去掉刪除“標記”就可將文件恢復(fù)。前一個程序運行時要進入內(nèi)存,執(zhí)行完就“退出”內(nèi)存。后一個程序運行時,可能正好被分配到這部分內(nèi)存空間,這些空間確實是可用的,但不是真正意義的“空白空間”,和文件空間一樣原來程序的內(nèi)容并沒有被清0,所以變量“原有”的值就是在該程序之前占用此空間的軟件代碼或數(shù)據(jù)的“尸體”,無法知道它具體是什么值。因此一定要注意:“變量必須先定義,后賦值,再引用”。5.常變量C語言還可以定義一種常變量,即程序中不可改變其值的變量。其定義的格式如下:const變量類型描述符變量表;由于程序中不能改變變量的值,所以一般常變量都是要賦初值的。例如:constfloatpi=3.1415926,r=1.234;6.變量的作用初學(xué)者往往不明白什么時候用常量表示數(shù)據(jù),什么時候就該用變量方式表示數(shù)據(jù)。舉幾個簡單的例子說明。下面的程序是求半徑為1.234567厘米的圓周長和面積。printf()若不用變量的程序如下。程序1:#include<stdio.h>main(){printf("L=%f",2*3.1415926*1.234567);printf("s=%f",3.1415926*1.234567*1.234567);}程序1不但書寫麻煩,易出錯,讀起來也不好懂。使用變量后,再看程序2。程序2:#include<stdio.h>main(){floatpi=3.1415926,r=1.234567;printf("L=%f",2*pi*r);printf("s=%f",pi*r*r);}像數(shù)學(xué)上的代數(shù)一樣,引入變量后程序簡潔明了,克服了程序1的缺點。再來看程序3的改進。程序3:#include<stdio.h>main(){floatpi=3.1415926,r=1.234567,temp;temp=pi*r;printf("L=%f",2*temp);printf("s=%f",temp*r);}程序中引入臨時變量temp,用來記錄pi*r的值,這樣在以后的程序中就減少了重復(fù)的乘法運算。當(dāng)然,由于臨時變量的引入同時降低了程序的可讀性,鑒于現(xiàn)代計算機運行速度的提高和計算機資源的普及,讀者在程序書寫時可以在時間效率和可讀性之間權(quán)衡利弊。其次若不引入變量,以上程序都只能求半徑為1.234567的圓的周長和面積,而不方便對其他半徑的圓進行求解。引入變量并通過鍵盤輸入語句,可以使程序得到優(yōu)化——增強程序的通用性,程序4如下。程序4:#include<stdio.h>main(){floatpi=3.1415926,r;scanf("%f",&r);printf("L=%f",2*pi*r);printf("s=%f",pi*r*r);}這個程序在執(zhí)行到“scanf(“%f”,&r);”語句時,程序暫停執(zhí)行,等待用戶從鍵盤輸入圓的半徑,用戶輸入任何半徑程序都能計算出相應(yīng)的周長和面積。這幾個例子并不能概括變量的全部作用,但至少可以理解:(1)引入變量可以減少對常量的錄入,不但提高了編寫程序的效率,還可能減少錄入錯誤。因為編譯系統(tǒng)不可能發(fā)現(xiàn)常量的拼寫錯誤,而變量拼寫錯誤系統(tǒng)會因沒有進行說明而報錯。(2)對某些數(shù)據(jù)不直接使用常量,而引入變量通過鍵盤輸入語句為其賦值,可以使程序通用性更強。(3)引入臨時變量來記錄運算的中間結(jié)果,可減少運算,從而提高程序運行的時間效率。1.2.6數(shù)據(jù)運算——表達式程序設(shè)計語言中的表達式種類很多,有算術(shù)表達式、關(guān)系表達式、邏輯表達式、字符串表達式等。下面主要介紹算術(shù)表達式。算術(shù)表達式是最直接地“指揮”計算機對數(shù)據(jù)進行運算的形式,算術(shù)表達式由運算符、數(shù)據(jù)(常量或變量)、函數(shù)和括號組成,并有一定的優(yōu)先級規(guī)則。1.算術(shù)運算符C語言的運算符不僅具有不同的優(yōu)先級,而且還有一個結(jié)合性。在表達式中,各運算量參與運算的先后順序不僅要遵守運算符優(yōu)先級別的規(guī)定,還要受運算符結(jié)合性的制約,以便確定是自左向右進行運算還是自右向左進行運算。C語言的算法運算符如表1-4所示(多數(shù)運算符的結(jié)合性是自左向右進行運算,不標結(jié)合性的都是自左向右)。表1-4運算符表運算符作用注意事項結(jié)合性+加法+一元運算符時是正號可以省略自右向左–減法–一元運算符時是負號自右向左*乘法/除法%求余(模)只針對整型數(shù)據(jù)運算––自減1只針對變量運算++自加12.標準庫函數(shù)為了減少編程人員的工作量,提高程序設(shè)計的效率,滿足不同用戶對程序設(shè)計語言功能的需求,程序設(shè)計語言為用戶提供了豐富的標準庫函數(shù),如數(shù)學(xué)類函數(shù)、字符串類函數(shù)、圖形類函數(shù)等。為了使C語言的編譯系統(tǒng)在編譯時方便找到所要調(diào)用的函數(shù),在使用函數(shù)時要知道函數(shù)所在的頭文件(可查閱附錄C),并在文件開頭用預(yù)編譯文件包含命令(詳見4.2.6節(jié))鏈接。例如#include<math.h>或#include"math.h"前者只在系統(tǒng)目錄中查找,后者先在當(dāng)前目錄中查找若沒有才在系統(tǒng)目錄查找。然后就可以調(diào)用所需要的函數(shù)了。在使用時,有一些共同需要注意的問題如下:(1)函數(shù)及參數(shù)的單位,三角函數(shù)參數(shù)或函數(shù)值的單位一般為“弧度”,如sin(3.1415926/7),sin(3.1415926*7/180)(=sin70°,寫成sin70或sin(70)都是錯誤的)。(2)函數(shù)及參數(shù)的類型、順序,如pow(2,6)(=26),pow(6.0,2.0)(=62)參數(shù)和函數(shù)值(表達式的值)都是double型。(3)函數(shù)及參數(shù)的范圍,如log(),log10()函數(shù)的參數(shù)必須大于0,log(–2)是非法的。又如tan(3.1415926/2)的值是要“溢出”的。函數(shù)的應(yīng)用方式也是多樣的:(1)可以單獨引用,例如:intt;t=sqrt(50);/*開平方*/(2)可以出現(xiàn)在表達式中,例如:intt;t=3*sqrt(50)+90*pow(2,3)(3)可以嵌套引用,例如:intt=90;log(sin(70*3.1415926/180));3.算術(shù)表達式1)算法表達式的表示算術(shù)表達式由運算符、數(shù)據(jù)(常量或變量)、函數(shù)和括號組成,并有一定的優(yōu)先級規(guī)則。單個的常量、變量、函數(shù)可以看作是表達式的特例。例如,a+b、(a*2)/c、(x*y)/6-(a-b)/9、a、9、sin(3.14/8)都是算術(shù)表達式。2)算法表達式的值和類型一個表達式有一個值及其類型,即計算表達式所得結(jié)果的值和類型。圖1-3類型自動轉(zhuǎn)換的規(guī)則表達式求值按運算符的優(yōu)先級和規(guī)定的結(jié)合方向進行,參見附錄A?;舅阈g(shù)運算符圖1-3類型自動轉(zhuǎn)換的規(guī)則例如,3+6*5結(jié)果為33。對表達式類型C語言規(guī)定:(1)同類型數(shù)據(jù)運算結(jié)果類型不變,如整數(shù)與整數(shù)運算的結(jié)果一定是整數(shù),舍去小數(shù)。所以,4/5的運算結(jié)果為0,7/2的運算結(jié)果為3。(2)C語言支持不同類型數(shù)據(jù)的混合運算,運算結(jié)果類型由參與運算的數(shù)據(jù)決定。不同類型數(shù)據(jù)運算時,運算結(jié)果取高一級的數(shù)據(jù)類型,如圖1-3所示。注意:注意計算結(jié)果服從規(guī)則(2),但計算過程中仍服從規(guī)則(1)。算式1/2*2.22的值為0.0,而非1.11;而1.0/2*2.22或2.22/2的值才為1.11。3)算法表達式的意義算術(shù)表達式就是要指導(dǎo)計算機進行計算,相當(dāng)于數(shù)學(xué)中的公式,當(dāng)然語法上要符合語言的要求。例如,今天是周二,100天后是周幾?程序如下:#include<stdio.h>main(){printf("%d\n",(100+2)%7);}【問題思考】(1)今年是兔年,50年后是什么生肖?(2)方程ax2+bx+c=0兩個解的算術(shù)表達式。(3)求一個四位數(shù)a的個位和千位。注意:(1)算術(shù)表達式類似數(shù)學(xué)上的公式,所以總有人把算術(shù)表達式誤寫成對應(yīng)的數(shù)學(xué)式子。例如:3x+2y(少了乘號*)。(2)以上的錯誤并不可怕,因為程序設(shè)計語言的編譯系統(tǒng)會在編譯時發(fā)現(xiàn)它們,改正后就能通過編譯并運行了。可怕的是,表達式錯誤地表示了數(shù)據(jù)計算的實際意義而造成的邏輯錯誤,如“a+b/c*d”與“(a+b)/(c*d);”的運算意義是完全不同的。(3)不能有運算符或數(shù)據(jù)以外的符號,如π、β、ξ等。又如程序中將e視為變量,而不是數(shù)學(xué)領(lǐng)域認為的“自然數(shù)”;在程序中可以用函數(shù)調(diào)用exp(1)表示自然數(shù)e。(4)23%在程序設(shè)計語言中既不是常量,也不是表達式,在程序中只能用0.23表示或23.0/100等形式表示(注意23/100的結(jié)果是0)。(5)利用括號可改變運算的優(yōu)先級,但有時即使無須改變運算的優(yōu)先級也可利用括號使算術(shù)表達式的運算次序清晰直觀。例如,表達式A/B/C,就不如A/(B*C)更容易理解。(6)C語言支持不同類型數(shù)據(jù)的混合運算,但計算機在計算時實質(zhì)要將低精度的類型轉(zhuǎn)換為高精度后才運算??紤]到運行效率,應(yīng)盡可能地減少這種轉(zhuǎn)換。例如,“floata,b=3;a=b/2;”就不如“floata,b=3.0;a=b/2.0;”效率高。(7)為了易讀寫,數(shù)學(xué)中會把1000000寫成106,但有的初學(xué)者在程序中將它寫成指數(shù)函數(shù)pow(10,6),那么計算機將要做不必要指數(shù)運算,如果用科學(xué)記數(shù)法寫成常量1.0e6,則不需要任何計算。(8)利用中間變量記錄需要重復(fù)計算的表達式,可以提高運行效率,例子見1.2.5(9)書寫表達式時要考慮計算結(jié)果的精度,特別是在較大的實數(shù)之間進行運算時。當(dāng)a、b、c都是較大的實型數(shù)時,要計算算術(shù)表達式a*b/c的值,若先計算a*b,則有可能會發(fā)生數(shù)據(jù)溢出或損失一些精度,但若將表達式寫成a/c*b,則可避免溢出或精度的損失。習(xí)題11.選擇題(1)能將C語言編寫的源程序轉(zhuǎn)換為目標程序的軟件是()。A.編輯程序 B.匯編程序 C.編譯程序 D.解釋程序(2)以下敘述中正確的是()。A.C語言的源程序不必通過編譯就可以直接運行B.C語言中的每條可執(zhí)行語句最終都將被轉(zhuǎn)換成二進制的機器指令C.C源程序經(jīng)編譯形成的二進制代碼可以直接運行D.C語言中的函數(shù)不可以單獨進行編譯(3)A.c B.obj C.exe D.bas(4)下列四個描述中,錯誤的是()。A.一個C源程序必須有只能有一個主函數(shù)B.一個C源程序可以含一個或多個子函數(shù)C.在C源程序中注釋說明必須位于語句之后D.C源程序的基本結(jié)構(gòu)是函數(shù)(5)C語言中基本的數(shù)據(jù)類型包括()。A.整型、實型、邏輯型 B.整型、實型、字符型C.整型、字符型、邏輯型 D.整型、實型、邏輯型、字符型(6)以下選項中不正確的整型常量是()。A.12L B.–10 C.1900 D.(7)下面4個選項中,均是合法整型常量的選項是()。A.120 B.–0xcdf C.–01 D.–0x48a –0xffff 01a 986012 2e5 011 0xe 0668 0x(8)以下符合C語言語法的實型常量是()。A.1.2E0.5 B.3.14159E C.5E–3 D.E15(9)下面4個選項中,均是不合法浮點數(shù)的選項是()。A.160. B.123 C.–.18 D.–e30.12 2e4.2 123e4 .234e3 .e5 0.0 1e3(10)()是不正確的字符常量。A.'n' B.'1' C."a" D.'\101'(11)已定義ch為字符型變量,以下賦值語句中錯誤的是()。A.ch='\' B.ch=62+3 C.ch=0 D.(12)已定義c為字符型變量,則下列語句中正確的是()。A.c=98; B.c='98'; C.c="98" D.c="b"(13)能用作變量名字的標識符是()。A.union B.double C.a(chǎn)b–1 D._123cd(14)以下4組用戶定義標識符中,全部合法的一組是()。A._main B.If
C.txt D.intenclude
–max
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)據(jù)保護守則3篇
- 安裝工程合同的工程變更申請3篇
- 工業(yè)電暖設(shè)備采購招標3篇
- 推廣活動服務(wù)合同3篇
- 新版實驗室員工保密協(xié)議3篇
- 推廣活動采購協(xié)議3篇
- 房屋買賣合同貸款的房產(chǎn)登記問題3篇
- 安全騎行電動車的決心3篇
- 安徽新版離婚協(xié)議書格式3篇
- 排水溝承包合同范本兩份3篇
- 電力機車學(xué)員定職副司機練習(xí)題題庫(1536道)
- 電氣自動化專業(yè)職業(yè)生涯目標規(guī)劃書范例及步驟
- 水利工程特點、重點、難點及應(yīng)對措施
- 中南林業(yè)科技大學(xué)《高等代數(shù)》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024年理論中心組學(xué)習(xí)心得體會模版(2篇)
- 藝術(shù)哲學(xué):美是如何誕生的學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 高級流行病學(xué)與醫(yī)學(xué)統(tǒng)計學(xué)智慧樹知到期末考試答案章節(jié)答案2024年浙江中醫(yī)藥大學(xué)
- JGT161-2016 無粘結(jié)預(yù)應(yīng)力鋼絞線
- 超聲波探傷報告
- 藥包材生產(chǎn)質(zhì)量管理指南
- 大腸菌群最可能數(shù)(MPN)檢索表1
評論
0/150
提交評論