<noframes id="ixm7d"><noframes id="ixm7d"><rt id="ixm7d"><delect id="ixm7d"></delect></rt><noframes id="ixm7d"><rt id="ixm7d"><rt id="ixm7d"></rt></rt><rt id="ixm7d"></rt> <noframes id="ixm7d"><rt id="ixm7d"><delect id="ixm7d"></delect></rt><delect id="ixm7d"></delect><bdo id="ixm7d"></bdo><rt id="ixm7d"></rt><bdo id="ixm7d"></bdo><noframes id="ixm7d"><rt id="ixm7d"><rt id="ixm7d"></rt></rt><rt id="ixm7d"><rt id="ixm7d"></rt></rt><noframes id="ixm7d"><rt id="ixm7d"></rt><noframes id="ixm7d"><rt id="ixm7d"></rt> <noframes id="ixm7d"><rt id="ixm7d"></rt><noframes id="ixm7d"><noframes id="ixm7d"><noframes id="ixm7d"><rt id="ixm7d"></rt><noframes id="ixm7d"><noframes id="ixm7d"><noframes id="ixm7d"><rt id="ixm7d"></rt><noframes id="ixm7d"><rt id="ixm7d"></rt><noframes id="ixm7d"><rt id="ixm7d"></rt><noframes id="ixm7d">

第十章德育主體范文

2023-10-02

第十章德育主體范文第1篇

1、先進文化:符合人類社會發展方向,體現先進生產力的發展要求,體現最廣大人民的根本利益,反映

時代進步的潮流文化。它最基本、最直接的價值取向是崇尚和追求先進性。

2、為什么要努力建設中國特色社會主義文化?

(1) 中國特色社會主義文化是現代化建設的重要內容;

(2) 中國特色社會主義文化是凝聚和激勵全國各族人民的重要力量,是綜合國力的重要標志;

(3) 中國特色社會主義文化為現代化建設提供智力支持、精神動力和思想保證。

3、建設中國特色社會主義文化的根本任務:以馬克思主義、毛澤東思想、鄧小平理論和三個代表重

要思想為指導,全面貫徹科學發展觀,著力培育有理想、有道德、有文化、有紀律的公民,切實提高全民族的思想道德素質和科學文化素質。

4、“四有”之間的關系:

(1) 理想是核心和精神支柱;

(2) 道德是行為的規范和思想的體現;

(3) 紀律是實現理想,維護道德的重要保證;

(4) 文化是基礎,是形成理想信念、道德情操和紀律觀念的重要條件。

5、培育“四有”公民的必要性:

(1) 培育有理想、有道德、有文化、有紀律的社會主義公民,是建設社會主義先進文化對公民素質提出

的綜合要求;

(2) 培育四有公民,提供全體公民的素質,是促進人的全面發展的需要;

(3) 培育四有公民,是一個復雜的系統工程,是我國文化建設面臨的長期而艱巨的任務。

6、中國特色社會主義文化建設的基本方針:

(1) 堅持以馬克思主義為指導,為人民服務,為社會主義服務;

(2) 堅持百花齊放,百家爭鳴的方針;

(3) 堅持貼近實際、貼近生活、貼近群眾,不斷推進文化理論創新;

(4) 堅持立足當代又繼承和發揚優秀傳統文化,立足本國又吸收世界優秀文化成果;

(5) 堅持一手抓繁榮,一手抓管理。

7、社會主義核心價值體系:包括馬克思主義的指導思想、中國特色社會主義的共同理想、以愛國主義

為核心的民族精神和以改革創新精神為核心的時代精神、社會主義榮辱觀。

這四個方面相互聯系、相互貫通、相互促進,是一個統一整體,都是社會主義意識形態的重要組成部分,是從我們黨領導人民在長期的實踐中形成的文化成果中概括和提煉的精華,是對社會主義核心價值體系深刻內涵的科學揭示。

8、時代精神:以改革創新為核心的與時俱進、開拓進取、求真務實、奮勇爭先的時代精神;

9、民族精神:以愛國主義為核心的團結統

一、愛好和平、勤勞勇敢、自強不息的民族精神。

10、“八榮八恥”:涵蓋了個人、集體和國家三者之間的關系,涉及人生態度、社會風尚等各個方面,體

現了愛國主義、集體主義和社會主義思想,體現了依法治國和以德治國的結合,標志著我們黨對社

會主義思想道德建設規律認識的深化,對新形勢下加強社會主義思想道德建設將產生積極而深遠的影響。

11、如何樹立和踐行社會主義榮辱觀?

(1) 不僅要靠廣泛的宣傳,還要靠各方面的努力。

(2) 堅持以制度建設為根本,按照重在實際行動,重在持之以恒,重在形成體制機制的要求,建立和完

善與社會主義榮辱觀要求相適應的道德評價、獎懲和監督機制,形成踐行社會主義榮辱觀的長效機制。

12、為什么要加強思想道德建設?

(1) 加強思想道德建設是社會主義核心價值提體系的必然要求,是中國特色社會主義文化建設的重要內

容和中心環節。

(2) 加強思想道德建設是發展先進文化,建設和諧文化的重要內容。

(3) 在發展社會主義市場經濟和擴大對外開放的條件下,原有的一些道德規范已經不適應社會發展的需

要,新的道德規范尚未形成,從而出現了不同程度的理想信念模糊、價值取向扭曲、誠信意識淡薄、社會責任感缺乏等問題,加強社會主義思想道德建設成為當前緊迫的任務。

13、如何加強思想道德建設?

(1) 要加快建立和完善社會主義思想道德體系建設;

(2) 要著力培育文明道德風尚;

(3) 要把先進性要求和廣泛性要求結合起來;

(4) 要進一步加強和改進思想政治工作。

14、如何深化文化體制改革?

(1) 總的來說,堅持以發展為主題,以改革為動力,以體制機制創新為重點,以創造更多更好適應人民

需求的精神文化產品為目標,促進文化事業全面繁榮和文化產業快速發展。

(2) 堅持一手抓公益性文化事業,努力構建覆蓋全社會的比較完備的公共文化服務體系;一手抓經營性

文化產業,繁榮文化市場。

(3) 堅持以體制機制創新為重點,在關鍵環節上實現新突破。

(4) 推進文化體制改革,既要積極又要穩妥;要堅持區別對待,分類指導,循序漸進,逐步推進的原則;

加強組織領導,從實際出發,因地制宜,統籌兼顧,堅持試點先行,以點帶面,分階段,分步驟的推進。

(5) 發揮廣大文化工作者的積極性,促進文化的大發展大繁榮。

第十一章

1、十六大以來,黨中央反復強調要把推進社會主義和諧社會作為全面建設小康社會和中國未來發展的重要任務,其現實依據是什么?

(1) 這是我們抓住和用好重要戰略機遇期,實現全面建設小康社會宏偉目標的必然要求;

(2) 這是我們把握復雜多變的國際形勢,有力應對國家環境的各種挑戰和風險的必然要求;

(3) 這是鞏固黨的執政地位的社會基礎,是實現黨執政歷史任務的必然要求。

2、黨的三大歷史任務:推進現代化建設、完成祖國統

一、維護世界和平和促進共同發展。

3、和諧社會:一般指,人與自然、人與社會和人與人之間和諧統

一、協調發展的社會;生產力和生產關系,經濟基礎和上層建筑之間和諧統

一、協調發展的社會。我國建設社會主義和諧社會,應該是民主法治、公平正義、誠信友愛、充滿活力、安定有序、人與自然和諧相處的社會。

4、要準確把握社會主義和諧社會的科學內涵,必須把握哪幾方面?

(1) 必須正確把握社會主義和諧社會的性質。

(2) 必須正確把握構建社會主義和諧社會與社會主義物質文明、政治文明和精神文明之間的關系。

(3) 必須正確把握構建社會主義和諧社會與全面建設小康社會的關系。

5、構建社會主義和諧社會重要的理論意義?

(1) 提出構建社會主義和諧社會,是對人類社會發展規律認識的深化,是對馬克思主義關于社會主義建

設理論的豐富和發展。

(2) 提出構建社會主義和諧社會,是對社會主義建設規律認識的深化,豐富和發展了中國特色社會主義

理論。

(3) 提出構建社會主義和諧社會,是對黨執政規律認識的深化,是黨執政理念的升華。

6、構建社會主義社會重要的實踐意義?

(1) 構建社會主義和諧社會是中國特色社會主義事業“四位一體”總體布局的重要組成部分,及時對構

建社會主義和諧社會做出部署,有利于全面推進中國特色社會主義事業。

(2) 使社會更加和諧是全面建設小康社會的重要目標,做好構建和諧社會的各項工作,有利于充分調動

社會各方面的積極性,抓住和用好我國發展的重要戰略機遇期,切實維護改革發展穩定的大局,確保實現全面建設小康社會的目標。

(3) 促進社會和諧是廣大人民的根本利益所在,把構建社會主義和諧社會的各項工作落到實處,有利于

進一步解決好人民群眾最關心、最直接、最現實的利益問題,實現好、發展好、維護好最廣大人民的根本利益。

(4) 社會和諧是應對來自外來挑戰的重要條件,實現國內安定和諧的社會政治局面,有利于增強民族凝

聚力和抗風險能力,更好地維護國家主權、安全和發展利益。

7、推進社會和諧必須遵循的基本原則?

(1) 必須堅持以人為本,這是構建社會主義和諧社會的根本出發點和落腳點;

(2) 必須堅持科學發展,這是構建社會主義和諧社會的工作方法;

(3) 必須堅持改革開放,這是構建社會主義和諧社會的根本動力;

(4) 必須堅持民主法治,這是構建社會主義和諧社會的重要保證;

(5) 必須堅持正確處理改革發展穩定的關系,這是構建社會主義和諧社會的重要條件;

(6) 必須堅持黨領導全社會共同建設,這是構建社會主義和諧社會的領導力量和依靠力量。

8、如何推進以改善民生為重點的社會建設?

(1) 優先發展教育,建設人力資源強國;

(2) 實施擴大就業戰略,促進以創業帶動就業;

(3) 深化收入分配體制改革,增加城鄉居民收入;

(4) 加快建立覆蓋城鄉居民的社會保障體系,保障人民基本生活;

(5) 建立基本醫療衛生制度,提高全民健康水平;

第十章德育主體范文第2篇

1、 當年形成的會計檔案,在會計年度終了后,可暫由本單位會計機構保管1年。期滿之后,應由會計機構編制移交清冊(一式二份),移交本單位的檔案機構統一保管;未設立檔案機構的,應當在會計機構內部指定專人保管(不得由出納保管)。

