1. 程式人生 > >《現代作業系統(中文第三版)》課後習題——第十章 例項研究1:Linux

《現代作業系統(中文第三版)》課後習題——第十章 例項研究1:Linux

第十章 例項研究1:Linux

1.一個目錄包含以下的檔案:

aardvark feret koala porpoise unicorn bonefish grunion llama quacker vicuna capybara hyena marmot rabbit weasel dingo ibex nuthatch seahorse yak jellyfish ostrich

哪些檔案能通過命令ls [abc]*e*被羅列出來?
答:將列出的檔案是:bonefish、quacker、seahorse和weasel。

2.下面的Linux shell管線的功能是什麼?
grep nd xyz | wc -|
答:它列印xyz檔案中包含字串“nd”的行號。

3.寫一個能夠在標準輸出上列印檔案z的第八行的Linux管線。
答:管線如下:head -8 z | tail -1。第一部分選出檔案z的前八行,並將它們傳遞給tail,tail將最後一行寫入螢幕。

4.Linux在標準輸出和標準錯誤對於終端都是預設的情況下是怎麼區分標準輸出和標準錯誤的?
答:它們是分開的,因此標準輸出可以重定向,而不會影響標準錯誤。在管線中,標準輸出可能會轉到另一個程序,但標準錯誤仍然在終端上輸出。

5.一個使用者在終端鍵入瞭如下的命令:
a|b|c&
d|e|f&
在shell處理完這些命令後,有多少新的程序在執行?
答:每個程式都執行在自己的程序中,因此將啟動六個新程序。

6.當Linux shell啟動一個程序,它把它的環境變數,如HOME放到程序棧中,使得程序可以找到它的home目錄是哪個。如果這個程序之後進行派生,那麼它的子程序也能自動地得到這些變數嗎?
答:是的。子程序的記憶體是父程序的完整副本,包括堆疊。因此,如果環境變數在父程序的堆疊上,它們也將在子程序堆疊上。

7.在如下的條件下:文字大小=l00KB,資料大小=20KB,棧大小=10KB,任務結構=1KB,使用者結構=5KB,一個傳統的UINX系統要花多長的時間派生一個子程序?核心陷阱和返回的時間用lms,機器每50ns就可以複製一個32位的字。共享文字段,但是不共享資料段和堆疊段。
答:由於文字段是共享的,因此只需要複製36KB。該機器每微秒可以處理80個位元組,因此36KB需要0.46毫秒。進出核心需要另外的1毫秒,整個過程大概需要1.46毫秒。

8.當多兆位元組程式變得越來越普遍,花在執行fork系統呼叫以及複製呼叫程序的資料段和堆疊段的時間也成比例地增長。當在Linux中執行fork,父程序的地址空間是沒有被複制的,不像傳統的fork語義那樣。Linux是怎樣防止子程序做一些會徹底改變fork語義的行動的?
答:Linux依賴於寫時複製。讓子程序指向父程序的地址空間,但標記父程序的頁面被防寫。當子程序嘗試寫父程序的地址空間時,會發生陷入,這時建立父程序的頁面的副本並將其分配到子程序的地址空間中。

9.當一個程序進入僵死狀態後,取走它的記憶體有意義嗎?為什麼?
答:有意義。它不再運行了,所以它的記憶體越早在空閒列表中越好。

10.你認為為什麼Linux的設計者禁止一個程序向不屬於它的程序組的另一個程序發訊號呢?
答:如果惡意使用者可以將訊號傳送到任意無關的程序,可能會對系統造成嚴重破壞。沒有什麼會阻止使用者編寫一個程式,該程式包含一個迴圈,該迴圈向PID i傳送一個訊號,i從1到PID的最大值。許多這些程序對於訊號將是無準備的,並且將被殺死。如果你想殺死你自己的程序,那沒關係,但是殺死鄰居的程序是不能接受的。

