結(jié)構(gòu)化程序設(shè)計(jì)綜合訓(xùn)練_第1頁(yè)
結(jié)構(gòu)化程序設(shè)計(jì)綜合訓(xùn)練_第2頁(yè)
結(jié)構(gòu)化程序設(shè)計(jì)綜合訓(xùn)練_第3頁(yè)
結(jié)構(gòu)化程序設(shè)計(jì)綜合訓(xùn)練_第4頁(yè)
結(jié)構(gòu)化程序設(shè)計(jì)綜合訓(xùn)練_第5頁(yè)
已閱讀5頁(yè),還剩68頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、結(jié)構(gòu)化程序設(shè)計(jì)綜合訓(xùn)練第1頁(yè),共73頁(yè),2022年,5月20日,19點(diǎn)9分,星期二一、本課程的教學(xué)目的結(jié)構(gòu)化程序設(shè)計(jì)和面向?qū)ο蟪绦蛟O(shè)計(jì)是程序設(shè)計(jì)的兩種典型的思想和方法。目前高校開(kāi)設(shè)的程序設(shè)計(jì)課程也基本據(jù)此劃分為兩大系列。本課程以C語(yǔ)言為工具,通過(guò)布置一些程序,進(jìn)行結(jié)構(gòu)化程序化設(shè)計(jì)的綜合訓(xùn)練,該課程是計(jì)算機(jī)專(zhuān)業(yè)的一門(mén)實(shí)驗(yàn)課,通過(guò)該課程的學(xué)習(xí),達(dá)到以下目的: 第2頁(yè),共73頁(yè),2022年,5月20日,19點(diǎn)9分,星期二課程目的1在軟件工程生命周期開(kāi)發(fā)方法的指導(dǎo)下,深入理解和真正掌握自頂向下、逐步求精的結(jié)構(gòu)化程序設(shè)計(jì)方法;2. 掌握良好的程序設(shè)計(jì)編碼風(fēng)格;3學(xué)習(xí)常用的算法設(shè)計(jì)的技術(shù);4進(jìn)一步提高學(xué)生

2、的程序調(diào)試能力;5提高學(xué)生的程序編程興趣。第3頁(yè),共73頁(yè),2022年,5月20日,19點(diǎn)9分,星期二二、教材:本課程是實(shí)踐性課程,主要以實(shí)驗(yàn)為主。第4頁(yè),共73頁(yè),2022年,5月20日,19點(diǎn)9分,星期二三、課時(shí)的安排序號(hào)內(nèi) 容講授(學(xué)時(shí))實(shí)驗(yàn)1結(jié)構(gòu)化程序方法的開(kāi)發(fā)流程1.52管理系統(tǒng)的開(kāi)發(fā)0.53.53游戲程序的開(kāi)發(fā)0.53.54篩選的算法設(shè)計(jì)技術(shù)0.53.55歸納的算法設(shè)計(jì)技術(shù)0.53.56分治的算法設(shè)計(jì)技術(shù)0.53.57最優(yōu)的算法設(shè)計(jì)技術(shù)0.53.58綜合程序開(kāi)發(fā)0.549總結(jié)2合計(jì)725第5頁(yè),共73頁(yè),2022年,5月20日,19點(diǎn)9分,星期二四、其它說(shuō)明從三個(gè)方面考核每個(gè)實(shí)驗(yàn)的

3、成績(jī):功能完成情況、實(shí)驗(yàn)報(bào)告以及程序風(fēng)格、界面設(shè)計(jì)以及操作方便性。第6頁(yè),共73頁(yè),2022年,5月20日,19點(diǎn)9分,星期二結(jié)構(gòu)化開(kāi)發(fā)方法在60年代計(jì)算機(jī)發(fā)展初期,程序設(shè)計(jì)是少數(shù)聰明人干的事。他們的智力與技能超群,編寫(xiě)的程序既能控制弱智的計(jì)算機(jī),又能讓別人看不懂、不會(huì)用。那個(gè)時(shí)期編程就跟捏泥巴一樣隨心所欲,人們就在這種美滋滋的感覺(jué)下熱情地編程,結(jié)果產(chǎn)生了一堆問(wèn)題:程序質(zhì)量低下,錯(cuò)誤頻出,進(jìn)度延誤,費(fèi)用劇增。這些問(wèn)題導(dǎo)致了“軟件危機(jī)”。第7頁(yè),共73頁(yè),2022年,5月20日,19點(diǎn)9分,星期二結(jié)構(gòu)化開(kāi)發(fā)方法在1968年,一群程序員、計(jì)算機(jī)科學(xué)家與工業(yè)界人士聚集一起共商對(duì)策。通過(guò)借鑒傳統(tǒng)工業(yè)的

