第十章德育主体范文

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--等运算是无意义的。

二、用指向函数的指针作函数参数

函数的参数可以是变量、指向变量的指针变量、数组名、指向数组的指针变量等。现介绍指向函数的指针也可以作为参数,以便实现函数地址的传递,也就是将函数名传给形参。

它的原理可以简述如下:有一个函数(假设函数为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函数的参数。可写成:

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(“ ”); } 步骤三 课堂小结

本课主要讲了一些习题,希望通过这些例子加深对指针的了解,看到指针在程序设计中的重要应用。同学们课后需要多看、多想、多练,逐步去体会指针这一重要的概念。 步骤四 布置作业

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