《c語言與程序設(shè)計》第五講-清華李宛洲_第1頁
《c語言與程序設(shè)計》第五講-清華李宛洲_第2頁
《c語言與程序設(shè)計》第五講-清華李宛洲_第3頁
《c語言與程序設(shè)計》第五講-清華李宛洲_第4頁
《c語言與程序設(shè)計》第五講-清華李宛洲_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、for(循環(huán)變量起點;持續(xù)循環(huán)條件;每次循環(huán)變量增量)循環(huán)操作for(i=0;i10;i+)循環(huán)操作0 1 2 3 4 5 6 7 8 910falseture循環(huán)體外的程序注意,每次循環(huán)體內(nèi)語句執(zhí)行結(jié)束后,才對循環(huán)變量增量i每次的增量值,也稱之為步長(循環(huán)條件成立?循環(huán)操作的程序體truefalse設(shè)置循環(huán)變量的初值循環(huán)變量增值for(i=0;i0;i-=5)循環(huán)操作10 5 0falseture循環(huán)體外的程序i增量步長= -5起點=10自41班中有10名同學(xué)自愿獻(xiàn)血,因為要求獻(xiàn)血的年齡必須大于20歲,已知報名組年齡數(shù)據(jù)是19,18,19,20,21,18,20,20,19,20,我們從中挑

2、出年齡大于等于20歲的同學(xué)數(shù)目,并輸出到屏幕。int main()int x=0, age0=19,age1=18,age2=19,age3=20,age4=21, age5=18,age6=20,age7=20,age8=19,age9=20; if(age0=20)x+; if(age1=20)x+; if(age2=20)x+; if(age3=20)x+; if(age4=20)x+; if(age5=20)x+; if(age6=20)x+; if(age7=20)x+; if(age8=20)x+; if(age9=20)x+; coutx= xendl; return(0);部分

3、和的初值=0定義10個年齡變量,并賦初值逐個檢驗10個年齡變量的數(shù)值,滿足條件者,部分和加一功能滿足了,但是程序結(jié)構(gòu)太差!類似用循環(huán)結(jié)構(gòu)處理重復(fù)操作語句一樣,我們這里是否可以采用循環(huán)結(jié)構(gòu)?可是仔細(xì)看看每條語句,它們的操作是否完全相同?形式類似,但是操作的對象-變量是不同的,需要分別檢驗10個對象,無法采用for語句。能否把10個變量綜合成一個對象?輸出部分和,它是滿足大于20歲條件的同學(xué)個數(shù)。同類型的變量、聚集在一起,稱為串它是載體20000 1 2345 620022004200C內(nèi)存是數(shù)據(jù)的載體多個相關(guān)聯(lián)的字符類型的數(shù)據(jù)一串整型數(shù)連續(xù)的在內(nèi)存中排列稱為整數(shù)數(shù)組數(shù)組的第一個數(shù)據(jù)所在的地址,叫

4、數(shù)組的地址這個整型數(shù)組表述為:0,1,2,3,4,5,6該數(shù)組變量聲明為:int array20;其中:array是數(shù)組變量名;起始地址在2000單元;連續(xù)可用 個字節(jié);實際占用了 字節(jié)。array1440它和字符串的區(qū)別在哪里?對數(shù)組內(nèi)的每個元素初始化賦值int age10=19,18,19,20,21,18,20,20,19,20;int x=0;for(i=0;i=20)x+;循環(huán)變量從0開始從i =10出口步長 =1i在這里表示什么?age是一個整型變量的數(shù)組,也就是說,有一組整型數(shù)據(jù)類型的變量連續(xù)的排列在一起。age0,age1, age2, age3,age4, age5, age

5、6,age7, age8,age9age0就是數(shù)組的第1個變量元素, age1就是數(shù)組的第2個變量元素, age9就是數(shù)組的第10個變量元素。 所以,i就是數(shù)組元素的下標(biāo)。agei就是數(shù)組age的第i個元素定義了有10個元素變量的整型數(shù)組把10個年齡變量抽象成一個矢量,稱之為數(shù)組。數(shù)據(jù)類型基本類型構(gòu)造類型指針類型空類型整數(shù)型字符型實數(shù)型(浮點型)枚舉型單精度雙精度長整型短整型數(shù)組型結(jié)構(gòu)體型共用體型圖2.1 C語言數(shù)據(jù)類型布爾型(邏輯型)整型基本的數(shù)據(jù)類型構(gòu)造類型由基本數(shù)據(jù)類型組合而成,簡化了程序結(jié)構(gòu)數(shù)組,就是由同一種基本數(shù)據(jù)類型變量順序的排列而成。int s10;邏輯說明了一個名字為s的整型數(shù)

6、據(jù)類型的數(shù)組,長度為10計算機(jī)的內(nèi)存s0123456789數(shù)組s占用的長度,順序排列下標(biāo)從零開始s0 s1 s2 s3 s4 s5 s6 s7s8 s9通過定義數(shù)組的方法,把同類型的一組變量說明成一個對象,通過下標(biāo)變化,可以找到、并操作數(shù)組中的任何一個元素變量。編譯后分配內(nèi)存空間int main()int x=0,age10=19,18,19,20,21,18,20,20,19,20;for(int i=0;i=20)x+;coutx=x=20 x值加一計數(shù)age數(shù)組的10個元素中,有5個大于、等于20編程,求方程3x+7y=901的所有正整數(shù)解 y=(901-3*x)/7;顯然x為整數(shù)且=0

7、)其次,(901-3*x)被7整除整除?意思是說 (901-3*x)模7的余數(shù)為零if(901-3*x) % 7=0)x是方程整數(shù)解符號“%”是求模運算x從0開始至300,遍歷正整數(shù)數(shù)軸,可求得使(901-3*x)模7余數(shù)為零的所有正整數(shù)解for(i=0;i301;i+)if(901-3*i)%7=0)coutx=iendl;求模運算若余數(shù)為零它就是滿足題意的解限定在一個范圍之內(nèi)已經(jīng)學(xué)習(xí)過的運算符其余運算符將在例題中,按循序漸進(jìn)的方式演示用法邏輯運算中最容易混淆的地方王萍年底發(fā)獎金,有三等獎級:7000元、5000元和3000元,她想用這筆錢買一個手機(jī)和MP3,她盤算著:如果獎金是7000元錢