11.一個系統呼叫常用一個軟體中斷(陷阱)指令實現。一個普通的過程呼叫在Pentium的硬體上也能使用嗎?如果能使用,在哪種條件下?如何使用?如果不能,請說明原因。
答:使用Linux或Windows Vista是不可能的,但Pentium硬體確實可以實現。需要的是使用硬體的分段功能,這不是Linux或Windows Vista所支援的。作業系統可以放在一個或多個全域性段中,通過受保護的過程呼叫來進行系統呼叫而不是陷阱。OS/2以這種方式工作。

12.通常情況下,你認為守護程序比互動程序具有更高的優先順序還是更低的優先順序?為什麼?
答:通常,守護程序在後臺執行,如列印和傳送電子郵件。由於人們通常不坐在它們椅子的邊緣等待它們完成,所以它們被賦予了低優先順序,吸收了互動程序所不需要的多餘的CPU時間。

13.當一個新程序被建立,它一定會被分配一個惟一的整型數作為它的PID。在核心裡有一個每個程序建立時就遞增的計數器夠用麼?其中計數器作為新的PID,討論你的結論。
答:PID必須是唯一的。遲早計數器會溢位從而返回到0,然後它會重新開始計數,例如15分配給了一個幾個月前開始執行直到現在仍在執行的程序,則15不能被分配給一個新建立的程序。因此,通過計數器選出PID之後,必須對程序表進行搜尋以檢視PID是否已在使用。

14.在每個任務結構中的程序項中,父程序的PID被儲存。為什麼?
答:當程序退出時,父程序將被賦予其子程序的退出狀態。PID需要能夠識別父程序,使得退出狀態可以返回到正確的父程序中。

15.當響應一個傳統的UNIX fork呼叫時,Linux的clone命令會使用什麼樣的sharing_flags位的組合?
答:如果所有sharing_flags位都被設定,則clone命令啟動一個常規的執行緒。如果所有的位被清除,這個呼叫本質上就是一個fork。

16.Linux排程器在2.4版本和2.6版本的核心間經歷了一個大整修。現在的排程器可以在O(1)時間做出排程決定。請解釋為什麼會這樣?
答:每個排程決策需要查詢活動陣列的點陣圖並搜尋陣列中的第一組位,這可以在恆定時間內完成,從所選擇的佇列中再次執行單個任務,再次執行常數時間操作,或者如果點陣圖 值為零,交換活動和過期列表的值,再次進行恆定時間操作。

17.當引導Limix(或者大多數其他作業系統在引導時)時,在0號扇區的引導載入程式首先載入一個載入程式,這個程式之後會載入作業系統。這多餘的一步為什麼是必不可少的?0號扇區的引導載入程式直接載入作業系統會更簡單的。
答:從塊0載入的程式最大長度為512位元組,因此不能很複雜。載入作業系統需要了解檔案系統佈局才能查詢和載入作業系統。不同的作業系統有不同的檔案系統,512位元組的程式無法滿足要求。相反,塊0引導載入程式僅從磁碟分割槽上的固定位置獲取另一個載入程式。該程式可以更長,而且和系統相關,以便它可以找到並載入作業系統。

18.某個編輯器有100KB的程式文字,30KB的初始化資料和50KB的BSS,初始堆疊是10KB。假設這個編輯器的三個複製是同時開始的。 
(a)如果使用共享文字,需要多少實體記憶體呢? 
(b)如果不使用共享文字又需多少實體記憶體呢?
答:使用共享文字,文字需要100 KB。這三個程序中的每個程序對於其資料段需要80 KB,對於其堆疊需要10 KB,因此所需的總記憶體為370 KB。不使用共享文字,每個程式需要190 KB,因此三個程序共需要570 KB。