4、成功做法,他們主張通過(guò)工程化的方法開(kāi)發(fā)軟件來(lái)解決軟件危機(jī),并冠以“軟件工程”這一術(shù)語(yǔ)。軟件工程主要講述軟件開(kāi)發(fā)的道理,基本上是軟件實(shí)踐者的成功經(jīng)驗(yàn)和失敗教訓(xùn)的總結(jié)。 第8頁(yè),共73頁(yè),2022年,5月20日,19點(diǎn)9分,星期二結(jié)構(gòu)化開(kāi)發(fā)方法結(jié)構(gòu)化開(kāi)發(fā)方法是一種設(shè)計(jì)程序的技術(shù),采用自頂向下逐步求精的設(shè)計(jì)方法和單入口單出口的順序、選擇和循環(huán)三種基本控制結(jié)構(gòu)。它提出的原則可歸納為32字:“自頂向下,逐步細(xì)化;清晰第一,效率第二;書(shū)寫(xiě)規(guī)范,縮進(jìn)格式;基本結(jié)構(gòu),組合而成?!钡?頁(yè),共73頁(yè),2022年,5月20日,19點(diǎn)9分,星期二1、結(jié)構(gòu)化開(kāi)發(fā)方法軟件有自己的“生命周期”。一個(gè)軟件從定義、開(kāi)發(fā)、使用和

5、維護(hù),直到最終被廢棄,要經(jīng)歷一個(gè)漫長(zhǎng)的時(shí)期,通常把軟件經(jīng)歷的這個(gè)漫長(zhǎng)的時(shí)期成為生命周期。第10頁(yè),共73頁(yè),2022年,5月20日,19點(diǎn)9分,星期二1、結(jié)構(gòu)化開(kāi)發(fā)方法軟件工程的開(kāi)發(fā)方法就是從時(shí)間角度對(duì)復(fù)雜的軟件問(wèn)題進(jìn)行分解,把軟件漫長(zhǎng)的生命周期依次分為若干個(gè)階段,每個(gè)階段有獨(dú)立的任務(wù),然后逐步完成每個(gè)階段的任務(wù)。前一個(gè)階段任務(wù)的完成是進(jìn)行后一個(gè)階段工作的前提和基礎(chǔ),而后一個(gè)階段任務(wù)的完成通常是前一個(gè)階段提出的解法更進(jìn)一步具體化,增加了更多的實(shí)現(xiàn)細(xì)節(jié)。第11頁(yè),共73頁(yè),2022年,5月20日,19點(diǎn)9分,星期二1、結(jié)構(gòu)化開(kāi)發(fā)方法在每一個(gè)階段結(jié)束之前都必須進(jìn)行正式嚴(yán)格的技術(shù)審查和管理復(fù)審,若審

6、查通不過(guò),則必須進(jìn)行必要的返工,返工后還要進(jìn)行審查。審查的一個(gè)主要標(biāo)志就是每個(gè)階段都應(yīng)該提交與所開(kāi)發(fā)的軟件完全一致的高質(zhì)量的文檔資料,文檔不僅是前后階段的通信工具,而且是軟件交付使用后進(jìn)行維護(hù)的依據(jù)。第12頁(yè),共73頁(yè),2022年,5月20日,19點(diǎn)9分,星期二1、結(jié)構(gòu)化開(kāi)發(fā)方法采用結(jié)構(gòu)化的開(kāi)發(fā)方法,使軟件開(kāi)發(fā)的全過(guò)程以一種有條不紊的方式進(jìn)行,保證了軟件的質(zhì)量,特別是提高了軟件的可維護(hù)性。第13頁(yè),共73頁(yè),2022年,5月20日,19點(diǎn)9分,星期二2、結(jié)構(gòu)化方法的開(kāi)發(fā)流程在結(jié)構(gòu)化開(kāi)發(fā)中,編碼只是軟件開(kāi)發(fā)的一個(gè)很小的階段,而且是處在實(shí)現(xiàn)階段。結(jié)構(gòu)化的開(kāi)發(fā)流程可以用如圖的瀑布模型來(lái)模擬: 第14

