計算機本科C語言第八章補充講.ppt
《計算機本科C語言第八章補充講.ppt》由會員分享,可在線閱讀,更多相關《計算機本科C語言第八章補充講.ppt(28頁珍藏版)》請在裝配圖網上搜索。
一 程序運行時的內存分布 當一個程序被啟動運行時 操作系統(tǒng)會給程序分配一塊內存空間 這塊內存空間用于存放程序運行過程中的數(shù)據(jù) 包括程序的執(zhí)行代碼 程序中定義的常量和變量等 根據(jù)存放內容的不同 這塊內存可以分為四個區(qū)域 程序代碼區(qū) 全局數(shù)據(jù)區(qū) 堆 棧 程序支配的 例 include includeintg voidmain intlocal int p p int malloc sizeof int p 3 scanf d d 二 函數(shù)調用的實現(xiàn)機制1 棧 是一種后進先出的數(shù)據(jù)結構 在內存中棧的操作是最先放到棧中的內容最后才釋放 而最后進棧的內容最先釋放 操作系統(tǒng) 函數(shù)main 函數(shù)a 函數(shù)b 一個函數(shù)總要等它調用的函數(shù)執(zhí)行完之后才能結束 所以函數(shù)的調用和返回遵循的規(guī)律也是后進先出 后調用先結束 函數(shù)c 2 函數(shù)調用實現(xiàn)機制例 棧voidc voidb c voida b main a 上面程序運行過程中棧的變化 1 開始為空 2 系統(tǒng)調用主函數(shù) 則棧中為主函數(shù)的運行開辟一塊空間 存放操作系統(tǒng)的運行狀態(tài) 返回地址 主函數(shù)的形參和局部變量 main 開始運行 3 主函數(shù)調用a函數(shù) 則在存放主函數(shù)的??臻g上再為a 申請一塊空間 存放main 的運行狀態(tài) 返回地址和a函數(shù)的局部變量 a 開始運行 4 a 運行過程中調用b 則又在棧中申請一塊空間 存放a 的運行狀態(tài) 返回地址 b 的參數(shù)和局部變量 b 開始運行 5 b 運行過程中調用c 則又在棧中申請一塊空間 存放c 的運行狀態(tài) 返回地址 c 的參數(shù)和局部變量 c 開始運行 6 函數(shù)c 運行結束 根據(jù)棧頂存放的主調函數(shù)的運行狀態(tài)和返回地址 程序返回到b 的調用處繼續(xù)執(zhí)行 同時釋放c 所申請到的??臻g 7 依次類推 棧隨著程序的運行不斷地發(fā)生變化 當main 執(zhí)行結束時 就返回到操作系統(tǒng) ??臻g完全釋放 回到開始的空閑狀態(tài) 從上面的示意圖中可看出 1函數(shù)的調用和返回遵循的規(guī)律也是后進先出 后調用先結束 2每進行一次函數(shù)調用 系統(tǒng)都要進行如下操作 1 建立被調用函數(shù)的??臻g2 保存調用函數(shù)的運行狀態(tài)和返回地址3 將實參的值傳遞給被調用函數(shù)4 將程序控制權交給被調用函數(shù)3當一個函數(shù)執(zhí)行結束之后 系統(tǒng)又要完成以下操作 1 如果函數(shù)有返回值 將返回值放到一個臨時的變量空間2 根據(jù)棧頂記錄的信息 恢復調用函數(shù)的運行狀態(tài)3 釋放該函數(shù)棧頂空間4 根據(jù)主調函數(shù)的返回地址 繼續(xù)主調函數(shù)的運行 main intn floaty printf nInputanumberplease scanf d 例10用遞歸方法求階乘 棧內存空間 注意 1 雖然每個函數(shù)的信息都存放在棧中間 但是??臻g是由系統(tǒng)管理的 函數(shù)之間并不能互相訪問局部變量 2 內存空間是有限的 棧空間是有限的 每次進行函數(shù)調用 都會花費一定的棧內存空間 如果設計的程序 不斷地進行函數(shù)調用 最終會因為??臻g不夠而導致程序運行出錯 同樣堆空間也是有限的 程序也不能無限制地動態(tài)申請空間 因此 在不再需要所申請的內存空間時 及時釋放它們 所以設計程序時要確保內存的有效利用 第七章編程題一家公司有4名銷售員 1 4 他們銷售5種不同的產品 1 5 每名銷售員在表格中記錄每種售出的產品 每份表格應包含以下信息 銷售員的編號產品號當天所售產品的總金額 includemain intt1 t2 分別代表銷售員的號碼和商品號碼 inti k 用來作計數(shù)器 floatcount 4 5 0 0 用來求4位銷售員每種商品的銷售額 floatsum 4 0 0 用來求出每個銷售員的銷售總額 while 1 printf 請輸入每名銷售員的號碼 while 1 保證輸入的銷售員的號碼1 4和 1 scanf d printf 12345Total n 先輸出提示 for i 0 i 3 i 循環(huán)四次 每行輸出銷售員號碼和各種商品銷售額和總額 printf 3d i 1 for k 0 k 4 k printf 2f count i k printf 2f sum i printf n 2通過循環(huán)按行順序為一個5 5的二維數(shù)組a賦1 25的自然數(shù) 然后輸出該數(shù)組的左下半三角 試編程 打印出來的是紅色字體的內容 12345678910111213141516171819202122232425 includemain intt1 t2 a 5 5 n 1 for t1 0 t1 4 t1 for t2 0 t2 4 t2 a t1 t2 n for t1 0 t1 4 t1 for t2 0 t2 t1 t2 printf 4d a t1 t2 putchar n 3從鍵盤輸入兩個字符串a和b 要求不用庫函數(shù)strcat把串b的前五個字符連接到串a中 如果b的長度小于5 則把b的所有元素都連接到a中 試編程 include defineN20 defineMN 20main chara M b N intt 0 m 0 m用來求出a數(shù)組中的有效字符個數(shù) printf 請輸入兩個字符串分別存儲于a和b數(shù)組中 n gets a gets b while a m 0 m while t 4 添加五個字符則需循環(huán)五次 if b t 0 break 不足五個字符則循環(huán)終止 a m t b t t a m t 0 puts a 7 2用選擇法對10個整數(shù)排序 includemain inta 10 inti j t i j用來作循環(huán)變量 t用來作中間變量 inttemp 用來作中間變量 對兩個元素起交換作用 printf 給數(shù)組中的十個元素賦值 n for i 0 ia j t j if t i temp a i a i a t a t temp putchar n for i 0 i 9 i printf 3d a i 7 4已有一個已排好序的數(shù)組 今輸入一個數(shù) 要求按原來排序的規(guī)律將它插入數(shù)組中 include defineN11main inta N t number number用來接受從終端輸入的數(shù)字 for t 0 ta t 1 a t number 要插入的數(shù)字是最大的 elsefor i 0 i number t N 1 while t i a t a t 1 t a i number break for t 0 t N t printf 3d a t 7 5將一個數(shù)組中的值按逆序存放 include defineN10main inta N i k i用來作計數(shù)器 k的值 inttemp for i 0 i N i scanf d 8 4寫一函數(shù) 使給定的一個二維數(shù)組3 3轉置 即行列轉換 includevoidf ints 3 3 inti k temp for i 0 i 2 i for k 0 k 2 k scanf d voidmain f 8 6寫一函數(shù) 將兩個字符串連接 include defineM40 defineN20voidstringcat chara M b N inti 0 m 0 i和t作循環(huán)變量 m用來求a數(shù)組有效字符的個數(shù) printf 請輸入兩個字符串賦給字符數(shù)組 scanf s s a b while a m 0 m while b i 0 a m i b i i a m i 0 printf n s n a voidmain stringcat 8 8寫一函數(shù) 輸入一個四位數(shù) 要求輸出這4個數(shù)字字符 但每個數(shù)字間空一個空格 includevoidcount intn s 4 i 0 printf 請輸入一個四位數(shù) while 1 scanf d voidmain count 8 16寫一函數(shù) 輸入一個十六進制數(shù) 輸出相應的十進制數(shù) include include defineN10voidcount inti 0 chars N c while 1 c getchar if c 0 i 0 while s i 0 if s i 0 8 17用遞歸法將一個整數(shù)N轉換成字符串 例如 輸入483 就輸出字符串 483 N的位數(shù)是不確定的 可以是任意的整數(shù) includevoidconvert intn inti if i n 10 0 convert i putchar n 10 0 voidmain intnumber printf 請從終端輸入一個整數(shù) scanf d 8 18給出年 月 日 計算該日是該年的第N天 includeintleap intyear if year 4 0- 配套講稿:
如PPT文件的首頁顯示word圖標,表示該PPT已包含配套word講稿。雙擊word圖標可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設計者僅對作品中獨創(chuàng)性部分享有著作權。
- 關 鍵 詞:
- 計算機 本科 語言 第八 補充
裝配圖網所有資源均是用戶自行上傳分享,僅供網友學習交流,未經上傳用戶書面授權,請勿作他用。
鏈接地址:http://m.szxfmmzy.com/p-6272571.html