19.在Linux中開啟檔案描述符表為什麼是必要的呢?
答:程序可以通過共享一個開啟的檔案描述符來共享檔案,包括當前共享檔案的指標位置,而不必更新對方的私有檔案描述符表中的任何東西。同時,另一個程序可以通過單獨的開啟的檔案描述符訪問同一個檔案,獲取不同的檔案指標,並以自己的意願移動檔案。

20.在Linux中,資料段和堆疊段被分頁並交換到一個特別的分頁磁碟或分割槽的暫時副本上,但是程式碼段卻使用了可執行二進位制檔案。為什麼?
答:程式碼段不能更改,所以它不需要被分頁。如果需要它的頁框,可以直接釋放。並始終可以從檔案系統檢索到它頁面。資料段不能被分頁後返回可執行檔案,因為它可能已經被改變。將其分頁後返回會破壞可執行檔案。堆疊段甚至不存在於可執行檔案中。

21.描述一種使用mmap和訊號量來構造一個程序內部間通訊機制的方法。
答:兩個程序可以同時將同一個檔案對映到它們的地址空間。這給了他們一種共享記憶體的方法。共享記憶體的一半可以用作從A到B的緩衝區,另一半用作從B到A的緩衝區。為了通訊,一個程序向它的一半共享記憶體寫入訊息,然後向另一個程序傳送一個訊號以指示有一個訊息等待它。對訊息的回覆可以使用另一半共享記憶體緩衝區。

22.一個檔案使用如下的mmap系統呼叫對映:
mmap(65536,32768,READ,FLAGS,fd,0)
每頁有8KB。當在記憶體地址72000處讀一個位元組時,訪問的是檔案中的哪個位元組?
答:儲存器地址65,536是檔案0位元組,所以儲存器地址72,000是檔案的6464位元組。

23.在前一個問題的系統呼叫執行後,執行munmap(65535,8192)呼叫會成功嗎?如果成功,檔案的哪些位元組會保持對映?如果不成功,為什麼會失敗?
答:會成功。最初,檔案的四頁被對映:0、1、2和3。呼叫完成後,只有第2頁和第3頁仍然被對映,即位元組16,384到32,767。

24.一個頁面故障會導致錯誤程序終止嗎?如果會,舉一個例子。如果不會,請解釋原因。
答:有可能。例如,當堆疊超出底部頁面時,會發生頁面錯誤,並且作業系統通常會為其分配最下一頁。但是,堆疊已經碰到資料段,下一頁不能分配給堆疊,所以由於虛擬地址空間已經用完,程序必須被終止。此外,即使虛擬記憶體中有其他頁面可用,磁碟的頁面交換區域可能已滿,因此無法為新頁面分配後備儲存,這也將終止程序。

25.在記憶體管理的夥伴系統中,兩個相鄰的同樣大小的空閒記憶體塊有沒有可能同時存在而不會被合併到一個塊中?如果有解釋是怎麼樣的情況。如果沒有可能,說明為什麼不可能。
 
答:如果兩個塊不是夥伴,這是可能的。考慮圖10-17(e)中的情況。兩個新的8個頁面的請求到來。在這一點上,底部32個頁面的記憶體由4個不同的使用者擁有,每個擁有8個頁面。現在使用者1和使用者2釋放它們的頁面,但使用者0和使用者3保留它們的頁面。這產生了8個頁面被佔用,8個頁面空閒,8個頁面空閒,8個頁面被佔用的情況。有兩個相同大小的相鄰塊,但不能合併,因為它們不是夥伴。

26.據說在程式碼段中分頁分割槽要比分頁檔案效能更好。為什麼呢?
答:分頁分割槽允許使用原始裝置,而不需要檔案系統資料結構的開銷。要訪問塊n,作業系統可以通過將其新增到分割槽的起始塊來計算其磁碟位置,而沒有必要通過所有的間接區塊。

27.舉兩個例子說明相對路徑名比絕對路徑名有優勢。
答:通過相對於工作目錄的路徑開啟檔案通常對程式設計師或使用者來說更為方便,因為需要較短的路徑名。它通常也比較簡單,需要更少的磁碟訪問。