7、頁(yè),共73頁(yè),2022年,5月20日,19點(diǎn)9分,星期二瀑布模型第15頁(yè),共73頁(yè),2022年,5月20日,19點(diǎn)9分,星期二軟件生命周期各階段的主要任務(wù) 問(wèn)題定義: “要解決的問(wèn)題是什么”。問(wèn)題定義階段是整個(gè)過(guò)程中占用時(shí)間最少的階段。第16頁(yè),共73頁(yè),2022年,5月20日,19點(diǎn)9分,星期二軟件生命周期各階段的主要任務(wù)可行性研究:從經(jīng)濟(jì)、技術(shù)、法律等方面分析確定系統(tǒng)是否值得開(kāi)發(fā),及時(shí)建議停止項(xiàng)目開(kāi)發(fā),避免人力、物力、時(shí)間的浪費(fèi),并進(jìn)行方案選擇??尚行匝芯康哪康牟皇墙鉀Q問(wèn)題,而是確定問(wèn)題是否值得去解決??尚行匝芯堪ㄋ膫€(gè)方面的研究:經(jīng)濟(jì)可行性技術(shù)可行性法律可行性方案的選擇第17頁(yè),共73頁(yè)

8、,2022年,5月20日,19點(diǎn)9分,星期二軟件生命周期各階段的主要任務(wù)需求分析:準(zhǔn)確回答“系統(tǒng)必須做什么”這個(gè)問(wèn)。通常用數(shù)據(jù)流圖、數(shù)據(jù)字典和簡(jiǎn)明算法描述表示系統(tǒng)的邏輯模型。需求分析階段的任務(wù)不是具體的解決客戶(hù)的問(wèn)題防止系統(tǒng)的設(shè)計(jì)與用戶(hù)的實(shí)際需求不相符的后果。第18頁(yè),共73頁(yè),2022年,5月20日,19點(diǎn)9分,星期二軟件生命周期各階段的主要任務(wù)概要設(shè)計(jì):確定系統(tǒng)設(shè)計(jì)方案,軟件的體系結(jié)構(gòu)。確定軟件由哪些模塊組成以及這些模塊之間的相互關(guān)系。第19頁(yè),共73頁(yè),2022年,5月20日,19點(diǎn)9分,星期二軟件生命周期各階段的主要任務(wù)詳細(xì)設(shè)計(jì):描述應(yīng)該如何具體地實(shí)現(xiàn)系統(tǒng)。詳細(xì)設(shè)計(jì)每個(gè)模塊,確定實(shí)現(xiàn)模

9、塊所需要的算法和數(shù)據(jù)結(jié)構(gòu)。第20頁(yè),共73頁(yè),2022年,5月20日,19點(diǎn)9分,星期二軟件生命周期各階段的主要任務(wù)軟件實(shí)現(xiàn)階段:進(jìn)行程序設(shè)計(jì)(編碼)和模塊測(cè)試。第21頁(yè),共73頁(yè),2022年,5月20日,19點(diǎn)9分,星期二軟件生命周期各階段的主要任務(wù)綜合測(cè)試階段:測(cè)試的目的是以最小的代價(jià)(耗費(fèi)最少時(shí)間和最少工作量)發(fā)現(xiàn)盡可能多的不同類(lèi)型的錯(cuò)誤。通過(guò)各種類(lèi)型的測(cè)試,查出軟件設(shè)計(jì)中的錯(cuò)誤并改正,確保軟件質(zhì)量;還要在用戶(hù)的參與下進(jìn)行驗(yàn)收,才可交付使用。第22頁(yè),共73頁(yè),2022年,5月20日,19點(diǎn)9分,星期二軟件生命周期各階段的主要任務(wù)大量的資料統(tǒng)計(jì)表明,軟件開(kāi)發(fā)組織將30%40%的工作量花在

