




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
順序結(jié)構(gòu)流程及應(yīng)用第一節(jié)標(biāo)識符與關(guān)鍵字第二節(jié)基本數(shù)據(jù)類型第三節(jié)常量與變量第四節(jié)常用運算符和表達式第五節(jié)數(shù)據(jù)的輸出和輸入第六節(jié)程序算法基礎(chǔ)第七節(jié)順序結(jié)構(gòu)程序設(shè)計第八節(jié)項目任務(wù):軟件用戶界面設(shè)計第一節(jié)標(biāo)識符與關(guān)鍵字一、基本字符一個C程序也可以看成是由C語言的基本字符按一定的規(guī)則組成的一個序列。C語言中使用的基本字符包括:任何程序設(shè)計語言都規(guī)定了自己的一套基本符號和詞匯,C語言也不例外。數(shù)字字符:0-9大小寫英文字母:a-z,A-Z其他可打印字符:!#%^&+-*/_(下劃線)=<>/\|.,:?;"'()[]{}空白字符:空格符、換行符、制表符等二、標(biāo)識符程序中用來標(biāo)識變量名、函數(shù)名、數(shù)組名、數(shù)據(jù)類型名等的有效字符序列稱為標(biāo)識符。簡單地說,標(biāo)識符就是一個名字。在C語言中,標(biāo)識符的命名規(guī)則為:① 有效字符:只能由英文字母(A~Z、a~z)、數(shù)字(0~9)和下劃線(_)三類符號組成,但第一字符必須是字母或下劃線。② 有效長度:隨系統(tǒng)而異,但至少前8個字符有效;如果超長,則超長部分被舍棄。③ C語言的關(guān)鍵字(或稱保留字)不能用做標(biāo)識符。例如,下面的標(biāo)識符是合法的:sum、DAY、n2、_average、a_5、student_2_name下面是不合法的標(biāo)識符:num-1、a#3、2stud、!sum_2、number.3【建議】定義標(biāo)識符應(yīng)做到“見名知意”,以增加程序的可讀性。三、標(biāo)識符關(guān)鍵字關(guān)鍵字又稱為保留字,是C語言編譯系統(tǒng)所固有的、具有專門意義的標(biāo)識符。C語言的關(guān)鍵字有32個,一般用作C語言的數(shù)據(jù)類型名或語句名,如表2.1所示。表2.1C語言關(guān)鍵字typedefvoidautoexternunsignedforlongdefaultstaticregisterCharbreakconstwhileshortiffloatswitchdoubleContinueenumgotostructelsevolatilereturnintcasesignedsizeofuniondo【說明】所有關(guān)鍵字的字母均采用小寫,關(guān)鍵字不能再作為用戶的常量、變量、函數(shù)和類型等的名字。第二節(jié)基本數(shù)據(jù)類型C語言提供了極其豐富的數(shù)據(jù)類型,在這些數(shù)據(jù)類型中除被稱為基本數(shù)據(jù)類型的整型、實型和字符型外,數(shù)組、結(jié)構(gòu)體、共用體和枚舉類型是由基本數(shù)據(jù)類型組合成的構(gòu)造類型,而指針是一種使用靈活的數(shù)據(jù)類型。1.數(shù)據(jù)現(xiàn)實生活中有大量的數(shù)據(jù)需要管理。例如,每個班級中學(xué)生的姓名、性別、照片、出生日期、入學(xué)成績等。從計算機學(xué)科的角度來說,數(shù)據(jù)是指能被計算機存儲和處理、反映客觀事物的符號,計算機處理的數(shù)據(jù)不僅有數(shù)字、字符、符號,還有圖像、聲音等。2.數(shù)據(jù)類型在C語言中,數(shù)據(jù)類型分為基本類型、構(gòu)造類型、指針類型和空類型四類。構(gòu)造類型又分為數(shù)組類型、結(jié)構(gòu)類型、共用類型和枚舉類型?;绢愋陀址譃閿?shù)值型和字符型兩類。數(shù)值型又分為整型和實型兩類。例如,姓名、性別等是字符型數(shù)據(jù),入學(xué)成績等是可以進行數(shù)學(xué)運算的數(shù)值型數(shù)據(jù)。如圖2.1所示。圖2.1C語言的數(shù)據(jù)類型C語言對不同類型的數(shù)據(jù)規(guī)定了不同的組織形式和運算方法,對不同類型的數(shù)據(jù)在內(nèi)存中分配不同長度的存儲空間。本章只介紹基本數(shù)據(jù)類型中的整型、實型和字符型,其余類型將在以后各章節(jié)中陸續(xù)介紹。一、整型數(shù)據(jù)數(shù)值型數(shù)據(jù)可以分為整型和實型兩類。整型數(shù)是不帶小數(shù)點的數(shù),根據(jù)整型數(shù)的數(shù)值范圍和是否帶有符號,可以進一步把整型數(shù)細分為短整型、整型、長整型、無符號短整型、無符號整型、無符號長整型。它們的類型標(biāo)識符、數(shù)值范圍和在內(nèi)存中占用的字節(jié)數(shù)如表2.2所示。表2.2整型數(shù)據(jù)分類名稱類型說明符數(shù)值范圍長度短整型short-32768~327672字節(jié)整型int-32768~327674字節(jié)長整型long-2147483648~21474836474字節(jié)無符號短整型unsignedshort0~655362字節(jié)無符號短整型unsignedint0~655362字節(jié)無符號長整型unsignedlong0~42949672954字節(jié)二、實型數(shù)據(jù)實型數(shù)就是數(shù)學(xué)中的實數(shù),主要用來處理帶小數(shù)點的數(shù)。根據(jù)實型數(shù)的數(shù)值范圍,可以進一步把實型數(shù)細分為單精度型和雙精度型兩類。它們的類型標(biāo)識符、數(shù)值范圍和在內(nèi)存中占用的字節(jié)數(shù)如表2.3所示。表2.3實型數(shù)據(jù)分類名稱類型說明符數(shù)值范圍長度單精度型float約-3.4×1038~3.4×10384字節(jié)雙精度型double約-1.7×10308~1.7×103088字節(jié)三、字符型數(shù)據(jù)字符型數(shù)據(jù)可分為字符和字符串兩類。字符是用一對單引號括起來的一個字符,字符串是用一對雙引號括起來的一個或多個字符。例如,'z'和'Z'都是字符數(shù)據(jù),而"abcde"和"CFREE"則是字符串。字符數(shù)據(jù)的類型標(biāo)識符為char,它在內(nèi)存中占用1個字節(jié)。第三節(jié)常量與變量對于基本數(shù)據(jù)類型量,按其取值是否可改變又分為常量和變量兩種。它們可與數(shù)據(jù)類型結(jié)合起來分類。例如,可分為整型常量、整型變量、浮點常量、浮點變量、字符常量、字符變量。在程序中,常量可以不經(jīng)說明而直接引用,而變量則必須先定義后使用。一、常量在程序執(zhí)行過程中,其值不能被改變的量稱為常量。在C語言中,常量不需要類型說明就可以直接使用,常量的類型由常量本身隱含決定的。如12、0、-7為整型常量,3.14、-2.8為實型常量,‘a(chǎn)’、‘b’、‘c’則為字符型常量,‘a(chǎn)bcdfr’、‘C-FREE’則為字符串常量。這些常量稱為直接常量,一般從其字面形式即可判別。有時為了使程序更加清晰和便于修改,用一個標(biāo)識符來代表常量,即給某個常量取個有意義的名字,這種常量稱為符號常量。符號常量在使用之前必須先定義,其一般形式為:#define標(biāo)識符常量其中#define也是一條預(yù)處理命令(預(yù)處理命令都以“#”開頭),稱為宏定義命令,其功能是把該標(biāo)識符定義為其后的常量值。一經(jīng)定義,以后在程序中所有出現(xiàn)該標(biāo)識符的地方均代之以該常量值?!景咐?-1】符號常量的使用。程序代碼如下:#definePI3.14main(){floatarea,r;r=10;area=r*r*PI;printf("r=10aera=%f\n",area);r=5;area=r*r*PI;printf("r=5aera=%f\n",area);}運行結(jié)果:r=10aera=314.000000r=5aera=78.500000【注意】符號常量也是常量,它的值在其作用域內(nèi)不能改變,也不能再被賦值。二、變量在程序執(zhí)行過程中,其值可被改變的量稱為變量。一個變量必須有一個名字,在內(nèi)存中占據(jù)一定的存儲單元,在該存儲單元中存放變量的值。1.變量的定義在C語言中,變量必須強制定義,即“先定義,后使用”,定義變量語句的一般形式如下:數(shù)據(jù)類型變量列表;變量定義時必須遵守標(biāo)識符的命名規(guī)則。例如:sum、average、_total、Class、day、month、student_name、tan、li_ling是合法的變量名,Zhang-sun、student's、263.com、$123、#33、3D64是不合法的變量名?!景咐?-2】定義變量的語句舉例。inta; /*定義a為整型變量*/intx,y; /*定義x、y為整型變量*/longn1,n2,n3 /*定義n1、n2、n3為長整型變量*/floatsum1,sum2; /*定義sum1、sum2為單精度型變量*/doubled1,d2; /*定義d1、d2為雙精度型變量*/charch1,ch2; /*定義ch1、ch2為字符型變量*/【提示】變量名應(yīng)簡單易記、見名知意。我們常用有含義的英文單詞作變量名,如price,grade,total等,從變量名就可以大體了解該變量的作用。2.變量的賦值定義了變量后,才能給變量賦值。給變量賦值的操作由賦值運算符“=”來完成,給變量賦值語句的一般形式為:變量名=表達式;例如在案例2-1中,r是單精度型變量,它在程序運行過程分別賦以值10和值5。【說明】①給變量賦值時要特別注意賦值號左邊只能是變量名,不能是其它表達式。②變量名和變量值是兩個不同的概念。變量名在程序運行的過程中不會改變,而變量值則可以發(fā)生變化。3.變量的初始化C語言提供了靈活的定義變量和給變量賦值的方式。我們可以先定義變量,再給變量賦值。也可以在定義變量時對變量進行賦值,也稱變量初始化。就像下面的語句一樣:inta=1,b=5;charch1='c',ch2='C';floatx1,x2=3.5;其中,第1條語句定義a、b為整型變量,且給變量a賦值為1,變量b賦值為5。第2條語句定義ch1.ch2為字符型變量,且給變量ch1賦值為'c',變量ch2賦值為'C'。第3條語句定義x1.x2為單精度型變量,但只給變量x2賦值為3.5。第四節(jié)常用運算符和表達式運算是對數(shù)據(jù)進行加工的過程,用來表示各種不同運算的符號稱為運算符。參加運算的數(shù)據(jù)稱為運算對象或操作數(shù)。用運算符把運算對象連接起來的式子稱為表達式。C語言的運算符相當(dāng)豐富,應(yīng)用范圍很寬廣,可完成C語言中的除了控制語句和輸入輸出語句以外的幾乎所有的基本操作。C的運算符分類見表2.4。表2.4C語言的運算符運算符種類運算符運算符種類運算符算術(shù)運算符+、-、*、/、%自增、自減運算符++、--關(guān)系運算符>、<、==、>=、<=、!=邏輯運算符!、&&、||運算符種類運算符運算符種類運算符位運算符<<、>>、-、|、^、&賦值運算符=及其擴展賦值運算符條件運算符?:逗號運算符,指針運算符*、&求字節(jié)數(shù)運算符Sizeof強制類型轉(zhuǎn)轉(zhuǎn)換運算符(類型)分量運算符.、->下標(biāo)運算符[]一、算術(shù)運算符和算術(shù)表達式(一)算術(shù)運算符C語言的算術(shù)運算符包括基本算術(shù)運算符和自增、自減運算符。1.基本算術(shù)運算符基本算術(shù)運算符如表2.5所示。表2.5基本算術(shù)運算符運算符名稱舉例運算功能+加法運算X+y求x與y的和-減法運算X-y求x與y的差*乘法運算x*y求x與y的積/除法運算x/y求x與y的和商%求余(或模)法運算X%y求x除以y的余數(shù)【案例2-3】運行下面的程序,觀察并分析基本算術(shù)運算符的用法。#include<stdio.h>main(){inta=20,b=5;printf("A=20B=5\n");printf("A與B的和是:%d\n",a+b);printf("A與B的差是:%d\n",a-b);printf("A與B的積是:%d\n",a*b);printf("A除以B的商是:%d\n",a/b);
printf("A除以B的余數(shù)是:%d\n",a%b);}2.強制類型轉(zhuǎn)換運算符強制類型轉(zhuǎn)換可以將一個表達式轉(zhuǎn)換成所需的類型。其格式為:(類型名)表達式例如:(float)a /*將a轉(zhuǎn)換成float型*/(int)(x+y) /*將x+y的值轉(zhuǎn)換成int型*/(int)x+y/*將x的值轉(zhuǎn)換成int型*/注意:①強制類型轉(zhuǎn)換不能寫成float(a)。②(int)x+y是將x轉(zhuǎn)換成int型。而(int)(x+y)是將x+y的值轉(zhuǎn)換成int型3.自增、自減運算符自增、自減運算符是單目運算符,即僅對一個運算對象施加運算,運算結(jié)果仍賦予該運算對象。表2.6列出了自增、自減運算符的種類和功能。表2.6自增、自減運算符【案例2-4】運行下面的程序,觀察并分析自增和自減運算符的運算規(guī)則#include<stdio.h>main(){inta,b,c,d,e,f,g,h;a=5;b=5;c=5;d=5;e=a++;f=++b;g=c--;h=--d;printf("a的初值=5\te=a++值為%d\ta=%d\n",e,a);運算符名稱舉例等價于++加1i++或++ii=i+1--減1i--或--ii=i-1printf("b的初值=5\tf=++b值為%d\tb=%d\n",f,b);printf("c的初值=5\tg=c--值為%d\tc=%d\n",g,c);printf("d的初值=5\th=--d值為%d\td=%d\n",h,d);}運行結(jié)果:a的初值=5 e=a++值為5a=6b的初值=5 f=++b值為6 b=6c的初值=5 g=c--值為5 c=4d的初值=5 h=--d值為4 d=4從本例的操作結(jié)果可以看出,表達式a++與++a的值不同,表達式a--與--a的值也不同。對于a++,系統(tǒng)先計算表達式的值,再進行a增1的運算;而對++a,則先進行a增1的運算,再計算表達式的值。類似地,a--是先計算表達式的值,再進行a減1的運算;而對--a,則先進行a減1的運算,再計算表達式的值?!咀⒁狻孔栽鲞\算符(++)或自減運算符(--)只能用于變量,而不能用于常量或表達式。(二)算術(shù)表達式用算術(shù)運算符、圓括號將運算對象(或稱操作數(shù))連接起來的符合C語法規(guī)則的式子,稱為C算術(shù)表達式。其中運算對象可以是常量、變量、函數(shù)等。1.算術(shù)表達式的書寫形式C算術(shù)表達式的書寫形式與數(shù)學(xué)中表達式的書寫形式是有區(qū)別的,在使用時要注意以下幾點:C表達式中的乘號不能省略。例如:數(shù)學(xué)式b2-4ac,相應(yīng)的C表達式應(yīng)寫成b*b-4*a*c。C表達式中只能使用系統(tǒng)允許的標(biāo)識符。例如:數(shù)學(xué)式πr2相應(yīng)的C表達式應(yīng)寫成3.1415926*r*r。C表達式中的內(nèi)容必須書寫在同一行,不允許有分子分母形式,必要時要利用圓括號保證運算的順序。例如:數(shù)學(xué)式相應(yīng)的C表達式應(yīng)寫(a+b)/(c+d)。C表達式不允許使用方括號和花括號,只能使用圓括號幫助限定運算順序??梢允褂枚鄬訄A括號,但左右括號必須配對,運算時從內(nèi)層圓括號開始,由內(nèi)向外依次計算表達式的值。2.算術(shù)運算符的優(yōu)先級和結(jié)合性優(yōu)先級:是指當(dāng)一個表達式中如果有多個運算符時,則計算是有先后次序的,這種計算的先后次序稱為相應(yīng)運算符的優(yōu)先級。結(jié)合性:是指當(dāng)一個運算對象兩側(cè)的運算符的優(yōu)先級別相同時,進行運算(處理)的結(jié)合方向。按“從右向左”的順序運算,稱為右結(jié)合性;按“從左向右”的順序運算,稱為左結(jié)合性。表2.7中給出了算術(shù)運算符的優(yōu)先級和結(jié)合性。在算術(shù)表達式中,若包含不同優(yōu)先級的運算符,則按運算符的優(yōu)先級別由高到低進行運算;若表達式中運算符的優(yōu)先級別相同時,則按運算符的結(jié)合方向(結(jié)合性)進行運算。表2.7算術(shù)運算符的優(yōu)先級和結(jié)合性二、關(guān)系運算符和關(guān)系表達式(一)關(guān)系運算符關(guān)系運算是對兩個操作數(shù)之間進行比較的運算符,其運算結(jié)果為邏輯值或“布爾”(boolean)值,其值只有兩種可能“真”或“假”,C語言提供了六種關(guān)系運算符,如表2.8所示。運算種類結(jié)合性優(yōu)先級++、--從右到左高↓低*、/、%從左向右+、-從左向右表2.8關(guān)系運算符運算符名稱示例運算功能運算符名稱示例運算功能>大于a>ba大于b>=大于等于a>=ba大于等于b<小于a<ba小于b<=小于等于a<=ba小于等于b==等于a==ba等于b!=不等于a!=ba不等于b【注意】表中的雙字符運算符必須連著寫,中間不能有空格或其它符號。關(guān)系運算用于對兩個數(shù)據(jù)進行比較,判斷比較的結(jié)果是否符合指定的條件。能用關(guān)系運算符進行比較的數(shù)據(jù)類型有:整型、字符型和實型,字符串則不能用關(guān)系運算符作比較。
用關(guān)系運算符比較整型或?qū)嵭蛿?shù)據(jù)時,按照數(shù)值的大小進行比較;比較字符型數(shù)據(jù)時,按照字符的ASCII碼進行比較。(二)關(guān)系表達式用關(guān)系運算符將運算對象連接起來的有意義的式子,稱為關(guān)系表達式。關(guān)系表達式中的運算對象可以是C語言中任意合法的表達式(包括常量、變量、函數(shù)等)。例如,a>=b、(a=1)>(b=2)等都是合法的關(guān)系表達式。對關(guān)系表達式運算時,要注意關(guān)系運算符的優(yōu)先級和關(guān)系表達式的值。1.關(guān)系運算符的優(yōu)先級按優(yōu)先級可以把關(guān)系運算符分成兩組。①>(大于)、>=(大于或等于)、<(小于)、<=(小于或等于)。②==(等于)、!=(不等于)。同組關(guān)系運算符的優(yōu)先級相同,第①組關(guān)系運算符的優(yōu)先級高于第②組。例如,“==”與“!=”的優(yōu)先級相同?!埃尽钡膬?yōu)先級高于“==”。對相同優(yōu)先級的關(guān)系運算符,按從左到右的順序進行運算。2.關(guān)系表達式的值生活中,用關(guān)系運算符比較兩個數(shù)據(jù)得到的結(jié)果只有兩種:關(guān)系成立或關(guān)系不成立。在C語言中,運算結(jié)果只有一個整數(shù)值:0或者1。即如果比較的關(guān)系成立,表達式的值為1;如果比較的關(guān)系不成立,表達式的值為0。例如,121>6的值是1,而'a'>'z'的值是0。三、邏輯運算符和邏輯表達式(一)邏輯運算符邏輯運算可以表示運算對象的邏輯關(guān)系。表2.9給出了C語言中邏輯運算的種類、功能及運算規(guī)則。表2.10給出了邏輯運算真值表,說明了當(dāng)參加邏輯運算的對象為不同組合時,各種邏輯運算得到的結(jié)果。表2.9邏輯運算符運算符名稱舉例功能運算規(guī)則!邏輯非!a非a當(dāng)運算量的值為“真”時,運算結(jié)果為“假”;當(dāng)運算量的值為“假”時,運算結(jié)果為“真”;&&邏輯與a&&ba&&b當(dāng)且僅當(dāng)兩個運算量的值都為“真”時,運算結(jié)果為“真”,否則為“假”||邏輯或a||ba或b當(dāng)且僅當(dāng)兩個運算量的值都為“假”時,運算結(jié)果為“假”,否則為“真”表2.10邏輯運算真值表ab!a!ba&&ba||b非0非00011非0001010非01001001100(二)邏輯表達式用邏輯運算符將運算對象連接起來的有意義的式子稱為邏輯表達式。邏輯表達式中的運算對象可以是C語言中任意合法的表達式。下面的3個表達式都是合法的邏輯表達式。①!9②(x>2)&&(x<15)③('a'=='a')||(9>16)【思考】請參照邏輯運算真值表,寫出上述3個表達式的結(jié)果值(設(shè)定表達式②中X的值為10)。【案例2-5】運行下面的程序,觀察并分析邏輯運算符的運算規(guī)則#include<stdio.h>main(){inta,b,c;a=3;b=4;c=5;printf("請寫出下面各邏輯表達式的值");printf("a+b>c&&b==c的值為%d\n",a+b>c&&b==c);printf("a||b+c&&b-c的值為%d\n",a||b+c&&b-c);printf("!(a>b)&&!c||1的值為%d\n",!(a>b)&&!c||1);printf("!(a+b)+c-1&&b+c/2的值為%d\n",!(a+b)+c-1&&b+c/2);}四、賦值運算符和賦值表達式(一)賦值運算基本的賦值運算符是=,由賦值運算符組成的表達式稱為賦值表達式。其一般形式為:變量名=表達式;賦值的含義是指將賦值運算符右邊的表達式的值存放到以左邊變量名為標(biāo)識的存儲單元中,例如:y=X+3假設(shè)X的值為6,則將6與3的和9放到變量y所標(biāo)識的存儲單元中,即y的值為9。賦值符號“=”不同于數(shù)學(xué)中使用的等號,它沒有相等的含義。例如x=x+1;的含義是取出變量x中的值加1后,再存入變量x中去。(二)復(fù)合賦值運算符在賦值號=之前加上某些特定運算符,可構(gòu)成復(fù)合賦值運算符,復(fù)合賦值運算符包括+=、-=、*=、/=、%=等運算符,例如:i+=j+10等價于i=i+(j+10)x*=3等價于x=x*3p%=2等價于p=p%2可以看出,復(fù)合賦值運算符的優(yōu)先級與賦值運算符的優(yōu)先級相同,且結(jié)合方向也一致?!景咐?-6】運行下面的程序,觀察并分析賦值運算符的運算規(guī)則#include<stdio.h>main(){inta=10; printf("請注意觀察下面表達式的值\n");printf("a+=2等價于a=a+2,它的值為%d\n",a+=2);printf("a-=2等價于a=a-2,它的值為%d\n",a-=2);printf("a*=2等價于a=a*2,它的值為%d\n",a*=2);printf("a/=2等價于a=a/2,它的值為%d\n",a/=2);}五、逗號運算符和逗號表達式在C語言中,逗號運算符即“,”,可以用于將若干個表達式連接起來構(gòu)成一個逗號表達式。其一般形式為:表達式1,表達式2,...,表達式n;求解過程為:自左至右,先求解表達式1,再求解表達式2,……,最后求解表達式n。表達式n的值即為整個逗號表達式的值。例如:1.a=3*5,a*4式=60a=162.a=3*5,a*4,a+5式=20a=53.a=3,a++,a+5式=9a=44.x=(a=3,6*3)x=18a=35.x=a=3,a--,6*a式=12a=2x=3第五節(jié)數(shù)據(jù)的輸出和輸入數(shù)據(jù)是程序處理的對象,輸入輸出操作是程序設(shè)計中不可缺少的部分。把數(shù)據(jù)從計算機外部設(shè)備送入計算機內(nèi)部的操作稱為“輸入”,把數(shù)據(jù)從計算機內(nèi)部送到計算機外部設(shè)備(如顯示器、打印機、磁盤等)上的操作稱為“輸出”。C語言的輸入輸出操作是通過函數(shù)來實現(xiàn)的,稱為“標(biāo)準(zhǔn)輸入輸出函數(shù)”。C語言提供的最基本的輸入輸出函數(shù)包括:scanf/printf(格式輸入/格式輸出)、getchar/putchar(字符輸入/字符輸出)和gets/puts(字符串輸入/字符串輸出)。在使用這些函數(shù)時要在程序的開頭寫上調(diào)用頭文件的命令行:#include<stdio.h>一、printf函數(shù)printf函數(shù)是C語言提供的標(biāo)準(zhǔn)輸出函數(shù),printf函數(shù)的一般調(diào)用格式為:表2.11printf函數(shù)常用的格式字符printf(“格式控制符”,輸出項列表);其中,“格式控制符”指定數(shù)據(jù)輸出的格式,通常由格式符、普通字符和轉(zhuǎn)義字符組成。普通字符按原樣輸出,轉(zhuǎn)義字符按其意義進行操作,格式符由%及一個格式字符組成,它指定對應(yīng)輸出項的輸出格式。常用的格式字符及其含義如表2.11所示。格式字符說明d按帶符號的十進制形式輸出整數(shù)(正數(shù)不輸出符號)u按帶符號的十進制形式輸出整數(shù)(正數(shù)不輸出符號)f按小數(shù)形式輸出實數(shù)(默認(rèn)輸出6位小數(shù))e按指數(shù)形式輸出實數(shù)(默認(rèn)輸出6位小數(shù))g按e和f格式中輸出寬度較短的一種輸出(不輸出無意義的0)o按八進制無符號形式輸出整數(shù)(不輸出前導(dǎo)0)x按十六進制無符號形式輸出整數(shù)(不輸出前導(dǎo)0)c按字符型輸出(只輸出一個字符)s按字符串輸出(可以輸出多個字符)【案例2-7】運行下面的程序,觀察并分析printf函數(shù)格式符用法。#include<stdio.h>main(){inta; /*定義a為整型變量*/floatb; /*定義b為單精度數(shù)*/a=321; /*給變量a賦值123*/b=321.456; /*給變量b賦值123.456*/printf("使用格式字符d輸出:%d\n",a); /*按十進制形式輸出整數(shù)*/printf(“使用格式字符u輸出:%u\n”,a); /*按無符號十進制形式輸出整數(shù)*/printf("使用格式字符o輸出:%o\n",a); /*按八進制無符號形式輸出整數(shù)*/printf("使用格式字符x輸出:%x\n",a); /*按十六進制無符號形式輸出整數(shù)*/printf("使用格式字符c輸出:%c\n",a); /*按字符型輸出一個字符*/printf("使用格式字符f輸出:%f\n",b); /*按小數(shù)形式輸出實數(shù)*/printf("使用格式字符e輸出:%e\n",b); /*按指數(shù)形式輸出實數(shù)*/printf("使用格式字符g輸出:%g\n",b); /*按e和f格式中較短的一種輸出*/}在%與控制字符d、u之間插入字符“l(fā)”或“h”,可以指定用long型或short型格式顯示數(shù)據(jù)。添加l或h的格式字符如表2.12所示。表2.12添加l或h的格式字符二、scanf函數(shù)scanf函數(shù)是C語言提供的標(biāo)準(zhǔn)輸入函數(shù),該函數(shù)的一般調(diào)用形式為:scanf(“"格式控制符”,輸入項列表);其中,“格式控制符”指定輸入數(shù)據(jù)的格式,通常由格式符和輸入分隔符組成。scan函數(shù)常用的格式字符及其含義如表2.13所示。格式字符說明ld按帶符號的十進制形式輸出長整型數(shù)(正數(shù)不輸出符號)hu按無符號的十進制形式輸出短整型數(shù)lf按小數(shù)形式輸出雙精度數(shù)表2.13scanf函數(shù)常用的格式字符格式字符說明d輸入十進制整型數(shù)u輸入無符號的十進制整數(shù)f按小數(shù)形式或指數(shù)形式輸入實數(shù)e與f的作用相同o按八進制形式輸入整數(shù)(可以帶前導(dǎo)0,也可以不帶前導(dǎo)0)x按十六進制形式輸出整數(shù)(可以帶前導(dǎo)0x,也可以不帶前導(dǎo)0x)i輸入帶前導(dǎo)0的八進制整數(shù)或帶前導(dǎo)0x的十六進制整數(shù)c輸入一個字符x輸入字符串(可以輸入多個字符)【說明】調(diào)用scanf函數(shù)輸入長整型數(shù)時,要在%與格式符d之間添加字符l,輸入雙精度數(shù)時,也要在%與格式符f之間添加字符l。否則可能出現(xiàn)錯誤的輸入結(jié)果。【案例2-8】運行下面的程序,觀察并分析scanf函數(shù)格式符用法。#include<stdio.h>main(){inta,b;printf("請輸入兩個整數(shù):");scanf("%d%d",&a,&b); /*輸入兩個整數(shù)*/printf("a=%d\tb=%d\n",a,b);}【提示】C語言默認(rèn)空格是數(shù)據(jù)之間的分隔符,按Enter鍵則表示輸入結(jié)束?!驹囈辉嚒繉⒊绦虻牡谖逍行薷臑椤皊canf("%d,%d",&a,&b);”,如何才能正確輸入?以上操作說明,如果在scanf函數(shù)的格式控制符之間插入了其它字符作為數(shù)據(jù)之間的分隔符,則輸入數(shù)據(jù)時要原樣輸入這些分隔符,否則將產(chǎn)生輸入錯誤。為了減少輸入錯誤,建議在相應(yīng)的printf語句中增加輸入數(shù)據(jù)的提示。三、getchar函數(shù)與putchar函數(shù)getchar函數(shù)可以從鍵盤輸入一個字符,putchar函數(shù)可以輸出一個字符,這兩個函數(shù)的說明存放在頭文件“stdio.h”中。1.getchar函數(shù)getchar函數(shù)調(diào)用的一般形式為:getchar();【函數(shù)功能】從標(biāo)準(zhǔn)輸入設(shè)備(一般是鍵盤)上輸入一個可打印的字符。此函數(shù)沒有參數(shù)。它將輸入字符的ASCII碼值作為函數(shù)的返回值。使用時,通常將該函數(shù)的返回值賦給一個字符型變量。2.putchar函數(shù)putchar函數(shù)調(diào)用的一般形式為:putchar(字符);【函數(shù)功能】從標(biāo)準(zhǔn)的輸出設(shè)備(通常是顯示終端)上輸出一個字符。【參數(shù)說明】“字符”指定輸出的字符,它可以是字符型變量、字符常量或字符的ASCII碼值。在使用這兩個函數(shù)時,要用include命令將頭文件“stdio.h”包括到用戶的源文件中?!景咐?-9】輸入三個小寫字母,把它們轉(zhuǎn)換成大寫字母輸出。分析:輸入字符可以使用getchar函數(shù),輸出字符可以使用putchar函數(shù)。由于小寫字母的ASCII碼值比對應(yīng)大寫字母的ASCII碼值大32,所以把小寫字母轉(zhuǎn)換為對應(yīng)的大寫字母可以通過ASCII碼值與32相減實現(xiàn)。#include"stdio.h"main(){charch1,ch2,ch3;ch1=getchar(); /*輸入一個字符*/ch2=getchar();ch3=getchar();ch1=ch1-32; /*把小寫字母轉(zhuǎn)換成大寫字母*/ch2=ch2-32;ch3=ch3-32;putchar(ch1); /*輸出一個字符*/putchar(ch2);putchar(ch3);printf("\n轉(zhuǎn)換完成!\n");}運行程序時如果輸入小寫字母boy,程序?qū)⑤敵龃髮懽帜窧OY?!咀⒁狻縢etchar函數(shù)并不是從鍵盤輸入一個字符就將該字符送給字符變量,而是等到輸入完一行字符按Enter鍵后,該行字符被輸入緩沖區(qū),然后第1個getchat函數(shù)從緩沖區(qū)中按照輸入的先后順序讀第1個字符賦給字符變量,第2個getchat函數(shù)從緩沖區(qū)中依次讀第2個字符賦給字符變量,如此類推下去。第六節(jié)程序算法基礎(chǔ)一、什么是算法人們做任何事情都有一定的方法和程序,如開會的議程、工作的流程等都是程序。在程序的指導(dǎo)下,人們可以有秩序地、有效地完成每一項工作。隨著計算機的普及,“程序”逐漸被專業(yè)化,它通常物指:為了讓計算機完成特定任務(wù)(如解決某一問題或控制某一過程)而設(shè)計的指令序列。從程序設(shè)計的角度來看,程序=數(shù)據(jù)+算法。所謂“數(shù)據(jù)”泛指計算機要處理的對象,包括數(shù)據(jù)的類型、數(shù)據(jù)的組織形式和數(shù)據(jù)之間的相互關(guān)系,這些又被稱為數(shù)據(jù)結(jié)構(gòu);所謂算法泛指對各類問題進行分析,確定解決問題的具體方法和步驟。對于面向過程的程序設(shè)計語言如C、Pascal、FORTRAN等語言,主要關(guān)注的是算法。學(xué)習(xí)高級語言的重點,就是掌握分析問題、解決問題的方法,就是鍛煉分析、分解,最終歸納整理出算法的能力。下面通過例子來介紹如何設(shè)計一個算法:【案例2-10】輸入三個數(shù),然后輸出其中最大的數(shù)。分析:定義三個變量A、B、C,將三個數(shù)依次輸入到A、B、C中,另外,再準(zhǔn)備一個MAX裝最大數(shù)。由于計算機一次只能比較兩個數(shù),我們首先把A與B比,大的數(shù)放入MAX中,再把MAX與C比,又把大的數(shù)放入MAX中。最后,把MAX輸出,此時MAX中裝的就是A、B、C三數(shù)中最大的一個數(shù)。算法可以表示如下:1)輸入A,B,C。2)若A>B,則MAX←A;否則MAX←B。3)若C>MAX,則MAX←C。4)輸出MAX,MAX即為最大數(shù)。這樣的算法已經(jīng)可以很方便地轉(zhuǎn)化為相應(yīng)的程序語句了。從該例中可以看出,遇到問題時首先分析題目,然后尋找一種實現(xiàn)這個問題所要完成功能的方法,這種方法的具體化就稱為算法。因此可以說,算法是由一套明確的規(guī)則組成的一些步驟,它指定了操作順序并通過有限個步驟來解決問題、得出結(jié)果。一個算法應(yīng)具有以下5個特性:(1)有窮性一個算法必須總是在執(zhí)行有限個操作步驟和在可以接受的時間內(nèi)完成其執(zhí)行過程。也就是說,對于一個算法,要求其在時間和空間上均是有窮的。(2)確定性算法中的每一步都必須有明確的含義,不允許存在二義性。(3)有效性算法中描述的每一步操作都應(yīng)能有效地執(zhí)行,并最終得到確定的結(jié)果。(4)輸入一個算法有零個或多個輸入數(shù)據(jù)。(5)輸出一個算法應(yīng)該有一個或多個輸出數(shù)據(jù)。執(zhí)行算法的目的是為了求解,而“解”就是輸出因此沒有輸出的算法是毫無意義的。二、算法的描述算法的表示方法很多,常用的有自然語言、傳統(tǒng)流程圖、N-S結(jié)構(gòu)圖、偽代碼等。1.用自然語言描述自然語言就是人們?nèi)粘J褂玫恼Z言,可以是中文、英文等。用自然語言表示算法通俗易懂,但一般篇幅冗長,表達上往往不易準(zhǔn)確,容易引起理解上的“歧義性”。所以,自然語言一般用于算法較簡單的情況。2.用傳統(tǒng)流程圖描述傳統(tǒng)流程圖是一組規(guī)定的圖形符號、流程線和文字處理來表示各種操作、算法的方法,美國標(biāo)準(zhǔn)化協(xié)會ANSI規(guī)定了一些常用的流程圖符號,如表2.14所示。表2.14傳統(tǒng)流程圖常用符號符號符號名稱含義起止框表示算法的開始和結(jié)束輸入輸出框表示輸入輸出操作處理框表示對框內(nèi)的內(nèi)容進行處理判斷框表示對框內(nèi)的內(nèi)容進行判斷連接點用于將畫在不同地方的流程線連接起來,表示兩個具有同一標(biāo)記的“連接點”應(yīng)連接成一個點指向線表示流程的方向用流程圖表示的算法直觀形象,比較清楚地顯示出各個框之間的邏輯關(guān)系,因此得到廣泛使用。每一個程序編制人員都應(yīng)當(dāng)熟練掌握流程圖,會看會畫(軟件專業(yè)水平考試、軟件專業(yè)資格考試也采用這種流程圖表示)。下面給出3種基本結(jié)構(gòu)及與其對應(yīng)的流程圖。順序結(jié)構(gòu):其對應(yīng)的流程圖見圖2.2。分支結(jié)構(gòu):其對應(yīng)的流程圖見圖2.3和圖2.4。循環(huán)結(jié)構(gòu):其對應(yīng)的流程圖見圖2.5和圖2.6。
圖2.2順序結(jié)構(gòu)圖2.3分支結(jié)構(gòu)一圖2.4分支結(jié)構(gòu)二3.N-S結(jié)構(gòu)圖描述針對傳統(tǒng)流程圖存在的問題,美國學(xué)者I.Nassi和B.Shneiderman于1973年提出一種新的結(jié)構(gòu)化流程圖形式,即簡稱為N-S結(jié)構(gòu)圖。Chapin在1974年對其進行了進一步擴展,因此,N-S結(jié)構(gòu)圖又稱為Chapin圖或盒狀圖。N-S結(jié)構(gòu)圖的目標(biāo)是開發(fā)一種打破結(jié)構(gòu)化基本構(gòu)成元素的過程設(shè)計表示。其主要特點是完全取消了流程線,不允許有隨意的控制流,全部算法寫在一個矩形框內(nèi),該矩形框以3種基本結(jié)構(gòu)(順序、選擇、循環(huán))描述符號為基礎(chǔ)復(fù)合而成。這種結(jié)構(gòu)圖作圖簡單,占面積小,一目了然,因而很受歡迎。圖2.5循環(huán)結(jié)構(gòu)一圖2.6循環(huán)結(jié)構(gòu)二三種基本結(jié)構(gòu)對應(yīng)的N-S圖如圖2.7所示。
(a)順序結(jié)構(gòu)(b)分支結(jié)構(gòu)(c)循環(huán)結(jié)構(gòu)圖2.7三種基本結(jié)構(gòu)對應(yīng)的N-S圖4.用偽代碼表示偽代碼是用介于自然語言和計算機語言之間的文字和符號來描述算法。它如同一篇文章一樣,自上而下地寫下來,每一行(或幾行)表示一個基本操作。它不用圖形符號,因此書寫方便,格式緊湊,也比較好懂,便于向計算機語言算法(即程序)過渡。例如,“輸出x的絕對值”的算法可以用偽代碼表示如下:ifxispositivethenprintxelseprint-x它好像一個英語句子一樣好懂,在西方國家用得比較普遍。也可以用漢字偽代碼。例如:若x為非負(fù)數(shù)正輸出x否則輸出-x也可以中英文混用,例如:ifx為非負(fù)數(shù)正
printxelseprint-x將計算機語言中的關(guān)鍵字用英文表示,其他的可用漢字??傊员阌跁鴮懞烷喿x為原則,用偽代碼寫算法并無固定的、嚴(yán)格的語法規(guī)則,只要把意思表達清楚,并且把書寫的格式寫成清晰易讀的形式即可。在以上幾種表示算法的方法中,具有熟練編程經(jīng)驗的專業(yè)人士喜歡用偽代碼,初學(xué)者喜歡用流程圖或N-S圖,因為它比較形象,易于理解。本書主要使用N-S圖表示算法。第七節(jié)順序結(jié)構(gòu)程序設(shè)計C語言是結(jié)構(gòu)化程序設(shè)計語言,結(jié)構(gòu)化程序設(shè)計用順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)來構(gòu)造程序。順序結(jié)構(gòu)是結(jié)構(gòu)化程序設(shè)計中最簡單、最常見的一種程序結(jié)構(gòu),它是按照語句出現(xiàn)的順序依次執(zhí)行,不發(fā)生流程的跳轉(zhuǎn)。順序結(jié)構(gòu)程序一般由輸入、處理、輸出三個部分組成,下面我們通過幾個樣例介紹一下如何編制程序?!景咐?-11】輸入任意三個整數(shù),求它們的和與平均值。分析:這是一個簡單的順序結(jié)構(gòu)程序,三個數(shù)是程序的輸入項,和及平均值是程序的兩個輸出項,其算法可以表示如下:輸入用三個數(shù),可用scanf語句完成;計算它們的和及平
溫馨提示
- 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)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 危運司機合同范本
- 設(shè)備保養(yǎng)合同范本
- 合伙做母嬰店合同范本
- 產(chǎn)品批發(fā)代銷合同范本
- 小學(xué)英語試卷時間
- 縣城買賣合同范本
- 廠區(qū)鞋柜維修合同范本
- 企業(yè)廠房房產(chǎn)轉(zhuǎn)讓合同范本
- 《致女兒的信》教學(xué)反思
- 《新年好》教學(xué)反思
- (八省聯(lián)考)2025年高考綜合改革適應(yīng)性演練 物理試卷合集(含答案逐題解析)
- 2025年度智能倉儲管理系統(tǒng)軟件開發(fā)合同6篇
- 2024版數(shù)據(jù)中心建設(shè)與運維服務(wù)合同協(xié)議書3篇
- 警察著裝管理規(guī)定
- 海底撈 餐廳管理手冊
- 土石方運輸中介三方合同協(xié)議書
- 2024年四川省公務(wù)員考試《行測》真題及答案解析
- 上海市幼兒園幼小銜接活動指導(dǎo)意見(修訂稿)
- 投資可行性分析財務(wù)數(shù)據(jù)全套表格
- 《十萬個為什么》整本書閱讀-課件-四年級下冊語文(統(tǒng)編版)
- -小學(xué)英語人稱代詞與物主代詞講解課件(共58張課件).課件
評論
0/150
提交評論