28.以下的加鎖呼叫是由一個程序集合產生的,對於每個呼叫,說明會發生什麼事情。如果一個程序沒能夠得到鎖,它就被阻塞。
a)A想要0到10位元組處的一把共享鎖。
b)B想要20到30位元組處的一把互斥鎖。
c)C想要8到40位元組處的一把共享鎖。
d)A想要25到35位元組處的一把共享鎖。
e)B想要8位元組處的一把互斥鎖。
答:結果如下:
(a)鎖被授予。
(b)鎖被授予。
(c)C被阻塞,因為20位元組到30位元組不可用。
(d)A被阻塞,因為20位元組到25位元組不可用。
(e)B被阻塞,因為8位元組不可用於獨佔鎖定。
這時,發生了一個死鎖。沒有一個程序可以再次執行。

29.考慮圖10-26c中的加鎖檔案。假設一個程序嘗試對10和11位元組加鎖然後阻塞。那麼,在C釋放它的鎖前,還有另一個程序嘗試對10和11位元組加鎖然後阻塞。在這種情況下語義方面會產生什麼問題?提出兩種解決方法並證明。
 
答:問題出現在哪個程序可用時可以獲得鎖。最簡單的解決方案是將其設為未定義。這是POSIX所做的,因為它是最簡單的實現。另一個是要求按照請求的順序授予鎖。這種方法需要更多的工作去實現,但可以防止飢餓。另一種可能是讓程序在請求鎖時提供優先權,並使用這些優先順序做出選擇。

30.假設lseek系統呼叫在一個檔案中尋找一個負的偏移量。給出兩種可能的處理方法。
答:一種方法是給出錯誤,拒絕執行lseek。另一個是使偏移變為負值。只要不使用,就沒有任何傷害。只有嘗試讀取或寫入檔案時,才能給出錯誤資訊。如果lseek跟隨另一個使偏移為正的lseek,則不會給出錯誤。

31.如果一個Linux檔案擁有保護模式755(八進位制),檔案所有者、所有者所在組以及其他每個使用者都能對這個檔案做什麼?
答:檔案所有者可以讀取,寫入和執行它,其他所有使用者(包括檔案所有者的組)只能讀取並執行它,但不能寫入。

32.一些磁帶驅動擁有編號的塊,能夠在原地重寫—個特定塊同時不會影響它之前和之後的塊。這樣一個裝置能持有一個已載入的Linux檔案系統嗎?
答:能。能夠任意讀和寫的塊裝置可以用來儲存檔案系統。即使沒有辦法尋求特定的塊,總是可以倒帶,然後計數到所請求的塊。這樣的檔案系統不是一個高效能的檔案系統,但它能工作。作者在PDP-11上使用DECtapes實現了該功能,它能夠工作。

33.在圖10-24中連結之後Fred和Lisa在他們各自的目錄中都能夠訪問檔案X。這個訪問是完全對稱的嗎,也就是說其中一個人能對檔案做的事情另一個人也可以做?
 
答:不是,該檔案仍然只有一個所有者。例如,如果所有者只能在檔案上寫,則對方不能這樣做。將檔案連結到您的目錄不會突然給您以前沒有的任何許可權。它只是建立一個新的訪問檔案的路徑。

34.正如我們看到的,絕對路徑名從根目錄開始查詢,而相對路徑名從工作目錄開始查詢。提供一種有效的方法實現這兩種查詢。
答:當工作目錄被更改時,使用chdir系統呼叫,新工作目錄的i-node將被取出並儲存在記憶體的i-node表中。根目錄的i-node也在那裡。在使用者結構中,維護這兩者的指標。當路徑名解析時,檢查第一個字元。如果是“/”,則使用指向根i-node的指標作為起始位置,否則將使用指向工作目錄的i-node的指標。