10、測(cè)試上。而那些高可靠性、高安全性軟件的測(cè)試所花的時(shí)間更是其它開(kāi)發(fā)步驟總和的3到5倍。第23頁(yè),共73頁(yè),2022年,5月20日,19點(diǎn)9分,星期二軟件生命周期各階段的主要任務(wù)真正實(shí)施測(cè)試之前要制定測(cè)試方案,測(cè)試方案包括預(yù)定要測(cè)試的功能,應(yīng)該輸入的測(cè)試數(shù)據(jù)和預(yù)期的結(jié)果。第24頁(yè),共73頁(yè),2022年,5月20日,19點(diǎn)9分,星期二軟件生命周期各階段的主要任務(wù)測(cè)試和調(diào)試常常被說(shuō)成是一個(gè)回事,實(shí)際上是測(cè)試階段的不同任務(wù)。調(diào)試即排錯(cuò),是在已經(jīng)知道程序有問(wèn)題時(shí)要做的事情。測(cè)試則是在認(rèn)為程序能工作的情況下,為發(fā)現(xiàn)問(wèn)題而進(jìn)行的一整套確定的系統(tǒng)化的實(shí)驗(yàn)。 第25頁(yè),共73頁(yè),2022年,5月20日,19點(diǎn)9分

11、,星期二軟件生命周期各階段的主要任務(wù)軟件運(yùn)行、維護(hù):程序的運(yùn)行與維護(hù)是整個(gè)程序開(kāi)發(fā)流程的最后一步。編寫(xiě)程序的目的就是為了應(yīng)用,在程序運(yùn)行的早期,用戶(hù)可能會(huì)發(fā)現(xiàn)在測(cè)試階段沒(méi)有發(fā)現(xiàn)的錯(cuò)誤,需要修改。而隨著時(shí)間的推移,原有程序可能已滿(mǎn)足不了需要,這是就需要對(duì)程序進(jìn)行修改甚至升級(jí)。每次維護(hù)的要求及修改步驟都應(yīng)詳細(xì)準(zhǔn)確地記錄下來(lái),作為文檔保存。第26頁(yè),共73頁(yè),2022年,5月20日,19點(diǎn)9分,星期二常用設(shè)計(jì)工具介紹三種常用的圖形方式的設(shè)計(jì)工具。 第27頁(yè),共73頁(yè),2022年,5月20日,19點(diǎn)9分,星期二層次圖用來(lái)描述軟件的層次結(jié)構(gòu),圖中的一個(gè)矩形框代表一個(gè)模塊,方框之間的連線表示調(diào)用關(guān)系。層次

12、圖很適合在自頂向下設(shè)計(jì)軟件的過(guò)程中使用。第28頁(yè),共73頁(yè),2022年,5月20日,19點(diǎn)9分,星期二第29頁(yè),共73頁(yè),2022年,5月20日,19點(diǎn)9分,星期二程序流程圖是歷史最悠久使用最廣泛的描述軟件設(shè)計(jì)的方法。它的主要優(yōu)點(diǎn)是對(duì)控制流程的描述很直觀,便于初學(xué)者掌握。第30頁(yè),共73頁(yè),2022年,5月20日,19點(diǎn)9分,星期二第31頁(yè),共73頁(yè),2022年,5月20日,19點(diǎn)9分,星期二盒圖是一種很好的支持結(jié)構(gòu)化程序設(shè)計(jì)思想的圖形工具,也稱(chēng)為N-S圖。第32頁(yè),共73頁(yè),2022年,5月20日,19點(diǎn)9分,星期二順序結(jié)構(gòu)塊1塊2塊3塊4條件T F塊1塊2選擇結(jié)構(gòu)Case I=1,2,3T