2、 會計檔案的保管期限分為永久和定期兩類。定期保管期限分為3年、5年、10年、15年、25年。

3年 月、季度財務會計報告

5年 銀行對賬單、銀行存款余額調節表、固定資產卡片(報廢清理后)

15年 原始憑證、記賬憑證、匯總憑證、總賬、明細賬、日記賬、輔助賬、會計移交清冊 25年 現金日記賬、銀行日記賬

永久 年度財務會計報告(決算)、會計檔案銷毀清冊、會計檔案保管清冊

會計檔案的保管期限為最低保管期限,從會計年度終了后的第一天算起。

3、各單位保存的會計檔案不得借出,如有特殊需要,經本單位負責人批準,可以提供查閱或者復制;查閱或者復制會計檔案的人員,嚴禁在會計檔案上涂畫、標記、拆封和抽換。

4、單位銷毀會計檔案時,應由單位檔案機構和會計機構共同派員監銷。國家機關由同級財政部門、審計部門派員監銷;財政部門的會計檔案由同級審計部門派員監銷。

5、對于保管期滿但未結清的債權債務原始憑證和涉及到其他未了事項的原始憑證,不得銷毀,應單獨抽出立卷,由檔案部門保管到未了事項完結時為止;正在建設期間的建設單位,會計檔案一律不得銷毀。

重點定義:

1、 資產是指過去的交易、事項形成并由企業擁有或控制的資源,該資源預期會給企業帶來經濟利益流入。

2、 負債是指過去交易、事項形成的現時義務,履行該義務預期會導致經濟利益流出企業。

3、 復式記賬是對發生的每一項經濟業務,都以相等的金額,在相互關聯的兩個或兩個以上賬戶中進行記錄的一種記賬方法。

4、 資產負債表是反映企業某一特定日期 財務狀況 的 靜態會計報表。

第十章德育主體范文第3篇

(本章可以憑借自己樸素的觀點答題)

1. 為調整和規范社會生活關系形成了社會公德、職業道德和婚姻家庭道德。

2. 社會公德是特指人類在長期社會生活實踐中逐漸積累起來的、為社會公共生活所必須的、最簡單、

最起碼的公共生活準則,它一般指影響著公共生活的公共秩序、文明禮貌、清潔衛生以及其他影響社會生活的行為規范。社會公德是人類社會生活最基本、最廣泛、最一般關系的反映。社會公德是維護公共場所正常秩序和安定環境、維護現實社會生活的最低準則,是人們現實生活穩定發展的基本條件。

3. 社會公德的特點:基礎性、全民性和相對穩定性

4. 在我國現代社會中,社會公德主要內容為:文明禮貌(處世做人最起碼的要求)、助人為樂、愛護

公物、保護環境、遵紀守法。

5. 社會公德建設是精神文明建設的基礎性工程,也是精神文明程度的“窗口”。社會道德風尚是衡量

一個社會精神文明發展水平的重要標志。

6. 社會主義社會的社會公德是社會主義道德的基礎,是現代社會必須高揚的基本道德。

7. 職業道德中的準則是由社會生活的總體需要和各種職業的具體利益以及活動的內容方式所決定的,

是長期的特殊職業實踐中逐步形成的。

8. 職業是指人們在社會生活中所從事的某種具有專門業務和特定職責,并以此作為主要生活來源的社

會活動。職業道德是在一定的職業活動中所應遵循的、具有自身職業特征的道德準則和規范。

9. 職業道德的特點:規范性和專業性;普適性和廣泛性;可操作性與準強制性;相對穩定性和連續性。

10. 職業道德的內容與要求:愛崗敬業、誠實守信、辦事公道、服務群眾、奉獻社會。

11. 愛崗敬業是職業道德的核心和基礎

12. 誠實守信是職業道德準則,是職業在社會中生存和發展的基石,是立人知道,進德修業只本,要表

里如

一、言行一致、慎待諾言。

13. 辦事公道是處理職業內外關系的重要行為準則,如買賣公平、童叟不欺。

14. 服務人民是職業道德要求的目標指向的最終歸宿。處處為職業對象的實際需要著想、、、

15. 奉獻社會是職業道德的本質特征。

16. 愛情是男女雙方基于一定的客觀現實基礎和共同的生活理想,在各自內心形成的最真摯的彼此傾

慕、互相愛悅,并渴望對方成為自己的終身伴侶的最強烈持久、純潔專一的感情。

17. 愛情的基本特征:平等互愛性、專一排他性、強烈持久性、純潔嚴肅性。

18. 愛情把人的自然本質和社會本質聯結在一起,是生物關系和社會關系、生理因素和心理因素的綜合

體,具有自然屬性和社會屬性,后者是愛情最本質的屬性。

19. 戀愛的基本道德要求:戀愛應是以尋找愛情、培養愛情為目的;戀愛應尊重對方的情感和人格,平

等履行道德義務;戀愛過程中要有高尚的情緒和健康的交往方式。

20. 戀愛中起著主導作用的是人的精神世界和道德面貌。正確的愛情觀是戀愛成功的基礎。

21. 戀愛雙方主動踐行義務是戀愛得以鞏固和發展的重要道德基礎。

22. 婚姻是產生家庭的前提,家庭是婚姻締結的結果。兩者都是社會關系。家庭是由婚姻、血緣或收養

關系形成的人們進行社會生活的基本單位,體現著一定社會的經濟關系,構成社會經濟基礎的重要部分。

23. 家庭美德建設是家庭生活質量的保障,又是良好社會道德風尚的根基。

24. 家庭美德的內容:尊老愛幼、男女平等、夫妻和睦、勤儉持家、鄰里團結

25. 道德品質是一定社會或階級的道德原則規范在個人身上的體現與凝結,是人們在處理個人與他人、

個人與社會的一系列行為中所表現出來的比較穩定的道德傾向和特征。是一個綜合性范疇,包括認識、情感、信念、意志、行為等方面,是知和行的統一。是靠教育、實踐或感化獲得的,是長期遵守或違背道德所得到的結果。

26. 道德品質是在道德行為的基礎上形成的,是一種道德行為多次重復出現而形成的習慣,是道德行為

的綜合體現,對道德行為有指導和支配作用。

27. 道德品質和道德行為是一個相互作用、相互影響的統一整體,道德品質是道德行為的積累的結晶,

道德行為是道德品質的客觀內容和外在表現。

28. 道德原則規范是一定社會或階級對人們的行為提出的基本要求和準則,是人們立身處世、待人接物

的根本原則,也是評價行為是非善惡的標準,是由社會影響的力量來維護。

29. 道德原則規范對道德品質的形成有定向和調節作用,在道德體系中居于主導和核心地位;道德品質

有鞏固和強化道德原則的功能。兩者是統一和對應的,相互依存。

30. 個人道德品質的形成是歷史的和現實的社會關系的產物,依賴于個人的社會實踐,一般都包含有心

理上或習慣上幾種基本成分的相應發展如道德認識、道德情感、道德意志、道德行為、道德信念、道德習慣。

31. 道德情感是伴隨道德認識所出現的一種內心體驗。道德行為是人們遵守道德原則規范而表現出來的

外在活動。道德習慣是指人們的道德實踐活動持續不斷地重復某種道德行為,使之沉淀于心理中,變成一種自動的行為和方式,道德習慣的形成是道德品質形成的關鍵環節。

32. 良好道德品質的基本范疇:公正無私、忠誠守信、仁愛互助、勇敢進取、敬業好學、勤勞節儉、謙

虛謹慎、遵紀守法、文明禮貌。

33. 培養良好道德品質的方法:提高道德認識、陶冶道德情操、鍛煉道德意志、時間道德行為、養成穩

定的行為習慣。

第十章德育主體范文第4篇

(本章可以憑借自己樸素的觀點答題)

1. 為調整和規范社會生活關系形成了社會公德、職業道德和婚姻家庭道德。

2. 社會公德是特指人類在長期社會生活實踐中逐漸積累起來的、為社會公共生活所必須的、最簡單、

最起碼的公共生活準則,它一般指影響著公共生活的公共秩序、文明禮貌、清潔衛生以及其他影響社會生活的行為規范。社會公德是人類社會生活最基本、最廣泛、最一般關系的反映。社會公德是維護公共場所正常秩序和安定環境、維護現實社會生活的最低準則,是人們現實生活穩定發展的基本條件。

3. 社會公德的特點:基礎性、全民性和相對穩定性

4. 在我國現代社會中,社會公德主要內容為:文明禮貌(處世做人最起碼的要求)、助人為樂、愛護

公物、保護環境、遵紀守法。

5. 社會公德建設是精神文明建設的基礎性工程,也是精神文明程度的“窗口”。社會道德風尚是衡量

一個社會精神文明發展水平的重要標志。

6. 社會主義社會的社會公德是社會主義道德的基礎,是現代社會必須高揚的基本道德。

7. 職業道德中的準則是由社會生活的總體需要和各種職業的具體利益以及活動的內容方式所決定的,

是長期的特殊職業實踐中逐步形成的。

8. 職業是指人們在社會生活中所從事的某種具有專門業務和特定職責,并以此作為主要生活來源的社

會活動。職業道德是在一定的職業活動中所應遵循的、具有自身職業特征的道德準則和規范。

9. 職業道德的特點:規范性和專業性;普適性和廣泛性;可操作性與準強制性;相對穩定性和連續性。

10. 職業道德的內容與要求:愛崗敬業、誠實守信、辦事公道、服務群眾、奉獻社會。

11. 愛崗敬業是職業道德的核心和基礎

12. 誠實守信是職業道德準則,是職業在社會中生存和發展的基石,是立人知道,進德修業只本,要表

里如

一、言行一致、慎待諾言。

13. 辦事公道是處理職業內外關系的重要行為準則,如買賣公平、童叟不欺。

14. 服務人民是職業道德要求的目標指向的最終歸宿。處處為職業對象的實際需要著想、、、

15. 奉獻社會是職業道德的本質特征。

16. 愛情是男女雙方基于一定的客觀現實基礎和共同的生活理想,在各自內心形成的最真摯的彼此傾

慕、互相愛悅,并渴望對方成為自己的終身伴侶的最強烈持久、純潔專一的感情。

17. 愛情的基本特征:平等互愛性、專一排他性、強烈持久性、純潔嚴肅性。

18. 愛情把人的自然本質和社會本質聯結在一起,是生物關系和社會關系、生理因素和心理因素的綜合

體,具有自然屬性和社會屬性,后者是愛情最本質的屬性。