35.當檔案/usr/ast/work/f被開啟,讀i節點和目錄塊時需要一些磁碟訪問。在根節點的i節點始終在記憶體中以及所有的目錄都是一個塊的大小這樣的假設下計算需要的磁碟訪問數量。
答:訪問根目錄的i節點不需要磁碟訪問,因此具有以下過程:
1.讀取/目錄查詢“usr”。
2.讀取/usr的i節點。
3.讀取/usr目錄以查詢“ast”。
4.讀取/usr/ast的i節點。
5.讀取/usr/ast目錄查詢“work”。
6.讀取/usr/ast/work的i節點。
7.讀取/usr/ast/work目錄以查詢“f”。
8.讀取/usr/ast/work/f的i節點。

36.一個Linux i節點有12個磁碟地址放資料塊,還有一級、二級和三級間接塊。如果每一個塊能放256個磁碟地址,假設一個磁碟塊的大小是1KB,能處理的最大檔案的大小是多少?
答:i節點擁有12個地址。一級間接塊持有256個磁碟地址,二級雙重間接塊持有65,536個磁碟地址,三級間接塊持有16,777,216個磁碟地址,總共16,843,018個塊。這將最大檔案大小限制為12 + 256 + 65,536 + 16,777,218個塊,大約為16G位元組。

37.在開啟檔案的過程中,i節點從磁碟中被讀出,然後放人記憶體中的i節點表裡。這個表中有些域在磁碟中沒有。其中一個是計數器,用來記錄i節點已經被開啟的次數。為什麼需要這個域?
答:當檔案關閉時,記憶體中i節點的計數器遞減。如果大於零,則無法從表中刪除i節點,因為該檔案在某些程序中仍然處於開啟狀態。只有當計數器變為0時才能刪除i節點。沒有這個域,系統將不知道何時從表中刪除i節點。每次開啟檔案時,單獨複製一個i節點將不起作用,因為在一個副本中所做的更改在其他副本中不可見。

38.在多CPU平臺上,Linux為每個CPU維護一個runqueue,這是個好想法嗎? 請解釋你的答案。
答:通過維護每個CPU執行佇列,可以在本地進行排程決策,而無需執行昂貴的同步機制來始終訪問和更新共享的執行佇列。而且,如果我們在已經執行的同一個CPU上安排一個執行緒,那麼所有相關的記憶體頁面更有可能仍然在cache1中。

39.pdflush執行緒可以被週期性地喚醒,把多於30秒的舊頁面寫回到磁碟。這個為什麼是必要的?
答:通過每30秒將修改後的檔案的內容強制寫回到磁碟上,由碰撞造成的損失限制在30秒。如果pdflush沒有執行,程序可能會寫一個檔案,然後退出,檔案的完整內容仍然在快取中。事實上,使用者可能會退出系統並回家,而檔案仍然在快取中。一小時後,系統可能會崩潰並丟失檔案,而檔案內容仍然只在快取中而不是磁碟上。第二天我們不會遇到一個愉快的使用者。

40.在系統崩潰並重啟後,通常一個恢復程式將執行。假設這個程式發現一個磁碟i節點的連線數是2,但是隻有一個目錄項引用了這個i節點。它能夠解決這個問題嗎?如果能,該怎麼做?
答:它所要做的就是將連結數設定為1,因為只有一個目錄項引用了i節點。

41.猜一下哪個Linux系統呼叫是最快的?
答:通常是getpid,getuid,getgid或類似的東西。他們所做的只是從已知的地方獲取一個整數並返回。其他的系統呼叫都會做更多的工作。

42.對一個從來沒有被連線的檔案取消連線可能嗎?會發生什麼?
答:該檔案被刪除。這是刪除檔案的正常方式(實際上是唯一的方法)。