13、塊1塊2多分支選擇結(jié)構(gòu)F塊3塊當(dāng)條件成立時(shí)當(dāng)型循環(huán)塊直到條件成立時(shí)直到型循環(huán)第33頁(yè),共73頁(yè),2022年,5月20日,19點(diǎn)9分,星期二偽代碼圖形工具表示設(shè)計(jì)比較直觀,但畫(huà)起來(lái)比較費(fèi)勁,所以描述設(shè)計(jì)還可以使用偽代碼這個(gè)常用的語(yǔ)言工具。偽代碼是一種“混合”語(yǔ)言,它使用一種語(yǔ)言通常是某種自然語(yǔ)言的詞匯,同時(shí)卻使用某種結(jié)構(gòu)化程序設(shè)計(jì)的語(yǔ)法。第34頁(yè),共73頁(yè),2022年,5月20日,19點(diǎn)9分,星期二偽代碼if 九點(diǎn)以前 do私人事務(wù);else 9點(diǎn)到18點(diǎn) 工作else 下班;第35頁(yè),共73頁(yè),2022年,5月20日,19點(diǎn)9分,星期二編碼應(yīng)注意的問(wèn)題第36頁(yè),共73頁(yè),2022年,5月20日

14、,19點(diǎn)9分,星期二全局變量 全局變量的作用增加了函數(shù)間數(shù)據(jù)聯(lián)系的渠道。但是全局變量使函數(shù)的通用性降低了,因?yàn)楹瘮?shù)在執(zhí)行時(shí)要依賴(lài)于其所在的全局變量。如果將一個(gè)函數(shù)移到另一個(gè)文件中,還要將有關(guān)的全局變量以及其值一起移過(guò)去。但若該全局變量與其它文件的全局變量同名時(shí),就會(huì)出現(xiàn)問(wèn)題,降低了程序的可靠性和通用性。第37頁(yè),共73頁(yè),2022年,5月20日,19點(diǎn)9分,星期二全局變量另外使用全局變量過(guò)多,會(huì)降低程序的清晰性,人們往往難以清楚地判斷出每個(gè)瞬間每個(gè)全局變量的值。在各個(gè)函數(shù)執(zhí)行時(shí)都可能改變?nèi)肿兞康闹担绦蛉菀壮鲥e(cuò)。對(duì)于大型程序,模塊多,常常由不同的人來(lái)完成不同的模塊,如果全局變量隨意使用,更容

15、易出現(xiàn)問(wèn)題,造成程序的混亂。因此,更應(yīng)該限制使用全局變量。 第38頁(yè),共73頁(yè),2022年,5月20日,19點(diǎn)9分,星期二變量的名字名字應(yīng)具有足夠的說(shuō)明性,以便使讀者能夠記住它們是干什么的。給每個(gè)全局變量聲明附一個(gè)簡(jiǎn)短的注釋也是非常有幫助的。第39頁(yè),共73頁(yè),2022年,5月20日,19點(diǎn)9分,星期二變量的名字按常規(guī)方式使用的局部變量可采用極短的名字,如用i、j作為循環(huán)變量,p、q作為指針,s、t表示字符串等。第40頁(yè),共73頁(yè),2022年,5月20日,19點(diǎn)9分,星期二變量的名字現(xiàn)實(shí)中存在許多命名約定或者本地習(xí)慣。常見(jiàn)的如:指針采用以ptr結(jié)尾的變量名;全局變量用大寫(xiě)開(kāi)頭或者g_開(kāi)頭做變量

16、名;常量用完全由大寫(xiě)拼寫(xiě)的變量名等。命名約定能使代碼更易理解。 第41頁(yè),共73頁(yè),2022年,5月20日,19點(diǎn)9分,星期二表達(dá)式和語(yǔ)句同樣,我們也應(yīng)該以盡可能一目了然的形式寫(xiě)好表達(dá)式和語(yǔ)句。第42頁(yè),共73頁(yè),2022年,5月20日,19點(diǎn)9分,星期二采用縮進(jìn)程序結(jié)構(gòu),是使程序呈現(xiàn)出結(jié)構(gòu)清晰的最省力的方法。比較:n=0;for(n+;n100;fieldn+=0) ;或for(n+;n100;fieldn+=0);for(n=1;n 100;n+) fieldn=0;第43頁(yè),共73頁(yè),2022年,5月20日,19點(diǎn)9分,星期二使用表達(dá)式的自然形式。否定運(yùn)算的條件表達(dá)式比較難理解,比較:i

