




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
高級程序設計語言2004-9-15第一章 C語言概述2004-9-15計算機基本結構2004-9-15計算機基本結構CPU
(CentralProcessingUnit)主存儲器運算器控制器外設輸入設備輸出設備主機計算機2004-9-15程序設計語言程序設計語言:是人和計算機之間交換信息所用的一種工具。是用來編寫計算機程序的工具;計算機將嚴格按照程序運行和工作,并提供產生的結果。即人通過程序的形式向計算機提出服務要求,計算機按程序自動進行工作2004-9-15程序設計語言程序設計語言包括:機器語言匯編語言高級語言2004-9-15機器語言與匯編語言機器語言:機器語言就是能夠被計算機直接識別和執行的機器指令。機器指令是CPU提供的基本功能(與計算機體系結構相關)機器指令是二進制代碼是計算機唯一能夠直接執行的程序語言編程、閱讀程序比較困難匯編語言:用助記符表示的機器語言,即符號化的機器語言計算機不能直接執行匯編語言程序,需要轉化為機器語言與計算機體系結構相關2004-9-15機器語言與匯編語言例:X=10,Y=17,計算SUM=X+Y0A11...A00000020601A20300F400DATA SEGMENTX DB 10Y DB 17SUM DB 0DATA ENDS... MOV AL,X ADD AL,Y MOV SUM,AL HLT 機器語言程序匯編語言程序2004-9-15高級(programming,程序設計)語言高級語言:又稱為算法語言,是一種接近于自然語言的計算機程序設計語言。這種語言通常由:基本字符集,詞法規則,語法規則,語義規則等構成。一般由兩部分內容組成:對數據的描述對處理過程(操作)的描述獨立于計算機體系結構計算機不能直接執行高級語言程序,需要轉換(高級語言程序→匯編程序→機器指令)2004-9-15高級(programming,程序設計)語言例:X=10,Y=17,計算SUM=A+BDATA SEGMENTA DB 10B DB 17SUM DB 0DATA ENDS... MOV AL,A ADD AL,B MOV S,AL HLT 匯編語言程序...int A,B,SUM;A=10;B=17;SUM=A+B;...C語言程序2004-9-15高級(程序設計)語言高級程序語言與自然語言自然語言程序設計語言人與人信息交流的工具(人具有思維、推理能力)人-機對話的工具(計算機具有計算與邏輯判斷的能力)語法規則靈活(可以省略,顛倒)嚴格遵循語法規則表達方式多樣算法多樣2004-9-15高級(programming,程序設計)語言源程序(高級語言成語)“轉換”成目標程序(機器指令)的方法:編譯方式:將源程序一次性地轉換成等價的目標程序。此后,可以多次直接運行這個目標程序。翻譯方式:"運行"源程序的"當時"逐個語句地進行"翻譯"并立即"運行"這一句的功能,直到最后一個語句為止2004-9-15編譯方式與翻譯方式編譯方式:翻譯方式2004-9-15C語言的歷史C語言產生與UNIX操作系統(OperatingSystem)密切相關標準化1983年,美國標準化組織(ANSI,AmericanNationalStandardsInstitute)成立C語言工作小組,發表C語言標準:ANSIC1987年,ANSI發表新的C語言標準:87ANSIC1989年,國際標準化組織(ISO,InternationalStandardizationOrganization)接納ANSIC,標準,發表ISOC標準2004-9-15C語言的特點語言簡潔、緊湊,使用方便、靈活(32個關鍵字,9中控制語句)運算符豐富(34種表達式)豐富的數據類型結構化的控制語句,程序模塊化(函數是基本模塊)語法限制不嚴格,程序設計自由度大能夠進行位操作(即對存儲單位進行操作)高效率的目標代碼可移植性好(與匯編比較)2004-9-15"Hello,world"例1“Hello,world”C程序是由函數(function)和變量組成(variable)main函數:C程序總是從main函數開始執行代碼在main函數中調用其它函數來完成相應的工作“其它函數”:用戶自行編寫的函數庫函數(libraryfunctions)函數之間通信的一種方式是:調用者提供一組參數(arguments)給被調用函數#include<stdio.h>main(){ printf("hello,world\n");}函數名參數表2004-9-15"Hello,world"printf函數是一個庫函數的參數“hello,world\n”:字符串(characterstring/stringconstant)\n:由\開頭的字符:用于表示難于輸入、特殊的控制字符換行符(newlinecharacter
)#include<stdio.h>main(){
}printf("hello,world\n");函數名2004-9-15#include<stdio.h>intmax(intx,inty);
main(){inta,b,c;/*announcement,variablesdefination*/scanf("%d%d,",&a,&b); /*inputthevalueofaandb*//*callmaxfunction,gettheresult,andassignittoc*/
c=max(a,b);printf("max=%d\n",c);/*outputthevalueofc*/return;}/*definemaxfunction,functionvalueisinteger*/intmax(intx,inty){intz;if(x>y)z=x;elsez=y;return(z);}例2 比較兩個整數的大小,輸出其中較大的數2004-9-15“Hello,world”C程序的格式一條語句(statement)占一行;運算符之間應用空格(blanks)分割;語句縮進(indentation):4個空格/一個tab的舉例,突出程序的邏輯結構{}(braces)位置函數定義:均置與行首其余情況:{在行尾}在行首2004-9-15程序程序包括兩個方面:對數據的描述,即數據結構(datastructure)對操作的描述(操作步驟),即算法(algorithm)操作的對象是數據,操作的目的是對數據進行加工處理,以獲取結果算法:解決”做什么”和”怎么做”的問題語句(statements)只是算法的具體體現沃思公式:數據結構+算法=程序2004-9-15算法的概念算法(廣義):為解決一個問題而采用的方法和步驟。算法多樣性不同的算法具有簡單和復雜的分別,但首要保證算法正確性,再考慮算法的質量。計算機算法:是計算機為解決一個問題而采用的方法和步驟。計算機算法的兩大類:數值運算算法:目的求數值解非數值運算算法:應用廣泛2004-9-15簡單算法舉例例2.1求5!思考:給定正整數n,求n
應具有通用性、靈活性累加,累乘等運算問題的基本算法累計結果(total):需要設定初值;變化量(i):正確確定每次參與運算的變化量累次計算,直到i到達預期范圍total=totalOPERATOR(運算符)i;改變i值,重復計算應用:例2.42004-9-15簡單算法舉例例2.3判斷2000-2500年中的每一年是否閏年,將結果輸出。仔細確定判斷條件,逐步縮小判斷范圍對范圍的確定要保證無遺漏2004-9-15算法的特性有窮性:要確定合理的限定范圍確定性有零個或多個輸入有一個或多個輸出有效性2004-9-15怎樣表示一個算法算法表示的方法:自然語言:通俗易懂,但文字冗長,不嚴格,易出現歧義性傳統流程圖:直觀形象,易于理解用圖框表示各種操作。用流程線表示各圖框的執行順序要注意避免無規律的流程轉向結構化流程圖(N-S流程圖)算法全部的矩形框內無流程線偽代碼PAD圖2004-9-15程序設計的三種基本結構順序結構:自頂向下,無分支,無轉移選擇結構:有分支,需條件判斷循環結構:有轉移,某些語句需要重復執行當型(While型)循環直到型(Until型)循環這三種基本結構可以組成任意復雜的算法。2004-9-15順序結構順序結構:自頂向下順序執行,無分支,無轉移AB流程圖表示法ABN-S圖表示法ab2004-9-15選擇結構(選取結構、分支結構)選擇結構:有分支,需條件判斷無論條件p是否成立,只能執行A,B兩個分支中的一支A、B分支中,可以有一支是“空語句”(圖2.16)AB流程圖表示法N-S圖表示法pYes/成立NO/不成立ABp成立不成立ab2004-9-15循環結構(重復結構)當型(While型)循環流程順序:“判斷
執行
再判斷
再執行
...”由判斷條件P決定重復執行的次數,循環次數可控當P不成立時,停止循環循環體內應該有使循環停止的操作A流程圖表示法N-S圖表示法p成立不成立A當p成立ab2004-9-15循環結構(重復結構)直到(Until型)型循環先執行,再判斷(即操作A至少要執行一次)重復執行,直到條件滿足(即條件不成立時,重復執行)流程圖表示法N-S圖表示法p不成立成立A直到p成立Aab2004-9-15基本結構的特點基本結構的特點:只有一個入口只有一個出口結構內部每一部分都能被執行到結構內不存在“死循環”由基本結構所構成的算法屬于”結構化”的算法不存在無規律的轉向,只在結構內部才存在分支和跳轉2004-9-15偽代碼(pseudocode)偽代碼:用文字和符號描述算法格式自由,書寫方便,修改容易一般在設計算法時使用數據類型(Type)數據類型:是數據結構的表現形式決定了該類型的變量或者常量的取值范圍決定了該類型的變量或者常量可以執行哪些操作例:"inti" i是整數類型的變量,其取值范圍為-32768~32767之間的整數;可以執行的操作:加、減、乘、除、求余(算術運算);比大小(關系運算)等實數無此操作運算符(Operators)與表達式(Expressions)運算符:定義了對不同數據類型變量或者常量的基本操作(運算)算術運算符(ArithmeticOperators)關系運算符(RelationalOperators)邏輯運算符(LogicalOperators)賦值運算強制類型轉換表達式(Expressions):通過運算符將變量、常量連接起來,產生新值常量與變量常量(Constants):是指在程序執行過程中值不發生改變的量。常量也有數據類型常量分為直接常量(字面常量)和符號常量(SymbolicConstants)直接常量,例:50,3.14,'A',“abc”符號常量,例:#define PRICE 30符號常量符號常量:是一種特殊形式的常量,即用一個標識符表示一個常量。定義形式
#define常量名(標識符)常量值使用符號常量:含義清楚;在需要改變一個常量時能做到“一改全改”編程風格在程序中不要出現“magicnumbers”(例如:
x=100*50+78),而符號常量名可以指明每一個常量的含義符號常量名使用大寫字母符號常量舉例例:計算某類食品的價格,要求從鍵盤讀入購買該食品的數目,輸出總價格。#include<stdio.h>#definePRICE 28Main(){ int num; printf("inputnumber:"); scanf("%d",&num); printf("total=%d",num*PRICE); return0;}變量(Variable)程序執行過程中,其值可以改變的量稱為變量。它用變量名(標識符)來表示,在內存中占據一定內存單元。變量變量名:一個變量有一個名字變量在內存中占據一定的存儲單元,在該存儲單元中存放變量的值——變量值變量名是一個符號地址在程序中從變量中取值,實際上是通過變量名找到相應的內存地址,從其存儲單元中讀取數據。變量名與變量值例:inta=3;......3...............3a變量名變量值存儲單元80A580A680A780A880A980AA80AB80AD變量a
地址
內存
標識符(包含變量名)的命名規則標識符(identifier):用來標識變量名、符號常量名、函數名、數組名、文件名等的有效字符序列稱之為標識符。命名規則只能由字母(a~z,A~Z)、數字(0~9)和下劃線('_')三種字符組成例:不合法的標識符 bass-9 firstone 第一個字符只能是字母或下劃線一般只有庫函數才有以'_'為首字母標識符用戶一般不用'_'作為標識符的首字母,避免沖突區分字母大小寫例如:int a,A;/*a和A是兩個不同的整型變量*/標識符(包含變量名)的命名規則關鍵字(Keywords)保留關鍵字(保留字):在C語言中具有特定含義,專門用作C語言特定成分的一類標識符,例如:intfloatcharifelsewhilefor例:
intfor;X某些系統有標志符長度限制(建議不超過8字符)。內部表示符長度可以為31bytes選擇變量名和其他標志符時,應注意做到“見名知義”聲明(Declarations)變量聲明(Declarations):指定數據類型;列出將要使用的變量格式:
數據類型 變量名1,變量名2,...變量名n;一切變量,都要先聲明,后使用!數據類型概述內容:基本數據類型數據在內存中的存儲形式(即類型在計算機內部如何表示的)取值范圍限定符基本數據類型基本數據類型char:字符型,1個字節長度,可以存放系統本地字符集(characterset)中的一個字符int:整型,其存儲空間長度通常反映了機器中整數的自然長度(字長)float:單精度浮點型double:雙精度浮點型char(字符型)char:字符型,長度為一個字節字符在內存單元中存放的是其對應的ASCII碼(8bit的0、1二進制序列)例字符'a',在內存中占一個字節(8bits)
'a'類型長度決定了類型的取值范圍,char的取值范圍(ASCII碼取值):0~28-1(0~255)ASCII碼(P364)‘0’48;‘A’65;‘a’9701100001補充1:字長bit:在計算機中采用二進制,代碼只有“0”和“1”,其中無論是“0”或是“1”在CPU中都是一“位”。字長:CPU在單位時間內(同一時間)能一次處理的二進制數的位數叫字長。例:8位CPU:即能一次處理8位數據的CPU。32位的CPU:就能在單位時間內處理字長為32位的二進制數據。字節和字長的區別:由于常用的英文字符用8位二進制就可以表示,所以通常就將8位稱為一個字節。字長的長度是不固定的,對于不同的CPU、字長的長度也不一樣。8位的CPU一次只能處理一個字節,而32位的CPU一次就能處理4個字節,同理字長為64位的CPU一次可以處理8個字節。補充2:補碼(1/3)源碼:計算機中采用一組二進制序列來存儲數值,其中最高位為符號為(0為正,1為負)。例:(+10)源=00001010例:(-10)源=10001010例:十進制:10-10=10+(-10)=0
源碼:00001010
+10001010
=10010100=-20X
補充2:補碼(2/3)反碼:正數的反碼=源碼負數的反碼=除符號位外,源碼的其余各位逐位取反例:(-10)源=10001010,則(-10)反=11110101補碼:正數的補碼=源碼=反碼負數的補碼=反碼+1例:(-10)補=11110110例:(10)補+(-10)補=00000000補=(0)10
例:(9)10+(-6)10=(9)補+(-6)補 =00001001+11111010=00000011=(3)10補充2:補碼(3/3)例:(5)10+(-6)10=-1
(5)補+(-6)補=00000101+11111010=11111111補=(-1)10補碼的設計目的是:使符號位能與有效值部分一起參加運算,從而簡化運算規則。所以,在計算機內部數值都被表示成為補碼的形式。int(整型)整型數據在內存中以二進制補碼來表示int其存儲空間長度通常=機器字長通常int長度為32bit/16bit,其中第一個bit表示符號位(0:正,1:負)例:intnum=120;例:intnum=-120;如果int長度為16bit,取值范圍是-216-1~216-1-1,(-32768~32767)00000000011110001111111110001000浮點型(實數型)實數有兩種表示形式:十進制數形式,由數字和小數點組成例:123.4,5.0指數形式,字母e之前必須有數字,e之后必須為整數例:123.4e0=123.4,1.234e2=123.4,
123.4e-2=1.234規范化的指數形式(C中實數的指數形式的輸出)字母e之前的小數部分,小數點左邊應有且只有一位(非0)數字例:4.321e-02,4.321e+02浮點型在內存中的存放形式以float型為例:按指數形式存儲(小數)符號位+小數部分+(指數)符號位+指數部分例:12.345在內存中一般占4個字節(32bit)C標準未定義具體格式,一般C編譯器以24bit表示小數部分(包括符號位),8bit指數部分(包括指數的符號位)小數部分位越多,有效數字越多,數值范圍越小float型的有效數字為7位數符小數階符指數01.234501浮點型float型:單精度浮點類型,典型長度:32bit,典型有效數字:7位double型:雙精度浮點類型,典型長度:64bit;典型有效數字:15~16位例:floatf=
1.2345678;f的有效數字只有7位,即1.234567,超出7位的部分直接舍去(8被舍去)f的指數形式的輸出為:1.234567e+00限定符(qualifiers)限定符(即修飾符)用于限定基本數據類型主要用于改變數據類型在內存中的長度
改變類型的取值范圍格式:限定符1[限定符2]類型例:shortint例:unsignedshortint3類限定符short和long(限定整型)signed和unsigned(限定字符和整型)longdouble(限定浮點型)short和longshort和long:用于限定整型,提供不同長度的整數型例: shortintsh;
longintcounter;通常,int:16/32bit,shortint:16bit,
longint:32bit編譯器會跟據機器的硬件特性自主選擇整型的長度。基本規則:shortint和int至少為16bitlongint至少為32bitshortint類型的長度≤int類型長度
≤longint類型長度signed和unsignedsigned和unsigned:用于限定char類型和所有整型(包括shortint類型、int類型、longint類型)
unsigned限定的類型的數值總是非負(0,正整數)signed限定的類型的數值有正、有負例:unsignedchar:取值范圍0~28-1=255例:signedchar:取值范圍-128~127例:unsignedint:取值范圍0~216-1=65535signed和unsigned注意:signed和unsigned可以限定所有整型例:unsigendint
signdlongint當整數沒有限定符時,默認是有符號的(即類型內存結構中有1bit的符號位)例:intnum;/*長度為16bit,其中1bit符號位,15bit數據*/字符型沒有限定符時,是否有符號位由編譯系統決定longdoublelongdouble(高精度浮點數),類型長度≥double(雙精度類型)longdouble型:典型長度:128bit;典型有效數字:18~19位基本數據類型詳述每一種類型:內存中的存放形式分類常量(表示的方法,特殊的常量)變量(類型的聲明與定義,取值范圍)細節問題整型數據整型分類有符號型:[signed]int:基本整型短整型([signed]short[int])長整型([signed]long[int])無符號型:無符號整型(unsignedint)無符號短整型(unsignedshort)無符號長整型(unsignedlong)在內存中的存放形式(P41,P44)取值范圍(P43)整型數據整型常量基本型(int)常量表示方法:十進制數,例:12、345、0八進制數(以0開頭),例:012、045十六進制數(0x開頭),例:0x12、0x345長整型(long)常量表示方法:常數后加后綴L(l)例:43210L(43210l);0x10ACA870L;1234L無符號整型常量表示方法:常數后加后綴U(u)例:4321U;43210UL;-1234U(=64302);1234U整型數據整型變量分類(P42)定義格式(P44)細節問題:溢出避免溢出:根據估計變量值的范圍,定義相應類型的整型變量實型數據(浮點型)實型變量的分類(P46)單精度(float) 例:float x,y;雙精度(double) 例:doublez;長雙精度(longdouble) 例:longdoublet;在內存中的存放形式:按指數形式存放取值范圍和有效數字長度(P46)取值范圍由小數部分和指數部分共同決定內存中,小數域的長度決定的該種類型浮點數的有效位數。例如:float型,小數部分為24bit,小數域的長度為24-1=23bit,223=8388608,有7位有效數字數符小數階符指數小數部分指數部分實型數據(浮點型)細節問題:舍入誤差(P47):一個浮點型數據的有效數字長度有限的,在有效位以外的數據會被省去,這樣可能會產生誤差例3.4實型數據實型常量兩種表示方法:十進制數形式和指數形式例:10.0(實數常量)而10(整型常量)例:1.234e4也可以在實常量加后綴F(f)實型變量分類(P46)定義格式(P47)字符型數據字符數據的存儲字符在內存單元中存放的是其對應的ASCII碼(P374),且一個字符占用一個字節的存儲空間C語言中,字符型數據可以視為是一種特殊的整型數據(8bit的整數)。字符型數據可以賦值為整數值(ASCII值,0~255),字符數據可以以字符形式輸出,也可以用整數形式輸出。例3.6可以對字符型數據進行算術運算例3.7字符數據的存儲(續)在TurboC中把字符處理為帶符號的整數ASCII碼取值為0~255,所以ASCII碼值為128~255間的字符,最高位為1(即符號位)例:求下段代碼的輸出
char c=130
printf("c=%d",c);解:C在內存中:
10000010補=-126
所以打印出來c=-12610000010字符型數據字符常量一般字符常量的表示:撇號(單引號)括起來的單個字符例:'a';'F','0','+'特殊字符常量(鍵盤無法直接輸入):特點由'\'轉義字符引導(P48)例:'\n':換行符例:'\\':反斜杠例:'\016':對應ASCII碼值為14的字符(見P374)字符型數據字符串常量用雙引號括起來的字符序列例:"abcd","a"(區別字符常量'a')存儲形式(P52)系統自動在字符串的末尾加上一個字符串結束標記‘\0’,以此判斷字符串是否結束。程序中長度為n個字符的字符串常量,在內存中需要用n+1個字節空間來存儲它。舉例:字符串“string”的存儲string\01151161141051101030字符型數據字符變量字符變量用來存放字符常量只能放一個字符例:charch='a';變量賦初值C語言允許在定義變量時對變量進行初始化,即對變量賦初值。例::
對變量進行初始化,允許只對定義的變量的一部分賦初值。例:inta,b,c=25;
例:inta,b=c=25;
XC語言中若有幾個變量初值相同,必須分別賦值。對字符型變量初始化時,既可以將字符用單引號括起來直接賦值,也可以使用該字符的ASCII碼進行賦值。例:charch=‘A’; charch=65;inta=2;inta;a=2;基本的算術運算符:+-*/%乘法運算(*),例:2*y,而2y和2?y都是非法的除法運算(\),兩個操作數中:均是整數,其值為整數。例:8/3=2有一個負整數操作數,結果向零取整。例:-5/3-2有一個浮點數,其結果為double型模運算(%),例:7%4=3兩個操作數必須都是整型算術運算符算術表達式算術表達式:用算術運算符和括號將運算對象(操作數)連接起來,符合C語法規則的式子運算對象(操作數):包括常量、變量、函數例:x+sqrt(a+b)/(abs(a-b)+x)
=運算符(包括算術運算符)具有優先級與結合性算術表達式求值時,先確定優先級,例*、/、%、+、-相同優先級,根據運算符的結合性(結合方向)確定執行順序算術運算符結合方向:從左向右例如:x+y*3/(z-8)算術表達式強制類型轉換符將一個表達式的值轉換為所需類型的值強制類型轉換符格式:(類型名)(表達式)例:a是int型,而(double)a:將a的值轉換為double型例:(int)(x+y)(區別:(int)x+y)強制類型轉換符并不改變操作變量的類型值,例3.8強制類型轉換符自增、自減運算符(++,--)++i,--i:先自增/減,再使用i(i值已修改)i++,i--:先使用i(i值已修改),再自增/減例:例:j=i++;j=i;i=i+1;j=++i;i=i+1;j=i;區分:j=i+1;/*i值未變*/j=++i;/*i值改變*/自增、自減運算符自增、自減運算符只能用于變量,而不能用于常量和表達式例:PRICE++X;5++X;(a+b)++X;(-b)++X自增、自減運算符優先級高于算術運算符,結合方向“自右向左”例:如果i=3,那么printf("%d",-i++)輸出是幾?i值又為幾?格式:變量=表達式/常量/變量例:a=(x+y);x=3;x=y;作用:將等號右邊的表達式/常量/變量的值賦值給等號左邊變量區別賦值運算符與數學中的”等于“賦值,例賦值運算符i=3;j=i;3i存儲單元3j存儲單元整型與浮點型浮點型數據
整型變量:取整(舍掉實數的小數部分)整型數據
浮點型變量(單,雙精度):數值不變,以浮點形式存儲到變量中浮點型間double型數據float型變量:截取前面7位有效數字存放到變量中,注意避免數值范圍溢出float型變量
double型數據:數值不變,有效數字擴展到16位賦值結果與類型轉換整型之間長度相同的有符號和無符號的整型數間:原樣賦值整型包括:char,short,int,long負值
無符號整型變量,無符號整數
整型變量間轉換時,數值會變化。例3.9賦值結果與類型轉換1111111111111111intb=-1;1111111111111111unsigneda=b;/*a=216-1=65535*/賦值結果與類型轉換整型之間長度不同的有符號整型數(char,short,int,long)間:短數據
長變量:需要符號擴展
符號擴展:若最高位為1(負值),變量高字節補1,反之補0。例11111110charc='\376';1111111111111111inta=c;賦值結果與類型轉換整型之間長度不同的有符號整型數(char,short,int,long)間:長數據
短變量:將數據低字節位原封不動地送到變量中例1000000000001000intb=a;/*b=-32760*/00000000011000001000000000001000longa=6324232L;幾個需要注意的問題子表達式的求值順序運算符的結合規律實參數的求值順序第三章數據類型、運算符與表達式C語句概述語句(statement):指示計算機完成一定操作任務的指令。一條語句
編譯
若干條機器指令聲明:數據的描述,而語句:對數據的操作每條語句以分號(;)結束C程序結構C程序源程序文件1源程序文件2源程序文件N預處理指令全局變量聲明函數1函數n函數首部函數體局部變量聲明執行語句C語句的分類控制語句選擇語句:if–else;switch循環語句:for()~while()~do~while()轉向語句break;continuegoto;returnC語句的分類函數調用語句格式:函數名(參數表);例:printf("Helloworld\n");表達式語句格式:表達式;例:i++;例:a=x+y;重要的表達式語句:賦值語句格式:賦值表達式;例:a=3; 例:if((a=b)>0)t=a;/*區別與賦值表達式的區別,P69*/區別:賦值表達式可以包含在其它表達式中,賦值語句不行C語句的分類空語句格式: ;功能:什么也不做應用:循環語句中的空循環體,例
for(i=0;I<1000;i++)
;在程序開發過程中起到占位的作用,例
...
;/*某一功能暫時未完成,有待今后補齊代碼*/C語句的分類復合語句(語句塊)格式:
{
語句1;
語句2;
...
語句N;
}復合語句中}后無分號復合語句在語法上相當于一條語句在復合語句中(語句塊中),可以聲明變量數據的輸入、輸出C語言沒有專門的輸入/輸出(I/O)語句I/O操作由標準庫函數提供源文件必須包含I/O庫函數所對應的頭文件(stdio.h)方法:在源文件頂部,添加#include"stdio.h"標準I/O設備標準輸入設備:鍵盤標準輸出設備:顯示器字符輸出函數putchar功能:向標準輸出(顯示器)輸出一個字符調用方式:putchar(c);參數c可以是字符型或者整型常量、變量、表達式例: 例:#include"stdio.h"main(){charc1='a',c2=97;putchar(c1);putchar(c2);putchar('a');putchar(97);}#include"stdio.h"main(){putchar('a');putchar('\n');putchar('\141');}字符輸入函數getchar功能:從標準輸入(鍵盤)輸入一個字符調用方式:getchar();使用注意無參數,函數返回值就是從標準輸入得到的字符輸入時,按回車后,才開始接收字符只能接收第一個字符,多余的字符將省略getchar()得到的字符可以賦給字符型,整型變量,或作為表達式的一部分例:c=getchar()+('a'–'A');字符輸入函數getchar例:例:#include"stdio.h"main(){charc;printf("Enteracharacter:");c=getchar();putchar(c);}#include"stdio.h"main(){printf("Enteracharacter:");putchar(getchar());}格式輸出函數printf功能:向標準輸出(顯示器)按照指定格式輸出任意類型的數據。調用方式:printf(格式控制,輸出表);例:printf("Answer=%d\n",11);例:printf("Helloworld!\n");雙引號括起來的字符串要輸出的內容,包括:常量、變量、表達式格式控制格式控制符的組成:普通字符:原樣輸出例:printf("a+b=12,\141\n");格式轉換說明:將要輸出的數據轉換為指定格式輸出每一個格式轉換說明都由%引導,而以格式字符結束例:printf("%d%f%c",a,f1,'a');有多少個的格式轉換說明,就對應有多少個數據參數
intprintf(格式轉換說明,參數1,參數2,...);
格式轉換說明格式轉換說明組成:%-7.3f引導符格式字符表示左對齊輸出,省略表示右對齊輸出表示輸出最小寬度表示輸出精度表示引導精度值格式轉換說明例:printf("%d",12345);輸出:例:printf("%7d",12345);輸出:例:printf("%-7d",12345);輸出:例:printf("%4d",12345);輸出:例:printf("%-4d",12345);輸出:例:printf("%7.3d",12345);輸出:01234567812345
1234512345--123451234512345格式轉換說明例:printf("%f",1.2345);輸出:例:printf("%7f",1.2345);輸出:例:printf("%-7f",1.2345);輸出:例:printf("%3f",1.2345);輸出:例:printf("%9f",12345);輸出:例:printf("%9.3f",12345);輸出:例:printf("%.3f",12345);輸出:例:printf("%-9.3f",12345);輸出:0123456781.2345001.2345001.2345001.2345001.2345001.2341.2341.234格式轉換說明例:printf("%s","hello");輸出:例:printf("%9s","hello");輸出:例:printf("%-4s","hello");輸出:例:printf("%.3s","hello");輸出:例:printf("%9.3s","hello");輸出:例:printf("%-9.3s","hello");輸出:012345678hellohellohellohelhelhel------格式轉換說明注意:printf函數默認是右對其輸出寬度值m:輸出的最小寬度,如果沒有指定精度,按數值的實際長度輸出如果數值的位數>m,則直接按數值的位數輸出如果數值的位數<m,則補齊位數(默認用空格)精度值:整型:輸出數值的最小位數,如果數值的位數>m,則直接按數值的位數輸出浮點型:指定實數小數點后的位數字符串:指定輸出字符串的最大位數(超出的截斷)格式字符格式字符:指定輸出數據的類型和相應的格式整型格式字符(P73-P74)d:帶符號的十進制整型u:無符號的十進制整型o:以無符號的八進制整型x:以無符號的十六進制整型ld:帶符號的十進制長整型整型格式字符例(P74例4.3)a:1111111111111111b:1111111111111110#include"stdio.h"main(){unsignedinta=65535;intb=-2;printf("a=%d,%o,%x,%u\n",a,a,a,a);printf("b=%d,%o,%x,%u\n",b,b,b,b);}輸出:a=-1,177777,ffff,65535b=-2,177776,fffe,65534格式字符c:輸出一個字符s:輸出字符串例:#include"stdio.h"main(){charc='a';printf("c=%c,%c\n",c,97);printf("%s\n","CHINA");}格式字符e:以指數形式輸出實型數據;f:以小數形式輸出實型數據;g:自動選擇f格式或e格式中寬度較小的一種輸出實數,且不打印無效的0。注意:單精度型數據,用%f輸出,前7位有效,且小數點后固定位6位雙精度型數據,用%lf輸出,前16位有效,且小數點后固定位6位printf函數注意事項輸出數據類型要與格式說明相匹配,包括類型、格式格式字符x,e,g可以是大寫字母X,E,G除x,e,g外的格式字符均為小寫如若輸出字符“%”,在“格式控制”中用連續兩個“%”即可長度修正符:h(short):只能修飾整型數據l(long):修飾整型數據——輸出長整型,修飾浮點型——輸出雙精度格式輸入函數scanf功能:將用戶從標準輸入輸入的數據存儲到由變量地址所指定的內存空間。調用格式:scanf(格式控制,變量地址表);“格式控制”部分同printf函數,但有區別(無精度控制)。“地址表”由變量地址組成,表明每個輸入項應在存儲單元的首地址。獲取變量首地址的格式:&變量名例:#include"stdio.h"main(){charc;inti;
scanf("%c%d",&c,&i)}......變量c
地址
內存
80A580A680A780A880A980AD變量i
格式輸入函數scanf格式控制:與printf函數中的格式控制相似每一個格式轉換說明都由%引導,而以格式字符結束例:scanf("%d%i%f",&i1,&i2,&f);格式字符(P80)對于無符號整型,可使用u,o,x格式符i,表示可以用十進制(123),也可用八進制(0123),和十六進制(0x123)輸入;而格式符d只能輸入十進制整型附加格式說明字符:l,h,*,域寬(P80)scanf函數注意事項輸入數據的分割采用隱含的分隔符:空格、回車、Tab鍵根據格式中指定的域寬分隔數據項(不提倡)采用用戶指定的分隔符,即在格式控制字符串內除格式說明以外的其它字符,輸入數據時都應照樣輸入例:scanf("input%d,%d",&a,&b);
在輸入時應鍵入:input2,3輸入無符號數據時,應采用o,x格式符引例計算函數值:輸入xX=0?
YNy=1y=six/x
輸出y#include"stdio.h"#include"math.h"main(){floatx,y;printf("inputx:\n");scanf("%f",&x);if(x!=0.0)y=sin(x)/x;elsey=1;printf("y=%f",y);}關系運算符關系運算實際上是“比較運算”<<=>>=(優先級相同)==!=(優先級相同)優先級:算術運算符關系運算符賦值運算符結合方向:從左向右例:c>a+b
c>(a+b)a==b>ca==(b>c)a=b==ca=(b==c)低高低高關系表達式關系表達式:用關系運算符將兩個表達式(算術表達式,字符表達式,關系表達式,邏輯表達式,賦值表達式)連接起來的式子例:x+y>5'a'=='A' 字符量比較:根據ASCII值(4*2)>(4==2) 關系表達式的值:“真”(1)或“假”(0)
例:a=3,b=2,c=1則:a>b的值為真,表達式的值為1a>b==c的值為真,表達式的值為1b+c<a的值為假,表達式的值為0b+c<=a的值為真,表達式的值為1例:a=3,b=2,c=1,如果d=a!=
b==c,則d=1邏輯運算符邏輯運算符:&&邏輯與例:a&&b,若a,b都為真,則邏輯表達式值為真。||邏輯或例:a||b,若a,b都為假,則邏輯表達式值為假,(換言之:a,b中有一個為真,則邏輯表達式值為真)。!邏輯非例: !a,若a為真,則邏輯表達式值為假;反之依然。真值表(P89)邏輯運算符優先級:!&&||結合順序:!:從右向左&&和||:從左向右例:!a||b&&x>y&&c
(!a)||
b&&(x>y)&&c低高低高!(非)
算術運算符關系運算符&&
||賦值運算符各種運算符的優先級12345邏輯表達式邏輯表達式:用邏輯運算符將關系表達式或邏輯量連接起來的式子邏輯量:用來進行判斷的變量或者常量C編譯系統認為:值等于零:假非零值:真例:若a=4,在a&&1中,a就是邏輯量,代表真邏輯表達式的值:真為1,假為0例:若a=4,則:!a 0a&&-5 1a||0 1a&&0 0邏輯表達式例:a=3,b=2,c=1則:a>b&&b>c(a>b)&&(b>c)a!=b&&b!=c(a!=b)&&(b!=c)!a||c>a(!a)||(c>a)例:5>3||
2&&
!8<4-!0,結果為1例:判斷某年year是否是閏年(閏年:能被4整除,且不能被100整除,或者能被400整除)year%4==0&&year%100!=0||year%400==0
例:x≤a+1,并且y≤b,C語言邏輯表達式:x<=a+1&&y<=b例 的定義域(x>2||x<1)&&x!=0if語句if語句的三種形式:條件執行格式:if(判斷條件p)
語句A;例:例A空p真假if(a>0)printf("a=%dispositive\n",a);...if(x>y){ temp=x;x=y;y=temp;}...條件執行注意:語句A可以是復合語句判斷條件P是一個表達式,如果值為0
假,非0
真例:例:例:if('a')printf("OK\n");x=-1;
if(x)printf("OK\n");y=0;
if(y)printf("OK\n");例:任給a,b,c三數,按從大到小順序輸出(1/2)例:任給a,b,c三數,按從大到小順序輸出方法:判斷-交換若a<b,則a,b交換若a<c,則a,c交換a最大若b<c,則b,c交換c最小判斷——ifelse語句交換:需引入臨時變量
tmp=a;a=b;b=tmp;例:任給a,b,c三數,按從大到小順序輸出(2/2)交換a,bBa<b真假輸入a,b,c交換a,cBa<c真假交換b,cBb<c真假輸出a,b,c#include"stdio.h"main(){inta,b,c;inttmp;printf("Inputa,b,c:\n");scanf("%d%d%d",&a,&b,&c);if(a<b){tmp=a;a=b;b=tmp}if(a<c)tmp=a;a=c;c=tmp;}if(b<c){tmp=b;b=c;c=tmp;}printf("%d,%d,%d\n",a,b,c);}if語句——分支選擇if語句的三種形式:分支選擇格式:if(判斷條件p)
語句A;
else
語句B;例:注意:else部分不能單獨存在,它必須是if語句的一部分語句A、B都可以是復合語句ABp真假if(a>0)printf("a=%dispositive\n",a);elseprintf("a=%disnotpositive\n",a);if語句例:輸入一個整數,判斷奇偶#include"stdio.h"main(){inta;printf("Inputinteger:\n");scanf("%d",&a);if(a%2)printf("%disanodd\n",a);elseprintf("%disaeven\n",a);}if語句——階梯式if語句的三種形式:多分支選擇(稱為
階梯式ifelse或elseif語句)格式:if(判斷條件p1)
語句A1
elseif(判斷條件p2)
語句A2
elseif(判斷條件p3)
語句A3
else
語句A4注意:執行順序:從上向下逐個判斷條件pi,一旦發現條件pi滿足,執行Ai,并跳過剩余的階梯最后一個else表示除了以上所有條件(p1、p2、p3)外的情況下,有時可以省略else與最近的if語句匹配A1p2p1真假真假A2p3真假A3A4if語句例:評價學生成績,規則:score>=90,Ascore>=80,Bscore>=60,Cscore<60,D#include"stdio.h"main(){intscore;printf("Inputscore:\n");scanf("%d",&score);if(score>=90)printf("%dgreedisA\n",score);elseif(score>=80)printf("%dgreedisB\n",score);elseif(score>=60)printf("%dgreedisC\n",score);else printf("%dgreedisD\n",score);printf("finish\n");
}if語句例:判斷輸入的字符是數字、大寫字母、小寫字母或其他字符。#include<stdio.h>intmain(){ charc; printf("Enteracharacter:"); c=getchar(); if(c>='0'&&c<='9') printf("Digit!\n"); elseif(c>='A'&&c<='Z') printf("Uppercase!\n"); elseif(c>='a'&&c<='z') printf("Lowercase!\n"); elseprintf("Othercharater!\n");}if語句的嵌套標準格式
if(P1)
if(P2)
A1;
else
A2;
else
if(P3)
A3;
else
A4;P1真假P2真假P3真假A1A2A3A4if語句的嵌套標準格式
if(P1)
if(P2)
A1;
else
A2;
else
if(P3)
A3;
else
A4;格式1
if(P1)
A1;
else
if(P2)
A2;
else
A3;格式2
if(P1)
if(P2)
A1;
else
A2;
else
A3;else與最近的if語句匹配
if(P1)
if(P2)
A1;
else
if
(P3)
A3;
else
A4;if語句的嵌套注意:else與最近的if語句匹配例:
if(x>0)
if(y==1)printf("1");
elseprintf("2");通過加{}可以改變else的層次例
if(x>0){
if(y==1)printf("1");
}
elseprintf("2");例:斷某一年是否是閏年(被4整除且不被100整除,或者被400整除)#include"stdio.h"main(){intyear,flag;scanf(“%d”,%year);if(year%400==0)flag=1;elseif(year%4==0) if(year%100==0)flag=0; elseflag=1;elseflag=0;if(flag) printf("%disleapyear\n",year);else printf("%disnotaleapyear\n",year);}flag=1year%4year%400真假真假
year%100真假flag=0flag=1flag=0輸入yearflag真假輸入閏年輸入非閏年例:斷某一年是否是閏年(被4整除且不被100整除,或者被400整除)#include"stdio.h"main(){intyear,flag;scanf(“%d”,%year);if(year%400==0)flag=1;elseif(year%4==0) if(year%100==0)flag=0; elseflag=1;elseflag=0;if(flag) printf("%disleapyear\n",year);else printf("%disnotaleapyear\n",year);}if(year%4!=0)flag=0;elseif(year%100!=0)flag=1;elseif(year%400==0)flag=1;elseflag=0;if(year%4==0&&year%100||year%400==0)flag=1;elseflag=0;條件運算符唯一的三目運算符格式:表達式1?表達式2:表達式3例:x=a>b?a:b
等價if(a>b)x=a;
elsex=b;優先級:高于賦值運算賦,低于算術、條件、邏輯運算符結合方向:從右向左例:a>b?a:c>d?c:d等價a>b?a:(c>d?c:d)
switch語句和break語句switch語句:是專門用于實現多分支選擇的語句break語句:終止switch語句的執行格式:
switch語句的一般形式:
switch(表達式){
case常量表達式1:語句1
case常量表達式2:語句2
……
case常量表達式n:語句n
[default:語句n+1]
}執行過程:計算表達式若與常量表達式i一致,開始執行,直到遇到break語句或switch語句的}時結束若與所有常量表達式均不一致,執行default后的語句switch語句switch語句中的“表達式”和case后面的“常量表達式”的結果值的類型應該一致。每一個case的常量表達式的值必須互不相同,否則出現矛盾現象。各個case的出現次序不影響執行結果。執行完一個case后面的語句后,流程控制轉移下一個case繼續執行。default語句為選擇項,可有可無。另外,default后面可以不加break語句。多個case可以共用一組執行語句,如例:
…
case‘A’:
case‘B’:
case‘C’:printf(“>60\n”);break;Grade的值為‘A’、‘B’、‘C’時都執行同一組語句。概述循環結構:在給定條件成立時,反復執行某程序段,直到條件不成立為止。給定的條件稱為循環條件,反復執行的程序段稱為循環體。實現循環的四種語句用goto語句和if語句構成循環;(不提倡)用while語句;(while型循環,先判斷,再執行)用do-while語句;(先執行,再判斷)用for語句;(多功能)goto語句以及用goto語句構成循環goto語句功能:無條件地轉向語句標號所在的語句行出開始執行格式為:goto語句標號;語句標號:屬于標識符,命名規則與變量相同不提倡使用,會破壞結構化,例: 例:求1+2+3…+100的和
for(...)for(...){...if(disaster)gotoerror;}...error:printf(“ERROR\n”);#inclu
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年房地產投資分析師資格考試試卷及答案
- 小動物的冒險故事童話故事11篇
- 傳承文化走進民間藝術展覽話題6篇
- 電商平臺技術升級與服務協議
- 語言學概論中的語言與文化關系研究試題
- 2025年陰極銅項目申請報告
- 云朵上的奇思妙想童話作文(9篇)
- 2025年輔導員職位選拔考試:學生活動策劃與活動策劃效果評估案例分析試題
- 2025年度企業人力資源管理師(研究員)技能操作試題詳解
- 旅游目的地開發及推廣合作協議
- 【獨立儲能】山西省獨立儲能政策及收益分析-中國能建
- 租賃保證金保證書樣式
- 2024-2030年中國氯化聚醚行業市場運行狀況及前景趨勢分析報告
- 眼科結膜病診療規范2023版
- 甘肅省蘭州市2023-2024學年八年級下學期期末考試英語試卷
- 小小科學家《物理》模擬試卷A(附答案)
- 用S7200編寫搖臂鉆床PLC程序梯形圖
- 2023年北京朝陽初二(下)期末物理試卷及答案
- 2024屆山西省太原市重點中學高三適應性調研考試生物試題含解析
- 心臟瓣膜病疑難病例討論
- 護理人文關懷模版
評論
0/150
提交評論