43.基於本章提供的資訊,如果一個Linux ext2檔案系統放在一個1.44MB的軟盤上,使用者檔案資料最大能有多少可以儲存在這個盤上?假設磁碟塊的大小是1KB。
答:一個1.44MB的軟盤可容納1440個原始資料塊。ext2檔案系統的引導塊,超塊,組描述符塊,塊點陣圖和i節點點陣圖都使用一個塊。如果建立了8192個128位元組的i節點,這些i節點將佔用另外1024個塊,只剩下411個塊。根目錄至少需要一個塊,所以只有410個檔案資料塊空閒。實際上,Linux的mkfs程式很聰明,不會使用超過必須的i節點,所以效率不是很差。預設情況下,將建立佔用23個塊的184個i節點。然而,由於ext2檔案系統的開銷,Linux通常在軟盤和其他小型裝置上使用MINIX 1檔案系統。

44.考慮到如果學生成為超級使用者會造成的所有麻煩,為什麼這個概念還會出現?
答:有人會做一些通常被禁止的事情。例如,使用者啟動生成無限量輸出的作業。然後,使用者登出並在倫敦度過了為期三週的假期。磁碟遲早會被填滿,超級使用者將不得不手動殺死程序並刪除輸出檔案。還有其他這樣的例子。

45.一個教授通過把檔案放在電腦科學學院的Linux系統中的一個公共可問的目錄下來與他的學生共享檔案。一天他意識到前一天放在那的一個檔案變成全域性可寫的了。他改變了許可權並驗證了這個檔案與他的原件是一樣的。第二天他發現檔案已經被修改了。這種情況為什麼會發生,又如何能預防呢?
答:當教授更改許可權時,可能已經有人將檔案開啟。教授應該刪除該檔案,然後將另一個副本放入公共目錄。此外,他應該使用更好的方法來分發檔案,例如網頁,但這超出了本練習的範圍。

46.Linux支援一個系統呼叫fsuid。setuid准許使用者擁有與他執行的程式相關的有效id的所有權利。與setuid不同,fsuid准許正在執行程式的使用者擁有特殊的權利,只能夠訪問檔案。這個特性為什麼有用?
答:如果使用fsuid系統呼叫給其他使用者授予超級使用者許可權,則該使用者可以訪問超級使用者檔案,但無法傳送訊號,終止程序或執行需要超級使用者許可權的其他操作。

47.寫一個允許簡單命令執行的最小的shell,也要使這些命令能在後臺執行。
答:略。

48.使用匯編語言和BIOS呼叫,寫一個在Pentinum類計算機上從軟盤上引導自己的程式。這個程式應該使用BIOS呼叫來讀取鍵盤以及迴應鍵入的字元,只是證明這個程式確實在執行。
答:略。

49.寫一個能通過串列埠連線兩臺Linux計算機的啞(dumb)中斷程式。使用POSIX終端管理呼叫來配置埠。
答:略。

50.寫一個客戶-伺服器應用程式,應答請求時能通過套接字傳輸一個大檔案。使用共享記憶體的方法重新實現相同的應用程式。你覺得哪個版本效能更好?為什麼?使用你寫好的程式碼和不同的檔案大小進行效能的測試,你觀察到了什麼?你認為在Linux核心中發生了什麼導致這樣的行為?
答:略。

51.實現一個基本的使用者級執行緒庫,該執行緒在Linux的上層執行。庫的API應該包含函式呼叫,如mythreads_init、mythreads_create、mythreads_join、mythreads_exit、mythreads_yield、mythreads_self,可能還有一些其他的。進一步實現這些同步變數,以便使用者能使用安全的併發操作:mythreads_mutex_init,ythreads_mutex_lock,mythreads_mutex_unlock。在開始前,清晰地定義API並說明每個呼叫的語義。接著使用簡單的輪轉搶佔排程器實現使用者級的庫,還需要利用該庫編寫一個或更多的多執行緒應用程式,用來測試執行緒庫。最後,用另一個像本章描述的Linux2.6 O(1)的排程策略替換簡單的排程策略。使用每種排程器時比較你的應用程式的效能。
答:略。