17、f(!(block_id=unblocks) if(block_id=actblks)|(block_idunblocks) 第44頁(yè),共73頁(yè),2022年,5月20日,19點(diǎn)9分,星期二分解復(fù)雜的表達(dá)式。C有很豐富的表達(dá)式語(yǔ)法結(jié)構(gòu)和很豐富的運(yùn)算符,因此應(yīng)該避免將一大堆東西塞進(jìn)一個(gè)結(jié)構(gòu)中。比較: *xp+=(x=2*k (n-m)?ck+1:dk-); if(2*k =A&(c)=Z)但如果它在下面的上下文中使用:while(isupper(c=getchar( )那么,每當(dāng)遇到一個(gè)大于等于A的字符,程序就會(huì)丟掉它,而下一個(gè)字符將被讀入并去與Z做比較。因此,上面的實(shí)現(xiàn)是錯(cuò)誤。 第47頁(yè),共73

18、頁(yè),2022年,5月20日,19點(diǎn)9分,星期二宏除了這個(gè)問(wèn)題外,由于宏是通過(guò)文本替換方式實(shí)現(xiàn)的,如果忘記給宏的體和參數(shù)加上括號(hào),將產(chǎn)生錯(cuò)誤。如:#define square(x) (x)*(x)1/square(x)正確的宏應(yīng)該是:#define square(x) (x)*(x)所以建議:除了定義符號(hào)常量外,最好避免使用宏。第48頁(yè),共73頁(yè),2022年,5月20日,19點(diǎn)9分,星期二注釋注釋是幫助讀者閱讀程序的一種手段,它們澄清情況,不是添亂。注釋要注意:對(duì)函數(shù)要進(jìn)行注釋?zhuān)喊ú糠謪?shù)。對(duì)一些需要看大量代碼的才能夠確定這部分代碼的功能,需要進(jìn)行注釋不要瑣談明顯的東西。注釋不要與代碼矛盾。如

19、果注釋的長(zhǎng)度超過(guò)代碼本身,可能就說(shuō)明這個(gè)代碼應(yīng)該修改了。第49頁(yè),共73頁(yè),2022年,5月20日,19點(diǎn)9分,星期二C語(yǔ)言中常見(jiàn)的錯(cuò)誤忽略了“=”與“=”的區(qū)別。if (a=3) then 但C語(yǔ)言中,“=”是賦值運(yùn)算符,“=”是關(guān)系運(yùn)算符。如:if (a=3) a=b;第50頁(yè),共73頁(yè),2022年,5月20日,19點(diǎn)9分,星期二C語(yǔ)言中常見(jiàn)的錯(cuò)誤忘記加分號(hào)。分號(hào)是C語(yǔ)句中不可缺少的一部分,語(yǔ)句末尾必須有分號(hào)。a=1b=2if (a%3=0);I+;第51頁(yè),共73頁(yè),2022年,5月20日,19點(diǎn)9分,星期二C語(yǔ)言中常見(jiàn)的錯(cuò)誤輸入變量時(shí)忘記加地址運(yùn)算符“&”。int a,b;scanf(

20、%d%d,a,b);這是不合法的。Scanf函數(shù)的作用是:按照a、b在內(nèi)存的地址將a、b的值存進(jìn)去?!?a”指a在內(nèi)存中的地址。第52頁(yè),共73頁(yè),2022年,5月20日,19點(diǎn)9分,星期二C語(yǔ)言中常見(jiàn)的錯(cuò)誤switch語(yǔ)句中漏寫(xiě)break語(yǔ)句。例如:根據(jù)考試成績(jī)的等級(jí)打印出百分制數(shù)段。switch(grade) case A:printf(85100n;case B:printf(7084n;case C:printf(6069n;case D:printf(60n;default:printf(errorn;)第53頁(yè),共73頁(yè),2022年,5月20日,19點(diǎn)9分,星期二C語(yǔ)言中常見(jiàn)的錯(cuò)誤

21、定義數(shù)組時(shí)誤用變量。int n;scanf(%d,&n);int an;第54頁(yè),共73頁(yè),2022年,5月20日,19點(diǎn)9分,星期二C語(yǔ)言中常見(jiàn)的錯(cuò)誤在定義數(shù)組時(shí),將定義的“元素個(gè)數(shù)”誤認(rèn)為是可使的最大下標(biāo)值。main()static int a10=1,2,3,4,5,6,7,8,9,10;printf(%d,a10); 第55頁(yè),共73頁(yè),2022年,5月20日,19點(diǎn)9分,星期二常見(jiàn)的內(nèi)存錯(cuò)誤未初始化的指針 void f2(int datum) int *p2; *p2 = datum; . 第56頁(yè),共73頁(yè),2022年,5月20日,19點(diǎn)9分,星期二常見(jiàn)的內(nèi)存錯(cuò)誤錯(cuò)誤的內(nèi)存釋放 v

22、oid f3() char *p; p = malloc(10); . free(p); . free(p); 第57頁(yè),共73頁(yè),2022年,5月20日,19點(diǎn)9分,星期二常見(jiàn)的內(nèi)存錯(cuò)誤 void f8() struct x *xp; xp = (struct x *) malloc(sizeof (struct x); . free(xp); . return xp. 第58頁(yè),共73頁(yè),2022年,5月20日,19點(diǎn)9分,星期二常見(jiàn)的內(nèi)存錯(cuò)誤試圖修改常量intmain(intargc, char* argv) char* p = abcd; *p = 1; return 0;第59頁(yè),共

23、73頁(yè),2022年,5月20日,19點(diǎn)9分,星期二常見(jiàn)的內(nèi)存錯(cuò)誤誤解傳值與傳引用#include #include void get_str(char* p) p = malloc(sizeof(abcd); strcpy(p, abcd); return; int main(int argc, char* argv) char* p = NULL; get_str(p); printf(p=%pn, p); return 0;第60頁(yè),共73頁(yè),2022年,5月20日,19點(diǎn)9分,星期二常見(jiàn)的內(nèi)存錯(cuò)誤char* get_str(void) char* str = abcd; returnst

24、r;intmain(intargc, char* argv) char* p = get_str(); printf(%sn, p); return 0;第61頁(yè),共73頁(yè),2022年,5月20日,19點(diǎn)9分,星期二測(cè)試題1、頭文件中的 ifndef/define/endif 干什么用?2、#include 和 #include “filename.h” 有什么區(qū)別?3、請(qǐng)寫(xiě)出 float x 與“零值”比較的 if 語(yǔ)句。4、請(qǐng)寫(xiě)出 char *p 與“零值”比較的 if 語(yǔ)句:第62頁(yè),共73頁(yè),2022年,5月20日,19點(diǎn)9分,星期二測(cè)試題請(qǐng)簡(jiǎn)述以下兩個(gè)for循環(huán)的優(yōu)缺點(diǎn) for (i

25、=0; iN; i+)if (condition) DoSomething();else DoOtherthing();if (condition) for (i=0; iN; i+) DoSomething(); else for (i=0; iN; i+) DoOtherthing();第63頁(yè),共73頁(yè),2022年,5月20日,19點(diǎn)9分,星期二測(cè)試題 void GetMemory2(char *p, int num)*p = (char *)malloc(num);void Test(void) char *str = NULL; GetMemory(&str, 100); strcp

26、y(str, hello); printf(str);第64頁(yè),共73頁(yè),2022年,5月20日,19點(diǎn)9分,星期二測(cè)試題void Test(void) char *str = (char *) malloc(100);strcpy(str, “hello”);free(str); if(str != NULL) strcpy(str, “world”); printf(str); 第65頁(yè),共73頁(yè),2022年,5月20日,19點(diǎn)9分,星期二測(cè)試題char str = “Hello” ;char *p = str ;int n = 10;請(qǐng)計(jì)算sizeof (str ) = sizeof ( p ) = sizeof ( n ) =第66頁(yè),共73頁(yè),2022年,5月20日,19點(diǎn)9分,星期二測(cè)試題void Func ( char str100) 請(qǐng)計(jì)算 sizeof( str ) = void *p = malloc( 100 );請(qǐng)計(jì)算sizeof ( p ) =第67頁(yè),共73頁(yè),2022年,5月20日,19點(diǎn)9分,星期二測(cè)試題void change(int *data1, int *data2) int *temp; temp = data1; data1 = data2; data2 = te

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論