19. 戀愛的基本道德要求:戀愛應是以尋找愛情、培養愛情為目的;戀愛應尊重對方的情感和人格,平

等履行道德義務;戀愛過程中要有高尚的情緒和健康的交往方式。

20. 戀愛中起著主導作用的是人的精神世界和道德面貌。正確的愛情觀是戀愛成功的基礎。

21. 戀愛雙方主動踐行義務是戀愛得以鞏固和發展的重要道德基礎。

22. 婚姻是產生家庭的前提,家庭是婚姻締結的結果。兩者都是社會關系。家庭是由婚姻、血緣或收養

關系形成的人們進行社會生活的基本單位,體現著一定社會的經濟關系,構成社會經濟基礎的重要部分。

23. 家庭美德建設是家庭生活質量的保障,又是良好社會道德風尚的根基。

24. 家庭美德的內容:尊老愛幼、男女平等、夫妻和睦、勤儉持家、鄰里團結

25. 道德品質是一定社會或階級的道德原則規范在個人身上的體現與凝結,是人們在處理個人與他人、

個人與社會的一系列行為中所表現出來的比較穩定的道德傾向和特征。是一個綜合性范疇,包括認識、情感、信念、意志、行為等方面,是知和行的統一。是靠教育、實踐或感化獲得的,是長期遵守或違背道德所得到的結果。

26. 道德品質是在道德行為的基礎上形成的,是一種道德行為多次重復出現而形成的習慣,是道德行為

的綜合體現,對道德行為有指導和支配作用。

27. 道德品質和道德行為是一個相互作用、相互影響的統一整體,道德品質是道德行為的積累的結晶,

道德行為是道德品質的客觀內容和外在表現。

28. 道德原則規范是一定社會或階級對人們的行為提出的基本要求和準則,是人們立身處世、待人接物

的根本原則,也是評價行為是非善惡的標準,是由社會影響的力量來維護。

29. 道德原則規范對道德品質的形成有定向和調節作用,在道德體系中居于主導和核心地位;道德品質

有鞏固和強化道德原則的功能。兩者是統一和對應的,相互依存。

30. 個人道德品質的形成是歷史的和現實的社會關系的產物,依賴于個人的社會實踐,一般都包含有心

理上或習慣上幾種基本成分的相應發展如道德認識、道德情感、道德意志、道德行為、道德信念、道德習慣。

31. 道德情感是伴隨道德認識所出現的一種內心體驗。道德行為是人們遵守道德原則規范而表現出來的

外在活動。道德習慣是指人們的道德實踐活動持續不斷地重復某種道德行為,使之沉淀于心理中,變成一種自動的行為和方式,道德習慣的形成是道德品質形成的關鍵環節。

32. 良好道德品質的基本范疇:公正無私、忠誠守信、仁愛互助、勇敢進取、敬業好學、勤勞節儉、謙

虛謹慎、遵紀守法、文明禮貌。

33. 培養良好道德品質的方法:提高道德認識、陶冶道德情操、鍛煉道德意志、時間道德行為、養成穩

定的行為習慣。

第十章德育主體范文第5篇

一、單項選擇題

1.注冊會計師編制的審計工作底稿,應當使未曾接觸該項審計工作的有經驗的專業人士了解的內容不包括(

)。

A.按照審計準則和相關法律法規的規定實施的審計程序的性質、時間安排和范圍 B.實施審計程序的結果和獲取的審計證據

C.得出結論時作出的重大職業判斷,以及審計中遇到的重大事項和得出的結論 D.注冊會計師在審計過程中的初步思考的記錄 2.注冊會計師記錄審計過程時,下列關于其選取的特定項目或事項的識別特征的說法中,恰當的是(

)。

A.對被審計單位生成的訂購單進行細節測試時,注冊會計師可以以訂購單中供應商的名稱作為測試訂購單的識別特征

B.對于需要詢問被審計單位中特定人員的審計程序,注冊會計師可能會以詢問的時間、詢問人的姓名及職位作為識別特征

C.對于觀察程序,注冊會計師以觀察的對象或觀察過程、相關被觀察人員及其各自的責任、觀察的地點和時間作為識別特征

D.識別特征具有唯一性,不會因審計程序的性質和測試的項目或事項不同而不同 3.下列各項中,屬于當期檔案的是(

)。 A.被審計單位的批準證書 B.被審計單位的章程 C.總體審計策略

D.重要資產的所有權證明文件復印件

4.關于永久性檔案和當期檔案的下列說法,正確的是(

)。 A.永久性檔案中被替換下的資料一般也需要保留

B.所有大型國際會計師事務所都要嚴格區分永久性檔案和當期檔案

C.大部分會計師事務所都保留紙質的審計檔案,但不保留電子版的審計檔案 D.當期檔案僅供當期使用

5.在完成最終審計檔案的歸整工作后,如果發現有必要修改現有審計工作底稿或增加新的審計工作底稿,注冊會計師應該記錄的事項不恰當的是(

)。 A.修改或增加審計工作底稿的理由

B.修改或增加審計工作底稿的時間和人員

C.對修改或增加的審計工作底稿進行復核的時間和人員 D.修改或增加審計工作底稿的地點

6.以下關于審計工作底稿的表述中,不正確的是(

)。 A.審計工作底稿是指注冊會計師對制定的審計計劃、實施的審計程序、獲取相關的審計證據,以及得出審計結論作出的記錄 B.審計證據是審計工作底稿的載體 C.審計工作底稿是出具審計報告的基礎

D.審計工作底稿形成于審計過程,也反映整個審計過程

7.以下關于注冊會計師確定審計工作底稿的格式、要素和范圍時考慮的因素中錯誤的是(

)。

A.業務越復雜,對被審計單位進行審計形成的審計工作底稿越多 B.識別出的重大錯報風險越高,被審計單位形成的工作底稿越多且范圍越廣 C.無論審計證據質量高還是低,都要記錄于審計工作底稿中

D.審計方法和使用的工具的不同會使審計工作底稿在格式、內容和范圍方面有所不同 8.以下關于識別特征的說法中,不正確的是(

)。 A.識別特征是指被測試的項目或事項表現出的征象或標志 B.識別特征因測試的項目或事項不同而不同

C.對某一個具體項目或事項而言,其識別特征通常具有唯一性 D.審計程序的性質不會影響到識別特征

9.下列有關審計工作底稿歸檔的表述中,錯誤的是(

)。

A.在審計報告日后將審計工作底稿歸整為最終審計檔案是一項事務性的工作,不涉及實施新的審計程序或得出新的結論

B.審計檔案可以分為永久性檔案和當期檔案 C.永久性檔案是指那些記錄內容相對穩定,具有長期使用價值,并對以后審計工作具有重要影響和直接作用的審計檔案

D.永久性檔案中被替換下的資料一般不需保留

10.以下關于審計工作底稿的保存期限及保存資料的說法中,不正確的是(

)。 A.會計師事務所應當自審計報告日起,對審計工作底稿至少保存10年 B.會計師事務所應當自審計報告公布日起,對審計工作底稿至少保存10年 C.如果注冊會計師未能完成審計業務,會計師事務所應當自審計業務中止日起,對審計工作底稿至少保存10年

D.對于連續審計的情況,當期歸整的永久性檔案可能包括以前獲取的資料

二、多項選擇題

1.下列關于審計工作底稿存在形式的相關說法中,正確的有(

)。 A.審計工作底稿可以以紙質、電子或其他介質形式存在 B.以電子或其他介質形式存在的審計工作底稿,應與其他紙質形式的審計工作底稿一并歸檔 C.以電子或其他介質形式存在的審計工作底稿,只要保存完整,不必考慮是否能夠轉換成紙質形式的審計工作底稿

D.以電子或其他介質形式存在的審計工作底稿,與其他紙質形式的審計工作底稿一并歸檔時,不需要單獨保存以電子或其他介質形式存在的審計工作底稿

2.會計師事務所對審計工作底稿設計和實施適當的控制,其目的有(

)。 A.使審計工作底稿清晰地顯示其生成、修改及復核的時間和人員 B.在審計業務的所有階段,保護信息的完整性和安全性 C.防止未經授權改動審計工作底稿

D.允許會計師事務所所有人員接觸審計工作底稿 3.審計工作底稿可能包括的內容有(

)。 A.總體審計策略和具體審計計劃 B.重復的文件記錄 C.分析表和問題備忘錄

D.被審計單位文件記錄的摘要或復印件

4.注冊會計師在記錄審計過程時,應當特別注意的幾個重點方面包括(

)。 A.具體項目或事項的識別特征 B.重大事項及相關重大職業判斷 C.審計標識及其說明 D.針對重大事項如何處理不一致的情況

5.下列關于審計工作底稿中編制人員和復核人員的相關說法中,正確的有(

)。 A.每一張審計工作底稿上通常要注明執行審計工作的人員和復核人員 B.實務中如果若干頁底稿記錄同一性質的具體審計程序,但沒有編制在同一個索引號中,可以僅在審計工作底稿的第一頁上記錄審計工作的執行人員和復核人員 C.實務中如果若干頁底稿記錄不同性質的具體審計程序,但編制在同一個索引號中,可以僅在審計工作底稿的第一頁上記錄審計工作的執行人員和復核人員 D.實務中如果若干頁底稿記錄同一性質的具體審計程序,并編制在同一個索引號中,可以僅在審計工作底稿的第一頁上記錄審計工作的執行人員和復核人員

6.下列關于永久性檔案和當期檔案保存期限的說法,恰當的有(

)。 A.永久性檔案應該永久性保存 B.永久性檔案至少保存10年 C.當期檔案至少保存1年 D.當期檔案至少保存10年

7.A注冊會計師負責審計甲公司2013年的財務報表,2014年4月20日A注冊會計師出具審計報告,4月30日審計工作底稿歸檔,5月1日A注冊會計師由于某些原因替換了原已歸檔的部分審計工作底稿,則以下說法正確的有(

)。 A.替換部分的審計工作底稿從4月20日起至少保存10年 B.替換部分的審計工作底稿從5月1日起至少保存10年 C.未替換部分的審計工作底稿從4月20日起至少保存10年 D.未替換部分的審計工作底稿從5月1日起至少保存10年

8.確定審計工作底稿的格式、要素和范圍時需要考慮的因素有(

)。 A.事務所的規模和復雜程度 B.擬實施審計程序的性質

C.已獲取的審計證據的重要程度 D.審計方法和使用的工具

9.將分散在審計工作底稿中的重大事項匯總在重大事項概要中有助于(

)。 A.幫助注冊會計師集中考慮重大事項對審計工作的影響