8、,可以買一個SONY NW-MS11(128M,3000元)和三星T208(全中文雙屏雙頻彩色屏幕16和弦鈴聲GPRS手機(jī),3180元);如果獎金是5000元錢,可以買一個SONY NW-MS7(64M,2400元)和三星T108彩屏手機(jī)(2580元);如果獎金是3000元錢,她就只能買一個三星T108彩屏手機(jī)(2580元);很多時候一個任務(wù)需要一段程序語句來完成,即一個代碼塊。為此,使用花括弧將這個代碼塊封裝在一起,從語句外部看來,就好像一條語句的作用,我們稱之為復(fù)合語句。 int bonus,balance;char mobile20;char mp320;scanf(input you

9、bonus=%dn,&bonus);bonus=7000?strcpy(mp3,SONY NW-MS11);strcpy(moblie,SAMGSUNG T208);balance=7000-3000-3180;yesnobonus=5000?strcpy(mp3,SONY NW-MS7);strcpy(moblie,SAMGSUNG T108);balance=5000-2400-2580;yesnostrcpy(mp3,no money);strcpy(moblie,SAMGSUNG T108);balance=3000-2580;printf(mp3=%s,moblie=%sn,

10、mp3,moblie);printf(balance%dn,balance);exit復(fù) 合 語 句 問 題設(shè)置能買的MP3型號能買的手機(jī)型號余款每一步驟都需要一個代碼段,使用復(fù)合語句,使得從if-else看過去,仍然相當(dāng)于一條語句。int main(void)char mp320;int bonus,balance;char mobile20; printf(pleas bonus=); scanf(%d ,&bonus); if(bonus=7000)strcpy(mp3,SONY NW-MS11); strcpy(moblie,SAMGSUNG T208); balance=70

11、00-3000-3180; else if(bonus=5000)strcpy(mp3,SONY NW-MS7);strcpy(mobile,SAMGSUNG T108);balance=5000-2400-2580;elsestrcpy(mp3,no money);strcpy(mobile,SAMGSUNG T108);balance=3000-2580;printf(mp3=%s,moblie=%sn,mp3, mobile);printf(balance%dn,balance);return(0); 復(fù)合語句,從if語句看,這段程序相當(dāng)于一條語句花括弧是成對的出現(xiàn)系工會供應(yīng)月餅,同一種

