版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1
C語(yǔ)言概述作業(yè)2C語(yǔ)言特點(diǎn)允許直接訪問物理地址,能進(jìn)行位操作語(yǔ)言簡(jiǎn)潔,使用靈活數(shù)據(jù)類型豐富運(yùn)算符豐富目標(biāo)代碼品質(zhì)高可移植性好(與彙編比)結(jié)構(gòu)化的控制語(yǔ)句語(yǔ)法限制不嚴(yán),程式設(shè)計(jì)自由度大概述32-2 C程式基本結(jié)構(gòu)幾個(gè)簡(jiǎn)單例子C程式一般結(jié)構(gòu)概述4例2.1在螢?zāi)簧陷敵鲆痪湓抦ain()/*函數(shù)頭*/{/*函數(shù)體*/
printf(“Howareyou?\n”);}運(yùn)行結(jié)果:Howareyou?說(shuō)明:該程式只包含一個(gè)函數(shù)(函數(shù)名為main),函數(shù)體內(nèi)只有一個(gè)語(yǔ)句。5例2.2已知圓的半徑為6,計(jì)算圓的周長(zhǎng)和麵積。main(){/*定義三個(gè)實(shí)型變數(shù),分別表示半徑、周長(zhǎng)和麵積*/
floatr,length,area;r=6;/*賦值:將6送給r*/length=2*3.14*r;/*計(jì)算周長(zhǎng),結(jié)果送length*/area=3.14*r*r;/*計(jì)算面積,結(jié)果送給area*/
printf("\nlength=%f,area=%f\n",length,area);/*輸出周長(zhǎng)、面積*/}6說(shuō)明:該程式只由一個(gè)main函數(shù)組成。main函數(shù)的函數(shù)體中可包含多個(gè)語(yǔ)句。根據(jù)語(yǔ)句的功能,該語(yǔ)句分為兩類:說(shuō)明語(yǔ)句和可執(zhí)行語(yǔ)句。注釋:/*……*/7main(){intn,s;
printf(“entern:”);scanf(“%d”,&n);/*輸入n*/s=sum(n);/*函數(shù)調(diào)用*/
printf(“\ntheresultis:%d”,s);/*輸出結(jié)果*/}intsum(intm)/*函數(shù)定義*/{intj,s1=0;for(j=1;j<=m;j++)/*求和*/
s1=s1+j;return(s1);}/*返回和值*/例2.3求1+2+3+4+……+n(其中n由用戶輸入)8一個(gè)完整的C語(yǔ)言程式一般包含以下4部分:
(1)編譯預(yù)處理命令(2)全局變數(shù)及函數(shù)說(shuō)明(3)main()函數(shù)(4)用戶自定義函數(shù)9關(guān)於C根源程式結(jié)構(gòu)的說(shuō)明1.程式的基本組成單位是函數(shù)一個(gè)程式可以由一個(gè)或多個(gè)函數(shù)組成。函數(shù)有兩類:庫(kù)函數(shù)和用戶自定義函數(shù)。庫(kù)函數(shù)是系統(tǒng)提供的,用戶可直接調(diào)用,如求正弦的函數(shù)sin(),開平方函數(shù)sqrt()等。對(duì)於庫(kù)函數(shù)中沒有的功能,需要用戶自己編程實(shí)現(xiàn),即自己定義函數(shù)。10因?yàn)镃程式總是從main函數(shù)開始執(zhí)行,所以一個(gè)C語(yǔ)言根源程式中只能有且僅有一個(gè)main函數(shù)。該函數(shù)在程式中的位置任意:可以在用戶自定義的函數(shù)前面,也可以在後面,也可以在各個(gè)函數(shù)之間。2.main函數(shù)113.函數(shù)的一般結(jié)構(gòu)C語(yǔ)言的函數(shù)由函數(shù)頭和函數(shù)體兩部分組成:函數(shù)類型函數(shù)名(形參表)函數(shù)頭{說(shuō)明部分函數(shù)體可執(zhí)行部分}其中:形參可以沒有,但括弧不能省略。如:voidline(){printf(“-------------------”);}特別提示:函數(shù)體中,說(shuō)明語(yǔ)句必須在所有可執(zhí)行語(yǔ)句之前
12C函數(shù)結(jié)構(gòu)舉例變數(shù)定義執(zhí)行部分函數(shù)頭函數(shù)體函數(shù)參數(shù)函數(shù)名函數(shù)類型main(){inta,b,c;
scanf(“%d%d”,&a,&b);c=max(a,b);
printf(“max=%d\n”,c);}intmax(intx,inty)/*求兩數(shù)最大值*/{intz;
if(x>y)z=x;elsez=y;return(z);}134.語(yǔ)句
根據(jù)語(yǔ)句的複雜程度,可將C語(yǔ)言中的語(yǔ)句分為簡(jiǎn)單語(yǔ)句和複合語(yǔ)句兩大類。簡(jiǎn)單語(yǔ)句:一般表示一個(gè)基本操作,以分號(hào)結(jié)束。(其中分號(hào)是該語(yǔ)句的必要組成部分)複合語(yǔ)句:用花括弧{}括起來(lái)的一系列語(yǔ)句,該語(yǔ)句以“{”開始,以“}”結(jié)束,末尾不需加分號(hào)。145.根源程式的書寫格式
①書寫(或輸入)根源程式時(shí),可以一行寫一個(gè)語(yǔ)句,也可以一行寫多個(gè)語(yǔ)句,還可以一個(gè)語(yǔ)句分幾行寫。因?yàn)楦髡Z(yǔ)句之間是以分號(hào)或花括弧間隔的。通常,一行寫一個(gè)語(yǔ)句,以保證程式結(jié)構(gòu)清晰。②C語(yǔ)言中用“大括弧對(duì)”即“{}”來(lái)表示程式的層次結(jié)構(gòu)156.注釋
程式中用/*……*/給出注釋,注釋中可以是任意的內(nèi)容。位置:原則上,注釋可以出現(xiàn)在程式中允許出現(xiàn)空格的位置;實(shí)際編程時(shí),一般放在函數(shù)之前或語(yǔ)句之後。作用:編譯時(shí)注釋被忽略,因此注釋對(duì)程式的運(yùn)行結(jié)果不起作用。使用注釋的目的是提高程式的可讀性167.C語(yǔ)言中,大小寫字元不通用如a和A表示兩個(gè)不同的符號(hào)。注意培養(yǎng)良好的編程風(fēng)格,如加注釋、大括弧的對(duì)齊、適當(dāng)?shù)挠铱s等(參見P17例2.5)概述172.3C根源程式的上機(jī)調(diào)試步驟TurboC上機(jī)調(diào)試包括:編輯、編譯、連接、運(yùn)行4步1、編輯:包括根源程式的輸入、修改、存盤。所用命令:File/New,Save,Load,EDIT2、編譯:翻譯成二進(jìn)位並進(jìn)行語(yǔ)法檢查。所用命令:Compile/CompiletoOBJ3、連接:目標(biāo)程式模組連接,生成可執(zhí)行檔。所用命令:Compile/Link。
其中2和3可以合為一步Compile/MakeEXEfile4、運(yùn)行:RUN/RUN,查看結(jié)果:RUN/Userscreen18C程式調(diào)試過程圖示新建或打開檔編輯程式保存檔編譯運(yùn)行查看結(jié)果出錯(cuò)正確19說(shuō)明:舉例講解:輸入一根源程式,演示上述過程的各個(gè)調(diào)試步驟。將根源程式改為錯(cuò)誤的程式,演示調(diào)試、排錯(cuò)的過程。概述20作業(yè)1.課後上機(jī)練習(xí)題2.習(xí)題1、2
預(yù)習(xí):第三章數(shù)據(jù)類型、運(yùn)算符和運(yùn)算式問題:1.整型、實(shí)型、字元型變數(shù)所占記憶體空間的大小、表示數(shù)據(jù)的範(fàn)圍有何區(qū)別?2.如何根據(jù)要處理的數(shù)據(jù)確定其類型?3.為什麼在處理數(shù)據(jù)之前要先確定其數(shù)據(jù)類型?4.i++、++i有何區(qū)別?概述21第1章程式設(shè)計(jì)基礎(chǔ)主要內(nèi)容:1、程式設(shè)計(jì)概述(理解)程式、程式設(shè)計(jì)語(yǔ)言的概念程式設(shè)計(jì)的一般過程如何學(xué)習(xí)程式設(shè)計(jì)2、演算法定義、特點(diǎn)與描述(熟悉)3、結(jié)構(gòu)化程式設(shè)計(jì)方法(瞭解)小結(jié)221.1程式設(shè)計(jì)概述一、概念:1、程式:程式是為解決某一問題而編寫的語(yǔ)句序列。通俗的說(shuō),將解決一個(gè)實(shí)際問題的具體操作步驟用某種電腦語(yǔ)言描述出來(lái),就形成了程式。23例如:判斷輸入的任意整數(shù)n能否被3整除,程式如下:main(){intn;
printf("\nenterainteger:");
scanf("%d",&n);if(n%3==0)
printf("\n%dcanbedividedby3",n);elseprintf("\n%dcan'tbedividedby3",n);}242、程式設(shè)計(jì)語(yǔ)言:即電腦語(yǔ)言分類:機(jī)器語(yǔ)言:用電腦能直接理解和執(zhí)行的“0”和“1”表示各種操作的程式設(shè)計(jì)語(yǔ)言,很難使用。組合語(yǔ)言:用助記符號(hào)來(lái)表示各個(gè)基本操作的程式設(shè)計(jì)語(yǔ)言,如addr1,4高級(jí)語(yǔ)言:用接近自然語(yǔ)言和數(shù)學(xué)語(yǔ)言的語(yǔ)法符號(hào)描述基本操作的程式設(shè)計(jì)語(yǔ)言25二、程式設(shè)計(jì)的一般過程用電腦解決問題的基本過程如圖1.1所示:26程式設(shè)計(jì)基本步驟(1)分析要解決的問題,明確任務(wù)。即分析要處理的數(shù)據(jù)是什麼,從哪里來(lái),作怎樣的處理,結(jié)果送往那裏。例如:求學(xué)生的平均成績(jī)。分析該問題,明確它有三項(xiàng)功能:1、輸入學(xué)生成績(jī)2、求平均成績(jī)3、輸出結(jié)果;要處理的原始數(shù)據(jù)為:學(xué)生的成績(jī);要進(jìn)行的處理為:求平均;結(jié)果為:平均值,送螢?zāi)伙@示或保存於檔中。27(2)分析問題,建立數(shù)學(xué)模型,並選擇合適的解決方案;例如:求平均成績(jī)的處理過程,可以抽象為:計(jì)算一批數(shù)據(jù)的平均值。(3)確定數(shù)據(jù)結(jié)構(gòu)和演算法:數(shù)據(jù)結(jié)構(gòu)即數(shù)據(jù)的組織方式,演算法是對(duì)數(shù)據(jù)處理過程的具體描述。只有先確定了數(shù)據(jù)結(jié)構(gòu),才能設(shè)計(jì)相應(yīng)的演算法。例如:要處理的原始數(shù)據(jù)為學(xué)生成績(jī),如何組織,如何在電腦中表示?對(duì)於簡(jiǎn)單問題,前三步可看作一步,即分析問題、設(shè)計(jì)演算法。28(4)編碼:即編寫程式。用某種電腦語(yǔ)言將上一步設(shè)計(jì)好的演算法描述出來(lái),就是程式??梢?,演算法是編程的基礎(chǔ)。(5)調(diào)試程式:將根源程式送入電腦,進(jìn)行排錯(cuò)、試運(yùn)行,調(diào)試的結(jié)果是得到一個(gè)能正確運(yùn)行的程式。通常,調(diào)試程式至少占整個(gè)程式設(shè)計(jì)工作量的一半。(6)整理資料,交付使用29三、學(xué)習(xí)程式設(shè)計(jì)的方法1、一講、二練、三思考2、多讀根源程式、多編寫程式、多上機(jī)調(diào)試3、忌上課只聽不記、忌“紙上談兵”、忌課下不練習(xí)具體要求:1、上課有重點(diǎn)、有選擇的記;2、上機(jī)有準(zhǔn)備:準(zhǔn)備好課本、筆記、作業(yè)等3、除課後習(xí)題必須全部解決外,多做一些二級(jí)考試的模擬題4、做一個(gè)自己感興趣的完整的程式(小專案)第一章30N.Wirth公式:程式=數(shù)據(jù)結(jié)構(gòu)+演算法+語(yǔ)言環(huán)境1-2演算法定義:演算法是指為解決一個(gè)問題而採(cǎi)取的方法和步驟。例如:復(fù)習(xí)演算法、樂譜、看病演算法等演算法有優(yōu)劣31簡(jiǎn)單演算法舉例例1-1計(jì)算任意長(zhǎng)方形的面積例1-2
計(jì)算1x2x3x4x5=?例1-3計(jì)算1-1/2+1/3-...+1/99-1/100=?例1-4判斷一個(gè)數(shù)是否素?cái)?shù)第一章演算法描述32計(jì)算任意長(zhǎng)方形的值問題分析:輸入長(zhǎng)和寬計(jì)算面積=長(zhǎng)X寬輸出面積數(shù)據(jù)存放:長(zhǎng)-len,寬-wid,面積-area設(shè)計(jì)演算法:輸入len和wid的值;計(jì)算area=lenXwid;輸出面積area的值;33計(jì)算1x2x3x4x5方法一:數(shù)學(xué)思路方法二:利用變數(shù)P存放中間結(jié)果S1:P=1/I=2S2:P=PxIS3:I=I+1S4:如果I>5轉(zhuǎn)S5
否則轉(zhuǎn)S2S5:列印P的值P=11x2PPx3PPx4PPx5P列印P的值P=1/I=2PxIP/I=I+1PxIP/I=I+1PxIP/I=I+1PxIP/I=I+1當(dāng)I>5時(shí)列印P的值341-1/2+1/3-...+1/99-1/100=?提示:首先考慮實(shí)現(xiàn)1+2+3+4+…+100其次考慮實(shí)現(xiàn)1/1+1/2+1/3+1/4+...+1/100最後考慮實(shí)現(xiàn)1/1-1/2+1/3-1/4+...+1/100思路:S1:sum=0,I=1S2:SUM=SUM+IS3:I=I+1S4:如果I<=100則轉(zhuǎn)S2否則轉(zhuǎn)S5S5:列印SUM的值1/I,P=1P*1/I,P=-P;35判斷一個(gè)數(shù)是否素?cái)?shù)分析:本題要點(diǎn)是先搞清楚什麼是素?cái)?shù)。思路:輸入一個(gè)大於3的正整數(shù)N定義一個(gè)變數(shù)I從2~N-1,I每取一個(gè)值做:如果N能被I整除則中斷迴圈,N不是素?cái)?shù);否則I繼續(xù)取下一個(gè)值;若當(dāng)I取完所有值都不能整除N,則N是素?cái)?shù)一個(gè)正整數(shù),若不能被除1和它本身以外的任何整數(shù)整除,則是素?cái)?shù)。36演算法的特性有窮性指一個(gè)演算法經(jīng)過有限步驟後停止(或在合理範(fàn)圍內(nèi))確定性演算法的每一步都應(yīng)當(dāng)是確定的,無(wú)歧義的有效性演算法的每一步電腦都能有效執(zhí)行有0個(gè)或多個(gè)輸入一個(gè)演算法可以沒有輸入,即執(zhí)行時(shí)無(wú)需輸入資訊有1個(gè)或多個(gè)輸出一個(gè)演算法必須有輸出,運(yùn)算過程或運(yùn)算結(jié)果37演算法的描述描述演算法的方法有多種,常用有:自然語(yǔ)言(描述不夠嚴(yán)格,容易出現(xiàn)歧義性)結(jié)構(gòu)化流程圖*(同一問題的流程圖不唯一)N-S圖*(結(jié)構(gòu)清晰,但難於修改)PAD圖(結(jié)構(gòu)清晰,唯一性好)偽代碼*(靈活,但需要有一定的程式設(shè)計(jì)基礎(chǔ))學(xué)習(xí)建議:流程圖或N-S圖一定要熟練掌握,偽代碼表示法在學(xué)習(xí)完基本的流程控制語(yǔ)句後也經(jīng)常使用。38流程圖流程圖是用幾種圖形、箭頭線和文字說(shuō)明來(lái)表示演算法的框圖。流程圖中規(guī)定使用的符號(hào)如圖1.2所示用流程圖的優(yōu)點(diǎn)是:直觀形象、易於理解,能將設(shè)計(jì)者的思路清楚地表達(dá)出來(lái),便於以後檢查修改和編程。39例如:計(jì)算1+2+3+……+100=?畫流程圖S=0,I=1I<=100輸出SN開始結(jié)束S=S+II=I+1Y40S=0,I=1S=S+II=I+1I>100輸出SYN開始結(jié)束例如:計(jì)算1+2+3+……+100=?畫流程圖練習(xí)41結(jié)構(gòu)化流程圖三種基本結(jié)構(gòu):順序結(jié)構(gòu)選擇結(jié)構(gòu)迴圈結(jié)構(gòu)說(shuō)明舉例練習(xí)ABPYAN當(dāng)型迴圈直到型迴圈PABYNANPY42三種基本結(jié)構(gòu)說(shuō)明迴圈結(jié)構(gòu):當(dāng)型迴圈先判斷後執(zhí)行;即當(dāng)條件P成立時(shí)重複執(zhí)行循環(huán)體A;直到型迴圈先執(zhí)行後判斷;即重複執(zhí)行循環(huán)體A直到條件P成立結(jié)束;三種基本結(jié)構(gòu)特點(diǎn):只有一個(gè)入口和一個(gè)出口;結(jié)構(gòu)內(nèi)每一部分都有機(jī)會(huì)執(zhí)行到;結(jié)構(gòu)內(nèi)不存在“死迴圈”N-S43求N!流程圖輸入NN
0S=1列印ERRORNYI=1I
NS=S*I/I=I+1YN列印S44N-S圖三種基本結(jié)構(gòu):順序結(jié)構(gòu)選擇結(jié)構(gòu)迴圈結(jié)構(gòu)說(shuō)明舉例練習(xí)ABTPFAB當(dāng)P成立
A
A
直到P成立當(dāng)型迴圈直到型迴圈45求N!N-S圖輸入NN
0YNS=1,I=1當(dāng)I<=NS=S*II=I+1輸出S輸出ERROR第一章461-3結(jié)構(gòu)化程式設(shè)計(jì)方法總的原則:自頂向下,逐步細(xì)化,模組化設(shè)計(jì),結(jié)構(gòu)化編碼也就是說(shuō):當(dāng)面臨一個(gè)複雜問題時(shí),先進(jìn)行整體設(shè)計(jì),將問題分為幾個(gè)大模組;然後再對(duì)每個(gè)模組進(jìn)一步分解為較小模組;每個(gè)模組還可再分,直到不能再細(xì)分為止。設(shè)計(jì)思路:給定問題,先搞清楚已知哪些數(shù)據(jù)(輸入),需要什麼結(jié)果?(輸出)然後再分析如何解決。第一章47本章小結(jié)本章介紹程式設(shè)計(jì)及演算法的基本知識(shí)重點(diǎn):分析問題,設(shè)計(jì)演算法習(xí)題:P12習(xí)題第3、4題第一章48第3章數(shù)據(jù)類型、運(yùn)算符和運(yùn)算式主要學(xué)習(xí)內(nèi)容:1.數(shù)據(jù)類型2.常量和變數(shù)3.基本數(shù)據(jù)類型:整型、實(shí)型、字元型4.最常用的運(yùn)算符和運(yùn)算式:算術(shù)運(yùn)算符和算術(shù)運(yùn)算式賦值運(yùn)算符和賦值運(yùn)算式逗號(hào)運(yùn)算符和逗號(hào)運(yùn)算式49引入假設(shè)某任務(wù)中有如下數(shù)據(jù)需要處理:1024、65536、123.5、123.456789e10、'a'、"name"設(shè)計(jì)演算法前,需要先定義數(shù)據(jù)結(jié)構(gòu):即如何在電腦中表示這些數(shù)據(jù)?編程時(shí),函數(shù)的說(shuō)明部分就是對(duì)數(shù)據(jù)結(jié)構(gòu)的描述,可執(zhí)行部分是對(duì)演算法的具體描述。那麼,在C語(yǔ)言中如何描述數(shù)據(jù)結(jié)構(gòu)呢?——
數(shù)據(jù)類型數(shù)據(jù)結(jié)構(gòu)描述完畢,然後是演算法的C語(yǔ)言描述了。演算法是對(duì)數(shù)據(jù)處理過程的描述,數(shù)據(jù)處理過程許多基本操作是如何實(shí)現(xiàn)的呢?——運(yùn)算符和運(yùn)算式503.1C的基本語(yǔ)法單位1、字元集-包括字母、數(shù)字和特殊符號(hào);2、關(guān)鍵字-C系統(tǒng)保留字;3、識(shí)別字-用戶為自定義變數(shù)、函數(shù)等所起的名字;
識(shí)別字命名規(guī)則:(1)由字母、數(shù)字及下劃線組成,且不能以數(shù)字開頭。(2)不能與關(guān)鍵字同名(3)儘量“見名知義”例如:下列識(shí)別字,是否合法?為什麼?area if score student_no 2daymonth_3 int _sumno*3&aa數(shù)據(jù)類型513.2常量和變數(shù)例1:輸入任一半徑,計(jì)算球的體積。#definePI3.1415926/*定義符號(hào)常量PI*/main(){floatr,v;/*定義變數(shù)r、v*/
printf("\nenterr:");
scanf("%f",&r);v=PI*r*r*r*4/3;/*3、4是常量*/
printf("\nvolume:%f",v);}52分析例題中處理的數(shù)據(jù)有兩類:常量和變數(shù)常量:在程式的運(yùn)行過程中其值不能被改變的量。如程式中的3,4符號(hào)常量:用一個(gè)識(shí)別字代表一個(gè)有特定含義的常量如PI變數(shù):在程式的運(yùn)行過程中其值可以被改變的量。如r,v53符號(hào)常量名一般用大寫,變數(shù)名用小寫;選擇識(shí)別字應(yīng)“見名知義”;變數(shù)必須先定義,後使用;C中要求所有變數(shù)“先定義,後使用”,目的是:(1)保證程式中變數(shù)名使用正確;(2)系統(tǒng)編譯時(shí)根據(jù)變數(shù)的類型為其分配合適的存儲(chǔ)單元。如系統(tǒng)給r,v各分配大小為4B的單元(3)編譯系統(tǒng)根據(jù)變數(shù)的類型進(jìn)行語(yǔ)法檢查。如r%5是非法的運(yùn)算式提示:數(shù)據(jù)類型543.3基本數(shù)據(jù)類型主要掌握整型、實(shí)型、字元型三種類型的:常量表示變數(shù)的定義所占存儲(chǔ)空間的大小取值範(fàn)圍55用於表示整數(shù)所占記憶體空間:隨機(jī)器而異,一般微機(jī)上一個(gè)整型數(shù)據(jù)占2Byte
的記憶體空間。整型的可用修飾符:
int
short[int]long[int]unsignedint
unsignedshortunsignedlong一、整型:56整型變數(shù)的定義:類型說(shuō)明符變數(shù)名表;如:inta,c,no;longs;unsignedx,y;整型常量:十進(jìn)位整數(shù): 12-30
八進(jìn)制整數(shù):024056
十六進(jìn)制整數(shù):0x3A-0X34longint:12L0L57整型變數(shù)記憶體中的存放形式(在內(nèi)存中占2個(gè)位元組)正數(shù)以原碼存放;負(fù)數(shù)以補(bǔ)數(shù)存放;最高位為符號(hào)位,0表示正數(shù),1表示負(fù)數(shù);如:10
-10010100001010111100000000111111111111111101101111取反加158問題:要定義兩個(gè)變數(shù)x和y,分別用於存放數(shù)據(jù)1024和65536,如何確定x和y類型?分析:首先,要處理的數(shù)據(jù)為整型;其次,根據(jù)數(shù)據(jù)的大小確定其具體類型:1024可用int型變數(shù)保存,65536必須用longint型變數(shù)才能保存。main(){intx;longy;x=1024;y=65536;
printf("\nx=%d,y=%ld",x,y);}說(shuō)明:若x,y均定義為long型,程式運(yùn)行如何?若x,y均定義為int型,程式運(yùn)行結(jié)果如何?數(shù)據(jù)類型59二、實(shí)型
Float:
單精確度浮點(diǎn)型Double:
雙精度浮點(diǎn)型longDouble:長(zhǎng)雙精度浮點(diǎn)型所占空間大小:
float型數(shù)據(jù)占4B,double型數(shù)據(jù)占8B實(shí)型變數(shù)的定義:
floatr,v;doublez,a,x;floatresult;等60實(shí)型常量:(1)小數(shù)形式:可由正負(fù)號(hào)、小數(shù)點(diǎn)和數(shù)字組成。如:12.35-78.090.789.145(2)指數(shù)形式:用科學(xué)計(jì)數(shù)法表示的實(shí)數(shù)。如:44e–30.34e12問題:若程式要處理的數(shù)據(jù)為:123.5和123.456789e10設(shè)該數(shù)據(jù)分別用變數(shù)a、b保存,試問a、b的類型如何確定?分析:首先該數(shù)據(jù)均為實(shí)型;其次,根據(jù)數(shù)據(jù)的大小及精度,可確定a為float型即可,b必須為double型。61程式如下:main(){floata;doubleb;a=123.5;b=123.456789e10;
printf("\na=%f,b=%f",a,b);}運(yùn)行結(jié)果:
a=123.500000,b=1234567890000.000000若改為:floatb;運(yùn)行結(jié)果如下:
a=123.500000,b=1234567954432.000000數(shù)據(jù)類型62字元常量:字元常量:用單引號(hào)括起來(lái)的一個(gè)字元;如‘A’’%’轉(zhuǎn)義字元:以“\”開頭的特殊字元,含義見P33表3-3;字元變數(shù):一個(gè)字元變數(shù)只能存放一個(gè)字元常量;定義形式:charc1,c2;存儲(chǔ)空間:1個(gè)位元組;如c1=‘a(chǎn)’;字元存儲(chǔ)及使用:實(shí)際存是字元的ASCII碼;如:‘a(chǎn)’10000110三、字元型63字串用雙引號(hào)括起來(lái)的字元序列,如"a"、"123\n"注:字串存儲(chǔ)時(shí),系統(tǒng)自動(dòng)在字串的末尾加上字串結(jié)束標(biāo)記'\0'比較字元常量'a'與字串常量"a":'a'"a"9797064例3.5定義兩個(gè)變數(shù)c、d,用於保存字元'a'、'b',然後按字元和數(shù)值兩種形式輸出變數(shù)c、d的值。
main(){charc,d;c='a';d='b';
printf("\n%c%c",c,d);
printf("\n%d%d",c,d);}結(jié)果:ab9798若將第三行改為:c=97;d=98;結(jié)果如何?結(jié)論:在字元的ASCII碼(0~255)內(nèi)字元與整數(shù)可通用。數(shù)據(jù)類型653.4變數(shù)的初始化(自學(xué))如intr=6;等價(jià)於
intr;r=6;應(yīng)用:編程時(shí),當(dāng)定義變數(shù)時(shí)就已知該變數(shù)的值,則可以使用初始化的方式給變數(shù)賦值。注意:
inti=j=k=0;是錯(cuò)誤的。正確的應(yīng)為:
inti=0,j=0,k=0;數(shù)據(jù)類型663.5運(yùn)算符和運(yùn)算式運(yùn)算符:規(guī)定了對(duì)數(shù)據(jù)的基本操作。主要掌握:各運(yùn)算符的功能、優(yōu)先順序和結(jié)合方向。本章只介紹最常用的運(yùn)算符:算術(shù)運(yùn)算符、賦值運(yùn)算符及其運(yùn)算式673.5.1算術(shù)運(yùn)算符運(yùn)算式基本算術(shù)運(yùn)算符
+(加法運(yùn)算符,或正值運(yùn)算符。如3+5、+3)-(減法運(yùn)算符,或負(fù)值運(yùn)算符。如5-2、-3)*(乘法運(yùn)算符。如3*5)/(除法運(yùn)算符。如5/3)%(求餘運(yùn)算符,%兩側(cè)均為整型,如7%4為3)。說(shuō)明:雙目運(yùn)算符,即要求有兩個(gè)運(yùn)算元?!?”兩邊都為整數(shù)時(shí)作整除;如5/2=268用算術(shù)運(yùn)算符和括弧將運(yùn)算對(duì)象連接起來(lái)的符合C語(yǔ)法規(guī)則的式子,稱C算術(shù)運(yùn)算式;如:a+b*c-5.5/d+’a’優(yōu)先順序:運(yùn)算式求值時(shí),按運(yùn)算符的優(yōu)先順序別高低次序執(zhí)行;結(jié)合性:運(yùn)算符的優(yōu)先順序別相同,按自左至右的結(jié)合方向運(yùn)算(左結(jié)合);如果一個(gè)運(yùn)算符的兩側(cè)的數(shù)據(jù)類型不同,則先自動(dòng)進(jìn)行類型轉(zhuǎn)換,然後進(jìn)行運(yùn)算。算術(shù)運(yùn)算式69++i,--i使用i之前,先使i的值加(減)1;i++,i--使用i之後,再使i的值加(減)1;如果i=3,則執(zhí)行語(yǔ)句:①
j=++i;j值為4;②
j=i++;j值為3;注意:++和――只能用於變數(shù),不能用於常量或運(yùn)算式。++和――的結(jié)合方向是“自右至左”。如:printf(“%d”,-i++),輸出為-3。自增、自減運(yùn)算符:70例如:main(){inti=6,j=6,k=6,h=6,m,n,x,y;m=i++;n=++j;x=k--;y=--h;
printf("\ni=%d,m=%d,j=%d,n=%d",i,m,j,n);
printf("\nk=%d,x=%d,h=%d,y=%d",k,x,h,y);}運(yùn)行結(jié)果:
i=7,m=6,j=7,n=7k=5,x=6,h=5,y=571首碼:n=++j;等價(jià)於j=j+1;n=j;(j先加1,後參與運(yùn)算式的運(yùn)算)尾碼:m=i++;等價(jià)於m=i;i=i+1;(i先參與運(yùn)算式的運(yùn)算,然後加1)結(jié)論:72算術(shù)運(yùn)算式的計(jì)算:當(dāng)一個(gè)運(yùn)算式中包含多個(gè)算術(shù)運(yùn)算符時(shí),如何計(jì)算呢?運(yùn)算式的計(jì)算方法:按優(yōu)先順序由高到低進(jìn)行,相同優(yōu)先順序的運(yùn)算符按結(jié)合方向計(jì)算。例如計(jì)算:4+5*8/10–12%5/2算術(shù)運(yùn)算式的書寫要求自學(xué)注意:運(yùn)算式中的符號(hào)均寫在同一行中,不能有上標(biāo)或下標(biāo)。合理運(yùn)用括弧,保證原數(shù)學(xué)運(yùn)算式的運(yùn)算順序。數(shù)據(jù)類型733.5.2類型轉(zhuǎn)換1.當(dāng)參加運(yùn)算的兩個(gè)運(yùn)算元類型不同時(shí),先將“低”類型的數(shù)據(jù)轉(zhuǎn)換為“高”類型,再計(jì)算?![式轉(zhuǎn)換(系統(tǒng)自動(dòng)進(jìn)行的轉(zhuǎn)換)2.當(dāng)需要將某數(shù)據(jù)轉(zhuǎn)換成指定類型時(shí)使用——強(qiáng)制類型轉(zhuǎn)換。74char,shortintunsignedlongdoublefloat低高圖中橫向向左的箭頭表示必定的轉(zhuǎn)換;縱向箭頭表示運(yùn)算對(duì)象為不同類型時(shí)轉(zhuǎn)換的方向。1、隱式轉(zhuǎn)換(自動(dòng)進(jìn)行的轉(zhuǎn)換)752、強(qiáng)制類型轉(zhuǎn)換一般形式為:(類型名)(運(yùn)算式)例如:(double)a(將a轉(zhuǎn)換成double型)(int)(x+y)(將x+y的值轉(zhuǎn)換成整型)說(shuō)明:強(qiáng)制類型轉(zhuǎn)換得到一個(gè)所需類型的中間變數(shù),原來(lái)變數(shù)的類型未發(fā)生變化。76例3.8含有牽制類型轉(zhuǎn)換的運(yùn)算式的計(jì)算。
main(){inta=2,b=3;floatx=3.5,y=2.5,z;z=(float)(a+b)/2+(int)x%(int)y;
printf("\n%f",z);}
運(yùn)行結(jié)果:3.500000數(shù)據(jù)類型773.5.3賦值運(yùn)算符和運(yùn)算式賦值:給變數(shù)提供數(shù)據(jù)的一種方法。1.賦值運(yùn)算式:變數(shù)=運(yùn)算式作用:先計(jì)算“=”右邊運(yùn)算式的值,然後將其送給“=”左邊的變數(shù)。如area=r*r*3.14s=0優(yōu)先順序:比算術(shù)運(yùn)算符低,僅高於逗號(hào)運(yùn)算符。結(jié)合性:自右向左78複合賦值運(yùn)算式:在賦值符“=”之前加上其他運(yùn)算符。例如:a+=3等價(jià)於a=a+3x*=y+8等價(jià)於x=x*(y+8)說(shuō)明:賦值運(yùn)算式也可以包含複合的賦值運(yùn)算符。凡是二元運(yùn)算符都可與賦值符一起組合成複合賦值符。若定義:inta=2;則運(yùn)算式b=c=a+4的計(jì)算過程為:先計(jì)算:c=a+4得該運(yùn)算式的值為6;然後計(jì)算:b=6得該賦值運(yùn)算式的值為6。793.賦值運(yùn)算中的類型轉(zhuǎn)換:當(dāng)賦值號(hào)“=”右邊運(yùn)算式的值與“=”左邊的變數(shù)的類型不同時(shí),先將“=”右邊運(yùn)算式的值轉(zhuǎn)換成“=”左邊變數(shù)的值,然後再賦值。例如:intn=4;floats;s=n*5;結(jié)果類型:float數(shù)據(jù)類型803.5.4逗號(hào)運(yùn)算符用逗號(hào)運(yùn)算符將兩個(gè)運(yùn)算式連接起來(lái)稱為逗號(hào)運(yùn)算式。一般形式為:運(yùn)算式1,運(yùn)算式2如:3+5,6+8逗號(hào)運(yùn)算式的計(jì)算:自左向右依次計(jì)算各運(yùn)算式逗號(hào)運(yùn)算式的值:最右邊一個(gè)運(yùn)算式的值如:for(j=0,s=0,p=1;j<10;j++){s+=j;p*=j;}注意:並不是任何地方出現(xiàn)的逗號(hào)都是作為逗號(hào)運(yùn)算符。例如:printf(“%d,%d,%d”,a,b,c);81作業(yè)上機(jī)練習(xí):1習(xí)題1、3、5、6、7預(yù)習(xí):第四章順序結(jié)構(gòu)程式結(jié)構(gòu)要求明確:Getchar()putchar()scanf()printf()的使用數(shù)據(jù)類型82順序結(jié)構(gòu)程式設(shè)計(jì)C語(yǔ)句概述輸入輸出概述字元輸入輸出格式輸出printf格式輸入scanf順序程式設(shè)計(jì)要求:熟練掌握用合適的格式輸入/輸出不同類型的數(shù)據(jù);會(huì)編寫簡(jiǎn)單的程式。83C語(yǔ)句概述順序結(jié)構(gòu)C基本語(yǔ)句:運(yùn)算式語(yǔ)句:在一個(gè)運(yùn)算式的後面加上分號(hào)即構(gòu)成運(yùn)算式語(yǔ)句。例如x=0;k++;printf("\nwelcome");流程控制語(yǔ)句:用來(lái)控制程式中語(yǔ)句的執(zhí)行順序。C語(yǔ)言中提供了9種流程控制語(yǔ)句;
If~else/switch/for()~/while()~/do~while()/continue/break/goto
/return84順序結(jié)構(gòu)例:重複(10次)輸入兩個(gè)整數(shù),輸出兩數(shù)之和。main(){inta,b,c,n;
for(n=1;n<=10;n++)/*for語(yǔ)句控制重複10次*/{printf("\ninput2integers:");
scanf("%d%d",&a,&b);c=a+b;
printf("sum:%d\n",c);
}}3.複合語(yǔ)句:用一對(duì)花括弧{}括起來(lái)的多個(gè)語(yǔ)句序列,有時(shí)稱為分程式。85輸入/輸出概述C不提供輸入輸出語(yǔ)句,輸入輸出操作由函數(shù)實(shí)現(xiàn)。printf函數(shù)和scanf函數(shù)不是輸入輸出語(yǔ)句,而是C標(biāo)準(zhǔn)函數(shù);可以使C編譯系統(tǒng)簡(jiǎn)單化,避免在編譯階段處理與硬體有關(guān)問題。使用C庫(kù)函數(shù)時(shí),必須將該函數(shù)所在頭檔(.h)包含到原始檔案中。如:#include“stdio.h”順序結(jié)構(gòu)86字元數(shù)據(jù)輸入輸出putchar函數(shù)(字元輸出函數(shù))格式:putchar(字元型數(shù)據(jù));功能:向終端輸出一個(gè)字元;說(shuō)明:函數(shù)參數(shù)可以為char或int型常量、變數(shù)、運(yùn)算式;也可以輸出控制字元或其他轉(zhuǎn)義字元,如putchar(\n);putchar(\015);如在函數(shù)中調(diào)用putchar()函數(shù),應(yīng)在函數(shù)前加上包含命令:#include“stdio.h”順序結(jié)構(gòu)87例:輸出三個(gè)字元:A*B。#include“stdio.h”main(){charc1;intc2;c1='A';c2=66;/*給變數(shù)c1,c2賦值*/
putchar('\n');/*輸出字元'\n'*/
putchar(c1);/*輸出變數(shù)c1中的字元:'A'*/
putchar('*');/*輸出字元'*'*/
putchar(c2);/*輸出變數(shù)c2中的字元:'B'*/}88字元數(shù)據(jù)輸入輸出getchar函數(shù)格式:getchar();功能:從鍵盤輸入一個(gè)字元;注意:getchar()只能接收一個(gè)字元;如在函數(shù)中調(diào)用getchar()函數(shù),應(yīng)在函數(shù)前加上包含命令:#include“stdio.h”89例:輸入兩個(gè)字元,輸出每個(gè)字元及其ASCII碼。#include"stdio.h"main(){charc,d;
printf("\nentertwocharacters:");
c=getchar();d=getchar();
printf("%c:%d\n",c,c);/*輸出c字元及ASCII碼*/
printf("%c:%d",d,d);}順序結(jié)構(gòu)90格式輸入printf()函數(shù)格式:printf(格式控制,輸出表列);其中:“格式控制”是用雙引號(hào)括起來(lái)的字串,包括:格式說(shuō)明,由%和格式字元組成,作用是將輸出項(xiàng)轉(zhuǎn)換為指定格式輸出。如%d,%f普通字元,格式控制串中除格式說(shuō)明外的其他字元,是需要原樣輸出的字元。“輸出表列”是需要輸出的一些數(shù)據(jù),可以是常量、變數(shù)、函數(shù)、運(yùn)算式等。91如:a=5;b=7;printf(“%d,%d”,a,b);printf(“a=%d,b=%d\n”,a,b);如:inta=3;floatb=5;
printf("\nentername:");printf("\na=%d,b=%f",a,b);printf("%f",a*b);順序結(jié)構(gòu)92main(){charch='Y';/*定義一個(gè)字元數(shù)組s,並保存字串"verygood"*/chars[]="verygood";
printf("\nch:%c,s:%s",ch,s);}運(yùn)行結(jié)果:ch:Y,s:verygood程式中,輸出項(xiàng)ch、s與控制項(xiàng)%c、%s一一對(duì)應(yīng),且類型匹配。
例:輸出字元和字串。93格式輸出scanf()函數(shù)scanf(格式控制串,地址表列);例如:scanf("%d%f",&a,&b);其中:“格式控制”是用雙引號(hào)括起來(lái)的字串,包括:格式說(shuō)明,由%和格式字元組成,作用按指定格式輸入。如%d,%f普通字元,格式控制串中除格式說(shuō)明外的其他字元,是需要原樣輸入的字元。“地址表列”是需要輸入的變數(shù)地址,&表示取地址。94格式輸出scanf()函數(shù)注意事項(xiàng)P55:格式控制後應(yīng)當(dāng)是變數(shù)地址,不是變數(shù)名;若格式控制串中包含其他字元,輸入時(shí)也應(yīng)包含它們;如:scanf(“a=%d,b=%d”,&a,&b);輸入時(shí)應(yīng)輸入:a=5,b=7回車用%c格式時(shí),空格和轉(zhuǎn)義字元都認(rèn)為有效;如:scanf(“%c%c”,&c1,&c2);輸入:ab則c1=‘a(chǎn)’,c2=‘‘;95例:用scanf輸入整型數(shù)據(jù)、實(shí)型數(shù)據(jù)。#include<stdio.h>main(){inta,b;floatx,y;
scanf("%d%d",&a,&b);
scanf("%f,%f",&x,&y);
printf("\na=%d,b=%d,x=%f,y=%f",a,b,x,y);}運(yùn)行結(jié)果:1224↙(12與24之間用空格分開)
15,30↙(注意兩數(shù)間的逗號(hào))
a=12,b=24,x=15.000000,y=30.00000096例:輸入某商品的編號(hào)(整型)、類別(A~Z字元型)、價(jià)格(實(shí)型),並輸出該資訊。#include<stdio.h>main(){intnum;charclass;floatprice;
printf("\nenternumber(A~Z):");
scanf("%d",&num);getchar();
printf("\nenterclass:");class=getchar();getchar();
printf("\nenterprice:");
scanf("%f",&price);getchar();
printf("no=%d,class=%c,price=%6.2f",no,class,price);}97混合輸入有兩種處理方法:一是在一個(gè)scanf()函數(shù)中實(shí)現(xiàn)所有數(shù)據(jù)的輸入;二是將數(shù)值與字元分別輸入,而不是用一個(gè)scanf()函數(shù)。通常採(cǎi)用第二種方法,用第一種方法輸入時(shí)容易出錯(cuò)。本程式中分別用scanf()和getchar()輸入編號(hào)、價(jià)格和類別。並且每次輸入後用getchar()讀取多餘的回車符,以免影響後面的正確輸入。順序結(jié)構(gòu)98順序程式設(shè)計(jì)舉例順序結(jié)構(gòu)例1:交換兩個(gè)整型變數(shù)的值。分析:首先定義程式中要用到的變數(shù),設(shè)兩個(gè)整型變數(shù)為a、b。然後設(shè)計(jì)演算法:①輸入兩個(gè)整數(shù)a、b②交換a、b的值③輸出交換後的a、b的值。其中,實(shí)現(xiàn)②的方法有兩種:一是用第三個(gè)變數(shù)c暫存其中一個(gè)數(shù),如程式1。二是不使用第三個(gè)變數(shù),利用其中一個(gè)變數(shù)保存兩數(shù)之和,通過減法來(lái)實(shí)現(xiàn),如程式2。99程式1:main(){inta,b,c;
printf("\nenter2integerstoa,b:");
scanf("%d%d",&a,&b);c=a;a=b;b=c;/*交換*/
printf("\na=%d,b=%d",a,b);}運(yùn)行結(jié)果:enter2integerstoa,b:46↙a=6,b=4思考:若將三個(gè)交換語(yǔ)句的順序調(diào)整,結(jié)果如何?100程式2:main(){inta,b,c;
printf("\nenter2integerstoa,b:");
scanf("%d%d",&a,&b);a=a+b;b=a-b;a=a–b;/*交換*/
printf("\na=%d,b=%d",a,b);}運(yùn)行結(jié)果同上。101例2:輸入一個(gè)數(shù)字符號(hào),並轉(zhuǎn)換成相應(yīng)的整數(shù)輸出。如讀入字元'8',轉(zhuǎn)換成整數(shù)8輸出。分析:首先定義程式中要使用的變數(shù),設(shè)字元變數(shù)ch存放讀入的字元,整型變數(shù)d存放轉(zhuǎn)換後的整數(shù)。然後設(shè)計(jì)演算法:①輸入一個(gè)字元給ch②將字元ch轉(zhuǎn)換成對(duì)應(yīng)的數(shù)值d③輸出d。第二步轉(zhuǎn)換利用ASCII碼的編碼規(guī)律:‘0’,‘1’,'2'…'9'的ASCII碼值是連續(xù)的,即48、49、50……57。只要將數(shù)字字元與字元'0'相減,結(jié)果就是該字元對(duì)應(yīng)的數(shù)值。如'8'-'0'值為8。102程式:#include<stdio.h>main(){charch;intd;
printf("\nenteracharacter(0~9):");
ch=getchar();/*讀入一個(gè)字元並賦給ch*/
d=ch-'0';
printf("d=%d",d);}103作業(yè)P571.上機(jī)練習(xí)1~42.習(xí)題1,3順序結(jié)構(gòu)104選擇結(jié)構(gòu)程式設(shè)計(jì)關(guān)係運(yùn)算符運(yùn)算式邏輯運(yùn)算符運(yùn)算式IF語(yǔ)句SWITCH語(yǔ)句程式舉例根據(jù)選擇結(jié)構(gòu)的組成特點(diǎn),分析問題時(shí)著重明確以下兩點(diǎn):1)條件是什麼2)條件成立和不成立時(shí)分別執(zhí)行什麼操作。105關(guān)係運(yùn)算符與關(guān)係運(yùn)算式所謂“關(guān)係運(yùn)算”實(shí)際上是“比較運(yùn)算”:若條件滿足,則關(guān)係運(yùn)算式的值為ture(1);否則,關(guān)係運(yùn)算式的值為false(0)。1.關(guān)係運(yùn)算符:<<=>>===!=例如下列關(guān)係運(yùn)算式:
a>b表示條件“a大於b“,x!=0表示條件“x等於0“,
a+b<x*y表示條件”a+b小於x*y“。106關(guān)係運(yùn)算符優(yōu)先次序算術(shù)運(yùn)算符>關(guān)係運(yùn)算符>賦值運(yùn)算符且<<=>>=高於==!=例如:c>a=b等效於
c>(a=b)a==b<c等效於
a==(b<c)a=b>c等效於a=(b>c)算術(shù)運(yùn)算符關(guān)係運(yùn)算符賦值運(yùn)算符低高1072、關(guān)係運(yùn)算式用關(guān)係運(yùn)算符將兩個(gè)運(yùn)算式連接起來(lái)的式子。如a>b,a>=80關(guān)係運(yùn)算式的值是一個(gè)邏輯值,即“真”或“假”。如:5==3值為假,5>=0值為真。說(shuō)明:運(yùn)算式可以是算術(shù)或關(guān)係、字元等運(yùn)算式。如a+b>b+c,’a’<’b’,a>(b<c)C語(yǔ)言以1代表“真”,以“0”代表“假”,如:d=5>3d的值為1。108關(guān)係運(yùn)算符“==”與賦值運(yùn)算符“=”不同。比較:k=1與k==1運(yùn)算式a+b>d>c也是合法的關(guān)係運(yùn)算式,但在實(shí)際應(yīng)用中很少使用;因?yàn)樗荒鼙硎荆篴+b大於c且大於d。問題:如何表示:a<x<b0<y<10等條件特別提示選擇結(jié)構(gòu)109邏輯運(yùn)算符與邏輯運(yùn)算式邏輯運(yùn)算符&&邏輯與(相當(dāng)於其他語(yǔ)言中的AND)||邏輯或(相當(dāng)於其他語(yǔ)言中的OR)!
邏輯非(相當(dāng)於其他語(yǔ)言中的NOT)邏輯運(yùn)算規(guī)則:a&&b只有當(dāng)a、b都為真時(shí),a&&b才為真,否則為假。a||b若a、b之一為真,則a||b為真。(或只有當(dāng)a、b都為假時(shí),a||b才為假,否則為真)!a若a為真,則!a為假。110邏輯運(yùn)算符與邏輯運(yùn)算式優(yōu)先次序(見圖):算術(shù)運(yùn)算符關(guān)係運(yùn)算符賦值運(yùn)算符低高!運(yùn)算符&&.||運(yùn)算符111邏輯運(yùn)算符與邏輯運(yùn)算式邏輯運(yùn)算式邏輯運(yùn)算式的值應(yīng)該是一個(gè)邏輯量“真”或“假”。注意:C在給出運(yùn)算結(jié)果時(shí),0代表假,1代表真,但在判斷一個(gè)量是否為“真”時(shí),0代表假,非0代表“真”。例如:
if(!x)
等價(jià)於if(x==0)4&&0||2=?112特別提示在邏輯運(yùn)算式求解中,並不是所有的邏輯運(yùn)算符都被執(zhí)行。a&&b只有a為真(非0)時(shí),才需要判別b的值。a||b只要a為真(非0),就不必判斷b;只有a為假,才判別b。如當(dāng)a=1,b=2,c=3,d=4,m=n=1時(shí),執(zhí)行(m=a>b)&&(n=c>d);後n=?選擇結(jié)構(gòu)113分支語(yǔ)句在程式的三種基本結(jié)構(gòu)中選擇(分支)結(jié)構(gòu),根據(jù)條件的取值不同分別執(zhí)行不同的操作。C語(yǔ)言提供了兩種語(yǔ)句分別用於實(shí)現(xiàn)二分支和多分支。分別是IF語(yǔ)句
和SWITCH語(yǔ)句介紹這二種語(yǔ)句的語(yǔ)法結(jié)構(gòu)和使用方法。選擇結(jié)構(gòu)1145.3if語(yǔ)句if語(yǔ)句能實(shí)現(xiàn)所有的選擇結(jié)構(gòu)例5.5將任意兩個(gè)整數(shù)m、n中的較大數(shù)送給x,較小數(shù)送給y,然後按大小順序輸出(設(shè)m、n的值由鍵盤輸入)分析:共分三步,
S1:輸入兩個(gè)整數(shù)給m和n。S2:判斷m、n的大小並分別給x和y賦值。
S3:輸出x和y。其中第二步用選擇結(jié)構(gòu).115main(){intm,n,x,y;
printf(“\npleaseentertwointegers:”);
scanf(“%d%d”,&m,&n);if(m>n){x=m;y=n;}/*複合語(yǔ)句*/
else{x=n;y=m;}
printf(“\nx=%d,y=%d”,x,y);}思考:若條件改為:m<n,如何實(shí)現(xiàn)?1161.If語(yǔ)句的一般形式:if(運(yùn)算式)語(yǔ)句1else
語(yǔ)句2執(zhí)行過程:(如右圖)格式說(shuō)明:語(yǔ)句1和語(yǔ)句2在語(yǔ)法上是一個(gè)語(yǔ)句,可以是簡(jiǎn)單語(yǔ)句,也可以是複合語(yǔ)句。要特別注意複合語(yǔ)句中一對(duì){}的正確使用。條件運(yùn)算式語(yǔ)句1語(yǔ)句2YN1172.if語(yǔ)句的簡(jiǎn)化形式例5.6從鍵盤接收一個(gè)字元,若為大寫字母,則將其轉(zhuǎn)換成小寫字母並輸出;否則輸出原字元。分析:判斷ch是大寫字母的條件是:ch在A~Z之間#include<stdio.h>main(){charch;
printf(“\nenteracharacter:”);
ch=getchar();getchar();if(ch>=’A’&&ch<=’Z’)/*判斷並處理*/
ch=ch+32;
putchar(ch);}118if語(yǔ)句的簡(jiǎn)化形式if(運(yùn)算式)語(yǔ)句1執(zhí)行過程如圖:例:輸入任意數(shù)n,輸出其絕對(duì)值。main(){floata;
scanf(“%f”,&a);if(a<0)a=-a;
printf(“\n|a|is:%f”,a);}
條件運(yùn)算式語(yǔ)句1YN1193.if語(yǔ)句的嵌套當(dāng)if語(yǔ)句中的語(yǔ)句1或語(yǔ)句2又是if語(yǔ)句時(shí),就構(gòu)成了if語(yǔ)句的嵌套嵌套的if語(yǔ)句能實(shí)現(xiàn)多分支結(jié)構(gòu)。120假設(shè)m是一個(gè)整型數(shù)15,讓用戶從鍵盤上輸入所猜數(shù)字(用戶已知數(shù)的範(fàn)圍是10~20),若猜對(duì),則輸出“RIGHT”,否則,輸出”WRONG“,並指出所猜的數(shù)比m大還是小。分析:第一步,輸入猜測(cè)的數(shù)n。第二步,判斷並輸出結(jié)果:條件可以是“m等於n”,若條件成立,則輸出RIGHT;否則,需執(zhí)行兩步操作:①輸出WRONG,②判斷m、n的大小:條件可以是“n>m”;條件成立時(shí)輸出“big”;否則輸出“small”。例5.7猜數(shù)遊戲:121main(){intm=15,n;
printf("\nguessanum:");
scanf("%d",&n);/if(m==n)printf("RIGHT");/*語(yǔ)句1*/
else{printf("\nWRONG");if(n>m)printf(“BIG”);/*語(yǔ)句2*/
elseprintf("SMALL");}}122例5.8某幼稚園只接收2~6歲的小孩,其中2~3歲編入小班,4~5歲編入中班,6歲編入大班。編程實(shí)現(xiàn),對(duì)輸入的任意一個(gè)年齡,輸出該編入什麼班,或者告知“不收“。分析:首先根據(jù)條件“年齡在2~6歲之間”判斷是“收”還是“不收“,若條件滿足,則執(zhí)行的操作為:(1)判斷該編入何班;否則,輸出“不收”。其次,分析(1)如何實(shí)現(xiàn)。提示:本例可用不同的程式實(shí)現(xiàn)。如將條件改為“年齡超出2~6歲”;或者從條件“年齡小於2”開始判斷。試編程實(shí)現(xiàn)。123main(){intage;
printf(“\nenterage:”);
scanf(“%d”,&age);if(age>=2&&age<=6)if(age<=3)/*語(yǔ)句1開始*/
printf(“\nsmallclass”);/*語(yǔ)句1_1*/
elseif(age<=5)/*語(yǔ)句1_2*/
printf(“\nmiddleclass”);else
printf(“\nbigclass”);/*語(yǔ)句1結(jié)束*/
else
printf(“\ncannotaccept”);/*語(yǔ)句2*/}124If語(yǔ)句中的語(yǔ)句1和語(yǔ)句2都可以包含if語(yǔ)句。If語(yǔ)句的嵌套結(jié)構(gòu)中,因?yàn)閑lse是可選項(xiàng),所以要注意if與else的匹配。C語(yǔ)言規(guī)定:
else總是與其前面最近的、還沒有匹配過的if相匹配,並且是由裏向外逐對(duì)對(duì)匹配。編程時(shí),可以通過合理使用{}來(lái)明確if與else匹配關(guān)係。125例5.10:分析以下兩個(gè)程式,哪一個(gè)能實(shí)現(xiàn):從鍵盤上接收一個(gè)整數(shù),若該數(shù)為正偶數(shù),則輸出“positiveandeven.”;若為負(fù)數(shù),則輸出“negative”。提示:可畫出流程圖,即可看得很清楚。126程式(1):main(){intn;
printf(“\nenterainteger:”);
scanf(“%d”,&n);if(n>0)if(n%2==0)
printf(“positiveandeven.\n”);else
printf(“negative\n”);}127程式(2):main(){intn;
printf(“\nenterainteger:”);
scanf(“%d”,&n);if(n>0){if(n%2==0)
printf(“positiveandeven.\n”);}else
printf(“negative\n”);}1284.條件運(yùn)算符使用if語(yǔ)句時(shí),有時(shí)是根據(jù)條件給同一變數(shù)賦不同的值比如:main(){intx,y;
scanf(“%d”,&x);
if(x>0)y=x+1;elsey=x*x+1;
printf(“\nx=%d,y=%d”,x,y);}用C語(yǔ)言提供的條件運(yùn)算符描述,比用if語(yǔ)句更簡(jiǎn)練。上述if語(yǔ)句等價(jià)於:
y=x>0?x+1:x*x+1;129條件運(yùn)算式的一般格式:運(yùn)算式1?運(yùn)算式2:運(yùn)算式3計(jì)算過程:首先計(jì)算運(yùn)算式1;若其值為真(非0),則計(jì)算運(yùn)算式2,取運(yùn)算式2的值作為整個(gè)條件運(yùn)算式的值;否則,計(jì)算運(yùn)算式3,取運(yùn)算式3的值作為整個(gè)條件運(yùn)算式的值。條件運(yùn)算符:?:130優(yōu)先順序:條件運(yùn)算符的優(yōu)先順序比關(guān)係運(yùn)算符和算術(shù)運(yùn)算符都低,比賦值運(yùn)算符高。例如:y=x>0?x+1:x*x+1
等價(jià)於
y=((x>0)?(x+1):(x*x+1))說(shuō)明:並不是所有的if語(yǔ)句都能用條件運(yùn)算式實(shí)現(xiàn)。如if(n>0)a=6;elseb=8;131main()
{intn1,n2,n3,max;
printf("Pleaseinputthreenumbers:");
scanf("%d%d%d",&n1,&n2,&n3);
if(n1>n2)max=n1;
elsemax=n2;
if(n3>max)max=n3;
printf("max=%d\n",max);
}[案例]輸入任意三個(gè)整數(shù)n1、n2、n3,求三個(gè)數(shù)中的最大值。132main(){intn1,n2,n3,temp;
printf("Pleaseinputthreenumbers:");
scanf("%d%d%d",&n1,&n2,&n3);if(n1>n2){temp=n1;n1=n2;n2=temp;}if(n2>n3){temp=n2;n2=n3;n3=temp;}if(n1>n2){temp=n1;n1=n2;n2=temp;}
printf("Threenumbersaftersorted:%d,%d,%d\n",n1,n2,n3);}[案例]輸入任意三個(gè)數(shù)n1、n2、n3,按從小到大的順序排序輸出。選擇結(jié)構(gòu)133SWITCH語(yǔ)句格式:switch(運(yùn)算式){case常量運(yùn)算式1:語(yǔ)句1;case常量運(yùn)算式2:語(yǔ)句2;
case常量運(yùn)算式n:語(yǔ)句n;
default語(yǔ)句n+1;}執(zhí)行順序:計(jì)算運(yùn)算式的值;若值與某個(gè)常量運(yùn)算式值相等,則轉(zhuǎn)到其後語(yǔ)句執(zhí)行;若值與所有常量運(yùn)算式值都不等,則執(zhí)行default後語(yǔ)句;switch運(yùn)算式常量1常量2常量3常量4其他語(yǔ)句1語(yǔ)句2語(yǔ)句3語(yǔ)句4語(yǔ)句5134舉例:百分制成績(jī)轉(zhuǎn)為五分制成績(jī)。輸入scorescore==100s=9S=score/10Switch(s)9876其他優(yōu)秀良好中等及格不及135main(){intscore,s;
printf(“Inputascore(0~100):”);
scanf(“%d”,&score);s=score/10;/*將成績(jī)整除10*/
switch(s){case10:case9:printf(“grade=A\n”); case8:printf("grade=B\n");case7:printf("grade=C\n");case6:printf("grade=D\n");default:printf(“grade=E\n”);}} 參考程式如下:136case後常量的值必須互不相同,否則會(huì)出現(xiàn)相互矛盾;case後面的常量運(yùn)算式僅起語(yǔ)句標(biāo)號(hào)作用,並不進(jìn)行條件判斷。系統(tǒng)一旦找到入口標(biāo)號(hào),就從此標(biāo)號(hào)開始執(zhí)行,不再進(jìn)行標(biāo)號(hào)判斷,所以必須加上break語(yǔ)句,以便結(jié)束switch語(yǔ)句。
各case及default子句的先後次序,不影響程式執(zhí)行結(jié)果;多個(gè)case子句,可共用同一語(yǔ)句(組)。說(shuō)明:137main(){intscore,s;
printf(“Inputascore(0~100):”);
scanf(“%d”,&score);s=score/10;/*將成績(jī)整除10*/
switch(s){case10:case9:printf(“grade=A\n”);break; case8:printf("grade=B\n");break;case7:printf("grade=C\n");break;case6:printf("grade=D\n");break;default:printf(“grade=E\n”);}} 改進(jìn)程式如下:選擇結(jié)構(gòu)138程式舉例1、判斷某一年是否閏年,閏年的條件是:能被4整除、但不能被100整除,或者能被400整除。(使用IF的嵌套解決)設(shè)一標(biāo)誌變數(shù)leap,leap=1為閏年,leap=0為非閏年.輸入y如果y能被4整除則如果y能被100整除則如果y能被400整除則是閏年
否則不是閏年否則是閏年否則不是閏年139main(){intyear,leap=0; /*leap=0:預(yù)置為非閏年*/
printf("Pleaseinputtheyear:");
scanf("%d",&year);if(year%4==0){if(year%100!=0)leap=1;}else{if(year%400==0)leap=1;}if(leap)printf("%disaleapyear.\n",year);elseprintf("%disnotaleapyear.\n",year);}
參考程式如下:140main(){intyear;
printf("Pleaseinputtheyear:");
scanf("%d",&year);
if((year%4==0&&year%100!=0)||(year%400==0))
printf("%disaleapyear.\n",year);else
printf("%disnotaleapyear.\n",year);}利用邏輯運(yùn)算能描述複雜條件的特點(diǎn),可將上述程式優(yōu)化如下:141程式舉例2、求一元二次方程的解(使用if語(yǔ)句的嵌套解決)輸入a,b,c如果a=0則不是一元二次方程否則d=b*b-4*a*cp=-b/(2*a),q=sqrt(|d|)/(2*a)
如果d>0則輸出x1=p+q,x2=p-q
如果d==0則輸出x1=x2=p
如果d<0則輸出x1=p+iq,x2=p-iq142必要的注釋,可有效地提高程式的可讀性,從而提高程式的可維護(hù)性。在C語(yǔ)言根源程式中,注釋可分為三種情況:(1)在函數(shù)體內(nèi)對(duì)語(yǔ)句的注釋;(2)在函數(shù)之前對(duì)函數(shù)的注釋;(3)在根源程式檔開始處,對(duì)整個(gè)程式的總體說(shuō)明。加注釋的原則:如果不加注釋,理解起來(lái)就會(huì)有困難,或者雖無(wú)困難、但浪費(fèi)時(shí)間。良好的根源程式書寫風(fēng)格──注釋143/*……(說(shuō)明功能)*/
if(條件運(yùn)算式) /*條件成立時(shí)的含義*/
{……}
else /*入口條件含義*/
{……}
在選擇結(jié)構(gòu)中,一般要在前面說(shuō)明其作用,在每個(gè)分支條件語(yǔ)句行的後面,說(shuō)明該分支的含義,如下所示:144第一部分:寫出程式運(yùn)行結(jié)果;1、2、3、4第二部分:編程9、10、11選擇結(jié)構(gòu)課後習(xí)題145迴圈結(jié)構(gòu)程式設(shè)計(jì)6-1迴圈結(jié)構(gòu)組成6-2while語(yǔ)句6-3do_while語(yǔ)句6-4
溫馨提示
- 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 3 關(guān)節(jié)置換術(shù)止血與抗凝的綜合管理
- 中小學(xué)開學(xué)典禮5
- 2025年度民政局官方認(rèn)證的協(xié)議離婚書制作與咨詢服務(wù)合同4篇
- 現(xiàn)代城市規(guī)劃與發(fā)展
- 二零二五年度苗木種植基地土壤修復(fù)合同范本4篇
- 二零二五年度內(nèi)衣服裝類電子商務(wù)平臺(tái)運(yùn)營(yíng)合同規(guī)范4篇
- 2025年度新能源充電設(shè)備店鋪?zhàn)赓U合同2篇
- 2025年公司合同解除協(xié)議書
- 2025年度個(gè)人環(huán)保項(xiàng)目股份轉(zhuǎn)讓合同協(xié)議書3篇
- 二零二五年度智慧醫(yī)療信息系統(tǒng)租賃合同3篇
- 2023-2024學(xué)年度人教版一年級(jí)語(yǔ)文上冊(cè)寒假作業(yè)
- 2024醫(yī)療銷售年度計(jì)劃
- 稅務(wù)局個(gè)人所得稅綜合所得匯算清繳
- 人教版語(yǔ)文1-6年級(jí)古詩(shī)詞
- 上學(xué)期高二期末語(yǔ)文試卷(含答案)
- 軟件運(yùn)維考核指標(biāo)
- 空氣動(dòng)力學(xué)仿真技術(shù):格子玻爾茲曼方法(LBM)簡(jiǎn)介
- 2024版醫(yī)療安全不良事件培訓(xùn)講稿
- 中學(xué)英語(yǔ)教學(xué)設(shè)計(jì)PPT完整全套教學(xué)課件
- 移動(dòng)商務(wù)內(nèi)容運(yùn)營(yíng)(吳洪貴)項(xiàng)目五 運(yùn)營(yíng)效果監(jiān)測(cè)
- 比較思想政治教育學(xué)
評(píng)論
0/150
提交評(píng)論