B.便于審計工作的復核人員全面、快速地了解重大事項,從而提高復核工作的效率 C.提供充分、適當的記錄,作為出具審計報告的基礎

D.有助于執行以后期間審計的人員查閱具有持續重要性的事項

10.如果在歸檔期間對審計工作底稿做出的變動屬于事務性的,注冊會計師可以做出變動的情形主要包括(

)。

A.刪除或廢棄被取代的審計工作底稿

B.對審計工作底稿進行分類、整理和交叉索引 C.對審計檔案歸整工作的完成核對表簽字認可

D.記錄在審計報告日前獲取的、與項目組相關成員進行討論并達成一致意見的審計證據 11.以下關于審計檔案的說法中,不正確的有(

)。

A.實務中根據對審計檔案使用時間的不同劃分為永久性檔案和臨時性檔案 B.永久性檔案記錄內容相對穩定,具有長期使用價值 C.總體審計策略和具體審計計劃屬于永久性審計檔案

D.永久性檔案需要永久保存,當期檔案應自審計報告日起保存10年 12.審計工作底稿歸檔的期限可能是(

)。 A.審計報告日后九十天內 B.審計報告日后六十天內 C.審計業務中止后的六十天內 D.審計業務中止后的九十天內

三、簡答題

1.ABC會計師事務所負責對甲公司2013財務報表進行審計。2014年2月15日,注冊會計師完成審計業務并出具審計報告。4月1日,在歸整審計工作底稿時,A注冊會計師將原制定的審計計劃的初步思考的文件記錄刪除。5月30日,B注冊會計師完成對甲公司2013年審計工作底稿的歸檔工作。6月10日,項目合伙人C注冊會計師發現在審計固定資產時,某項重要資產因為疏漏而沒有記錄,于是私下修改了工作底稿,并未做任何記錄。 要求:根據以上資料,回答下列問題:

(1)A注冊會計師的做法是否正確,如不正確,簡要說明理由。

(2)B注冊會計師完成審計工作底稿的歸檔期限是否符合要求,如不符合要求,簡要說明理由。

(3)C注冊會計師的做法是否正確,如不正確,簡要說明理由。

(4)簡述在歸檔期后,注冊會計師需要變動審計工作底稿的兩種情形。

2.A注冊會計師是甲公司(上市公司)2013財務報表審計業務的項目合伙人,在實施審計工作過程中,A注冊會計師和其他項目組成員需要編制、復核和利用審計工作底稿,A注冊會計師于2014年3月10日完成了審計工作并出具了審計報告,相關情況如下:

(1)3月15日,由ABC會計師事務所指定專門機構的人員B對甲公司的財務報表審計業務執行了項目質量控制復核。

(2)由于對甲公司執行了項目質量控制復核,A注冊會計師決定不對甲公司實施項目組內部復核。

(3)在歸整審計工作底稿時,項目組助理人員C復印了部分審計工作底稿作為參考資料,以供日后學習參考。

(4)雖然最初確定的財務報表的重要性與最終確定的重要性不同,但是A注冊會計師認為應該完整的記錄整個審計過程,所以對重要性初步思考的記錄也應作為審計工作底稿保存。 (5)在編制采購業務審計工作底稿時,由于甲公司對訂購單僅以序列號進行編號,項目組成員D直接將該號碼作為識別特征。

要求:針對上述情況,逐項指出項目合伙人和其他項目組成員的做法是否存在不當之處,如果存在不當之處,簡要說明理由。

參考答案及解析

一、單項選擇題 1. 【答案】D 【解析】注冊會計師在審計過程中的初步思考的記錄不屬于審計工作底稿的內容,所以也就不會被有經驗的專業人士了解。 2. 【答案】C 【解析】對被審計單位生成的訂購單進行細節測試時,注冊會計師可以以訂購單的日期或其唯一編號作為測試訂購單的識別特征,選項A錯誤;對于需要詢問被審計單位中特定人員的審計程序,注冊會計師可能會以詢問的時間、被詢問人的姓名及職位作為識別特征,選項B錯誤;識別特征具有唯一性,因審計程序的性質和測試的項目或事項不同而不同,選項D錯誤。 3. 【答案】C 【解析】選項ABD均屬于永久性檔案。 4. 【答案】A 【解析】目前,一些大型國際會計師事務所不再區分永久性檔案和當期檔案(選項B不正確),而主要是以電子形式使用和保留審計工作底稿,盡管大部分事務所仍然既保留電子版又保留紙質的審計檔案(選項C不正確)。當期檔案除了供當期使用外,還供下期使用(選項D不正確)。 5. 【答案】D 【解析】在完成最終審計檔案的歸整工作后,如果發現有必要修改現有審計工作底稿或增加新的審計工作底稿,注冊會計師應該記錄的事項包括修改或增加審計工作底稿的理由、時間和人員,以及復核的時間和人員。 6. 【答案】B 【解析】審計工作底稿是審計證據的載體,選項B錯誤。 7. 【答案】C 【解析】注冊會計師通過執行多項審計程序可能會獲取不同的審計證據,有些審計證據的相關性和可靠性較髙,有些質量則較差,注冊會計師可能區分不同的審計證據進行有選擇性的記錄,因此選項C不正確。 8. 【答案】D 【解析】識別特征因審計程序的性質和測試的項目或事項不同而不同,所以審計程序的性質會影響到識別特征,選項D不正確。 9. 【答案】D 【解析】為保持資料的完整性以便滿足日后查閱歷史資料的需要,永久性檔案中被替換下的資料一般也需保留。 10. 【答案】B 【解析】會計師事務所應當自審計報告日起,對審計工作底稿至少保存10年。如果注冊會計師未能完成審計業務,會計師事務所應當自審計業務中止日起,對審計工作底稿至少保存10年。對于連續審計的情況,當期歸整的永久性檔案可能包括以前獲取的資料。

二、多項選擇題 1. 【答案】AB 【解析】以電子或其他介質形式存在的審計工作底稿,應與其他紙質形式的審計工作底稿一并歸檔,并應能通過打印等方式,轉換成紙質形式的審計工作底稿,選項C錯誤;在實務中,為便于復核,注冊會計師可以將以電子或其他介質形式存在的審計工作底稿通過打印等方式,轉換成紙質形式的審計工作底槁,并與其他紙質形式的審計工作底稿一并歸檔,同時,單獨保存這些以電子或其他介質形式存在的審計工作底稿,選項D錯誤。 2. 【答案】ABC 【解析】無論審計工作底稿以哪種形式存在,會計師事務所都應當針對審計工作底稿設計和實施適當的控制,以實現下列目的:

(1)使審計工作底稿清晰地顯示其生成、修改及復核的時間和人員(選項A);

(2)在審計業務的所有階段,尤其是在項目組成員共享信息或通過互聯網將信息傳遞給其他人員時,保護信息的完整性和安全性(選項B); (3)防止未經授權改動審計工作底稿(選項C);

(4)允許項目組和其他經授權的人員為適當履行職責而接觸審計工作底稿。 能夠接觸審計工作底稿的,是項目組成員及其他經授權的人員,并不是會計師事務所的所有人員,選項D錯誤。 3. 【答案】ACD 【解析】審計工作底稿通常包括總體審計策略、具體審計計劃、分析表、問題備忘錄等,選項AC正確;注冊會計師還可以將被審計單位文件記錄的摘要或復印件(如重大的或特定的合同和協議)作為審計工作底稿的一部分,選項D正確;重復的文件記錄不作為審計工作底稿保存,所以不屬于審計工作底稿可能包括的內容,選項B不正確。 4. 【答案】ABD 【解析】審計標識及其說明屬于審計工作底稿的要素,并不屬于記錄審計過程中應當特別注意的重點方面,選項C不正確。 5. 【答案】AD 【解析】通常,需要在每一張審計工作底稿上注明執行審計工作的人員和復核人員、完成該項審計工作的日期以及完成復核的日期,選項A正確;在實務中,如果若干頁的審計工作底稿記錄同一性質的具體審計程序或事項,并且編制在同一個索引號中,此時可以僅在審計工作底稿的第一頁上記錄審計工作的執行人員和復核人員并注明日期,選項D正確。 6. 【答案】BD 【解析】無論是永久性檔案還是當期檔案,都至少保存10年。 7. 【答案】BC 【解析】替換后的審計工作底稿從替換的起計算保存期限,應該至少保存10年,所以選項B正確;未替換部分的審計工作底稿應該從審計報告日起至少保存10年,所以選項C正確。 8. 【答案】BCD 【解析】選項A應該是考慮被審計單位的規模和復雜程度。 9. 【答案】ABCD 【解析】以上各項均正確。 10. 【答案】ABCD 【解析】注冊會計師可以做出的事務性的變動主要包括: (1)刪除或廢棄被取代的審計工作底稿(選項A);

(2)對審計工作底稿進行分類、整理和交叉索引(選項B); (3)對審計檔案歸整工作的完成核對表簽字認可(選項C);

(4)記錄在審計報告日前獲取的、與項目組相關成員進行討論并達成一致意見的審計證據(選項D)。 11. 【答案】ACD 【解析】實務中根據對審計檔案使用時間的不同劃分為永久性檔案和當期檔案,選項A不正確;總體審計策略和具體審計計劃屬于當期審計檔案,選項C不正確;永久性檔案應自審計報告日起至少保存10年,選項D不正確。 12. 【答案】BC 【解析】審計工作底稿的歸檔期限為審計報告日后六十天內。如果注冊會計師未能完成審計業務,審計工作底稿的歸檔期限為審計業務中止后的六十天內。

三、簡答題 1. 【答案】 (1)正確。

(2)不符合要求,審計工作底稿的歸檔期限應該是在審計報告日后60天內,甲公司的審計報告日是2月15日,而完成歸檔的日期是5月30日,遠遠超過了60天。

(3)不正確。在完成審計檔案的歸整工作之后,如果有必要修改或者增加新的審計工作底稿,應該記錄修改或增加審計工作底稿的理由、時間和人員,以及復核的時間和人員。 (4)在完成最終審計檔案的歸整工作后,注冊會計師發現有必要修改現有審計工作底稿或增加新的審計工作底稿的情形主要有以下兩種: ①注冊會計師已實施了必要的審計程序,取得了充分、適當的審計證據并得出了恰當的審計結論,但審計工作底稿的記錄不夠充分。 ②審計報告日后,發現例外情況要求注冊會計師實施新的或追加審計程序,或導致注冊會計師得出新的結論。 2. 【答案】