12、類的七星伴月分別有紫金便利店、清華超市、月巢、宮頤府等,價錢分別是120元、90元、160元和220元,設(shè)從鍵盤輸入店名,請檢索其價格,并將店家、價格輸出到屏幕。int main()char s40,s140=紫金便利店,s240=清華超市,s340=月巢,s440=宮頤府;int cost40=120,90,160,220;cout請輸入廠家:s;if(strcmp(s,s1)=0)couts1,cost0endl;elseif(strcmp(s,s2)=0)couts2,cost1endl; else if(strcmp(s,s3)=0)couts3,cost2endl; else if(

13、strcmp(s,s4)=0)couts4,cost3endl; else couterrorendl; return(0);定義4個數(shù)組各店家對應(yīng)的價格是紫金?是清華?是月巢?是宮頤府?都不是?那么輸入錯誤這個程序結(jié)構(gòu)是不是有些繁瑣?因為有多個字符串,需要分別操作。如果有20家店,程序需要些多少行?店家名稱和單價被分成兩個數(shù)組,處理不便是否可以、或者如何引入循環(huán)來改善程序結(jié)構(gòu)?struct cakechar name40; int cost; ;struct cake A4;邏輯說明一個名字為cake的結(jié)構(gòu)類型計算機(jī)的內(nèi)存cake中包含一個字符串name結(jié)構(gòu)說明cake中還有一個整型變量說明

14、一個名字為A的數(shù)組A的類型是cake的結(jié)構(gòu)類型通過定義結(jié)構(gòu)的方法,把不同類型的一組變量說明成一個對象A0A1A2A3數(shù)組A占用的長度,順序排列name40 costAname40 cost name40 cost name40 costcake結(jié)構(gòu)類型數(shù)組A的每一個元素,包含有2個成員分量name,cost訪問、操作結(jié)構(gòu)元素分量的方法是:A,或者Ai.cost結(jié)構(gòu)變量名成員分量名struct cake char name40; int cost;int main()struct cake A4= 紫金便利店,120,清華超市,90,月巢,160,宮頤府,220;char s20;c

15、out請輸入廠家:s;for(int i=0;i4;i+)if(strcmp(s,A)=0)coutA,Ai.costendl;break;if(i=4)couterrorendl;return(0);結(jié)構(gòu)體說明結(jié)構(gòu)體名字cake結(jié)構(gòu)中包含的數(shù)據(jù)變量說明一個名字為cake的結(jié)構(gòu)類型一個類型為cake的結(jié)構(gòu)數(shù)組A初始化數(shù)組的第一個元素第二個元素第三,四個元素操作結(jié)構(gòu)數(shù)組A的第i個元素里的字符串name輸出A的第i個元素里的字符串name輸出A的第i個元素里的單價cost匹配之后退出for循環(huán),break是退出語句i=4,說明程序沒有經(jīng)過break語句,匹配失敗結(jié)構(gòu)數(shù)組的作

16、用,與整型數(shù)組類似,把數(shù)據(jù)與循環(huán)結(jié)構(gòu),統(tǒng)一起來,成為程序設(shè)計的方法。struct studentcharnum20;charname40;char class40;int sex;char birthday20;char tel20;怎樣在程序中說明這張表?首先定義結(jié)構(gòu)類型studentstruct student A100;其次定義結(jié)構(gòu)數(shù)組A0就是表的第一行,A1就是表的第2行,最大允許100條記錄表示結(jié)構(gòu)變量成員的一般形式是: 結(jié)構(gòu)變量名. 成員名 A0A1A2A3A4這就是程序中處理表格的方法計算機(jī)語言與程序設(shè)計選課名單中有自動化系、土木系的同學(xué),并且自動化系同學(xué)中還有留學(xué)生。請分析學(xué)號

17、與系別的關(guān)系,設(shè)計一個程序,要求如下三個功能入口:輸入一個學(xué)號,給出他所屬的系別,如果是自動化系的同學(xué),請注明是否是留學(xué)生;輸入系別檢索信息(自動化系、土木系),給出該系的選課學(xué)生人數(shù);輸入“留學(xué)生”或“中國”,程序給出留學(xué)生選課人數(shù)或者是中國學(xué)生選課人數(shù); struct studentchar name40; char code40; char Dept40; /封裝數(shù)據(jù)cout1:檢索系 2:某系選課人數(shù) 3:國籍k;k =1?輸入學(xué)號檢索系turek =2?輸入系名檢索選課人數(shù)turek =3?檢索國籍tureexit可以用if-else語句,但多級嵌套使得程序結(jié)構(gòu)不清晰cout1:檢索