相關推薦

現代作業系統中文課後習題—— 例項研究1Linux

第十章 例項研究1:Linux 1.一個目錄包含以下的檔案: aardvark feret koala porpoise unicorn bonefish grunion llama quacker vicuna capybara hyena marmot rabbi

1014 C語言程序設計教程課後習題6.4

content += 教程 print ons ont c語言程序設計 lld cnblogs 題目描述 求Sn=1!+2!+3!+4!+5!+…+n!之值,其中n是一個數字。 輸入 n 輸出 和 樣例輸入 5 樣例輸出 153 1 #include "stdio.h"

1013: C語言程序設計教程課後習題6.3

其中a是一個數字 blog += color turn sam c語言程序 [] c語言 題目描述 求Sn=a+aa+aaa+…+aa…aaa(有n個a)之值,其中a是一個數字。 例如:2+22+222+2222+22222(n=5),n由鍵盤輸入。 輸入 a 輸出 和 樣

1024: C語言程序設計教程課後習題7.3

c語言程序 print clas 程序 scanf col class pri printf 題目描述 求一個3×3矩陣對角線元素之和。 輸入 矩陣 輸出 主對角線 副對角線 元素和 樣例輸入 1 2 3 1 1 1 3 2 1 樣例輸出 3 7 1 #include

1046: C語言程序設計教程課後習題10.4

con n) 順序 調整 style char ++ 輸入數據 include 題目描述 有n個整數,使前面各數順序向後移m個位置,最後m個數變成前面m個數,見圖。寫一函數:實現以上功能,在主函數中輸入n個數和輸出調整後的n個數。 輸入 輸入數據的個數n n個整數 移動的位

1012 - C語言程式設計教程課後習題6.2

1012 - C語言程式設計教程(第三版)課後習題6.2 時間限制:1秒 記憶體限制:128兆 題目描述 輸入一行字元,分別統計出其中英文字母、空格、數字和其他字元的個數。 輸入 一行字元 輸出 統計值 樣例輸入 aklsjflj123 sadf918u324 asdf91u32oa

1011 - C語言程式設計教程課後習題6.1

1011 - C語言程式設計教程(第三版)課後習題6.1 時間限制:1秒 記憶體限制:128兆 題目描述 輸入兩個正整數m和n,求其最大公約數和最小公倍數。 輸入 兩個整數 輸出 最大公約數,最小公倍數 樣例輸入 5 7 樣例輸出 1 35 最大公約數求法我是用的是輾轉相除法進行

1010 - C語言程式設計教程課後習題5.8

1010 - C語言程式設計教程(第三版)課後習題5.8 時間限制:1秒 記憶體限制:128兆 題目描述 企業發放的獎金根據利潤提成。利潤低於或等於100000元的,獎金可提10%; 利潤高於100000元,低於200000元(100000<I≤200000)時,低於100000元的部

1047 - C語言程式設計教程課後習題10.5

1047 - C語言程式設計教程(第三版)課後習題10.5 時間限制:1秒 記憶體限制:128兆 題目描述 有n人圍成一圈,順序排號。從第1個人開始報數(從1到3報數),凡報到3的人退出圈子,問最後留下的是原來的第幾號的那位。 輸入 初始人數n 輸出 最後一人的初始編號 樣例輸入

1022 - C語言程式設計教程課後習題7.1

1022 - C語言程式設計教程(第三版)課後習題7.1 時間限制:1秒 記憶體限制:128兆 題目描述 用篩法求之N內的素數。 輸入 N 輸出 0~N的素數 樣例輸入 100 樣例輸出 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47

1008 - C語言程式設計教程課後習題5.6