(1)存在不當之處。項目質量控制復核應該在出具審計報告前實施,甲公司3月10日出具了審計報告,3月15日才實施項目質量控制復核,不符合規定。

(2)存在不當之處。項目組內部復核是每項審計業務都要實施的,不能用執行項目質量控制復核代替項目組內部復核。

(3)存在不當之處。審計工作底稿的所有權屬于會計師事務所,私自保存審計工作底稿違反了相關規定。

第十章德育主體范文第6篇

課題:

教學目的: 教學重點: 教學難點: 第十章 指針

§1-§2

1、了解指針與地址的概念

2、掌握指針變量的定義、初始化及指針的運算 指針變量的定義、初始化及指針的運算

指針的運算

步驟一 復習引導

指針是C語言的一個重要概念,也是C語言的一個重要特色。正確而靈活地運用它,可以有效地表示復雜的數據結構;能動態分配內存;能方便地使用字符串;有效而方便地使用數組;在調用函數時能得到多于1個的值;能直接處理內存地址等,這對設計系統軟件是很必要的。

指針的概念比較復雜,使用也比較靈活,因此初學者時常會出錯,務請在學習本章內容時十分小心。

步驟二 講授新課

§10.1 地址和指針的概念

計算機的主存儲器被分成一個個存儲單元,為了區分各存儲單元,要為每個存儲單元編號,這個編號即地址。

例:i =3;

或 scanf(“%d”, &i);

是將3送給 i所在的空間。

例:將3送到變量I_pointer所“指向”的單元(即I所標志的單元)。

所謂“指向”,是通過地址來體現的,I_pointer中的值為2000,它是變量I 的地址,這樣就在I_pointer和變量之間建立起一種聯系,即通過I_pointer能知道I的地址,從而找到變量I的內存單元。因而在C語言中,將地址形象化地稱為“指針”。

意思是通過它能找到以它為地址的內存單元。一個變量的地址稱為該變量的“指針”。

內存單元的地址和內存單元的內容是兩個不同的概念。

指針:就是地址,即內存單元的編號。

指針變量:用來存放另一變量的地址(即指針)的變量。

如:地址2000是變量 i的指針;i_pointer是指針變量,其值就是指針2000。

§10.2變量的指針和指向變量的指針變量

變量的指針就是變量的地址。

存放變量地址的變量是指針變量,用來指向另一個變量。

*i_pointer 表示 i_pointer 所指向的變量。

一、定義一個指針變量

指針變量的定義包含三個方面的內容:

⑴ 指針類型說明,即定義變量為一個指針變量 ⑵ 指針變量名

⑶ 變量值(指針)所指向的變量的數據類型。 格式:

存儲類型

基類型

*指針變量名; 例:int *pointer_1, *pointer_2;

float *pointer_3;

char *pointer_4;

二、指針的引用

指針變量有兩個運算符: & :取地址運算符

功能:取變量地址;單目,右結合。

* :取內容運算符(“間接訪問”運算符)

功能:只能跟地址,取變量所指向單元的內容;單目,右結合。

例:&a為變量a的地址,

*p 為指針變量p所指向的存儲單元。

例:int a=5, *p=&a;

printf ( “%d”, *p ); main() { int a,b;

int *pointer_1,*pointer_2;

a=100;b=10;

pointer_1=&a;

/*把變量a的地址賦給pointer_1*/

pointer_2=&b;

/*把變量b的地址賦給pointer_2*/

printf(“%d,%d ”,a,b);

printf(“%d,%d ”,*pointer_1, *pointer_2); } 輸出結果:100, 10

100, 10

評注:

1、在第3行雖然定義了兩個指針變量,只是提供了兩個指針變量,但并未指向任何一個整型變量。稱為指針“懸空”。

2、最后一行的*pointer_1和pointer_2就是變量a和b。

3、程序中兩處出現*pointer_1等,含義不同。程序第3行中的*pointer_1表示定義指針變量pointer_1。它前面的*只是表示該變量是指針變量。程序最后一行中的*pointer_1則代表變量,即pointer_1所指向的變量。

4、第5行中的pointer_1=&a 是將a的地址賦給指針變量pointer_1,而不是*pointer_1。

注意:不應寫成:*pointer_1=&a;

5、從上例中可看出,*pointer_1等價于a,*pointer_2等價于b,故凡在程序中出現a的地方均可用 *pointer_1 代替。所以,若有: int x, y, *px=&x ; 則下面的運算均是正確的: y=*px+1;

/*把 x 的內容加1 送變量y*/ printf(“%d ”, px );

/*打印當前x 的內容*/ d=sqrt((double) px);

/*把x的平方根送變量d*/ px=0;

/*把 x 置為0*/ *px+=1;

/*把 x 的值加 1*/ (*px)++;

/*使 x 的值加 1*/ y=(*px)++;

/*即y=x, x++*/

6、假設px和py都被定義為指向int 對象的指針,而且px當前已指向了int 型變量x,則執行:

py=px;

/*把指針px的內容拷貝到指針py中去*/ 即

py和px 這兩個不同的指針指向了同一對象x

7、指針不是整數,不能將它與整數混為一談。 例:

# include main() { int x=100,*p; p=x; printf(“%d”, p ); }

例如:

# include main() { int a, b, *d=&a;

b = d;

printf( “%d ”, b );

……

}——編譯不出錯,但得不到希望的值

關于&和*運算符的說明:

假設已執行

pointer_1=&a;

1、&*pointer_1含義是什么?

&*pointer_1與&a相同,即變量a的地址。

2、*&a的含義是什么?

先進行&a運算,得a的地址,再進行*運算。

*&a、*pointer_1及變量a等價。

3、(*pointer_1) + + 相當于a + +。

它與*pointer_1 + + 不同。

4、*pointer_1 + + 等價于*(pointer_1 + +),即先進行*運算,得到a的值,然后使pointer_1的值改變,這樣pointer_1不再指向a了。

例10.2:輸入a和b兩個整數,按先大后小的順序輸出a和b。