18、系 2:某系人數(shù) 3:國籍k;switch(k) case 1: coutendlstudent code?s; for(i=0;i10;i+)if(strcmp(s,arrayi.code)=0) coutarrayi.Dendl; break; case 2: x=0; coutendl自動化 or 土木?s; for(i=0;i10;i+)if(strcmp(s,arrayi.Dept)=0)x+; cout選課人數(shù)=xendl; break; case 3: x=0;coutendl留學(xué)生 or 中國?s; for(i=0;i10;i+)ch=arrayi.

19、code2; if(ch=W)x+; if(strcmp(s,留學(xué)生)=0)cout留學(xué)生數(shù)=xendl; else cout中國學(xué)生數(shù)=10-xendl; break;執(zhí)行完畢,退出switch語句輸入?yún)?shù)k=?若k=1若k=2若k=3根據(jù)參數(shù)值匹配關(guān)系,選擇程序執(zhí)行流向,是一種并列結(jié)構(gòu),比多級嵌套的結(jié)構(gòu)清晰如果k參數(shù)值不是1,2,3,則程序不執(zhí)行任何case語句菜單選項提示輸入?yún)?shù):2檢索土木系還是自動化系的選課學(xué)生?輸入土木系,得到該系的選課學(xué)生人數(shù)執(zhí)行完畢,退出switch語句執(zhí)行完畢,退出switch語句Switch語句體coutA:檢索系 B:某系人數(shù) C:國籍endl; swit

20、ch(ch=getche() case A: coutendlstudent code?s; for(i=0;i10;i+)if(strcmp(s,arrayi.code)=0) coutarrayi.Dendl; break; case B: x=0; coutendl自動化 or 土木?s; for(i=0;i10;i+)if(strcmp(s,arrayi.Dept)=0)x+; cout選課人數(shù)=xendl; break; case C: x=0;coutendl留學(xué)生 or 中國?s; for(i=0;i10;i+)ch=arrayi.code2; if(

21、ch=W)x+; if(strcmp(s,留學(xué)生)=0)cout留學(xué)生數(shù)=xendl; else cout中國學(xué)生數(shù)=10-xendl; break;輸入?yún)?shù)也可以是ASCII碼,一般用非緩沖輸入形式若ch=A若ch=B若ch=C菜單選項提示輸入?yún)?shù):B輸入土木系,得到該系的選課學(xué)生人數(shù)k1是一個常量表達(dá)式值KK=k1分支1K=k2分支2K=kn分支n若K匹配失敗執(zhí)行缺省語句項defaultbreakbreakbreakbreak出口語句段中的break語句,使程序跳出整個switch 語句。若沒有缺省語句項,則程序直接退出k逐個與case的k1,k2,kn值比較;當(dāng)k值與某個值ki相等時,稱

22、之為配對,即執(zhí)行其后的語句段。計算代數(shù)表達(dá)式值kcoutSD:檢索系 SS:某系人數(shù) SN:國籍c;switch(c) case SD: coutendlstudent code?s; for(i=0;i10;i+)if(strcmp(s,arrayi.code)=0) coutarrayi.Dendl; break; case SS: x=0; coutendl自動化 or 土木?s; for(i=0;i10;i+)if(strcmp(s,arrayi.Dept)=0)x+; cout選課人數(shù)=xendl; break; case SN: x=0;coutendl

23、留學(xué)生 or 中國?s; for(i=0;i10;i+)ch=arrayi.code2; if(ch=W)x+; if(strcmp(s,留學(xué)生)=0)cout留學(xué)生數(shù)=xendl; else cout中國學(xué)生數(shù)=10-xc ) cink; switch(k)case 1: break; case 2: break; case 3: break; 無需初值僅當(dāng)c=E時結(jié)束循環(huán)每一次循環(huán)完畢,讀取一個c值是否有更簡潔的循環(huán)結(jié)構(gòu)?while(c !=E) cink; switch(k)case 1: break; case 2: break; case 3: break; cinc; while()不用設(shè)置初值while()只有一個循環(huán)條件如果滿足循環(huán)條件,則執(zhí)行循環(huán)體若c =E執(zhí)行循環(huán)體外的程序在while()的循環(huán)體內(nèi),設(shè)置循環(huán)條件while(持續(xù)循環(huán)條件)循環(huán)操作;循環(huán)條件設(shè)置;(循環(huán)條件成立?循環(huán)操作的程序體truefa

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論