1008 - C語言程式設計教程(第三版)課後習題5.6 時間限制:1秒 記憶體限制:128兆 題目描述 給出一百分制成績,要求輸出成績等級‘A’、‘B’、‘C’、‘D’、‘E’。 90分以上為A 80-89分為B 70-79分為C 60-69分為D 60分以下為E 輸入 一個整數0

1007 - C語言程式設計教程課後習題5.5

007 - C語言程式設計教程(第三版)課後習題5.5 時間限制:1秒 記憶體限制:128兆 描述 有一個函式 y={ x x<1 | 2x-1 1<=x<10 \ 3x-11 x>=10 寫一段程式,輸入x,輸出y 輸入 一個數x 輸出 一個數y 樣例輸

1006 - C語言程式設計教程課後習題5.4

1006 - C語言程式設計教程(第三版)課後習題5.4 時間限制:1秒 記憶體限制:128兆 描述 有三個整數a b c,由鍵盤輸入,輸出其中的最大的數。 輸入 一行陣列,分別為a b c 輸出 a b c其中最大的數 樣例輸入 10 20 30 樣例輸出 30 提示 max ?

1005 - C語言程式設計教程課後習題4.9

1005 - C語言程式設計教程(第三版)課後習題4.9 時間限制:1秒 記憶體限制:128兆 題目描述 輸入一個華氏溫度,要求輸出攝氏溫度。公式為 c=5(F-32)/9 輸出要求有文字說明,取位2小數。 輸入 一個華氏溫度,浮點數 輸出 攝氏溫度,浮點兩位小數 樣例輸入 -4

1003 - C語言程式設計教程課後習題3.7

1003 - C語言程式設計教程(第三版)課後習題3.7 時間限制:1秒 記憶體限制:128兆 提交 題目描述 要將"China"譯成密碼,譯碼規律是:用原來字母后面的第4個字母代替原來的字母.例如,字母"A"後面第4個字母是"E".“E"代替"A”。因此,“China"應譯

1002 - C語言程式設計教程課後習題1.6

1002 - C語言程式設計教程(第三版)課後習題1.6 時間限制:1秒 記憶體限制:128兆 題目描述 編寫一個程式,輸入a、b、c三個值,輸出其中最大值。 輸入 一行陣列,分別為a b c 輸出 a b c其中最大的數 樣例輸入 10 20 30 樣例輸出

1014 - C語言程式設計教程課後習題6.4

1014 - C語言程式設計教程(第三版)課後習題6.4 時間限制:1秒 記憶體限制:128兆 題目描述 求Sn=1!+2!+3!+4!+5!+…+n!之值,其中n是一個數字。 輸入 n 輸出 和 樣例輸入 5 樣例輸出 153 題求一個數的階乘和,本身並不是一個難想的思路,

演算法導論 課後習題解答

Perface:開始學習演算法導論,在這裡記錄自己的課後習題答案。希望自己能每天堅持更新一節的習題解答。 目前計劃的學習順序:第3部分資料結構和第5部分高階資料結構的全部內容 希望大家有什麼看不懂的地方可以提出來,我會盡量解答的; 如果有什麼出錯的地方,也希望大家能夠指正出來,萬分感謝! 於此同時,如

1015 - C語言程式設計教程課後習題6.5

1015 - C語言程式設計教程(第三版)課後習題6.5 時間限制:1秒 記憶體限制:128兆 題目描述 求以下三數的和,保留2位小數 1~a之和 1~b的平方和 1~c的倒數和 輸入 a b c 輸出 1+2+…+a + 1 ^ 2 + 2 ^ 2+…+b ^ 2 + 1/1+1/2+…+

1013 - C語言程式設計教程課後習題6.3

1013 - C語言程式設計教程(第三版)課後習題6.3 時間限制:1秒 記憶體限制:128兆 題目描述 求Sn=2+22+222+…+22…222(有n個2)之值,其中a是一個數字。 例如:2+22+222+2222+22222(n=5),n由鍵盤輸入。 輸入 n 輸出 Sn 樣例輸入