main() { int *p1,*p2,*p, a, b;

scanf(“%d,%d”,&a,&b);

p1=&a; p2=&b;

if (a

{p=p1; p1=p2; p2=p;}

printf(“ a=%d,b=%d ”,a,b);

printf(“max=%d,min=%d ”,*p1,*p2);

} 運行情況: 5,9 a=5,b=9 max=9,min=5

三、指針變量作為函數參數

例10.3對輸入的兩個整數按大小順序輸出。 先考察如下程序,看是否能得到預期的結果

swap(int p1, int p2) { int temp; temp = p1; p1 = p2; p2 =temp; } main() { int a, b;

scanf(“%d, %d”, &a, &b);

if(a

printf(“ %d,%d ”,a,b); } 不能得到預期的結果。 改為:

swap(int *p1,int *p2) { int temp;

temp = *p1;

*p1 = *p2;

*p2 =temp; } main() { int a,b;

int *pointer_1,*pointer_2;

scanf(“%d,%d”,&a,&b);

pointer_1=&a;

pointer_2=&b;

if(a

swap(pointer_1,pointer_2);

printf(“ %d,%d ”,a,b); }

注:如果想通過函數調用得到n個改變的值,可以:

1、在主調函數中設n 個變量,用n個指針變量指向它們;

2、然后將指針變量作實參,將這n 個變量的地址傳給所調用的函數的形參;

3、通過形參指針變量,改變該n個變量的值;

4、主調函數中就可以使用這些改變了值的變量。

四、指針(變量)的初始化 指針置初始化值的格式:

存儲類型

基類型

*指針名=初始化值; 如:main()

{ static int a;

int *p=&a, *p1=p;

…… } 再如: int *p = 0;

int *p = NULL;

五、指針的運算

1、指針的算術運算

指針僅能進行加、減算術運算

如:p+n , p-n , p++ , p-- , ++p , --p

p-= n , p+= n , p1-p2 等 其中n是整數,p、p

1、p2均為指針;

施行加法運算時,指針向地址增大的方向移動; 施行減法運算時,指針向地址減小的方向移動; 移動長度取決于指針的基類型,由計算機決定; 如有:int a,b,c, *pt =&a;

pt++ 則指針向后移動兩個字節; 再如:main()

{ int *p1,a=8,b=3;

p1=&a;

printf(“%d,%d ”, (*p1)++, *p1++);

printf(“%d,%d ”,a, *p1);

} 運行結果:3 , 8

8 , 4 注:p1+k = p1+k*sizeof(p1的基類型);

p1- k = p1- k*sizeof(p1的基類型); 如:

strlen(char *s)

{ char *p=s;

while(*p!=„??)p++;

return(p-s);

}

2、指針的關系運算

設指針p1,p2指向同一數組中的元素,則

p1

p1

p1= =p2:

表示p

1、p2指向數組中的同一元素;

同理可推出>、>=、<=、!=比較的意義; 不可將指針與其他類型的對象作比較;

若兩指針指向不同數組中的元素,也不可比較;

允許將指針與NULL或數值0進行= =或!=的比較,以便判定一個指針是否為空指針。

步驟三 課堂小結

本課介紹了指針與地址的概念,指針變量的定義、初始化及指針的運算。

指針:就是地址,即內存單元的編號。

指針變量:用來存放另一變量的地址(即指針)的變量。

例如:int a=5, *p=&a;

printf ( “%d”, *p );

注意:運算符*和&的用法,指針變量的自加自減運算。 步驟四 布置作業

課后作業:第十章課后練習 10.1 10.2 課題:

教學目的: 教學重點: 教學難點: 第十章 指針

§3 掌握指針與數組的知識 指向數組的指針變量

指向二維數組的指針

步驟一 復習引導

上節課介紹了指針變量的定義及其賦值。一個變量有地址,一個數組包含若干元素,每個數組元素都在內存中占用存儲單元,它們都有相應的地址。指針變量既然可以指向變量,當然也可以指向數組和數組元素(把數組起始地址或某一元素的地址放到一個指針變量中)。

步驟二 講授新課

所謂數組的指針是指數組的起始地址,數組元素的指針是數組元素的地址。

引用數組元素可以用下標法(如a[3]),也可以用指針法,即通過指向數組元素的指針找到所需的元素。使用指針法能使目標程序質量高(占內存少,運行速度快)。

一、指向一維數組的指針

定義形式:

int a[10];

int *p;

p=&a[0];

p=a;

含義:把數組的首地址賦給指針變量p。

也即: int *p=&a[0];

int *p=a;

二、通過指針引用數組元素

按C的規定:如果指針變量p已指向數組中的一個元素,則p+1指向同一個數組中的下一個元素(而不是簡單地加1)。

如果p的初值為&a[0],則:

p+i ? a+i ? &a[i],即指向a數組的第i個元素。

*(p+i) ? *(a+i) ?

a[i]。

指向數組的指針變量也可以帶下標,如p[i]與*(p+i)等價 引用數組元素時,可以用:

1、下標法,如:a[i]

2、指針法,如:*( a+i )

*( p+i )

其中,a是數組名,p是指向數組的指針

例10.5:輸出數組中的全部元素

假設有一個a數組,整型,有10個元素。用三種方法輸出各元素的值:

1、下標法: main() { int a[10], i ;

for( i=0; i<10 ; i++)

scanf(“%d”,&a[i]);

printf(“ ”);

for( i=0 ; i<10; i++)

printf(“%d”,a[i]); }

2、利用數組名計算數組元素地址,找出元素的值。 main() { int a[10], i ;

for( i=0; i<10 ; i++)

scanf(“%d”,&a[i]);

printf(“ ”);

for( i=0 ; i<10; i++)

printf(“%d”,*(a+i)); }

3、用指針變量指向數組元素。 main() { int a[10], *p, i ;

for( i=0; i<10 ; i++)

scanf(“%d”,&a[i]);

printf(“ ”);

for( p=a; p<(a+10); p++)

printf(“%d”,*p ); } 評注:

1、第1和2種方法執行效率是相同的。

2、第3種方法效率高。

3、用下標法比較直觀。

在使用指針變量時,有幾個問題要注意:

1、指針變量可以實現使本身的值改變。 如:for(p=a; p<(a+10); p++)

2、要注意指針變量的當前值。

如:要通過指針變量輸出a數組的10個元素。 main() { int a[10], i , *p=a;

for( i=0; i<10 ; i++)

scanf(“%d”, p++);

printf(“ ”);

for( i=0 ; i<10; i++,p++)

printf(“%d”, *p); } 這個程序輸出的并不是a數組中各元素的值。因為第一個 for 循環結束時,p已經指向數組的末尾。再繼續下去,p指向的是a數組下面的10個元素,是不可預料的。 可加一句為:p=a;

3、用指針變量p指向數組元素,可以指到數組以后的內存單元。C編譯程序不作下標越界檢查。

4、注意指針變量的運算。如果p指向數組a, ⑴ p++ (或 p+=1 ),使p指向下一元素a[1]。 ⑵ *p++

等價 *(p++)。作用是先得到p指向的變量的值(即*p),然后再使p+1→p。 ⑶ *(p++)與*(++p) 不同。前者為a[0],后者為a[1] ⑷ (*p)++表示p指向的元素值加1,即(a[0])++ ⑸ 如果p當前指向a數組中第i個元素,則:

*(p- -)相當于a[i- -],先對p進行*運算,再使p自減; *(+ + p)相當于a[+ +i],先使p自加,再作*運算。 *(-) { temp=*i; *i = *j; *j =temp; } return; } main() { int i, a[10],*p=a; printf(“The original array: ”); for( i=0; i<10; i++,p++) scanf(“%d”, p); printf(“ ”); p=a; inv(p,10); printf(“The array is : ”); for( p=a; p

例10.10:用選擇法對10個整數排序。 main() {int *p, i, a[10]; p=a; for( i=0; i<10; i++) scanf(“%d”,p++); p=a; sort(p,10); for( p=a, i=0; i<10; i++) { printf(“%d”,*p);p++;} } sort(int x[],int n) { int i, j, k, t; for( i=0; ix[k]) k=j; if( k !=i) { t = x[i]; x[i] = x[k]; x[k] = t; } }

四、指向二維數組的指針和指針變量

1、二維數組的地址如:

int a[3][4] A

a[0]

a[0] [0] a[0] [1] a[0] [2] a[0] [3]

A+1

a[1]

a[1] [0] a[1] [1] a[1] [2] a[1] [3]

A+2

a[2]

a[2] [0] a[2] [1] a[2] [2] a[2] [3] 例:int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};

設首地址為2000。

? a[k]+p ( 0<=k< i , 0<=p

由此得到: *(a[k]+p) 等價于a[k][p]; ? a[0]與&a[0][0]等價;

? a+k與&a[k][0]等價,而a[0]+k與&a[0][k]等價; ? *(a+i)可理解為a[i],故有如下等價關系:

a+0

等價于 a[0]、

a[0]+0、

&a[0][0]、

*(a+0)

a+1

等價于 a[1]、

a[1]+0、

&a[1][0]、

*(a+1)

a+(i-1) 等價于 a[i-1]、a[i-1]+0、

&a[i-1][0]、

*(a+i-1)

? *(a+k)與*a[k]是不同的,前者相當于a[k],是一個地址值;后者相當于*(a[k]+0)或*&a[k][0],是數組元素a[k][0]中存儲的值。 ? 數組元素a[k][p]就是*(a[k]+p),即*(*(a+k)+p)

步驟三 課堂小結

本課介紹了指向數組的指針,主要是指向一維數組的指針。用指針變量p指向數組a,指針變量p可以++、--,表示指向數組的上一元素或下一元素。但C編譯程序不作下標越界檢查。使用指針既方便有靈活,但初學者容易搞錯。

步驟四 布置作業

課后作業:第十章課后練習 10.31 10.5 課題:

教學目的: 教學重點: 教學難點: 第十章 指針

§3-§4 在掌握指針與數組的基礎上,掌握字符串的指針與指向字符串的指針變量 指向字符串的指針變量

用指針處理字符串

步驟一 復習引導

上節課介紹了指向一維數組的指針及二維數組的地址,指向一維數組的指針也即指向元素的指針,那么指向二維數組的指針是怎樣的呢?它有兩種類型。

步驟二 講授新課

2、指向二維數組的指針變量

——(1)指向數組元素的指針變量

設指針變量p=a[0]

(&a[0][0]、a、a+0、*(a+0) ) 計算a[i][j]在n*m數組中的位置:

例:……

for( i=0; i<3; i++)

{for( j=0; j<4; j++ ) printf (“%4d”, *(p+i*m+j));

printf(“ ”); }

……

例:用指針變量輸出數組元素的值。 main() { int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};

int *p;

for( p=a[0]; p

{if((p-a[0])%4 == 0) printf(“ ”);

printf(“%4d”, *p);

} } 計算a[i][j]在n*m數組中的位置:a[0]+i*m+j

——(2)行指針(指向由m個元素組成的一維數組的指針變量)

定義:指針基類型

(*指針名)[m]

其中,m表示二維數組每行有m列;

如: int (*p)[3];

于是,p

指向第0行元素的起始存儲地址;

p+1

指向第1行元素的起始存儲地址;……

p+I

指向第i 行元素的起始存儲地址;

而每一行的元素的表示形式為:

第0行元素的表示為 (*p)[j];

第1行元素的表示為 (*(p+1))[j];……

第i 行元素的表示為 (*(p+ I))[j];

例 :

#include main() { int (*p)[4], j;

int a[4][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}}; for(p=a; p

for(j=0;j<4; j++)

if( j==3 ) printf(“%4d ”, (*p)[j] );

else printf(“%4d” , (*p)[j] );

} 改寫為:

#include main() { int (*p)[4], i, j;

int a[4][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};

p=a;

for( i=0; i<4; i++)

for(j=0;j<4; j++)

printf(j==3?“%4d ”: “%4d” , *(*(p+i )+j) );

}

3、多維數組的指針作函數參數

一維數組的地址可以作為函數參數傳遞,多維數組的地址也可作函數參數傳遞。在用指針變量作形參以接受實參數組名傳遞來的地址時,有兩種方法:

1、用指向變量的指針變量;

2、用指向一維數組的指針變量。

例;有一個班,3個學生,各學4門課,計算總平均分數,以及第n個學生的成績。 main() { void average(float *p ,int n);

void search(float (*p)[4], int n);

float score[3][4]={{65,67,70,60},{80,87,90,81}, {90,99,100,98}};

average( *score, 12);

/*求12個分數的平均分*/

search(score , 2);

/*求第2個學生成績*/ } void average(float *p , int n) {float *p_end;

float sum= 0,aver;

p_end = p+n-1;

for(; p<=p_end; p++) sum =sum+(*p); aver = sum/n; printf(“average=%5.2f ”,aver); } void search(float (*p)[4], int n) { int i; printf(“the score of No %d are: ”,n); for( i=0; i<4; i++) printf(“%5.2f”, *(*(p+n)+i)); }

例10.15 在上題基礎上,查找一門以上課程不及格的學生,打印出他們的全部課程的成績。 main() { void search(float (*p)[4], int n); float score[3][4]={{65,57,70,60},{58,87,90,81),{90,99,100,98}}; search(score, 3); } void search(float (*p)[4], int n) {int i, j, flag; for( j=0; j

§10.4字符串的指針和指向字符串的指針變量

一、字符串的表示形式

1、用字符數組存放一個字符串。 如:main()

{ char string[ ]=“I love China!”;

printf(“%s ”, string); }

2、用字符指針指向一個字符串。

如:main()

{ char *string=“I love China!”;

printf(“%s ”, string); } 例10.18 將字符串a復制為字符串b。 main() { char a[]=“I am a boy.” , b[20];

int i;

for( i=0; *(a+i)!=„??; i++) *(b+i) = *(a+i);

*(b+i) = „??;

printf(“string a is : %s ”, a);

printf(“string b is :”);

for( i=0; b[i]!=„??; i++ )

printf(“%c”, b[i] );

printf(“ ”); }

例10.19 用指針變量來處理上例。 main() { char a[ ]=“I am a boy.” , b[20], *p1, *p2;

int i;

p1= a; p2= b;

for( ; *p1!=„??; p1++,p2++ ) *p2 = *p1;

*p2 = „??;

printf(“string a is : %s ”, a);

printf(“string b is :”);

for( i=0; b[i]!=„??; i++)

printf(“%c”, b[i]);

printf(“ ”); }

二、字符串指針作函數參數

例10.20:用函數調用實現字符串的復制。 ——(1)用字符數組作參數。

void copy_string(char from[],char to[]) { int i=0;

while( from[i]!=„?? )

{ to[i] = from[i]; i++;}

to[i]=„??;

} main() { char a[]=“I am a teach.”;

char b[]=“you are a student.”;

printf(“string a= %s string b=%s ”,a,b);

copy_string(a,b);

printf(“ string a=%s string b=%s ”,a,b); } ——(2)形參用字符指針變量 void copy_string(char *from,char *to) { for(; * from!=„??; from++, to++ )

*to = *from;

*to=„??;

} ——(3)對copy_string函數還可以簡化。 ① void copy_string(char *from, char *to)

{ while((*to =* from)!=„??)

{ to ++; from++;}

} ② void copy_string(char *from, char *to)

{ while((*to ++ =* from++)!=„??); }

③void copy_string(char *from, char *to)

{ while(* from!=„??)

*to++ = *from ++;

*to = „??;

} ④void copy_string(char *from, char *to)

{ while(*to++ = *from ++); }

⑤void copy_string(char *from, char *to)

{ for( ;*to++ = *from ++;); }

⑥void copy_string(char from[], char to[])

{ char *p1,*p2;

p1=from; p2=to;

while((*p2++ = *p1++)!=„??);

}

三、字符指針變量和字符數組的討論

1、 字符數組由若干個元素組成,每個元素中放一個字符,而字符指針變量中存放的是地址,決不是將字符串放到字符指針變量中。

2、賦值方式。對字符數組只能對各個元素賦值,不能用以下辦法對字符數組賦值;

char str[14];

str=“I love China.”;對字符指針變量,可以采用下面方法賦值:

char *a;

a= “I love China.”;

/*賦給a的是串的首地址*/

3、對字符指針變量賦初值:

char *a=“I love China.”;

等價于

char *a;

a=“I love China.”;

而對數組的初始化:

char str[14]={“I love China.”}; 不等價于

char str[14];

str[]=“I love China.”;

即數組可以在變量定義時整體賦初值,但不能在賦值語句中整體賦值。

4、如果定義了一個字符數組,在編譯時為它分配內存單元,它有確定的地址。 而定義一個字符指針變量時,給指針變量分配內存單元,在其中可以放一個地址值,也就是說,該指針變量可以指向一個字符型數據,但如果未對它賦一個地址值,則它并未具體指向一個確定的字符數據。這很危險。

如: char str[10];

scanf(“%s”,str); 是可以的

char *a;

scanf(“%s”,a);

能運行,但危險,不提倡,在a單元中是一個不可預料的值。

應當 char *a,str[10]; a=str; scanf(“%s”,a);

5、指針變量的值是可以改變的,數組名雖然代表地址,但它的值是不能改變的??梢韵聵诵问揭盟傅淖址械淖址?。

如:main()

{char *a=“I love China.”;

a=a+7;

printf(“%s”,a); }

又如:char str[]={“I love China.”}; str=str+7; printf(“%s”,str); 是錯的

6、用指針變量指向一個格式字符串,可以用它代替printf函數中的格式字符串。也可以用字符數組實現,但由于不能采用賦值語句對數組整體賦值。

如:char *format; format=“a=%d,b=%f ”; printf(format,a,b);

等價于:printf(“a=%d,b=%f ”,a,b);

也可以:char format[ ]=“a=%d,b=%f ”; printf(format,a,b);

步驟三 課堂小結

本課介紹了指針與二維數組、指針與字符串,指向二維數組的指針有指向元素的指針和行指針,使用時應注意它們的區別。我們既要掌握用數組處理字符串,也要掌握用指針變量處理字符串。要區分這兩種方法的不同之處。

步驟四 布置作業

課后作業:第十章課后練習 10.61 10.7 課題: 第十章 指針

§5-§7 教學目的: 了解指針與函數的概念 教學重點:

教學難點: 指針數組,二級指針 掌握指針數組,二級指針等知識 掌握指針數組,二級指針等知識

步驟一 復習引導

前面介紹了指針與維數組、指針與字符串,我們可以用指針變量指向整型變量、字符串、數組,也可以指向一個函數。

步驟二 講授新課

§10.5函數的指針和指向函數的指針變量

函數的地址:函數存儲區域的首地址就是該函數的入口點,其函數名表示了入口地址。

一、函數指針變量的定義:

存儲類型

數據類型

(*函數指針名)( );

例:static int (*p)( ); 例10.23 求a和b中的大者。

main()

{ int max(int, int);

int a,b,c;

scanf(“%d,%d”,&a,&b);

c=max(a,b);

printf(“a=%d,b=%d,

max=%d”,a,b,c);

} max(int x, int y) { int z;

if(x>y) z=x;

else z=y;

return(z); } 法2:main()

{

int max(int, int);

int (*p)( );

int a,b,c;

p=max;

/*將地址送入p */

scanf(“%d,%d”,&a,&b);

c=(*p)(a,b);

/*與max(a,b)等價*/

printf(“a=%d,b=%d,max=%d”,a,b,c);

} 注:int (*p)()定義p是一個指向函數的指針變量,此函數帶回整型的返回值。

說明:

1、函數的調用可以通過函數名調用,也可以通過函數指針調用。

2、(*p)() 表示定義一個指向函數的指針變量,它不是固定指向哪一個函數的,而只是表示定義了這樣一個類型的變量,它是專門用來存放函數的入口地址的。

3、在給函數指針變量賦值時,只需給出函數名而不必給出參數,如:p=max; 。

4、用函數指針變量調用函數時,只需將(*p)代替函數名即可(p為指針變量名),在(*p)之后的括號中根據需要寫上實參。如:c=(*p)(a,b);

5、對指向函數的指針變量,像p+n、p++、p--等運算是無意義的。

二、用指向函數的指針作函數參數

函數的參數可以是變量、指向變量的指針變量、數組名、指向數組的指針變量等?,F介紹指向函數的指針也可以作為參數,以便實現函數地址的傳遞,也就是將函數名傳給形參。

它的原理可以簡述如下:有一個函數(假設函數為sub),它有兩個形參(x1和x2),定義x1和x2為指向函數的指針變量。在調用函數sub時,實參用兩個函數名f1和f2給形參傳遞函數地址。這樣在函數sub中就可以調用f1和f2函數了。

有人會問,既然在sub函數中要調用f1和f2函數,為什么不直接調用f1和f2而用函數指針變量呢?的確,如果只是用到f1和f2,完全可以直接在sub函數中直接f1和f2,而不必設指針變量x

1、x2。但是,如果在每次調用sub函數時,要調用的函數是不固定的,這次調用f1和f2,而下次要調用f3和f4,第三次要調用的名作為實參即可,sub函數不必作任何修改。這種方法是符合結構化程序設計方法原則的,是程序設計中常使用的。

例10.24 設一個函數process,在調用它的時候,每次實現不同的功能。

main() { int max(int ,int );

int min(int , int);

int add(int , int);

int a, b;

printf(“enter a and b:”);

scanf(“%d,%d”, &a, &b);

printf(“max=”); process(a,b,max);

printf(“min=”); process(a,b, min);

printf(“sum=”); process(a,b, add); }

max(int x, int y)

{ int z;

if(x>y) z = x; else z = y;

return(z);

}

min(int x, int y)

{ int z;

if(x

else z = y;

return(z); } add( int x, int y) { int z;

z = x+y;

return(z); }

process(int x, int y, int (*fun)(int ,int)) {int result;

result = (*fun)(x,y);

printf(“%d ” , result ); }

在函數process定義中,int (*fun)(int,int)表示fun是指向函數的指針,該函數是一個整型函數,有兩個整型形參。

在三次調用中,分別將函數名max、 min、 add作為實參將其入口地址送給process函數中的形參fun(fun是指向函數的指針變量)。例:process函數中的(*fun)(x,y)相當于max(x,y)。

注:在使用時,應將函數聲明,這樣編譯系統將它按函數名處理(把函數入口地址作實參值),而不是作為變量名,不致出錯。

Process函數無固定功能。如果max、 min、 add換成其它函數,此process函數不需改變,只要修改每函數的函數體。

§10.6 返回指針值的函數

一個函數可以帶回一個整型值、字符值、實型值等,也可以帶回指針型的數據,即地址。其概念與以前類似,只是帶回的值的類型是指針類型而已。 格式: 類型名

*函數名(參數表); 例: int

*a(int x, int y);

a是函數名,調用它以后能得到一個指向整型數據的指針(地址)。

例10.25 有若干個學生的成績(每個學生有4門課程),要求在用戶輸入學生序號以后,能輸出該學生的全部成績。用指針函數來實現。 float *search( float (*pointer)[4], int n)

{float *pt;

pt = *(pointer +n);

return( pt );

} main() { float score[][4]={{60,70,80,90},{56,89,67,88),{34,78,90,66}};

float *p;

int i, m;

printf(“enter the number of student:”);

scanf(“%d”,&m);

printf(“The score of No.%d are: ”, m);

p=search(score, m);

for( i=0; i<4; i++)

printf(“%5.2 ”, *(p + i));

}

例10.26 對上例中的學生,找出其中有不及格課程的學生及其學生號。 float *search(float (*pointer)[4]) { int i;

float *pt;

pt = *(pointer+1);

for( i=0; i<4 ; i++)

if(*(*pointer+i)<60) pt = *pointer;

return(pt); } main() { score[][4]={{60,70,80,90},{56,89,67,88),{34,78,90,66}};

float *search(float (*pointer)[4], int n);

float *p;

int i, m;

for( i=0; i<3; i++) { p=search(score+i);

if( p==*(score + i))

{ printf(“ No.%d score:”, i);

for(j=0; j<4; j++)

printf(“%5.2 ”, *(p + i));

printf(“ ”); }

} }

關于函數的返回值是指針的情況,程序設計時應注意:

1、因數組名是地址常量,用于接受這種返值的對象不能是數組名,這與把數組名作為實在參數傳遞給形式參數的情況不同(作為形式參數的數組名總被視為指針)。

2、不應將局部于被調用函數的指針作為返值返回給調用者,理由是局部于被調用函數的數據對象執行返回語句離開被調用函數后,原來分配的被調用函數的所有局部對象的存儲空間立即被收回(釋放),雖然調用者已經獲得了正確的地址值,但此時它指向的存儲區域的內容可能已經發生了變化,或許已經分配給其他函數了。如果調用函數中仍然使用這個指針去存取那個區域中的數據,得到的可能并非原先的數據。對于這種情況的正確做法是應該把所處理的對象定義成全局對象或static型對象。

§10.7 指針數組和指向指針的指針

一、指針數組的概念

一個數組中的元素均為指針類型,稱為指針數組。

形式:

存儲類型

類型名

*數組名[數組長度]

例如:

static

int

*p[4]

定義指針數組時也可以進行初始化,如:

static char ch[][20]={“Beijing”,“Nanjing”,“Shanghai”,“Guangzhou”};

char *p[ ]={ch[0],ch[1],ch[2],ch[3]}; 該例也可以等價定義為:

char *p[ ]={“Beijing”,“Nanjing”,“Shanghai”,“Guangzhou”};

例如: main( ) { int i, min, j;

char *temp, *p[ ]={“Beging”,“Nanjing”,“Shanghai”, “Guangzhou”};

for( i=0; i<3; i++)

{ min=i;

for( j=i+1; j<4; j++)

if (strcmp(p[j], p[min])<0) min=j;

temp=p[i]; p[i]=p[min]; p[min]=temp;

}

for(i=0; i<4; i++)

printf(“%s ”, p[i]); } 注意:不能把一個二維數組與一個指針數組混淆;

如:int a[10][10]; 與

int *b[10];的異同點 ? 訪問形式相同;如a[5][5],b[5][5]; ? 占用的存儲空間數不同;

? 每一個b[i]必須置初值者能使用; ? 使用b優越

不需進行復雜的下標計算;

b[i]指向的數組并非一定要10個元素,但a中,每一行上的元素個數必須相同;因指針指向的是一個地址,故對b而言,各個b[i]指向的存儲區域之間不必連續;而對a而言,必須存儲100個連續的存儲int型數據對象的區域。

例10.27 將若干字符串按字母順序(由小到大)輸出。 main() { void sort(char *name[], int n);

void print(char *name[], int n);

char *name[]={“Follow me”, “Basic”, “Great Wall”, “Fortran”, “Computer”};

int n=5;

sort(name, n);

print(name, n);

} void sort(char *name[], int n) { char *temp;

int i, j, k;

for( i=0; i

{ k=i ;

for( j=i+1; j

if( strcmp(name[k], name[j])>0) k=j; if( k!=i )

{temp=name[i];

name[i]=name[k];

name[k]=temp;}

} } void print(char *name[], int n); { int i;

for( i=0; i

}

二、指向指針的指針

在本章開頭已提到“間接訪問”變量的方式。利用指針變量訪問另一個變量就是“間接訪問”。

如果在一個指針變量中存放一個目標變量的地址,這就是“單級間址”。指向指針的指針用的是“二級間址”方法。從理論上講,間址方法可以延伸到更多的級。但實際上在程序中很少有超過二級間址的。級數愈多,愈難理解,容易產生混亂,出錯機會也多。

二級指針的定義:

char **p;

含義:表示指針變量p是指向一個字符指針變量(即指向字符型數據的指針變量)的。 main( ) { int i, min, j;

char *temp, *p[ ]={“Beging”,“Nanjing”,“Shanghai”, “Guangzhou”};

char **pp;

pp=p;

for(i=0; i<3; i++)

{ min=i;

for( j=i+1; j<4; j++)

if (strcmp(*(pp+j),*(pp+min))<0) min=j;

temp=*(pp+i);

*(pp+i)=*(pp+min);

*(pp+min)=temp;

}

for (i=0; i<4; i++) printf(“%s ”,*pp++); } 例10.28 使用指向指針的指針。 main() { char *name[]={“Follow me”, “Basic”, “Great Wall”, “Fortran”, “Computer”};

char **p;

int i;

for( i=0; i<5; i++)

{ p=name+i;

printf(“%s ”, *p);

}

} 例 main() { static int a[5]={1,3,5,7,9};

int *num[5]={&a[0],&a[1],&a[2],&a[3],&a[4]};

int **p, i;

p= num;

for( i=0; i<5 ; i++)

{ printf(“%d ”, **p);

p++;

}

} 運行結果:

9 步驟三 課堂小結

本課介紹了指針數組、二級指針、指針與函數。要搞清它們的定義及應用; 注意區分:

char a[5];

char (*a)[5];

int

*p(int x);

int (*p)( );

步驟四 布置作業

《C語言習題集》同步練習 課題: 第十章 指針

§7-§8 教學目的: 了解指針數組作main函數的形參 教學重點:

教學難點: 指針的應用 掌握指針的應用 掌握指針的應用

步驟一 復習引導

上節課介紹了二級指針、指針數組,而指針數組的一個重要應用是作為main函數的形參。main()函數是我們C語言程序必不可少的,以往使用時main()是不帶參數的。實際上是可帶參數的,如:main(argc, argv) 。

步驟二 講授新課

三、指針數組作main函數的形參

帶參數的main原型:

main( int argc, char *argv[ ] )

{ ……

}

說明:

第1個參數是指命令行中參數的個數,含文件名本身。

第2個參數是一個指向字符串的指針數組。

main函數是由系統調用的。當處于操作命令狀態下,輸入main所在的文件名(經過編譯、連接后得到的可執行文件名),系統就調用main函數。參數應和命令一起給出。 命令形式:

命令名

參數1

參數2

……參數n 例如:有一個目標文件名file1,今想將兩個字符串“China”, “Beijing”作為傳送給main函數的參數??蓪懗桑?/p>

file1 China Beijing

例:編寫一程序echo.c,實現將命令行上除程序名之外的所有給出的其他參數都回顯到顯示器上。

main(int argc, int *argv[ ]) { while(argc>1) { ++argv;

printf(“%s”, *argv);

-- argc; } }

若將該程序編譯、連接、裝配成echo.exe,則在命令行上輸入:

echo hello, world! 則通過虛實結合后得:argc=3,argv[0]指向echo,argv[1]指向hello,argv[2]指向world! 結果為:hello, world!

§10.8有關指針的數據類型和指針運算的小結

一、有關指針的數據類型的小結

見書中的表

二、指針運算小結

1、指針變量加(減)一個整數 例:p++、p--、p+i、p-=I等

2、指針變量賦值

將一個變量地址賦給一個指針變量。 p=&a; p1=p2;

3、指針變量可以有空值,即該指針變量不指向任何變量。 如 :

p=NULL;

4、兩個指向同一數組元素的指針變量可以相減

5、兩個指向同一數組的指針變量可作關系運算

習題舉例:

習題10.4

有n個整數,使其前面各數順序向右移m個位置,最后m個數變成最前面m個數。寫一函數實現以上功能,在主函數中輸入n個整數,并輸出調整后的n個數。

main() { int number[20],n,m,I;

printf(“How many number?”);

scanf(“%d”,&n);

printf(“Input %d number: ”,n);

for( i=0; i

scanf(“%d”,&number[i]);

printf(“How many place you want to move?”);

scanf(“%d”,&m);

move(number, n, m);

printf(“Now,they are: ”);

for( i=0; i

printf(“%d”, number[i]); } move(int array[20], int n, int m) { int *p,array_end;

array_end = *(array+n-1);

for(p= array+n-1; p>array; p--)

*p= *(p-1);

*array=array_end;

m--;

if(m>0) move(array, n, m); }

習題10.5 有n個人圍成一圈,順序排號。從第一個人開始報數(從1到3報數),凡報到3的人退出圈子,問最后留下的是原來第幾號的那位。 程序: main() { int i, k, m, n, num[50], *p;

printf(“Input number of person:n=”);

scanf(“%d”,&n);

p=num;

for( i=0; i

*(p+i) = i+1;

i=0; k=0; m=0;

while ( m

{ if( *(p+i)!=0) k++;

if(k==3)

{ *(p+i)=0; k=0; m++; }

i++;

if( i= =n) i=0;

}

while(*p==0) p++;

printf(“The last one is NO.%d ”,*p);

}

習題10.6

寫出一個函數,求一個字符串的長度。在main函數中輸入字符串,并輸出其長度。 main() { int len;

char *str[20];

printf(“Input string:”);

scanf(“%s”, str);

len=length(str);

printf(“The length of string is %d.”,len); }

length(char *p) { int n;

n=0;

while(*p!=„??)

{ n++;

p++;

}

return(n); } 習題10.7

有一字符串,包含n個字符。寫一個函數,將此字符串中從第m個字符開始的全部字符復制成為另一個字符串。 main() { int m;

char *str1[20],*str2[20];

printf(“Input string:”);

gets(str1);

printf(“Which character that begin to copy?”);

scanf(“%d”,&m);

if (strlen(str1)

printf(“Input error!”);

else { copystr(str1,str2,m);

printf(“result:%s”,str2);

} }

copystr(char *p1, char *p2, int m) { int n;

n=0;

while( n

{n++ ;

p1++ ;

}

while( *p1!=„?? )

{ *p2 = *p1 ;

p1++ ; p2++ ;

}

*p2=„??; }

習題10.9 寫一個函數,將3×3的矩陣轉置。 main() { int a[3][3],*p, i;

printf(“Input matrix: ”);

for( i=0; i<3; i++) scanf(“%d %d %d”, &a[i][0], &a[i][1] , &a[i][2]);

p=&a[0][0];

move(p);

printf(“Now,matrix: ”);

for( i=0; i<3; i++)

printf(“%d %d %d”,&a[i][0], &a[i][1], &a[i][2]);

} move(int *pointer) { int i, j, t;

for( i=0; i<3; i++)

for( j=i; j<3; j++)

{ t= *(pointer+ 3*i + j);

*(pointer+ 3*i +j) = *(pointer+ 3*j + i);

*(pointer+3*j + i )=t;

}

} 習題10.16

輸入一個字符串,內有數字和非數字字符,如:

a123x456 17960?302tab5876 將其中連續的數字作為一個整數,依次存放到一數組a中。例如123放在a[0]中,456放在a[1]中……統計共有多少個整數,并輸出這些數。 #include main() { char str[50], *pstr ;

int i, j, k, m, e10, digit, ndigit, a[10], *pa;

printf(“Input a string: ”);

gets(str);

printf(“ ”);

pstr=&str[0];

pa=&a[0];

ndigit = 0; i = 0; j=0;

while( *(pstr+i)!=„??)

{ if( (*( pstr+i )>=„0?)&&(*( pstr+i )<=„9?) ) j++;

else { if( j>0 )

{ digit = *(pstr+i-1)-48;

k=1;

while( k

{ e10=1;

for(m=1; m<=k; m++) e10 =e10*10;

digit =digit+(*(pstr+i-k)-48)*e10;

k++;

}

*pa=digit; ndigit++;

pa++;

j=0;

}

}

i++;

}

printf(“There are %d numbers in this line.They are: ”,ndigit );

j=0;

pa=&a[0];

for( j=0; j

printf(“%d”, *(pa+j));

printf(“ ”); } 步驟三 課堂小結

本課主要講了一些習題,希望通過這些例子加深對指針的了解,看到指針在程序設計中的重要應用。同學們課后需要多看、多想、多練,逐步去體會指針這一重要的概念。 步驟四 布置作業

上一篇:地理汶川大地震范文下一篇:低碳與生活教案范文

91尤物免费视频-97这里有精品视频-99久久婷婷国产综合亚洲-国产91精品老熟女泄火