《C 语言程序设计 》 课程教学方法探讨 

35
C C 语语语语语语 语语语语语语语语 语语语语语语 语语语语语语语语 语语语语语语 语语语语语语 语语语语语语 语语语语语语 语语语 语语语 Email: [email protected] Email: [email protected] 语语语语13707 13707 103274 103274

description

《C 语言程序设计 》 课程教学方法探讨 . 华中师范大学 计算机科学系. 王敬华. Email: [email protected] 手 机: 13707103274. 讨论提纲:. 一、 C 语言课程教学存在的问题 二、 C 语言课程研究型教学方法的探讨 三、 C 语言课程教学重、难点及解决方法. 一、 C 语言课程教学存在的问题. 教师方面: 教学内容与教学时数之间的矛盾 教师的综合业务水平有待提高 教学方法、方式陈旧 重课堂教学,轻实验教学 学生方面: 学习目的不明,动力不足 逻辑思维能力较弱,想象空间较窄 初学者易产生厌学情绪 - PowerPoint PPT Presentation

Transcript of 《C 语言程序设计 》 课程教学方法探讨 

《《 CC 语言程序设计》课程教学方法探讨语言程序设计》课程教学方法探讨  

华中师范大学华中师范大学计算机科学系计算机科学系 王敬华王敬华

Email: [email protected] Email: [email protected] 手 机: 手 机: 1370710327413707103274

讨论提纲:讨论提纲:一、一、 CC 语言课程教学存在的问题语言课程教学存在的问题二、二、 CC 语言课程研究型教学方法的探讨语言课程研究型教学方法的探讨三、三、 CC 语言课程教学重、难点及解决方法语言课程教学重、难点及解决方法

一、一、 CC 语言课程教学存在的问题语言课程教学存在的问题 教师方面:教师方面:

教学内容与教学时数之间的矛盾教学内容与教学时数之间的矛盾 教师的综合业务水平有待提高教师的综合业务水平有待提高 教学方法、方式陈旧教学方法、方式陈旧 重课堂教学,轻实验教学重课堂教学,轻实验教学

学生方面:学生方面: 学习目的不明,动力不足学习目的不明,动力不足 逻辑思维能力较弱,想象空间较窄逻辑思维能力较弱,想象空间较窄 初学者易产生厌学情绪初学者易产生厌学情绪 重教轻学,重理论轻实践 重教轻学,重理论轻实践 考试能力强,编程能力弱考试能力强,编程能力弱

二、二、 CC 语言课程研究型教学方法的探讨语言课程研究型教学方法的探讨

11 、什么是研究型教学?、什么是研究型教学?22 、教学模式对人才培养质量的影响、教学模式对人才培养质量的影响33 、研究型教学与传统教学的区别、研究型教学与传统教学的区别44 、、 CC 语言课程研究型教学实施方案语言课程研究型教学实施方案

研究型研究型教教学学模式是相对于以单向性知识传授为主的教学模模式是相对于以单向性知识传授为主的教学模式提出的,是指教师以课程内容和学生的学识积累为基础,引式提出的,是指教师以课程内容和学生的学识积累为基础,引导学生创造性地运用知识和能力,自主地导学生创造性地运用知识和能力,自主地发现问题发现问题、、研究问题研究问题和和解决问题解决问题,在研讨中,在研讨中积累知识积累知识、、培养能力培养能力和和锻炼思维锻炼思维的新型的新型教学模式。教学模式。

11 、什么是研究型教学?、什么是研究型教学?

研究型教学的要点:研究型教学的要点: 在于极大地引起学生对学科的在于极大地引起学生对学科的兴趣兴趣,拓宽学生的,拓宽学生的视野视野,,提高学生的学习提高学生的学习积极性积极性,从而对学科进行比较深入地探究、,从而对学科进行比较深入地探究、研究,最终使得学生能够有所研究,最终使得学生能够有所发现、发明和创造发现、发明和创造。。

研究型教学的要点:研究型教学的要点: 在于极大地引起学生对学科的在于极大地引起学生对学科的兴趣兴趣,拓宽学生的,拓宽学生的视野视野,,提高学生的学习提高学生的学习积极性积极性,从而对学科进行比较深入地探究、,从而对学科进行比较深入地探究、研究,最终使得学生能够有所研究,最终使得学生能够有所发现、发明和创造发现、发明和创造。。

22 、教学模式对人才培养质量的影响、教学模式对人才培养质量的影响

编写程序

编写程序

实际问题

实际问题

输出结果

输出结果

教学培养

教学培养

大一新生

大一新生

毕业生

毕业生

计算机解决实际问题流程:计算机解决实际问题流程:

大学人才培养流程:大学人才培养流程:

数据结构数据结构++

算法算法

数据结构数据结构++

算法算法

结果对(好、结果对(好、较好)或结果较好)或结果

错错

结果对(好、结果对(好、较好)或结果较好)或结果

错错

学生生源学生生源++

教学模式教学模式

学生生源学生生源++

教学模式教学模式

合格(好、较合格(好、较好)或不合格好)或不合格合格(好、较合格(好、较好)或不合格好)或不合格

传统教学模式、传统教学模式、研究型教学模式研究型教学模式传统教学模式、传统教学模式、研究型教学模式研究型教学模式

家庭家庭 社会社会

33 、研究型教学与传统教学的区别、研究型教学与传统教学的区别传统教学模式传统教学模式 研究型教学模式研究型教学模式

教学理念教学理念 TO THEMTO THEM WITH THEM WITH THEM 或或 BY THEMBY THEM

教学目标和重点教学目标和重点 知识传承知识传承 学生能力与整体素质的培养与开发学生能力与整体素质的培养与开发

教学主体教学主体 教师教师 学生(教师起着主导作用,是学习学生(教师起着主导作用,是学习情景的设计者、推动者和控制者,情景的设计者、推动者和控制者,教师通过与学生一起探究知识来共教师通过与学生一起探究知识来共同学习)同学习)

教学考核教学考核 注重学生知识的掌握 ,单纯注重学生知识的掌握 ,单纯以知识为考察的评价具有暂时以知识为考察的评价具有暂时性,预测性不强性,预测性不强

全面考察学生的知识、技能、能力全面考察学生的知识、技能、能力与行为,评价具有相对稳定性和可与行为,评价具有相对稳定性和可预测性预测性

教师角色教师角色 单一的知识传授者(单一的知识传授者( InstructorInstructor ) ) 学习的推动者(学习的推动者( FacilitatorFacilitator ) ) 最终转变为学习的指导者(最终转变为学习的指导者( MentorMentor ) )

讲授内容讲授内容 全面而细致 全面而细致 少而精、宽而新少而精、宽而新 ,突出核心的知识点

互动性互动性 差差 强强

课堂讨论课堂讨论 少或没有少或没有 较多较多

成绩占比成绩占比 期末至少占期末至少占 60%60% 以上以上 期末可占期末可占 40%40% 以下,重点是平时以下,重点是平时

将知识传授将知识传授给他们 给他们

将知识传授将知识传授给他们 给他们 跟他们一起跟他们一起

学 学 跟他们一起跟他们一起

学 学 通过他们自通过他们自己来学己来学

通过他们自通过他们自己来学己来学

44 、、 CC 语言课程研究型教学实施方案语言课程研究型教学实施方案(( 11 )加强学生研究型教学理念的培养)加强学生研究型教学理念的培养(( 22 )编制详细的研究型教学设计方案)编制详细的研究型教学设计方案(( 33 )建立严格的学生考核机制)建立严格的学生考核机制(( 44 )转变传统教学方式)转变传统教学方式(( 55 )以学生为导向,加强教学方法的改革)以学生为导向,加强教学方法的改革(( 66 )实施教学手段多样化)实施教学手段多样化(( 77 )建立与研究型教学相适应的实验教学新模式)建立与研究型教学相适应的实验教学新模式(( 88 )建立定期的课外讨论机制)建立定期的课外讨论机制(( 99 )加强课后练习,巩固对课本知识的把握)加强课后练习,巩固对课本知识的把握

44 、、 CC 语言课程研究型教学实施方案语言课程研究型教学实施方案(( 11 )加强学生研究型教学理念的培养)加强学生研究型教学理念的培养  研究型教学包含教师和学生两大主体,从字面上来理解研究型教学包  研究型教学包含教师和学生两大主体,从字面上来理解研究型教学包含两个方面的内容:含两个方面的内容:

研究型教研究型教  即主讲老师如何从传统的授课模式中走出来,对传统单一的授课模式  即主讲老师如何从传统的授课模式中走出来,对传统单一的授课模式进行大胆的改进和探索,以建立引导学生创造性地运用知识和能力,自主进行大胆的改进和探索,以建立引导学生创造性地运用知识和能力,自主地发现问题、研究问题和解决问题,在研讨中积累知识、培养能力和锻炼地发现问题、研究问题和解决问题,在研讨中积累知识、培养能力和锻炼思维的新型授课模式,这是主讲教师应重点研究的内容;思维的新型授课模式,这是主讲教师应重点研究的内容;

研究型学研究型学  即学生如何从传统的被动式或压迫式学习方式中解放出来,以建立能  即学生如何从传统的被动式或压迫式学习方式中解放出来,以建立能够适应新的授课模式,能够提高学生自主学习及创新能力的新的学习模式够适应新的授课模式,能够提高学生自主学习及创新能力的新的学习模式和学习方法,这是广大学生需思考的内容和学习方法,这是广大学生需思考的内容

44 、、 CC 语言课程研究型教学实施方案语言课程研究型教学实施方案(( 22 )编制详细的研究型教学设计方案)编制详细的研究型教学设计方案    《C语言程序设计研究型教学课程设计方案》《C语言程序设计研究型教学课程设计方案》是进行研是进行研究型教学具体实施的主线,它相当于一场演出的节目单,老究型教学具体实施的主线,它相当于一场演出的节目单,老师是导演和主持人,是场景的设计者和组织者,学生是演员师是导演和主持人,是场景的设计者和组织者,学生是演员是主角。是主角。

  主要内容包括:  主要内容包括:

教学日期、教学时数、教学内容、讨论主题、实验内容、教学日期、教学时数、教学内容、讨论主题、实验内容、作业布置、教学方法和教学手段。作业布置、教学方法和教学手段。

    

44 、、 CC 语言课程研究型教学实施方案语言课程研究型教学实施方案(( 33 )建立严格的学生考核机制)建立严格的学生考核机制

 建立学生学习、研究小组 建立学生学习、研究小组

   分组原则:小组内部异质化    分组原则:小组内部异质化 ,, 小组之间同质化 小组之间同质化  建立每个学生平时学习成绩档案 建立每个学生平时学习成绩档案

《C语言程序设计》研究型课程学生平时考评得分一览表

学生平时表现与对应分值一览表学生平时表现与对应分值一览表 平时表现 平时表现 分值(每次) 分值(每次)

课堂提问或发表不同意见 课堂提问或发表不同意见 11

课堂主动回答问题 课堂主动回答问题 11

课堂主题讨论(主讲) 课堂主题讨论(主讲) 55

主动查阅或收集学习资料 主动查阅或收集学习资料 22

平时上交课堂布置作业 平时上交课堂布置作业 33

平时上交课外布置作业 平时上交课外布置作业 33

课外主题讨论(主讲) 课外主题讨论(主讲) 55

课外小论文 课外小论文 55

读书笔记 读书笔记 55

旷课一次 旷课一次 -3-3

44 、、 CC 语言课程研究型教学实施方案语言课程研究型教学实施方案(( 33 )建立严格的学生考核机制)建立严格的学生考核机制

 制 制定公平合理的成绩评定方案定公平合理的成绩评定方案    学期总评成绩 学期总评成绩 = = 平时成绩 平时成绩 × 70% + × 70% + 期末考试成绩 期末考试成绩 × 30× 30%% 平时成绩 平时成绩 = = 基数分 基数分 + + 小组奖惩分 小组奖惩分 + + 个人在全班中的奖个人在全班中的奖惩分 惩分 + + 个人在小组内的奖惩分个人在小组内的奖惩分 其中:其中:  小组奖惩分   小组奖惩分 == (小组得分 (小组得分 - - 小组平均分)小组平均分) * d1* d1  个人在全班中的奖惩分   个人在全班中的奖惩分 == (个人分值 – 全班个人平均分)(个人分值 – 全班个人平均分) * * d2d2  个人在小组内的奖惩分   个人在小组内的奖惩分 == (个人分值 – 小组内个人平均分)(个人分值 – 小组内个人平均分)* d3* d3  基数分可定义为  基数分可定义为 8080 ,, d1,d2,d3d1,d2,d3 为调整系数,其值均小于为调整系数,其值均小于 11 ,,可设定可设定 d1 = 0.35d1 = 0.35 ,, d2 = 0.25d2 = 0.25 ,, d3 = 0.3d3 = 0.3 。。

      

44 、、 CC 语言课程研究型教学实施方案语言课程研究型教学实施方案(( 44 )转变传统教学方式)转变传统教学方式

““ 填鸭式”学填鸭式”学习习““ 填鸭式”学填鸭式”学习习

““ 讨论式”学讨论式”学习习““ 讨论式”学讨论式”学习习

    具体做法:具体做法:     11 、、每次授课结束前,布置预习思考题,共布置每次授课结束前,布置预习思考题,共布置 1212 章预习章预习

思考题(共思考题(共 150150 多道题)多道题)。要求学生在课下充分预习。课上围绕思。要求学生在课下充分预习。课上围绕思考题展开讨论:每次课分组讨论考题展开讨论:每次课分组讨论 1-21-2 次,每次次,每次 3-53-5 分钟;学生课堂分钟;学生课堂讨论、发言或回答问题的总时间总计约占总学时的讨论、发言或回答问题的总时间总计约占总学时的 18%18% 。。

     22 、、随机抽查回答问题与各组指派同学回答问题相结合随机抽查回答问题与各组指派同学回答问题相结合 。每。每位同学都有机会。评价回答问题的水平不以答案的正确性为唯一依位同学都有机会。评价回答问题的水平不以答案的正确性为唯一依据,而更注重表达过程的清晰度和逻辑性,尤其鼓励问题回答者阐据,而更注重表达过程的清晰度和逻辑性,尤其鼓励问题回答者阐述自己的观点或提出预习中的疑惑之处。统计表明,学生回答问题述自己的观点或提出预习中的疑惑之处。统计表明,学生回答问题次数多者达次数多者达 1010 多次,平均水平有多次,平均水平有 6-86-8 次。次。

     33 、、让学生分组主讲课程中的部分章节。让学生分组主讲课程中的部分章节。     44 、、以上在课堂教学过程中的学生表现按评分标准将其分值以上在课堂教学过程中的学生表现按评分标准将其分值

记入到学生平时成绩档案中记入到学生平时成绩档案中。。

    具体做法:具体做法:     11 、、每次授课结束前,布置预习思考题,共布置每次授课结束前,布置预习思考题,共布置 1212 章预习章预习

思考题(共思考题(共 150150 多道题)多道题)。要求学生在课下充分预习。课上围绕思。要求学生在课下充分预习。课上围绕思考题展开讨论:每次课分组讨论考题展开讨论:每次课分组讨论 1-21-2 次,每次次,每次 3-53-5 分钟;学生课堂分钟;学生课堂讨论、发言或回答问题的总时间总计约占总学时的讨论、发言或回答问题的总时间总计约占总学时的 18%18% 。。

     22 、、随机抽查回答问题与各组指派同学回答问题相结合随机抽查回答问题与各组指派同学回答问题相结合 。每。每位同学都有机会。评价回答问题的水平不以答案的正确性为唯一依位同学都有机会。评价回答问题的水平不以答案的正确性为唯一依据,而更注重表达过程的清晰度和逻辑性,尤其鼓励问题回答者阐据,而更注重表达过程的清晰度和逻辑性,尤其鼓励问题回答者阐述自己的观点或提出预习中的疑惑之处。统计表明,学生回答问题述自己的观点或提出预习中的疑惑之处。统计表明,学生回答问题次数多者达次数多者达 1010 多次,平均水平有多次,平均水平有 6-86-8 次。次。

     33 、、让学生分组主讲课程中的部分章节。让学生分组主讲课程中的部分章节。     44 、、以上在课堂教学过程中的学生表现按评分标准将其分值以上在课堂教学过程中的学生表现按评分标准将其分值

记入到学生平时成绩档案中记入到学生平时成绩档案中。。

44 、、 CC 语言课程研究型教学实施方案语言课程研究型教学实施方案(( 55 ))以学生为导向,加强教学方法的改革以学生为导向,加强教学方法的改革

教师的着眼点:引导学生走向知识,而不是带着知识走向学生教师的着眼点:引导学生走向知识,而不是带着知识走向学生 教师的着眼点:引导学生走向知识,而不是带着知识走向学生教师的着眼点:引导学生走向知识,而不是带着知识走向学生

善于培养兴趣善于培养兴趣 善于总结归纳 善于总结归纳 善于互动交流 善于互动交流 善于发现问题 善于发现问题 善于合理施压善于合理施压

善于培养兴趣善于培养兴趣 善于总结归纳 善于总结归纳 善于互动交流 善于互动交流 善于发现问题 善于发现问题 善于合理施压善于合理施压

“ “ 案例教学法”贯穿教学全过程案例教学法”贯穿教学全过程 “ “ 任务驱动法”引导学生学习 任务驱动法”引导学生学习 “ “ 负反馈教学法”解决学生学习中问题 负反馈教学法”解决学生学习中问题 以“算法为中心”实现问题求解 以“算法为中心”实现问题求解 用“多媒体”教案扩大课堂信息量 用“多媒体”教案扩大课堂信息量

“ “ 案例教学法”贯穿教学全过程案例教学法”贯穿教学全过程 “ “ 任务驱动法”引导学生学习 任务驱动法”引导学生学习 “ “ 负反馈教学法”解决学生学习中问题 负反馈教学法”解决学生学习中问题 以“算法为中心”实现问题求解 以“算法为中心”实现问题求解 用“多媒体”教案扩大课堂信息量 用“多媒体”教案扩大课堂信息量

良好的开端 良好的开端 扎实的基础扎实的基础 能力的提高能力的提高

44 、、 CC 语言课程研究型教学实施方案语言课程研究型教学实施方案(( 66 )实施教学手段多样化)实施教学手段多样化 精心制作了一套与教材配套的数据结构精心制作了一套与教材配套的数据结构 CAICAI 课件课件 建立师生交流平台。建立师生交流平台。

C语言学习和答疑的C语言学习和答疑的 QQQQ 群,群,申请电子邮箱:申请电子邮箱: [email protected]学习资料上传下载的公共邮:学习资料上传下载的公共邮: [email protected]

利用利用 internetinternet 网络平台,建立了《网络平台,建立了《 CC 语言程序设计》教学语言程序设计》教学博客博客

44 、、 CC 语言课程研究型教学实施方案语言课程研究型教学实施方案(( 77 ))建立与研究型教学相适应的实验教学新模式建立与研究型教学相适应的实验教学新模式

减少验证型实验比例,增加研究型实验和综合性实验的比例 减少验证型实验比例,增加研究型实验和综合性实验的比例 建立以小组为单位的实验完成机制 建立以小组为单位的实验完成机制 加强实验报告的规范 加强实验报告的规范 实验总结 实验总结 鼓励实验动手能力的较强的同学自己设计实验项目 鼓励实验动手能力的较强的同学自己设计实验项目

44 、、 CC 语言课程研究型教学实施方案语言课程研究型教学实施方案(( 88 ))建立定期的课外讨论机制建立定期的课外讨论机制

星期一发布讨论主题 星期一发布讨论主题 星期一发布讨论主题 星期一发布讨论主题

以小组为单位进行准备 以小组为单位进行准备 以小组为单位进行准备 以小组为单位进行准备

专题讨论 专题讨论 专题讨论 专题讨论

进行点评 进行点评 进行点评 进行点评

表现分值入档 表现分值入档 表现分值入档 表现分值入档

44 、、 CC 语言课程研究型教学实施方案语言课程研究型教学实施方案(( 99 ))加强课后练习,巩固对课本知识的把握加强课后练习,巩固对课本知识的把握

  除了每堂课布置一些课后练习题外,我还为每章编制  除了每堂课布置一些课后练习题外,我还为每章编制了相应的自测试卷,本学期共编制了相应的自测试卷,本学期共编制 1212 套自测试卷,每章套自测试卷,每章授课完毕均将自测试卷上传到学生公共邮箱共同学们下载,授课完毕均将自测试卷上传到学生公共邮箱共同学们下载,并要求学生定时上交作业和自测试卷,同时进行认真的批并要求学生定时上交作业和自测试卷,同时进行认真的批改,并安排时间进行习题课的组织与讲解改,并安排时间进行习题课的组织与讲解 . .

三、三、 CC 语言课程教学重、难点及解决方法语言课程教学重、难点及解决方法

1、教材选取1、教材选取2、学时安排2、学时安排3、学前引导3、学前引导4、课程教学重、难点及分析4、课程教学重、难点及分析

1、教材的选取1、教材的选取

主教材主教材

CC 语言程序设计教程(第二版)语言程序设计教程(第二版) 王敬华编著 王敬华编著 清华大学出版社清华大学出版社 实验教材实验教材

CC 语言程序设计教程(第二版)语言程序设计教程(第二版)习题解答与实习题解答与实验指导验指导 王敬华编著 清华大学出版社王敬华编著 清华大学出版社

教材特点:教材特点: 站在计算机内存的角度来介绍站在计算机内存的角度来介绍 CC 语言的数据类型。语言的数据类型。

从正反两方面来介绍从正反两方面来介绍 CC 语言语法。 语言语法。

加深对加深对 CC 语言库函数的学习 语言库函数的学习

以以 VCVC 编译环境为基础同时兼顾其它编译环境为基础同时兼顾其它 CC 语言版本。 语言版本。

以大量的图表来阐述知识内容 以大量的图表来阐述知识内容

配备大量经典实例程序,对每行语句作详尽的解释 配备大量经典实例程序,对每行语句作详尽的解释

注重章节学习意义,提出章节学习目标 注重章节学习意义,提出章节学习目标

配备大量的习题,习题类型丰富,难度各异,具有广泛的代表性和实战性 配备大量的习题,习题类型丰富,难度各异,具有广泛的代表性和实战性

配备有完美的、非常适合教学的课件配备有完美的、非常适合教学的课件

配备有习题解答及实验指导参考书配备有习题解答及实验指导参考书

2、学时安排 2、学时安排 (课堂:(课堂: 5454 学时,实验:学时,实验: 3636 学学时)时)序号序号 课堂授课内容课堂授课内容 学时学时 授课方法授课方法 备注备注1 C 语言程序设计预备知识 3 理论课2 C 语言程序设计基础 2 理论课3 基本数据类型、运算符与表达式 6 理论课4 基本输入输出和 顺序程序设计 4 理论课5 选择结构程序设计 3 理论课6 循环结构程序设计 3 理论课7 数组 5 理论课8 函数 6 理论课9 指针 9 理论课10 预处理命令 2 理论课11 复杂数据类型 5 理论课12 文件操作 4 理论课13 习题课、复习课 2 理论课

33 、学前引导、学前引导 C语言是什么?为何要学C语言?C语言是什么?为何要学C语言? C语言在整个计算机课程体系中的作用与地位C语言在整个计算机课程体系中的作用与地位 学完C语言=会编程序?学完C语言=会编程序? C与C与 JAVAJAVA 、C、C ++++ 、C#之间的关系、C#之间的关系

4、课程教学重、难点及分析4、课程教学重、难点及分析CC 语言内容主要包含两个大的方面:数据类型、程序结构语言内容主要包含两个大的方面:数据类型、程序结构

(( 11 )) CC 语言中数据类型的正确理解和把握语言中数据类型的正确理解和把握 牢牢抓住数据在内存中存储与变化这条主线牢牢抓住数据在内存中存储与变化这条主线

简单类型数据在内存中存储与变化 简单数据类型的表示范围 有符号数与无符号数

例:十六进制整数在内存中的表示例:十六进制整数在内存中的表示•-- 0X8AB6:0X8AB6:对于对于 1616 位的内存单元:位的内存单元:

符号位符号位 (( 表示表示负负 ))

(+0X8AB6)(+0X8AB6) 补补 = = 00 1000 1010 1011 0110 1000 1010 1011 0110

(-0X8AB6)(-0X8AB6) 补补 = = 11 0111 0101 0100 1010 0111 0101 0100 1010

按位求反,末位加按位求反,末位加 11

01001010

01110101

低地址

高地址

十六进制数十六进制数 -0X8AB6-0X8AB6 两个字节的内存实际存放形式两个字节的内存实际存放形式

低字节

高字节

符号位表示正符号位表示正

取取低低1616位位真值为:真值为: +30026 !+30026 !真值为:真值为: +30026 !+30026 !

对于对于 3232 位的内存单元:位的内存单元: (+0X8AB6)(+0X8AB6) 补补 = = 00000 0000 0000 0000 1000 1010 1011 0110000 0000 0000 0000 1000 1010 1011 0110

按位求反,末位加按位求反,末位加 11

(-0X8AB6)(-0X8AB6) 补补 = = 11111 1111 1111 1111 0111 0101 0100 1010111 1111 1111 1111 0111 0101 0100 1010

符号位符号位 (( 表示表示负负 ))

01001010

01110101

11111111

11111111

低字节

高字节

十六进制数十六进制数 -0X8AB6-0X8AB6 四个字节的内存实际存放形式四个字节的内存实际存放形式

低地址

高地址

符号位表示负符号位表示负

真值为:真值为: -35510 -35510 !!

真值为:真值为: -35510 -35510 !!

【例】变量的存储范围【例】变量的存储范围

#include <stdio.h>#include <stdio.h> void main ( )void main ( ){{ char ch;char ch; int x;int x;

ch = 80 + 50;ch = 80 + 50; x = 80 + 50;x = 80 + 50; printf ("ch = %d\n", ch);printf ("ch = %d\n", ch); printf ("x = %d\n", x);printf ("x = %d\n", x);}}

ch = -126ch = -126x = 130x = 130ch = -126ch = -126x = 130x = 130

为什为什么么 ??????为什为什么么 ??????

十进制数 对应的机器数(补码)

80 80 00 0 0 00 0 0 0 0 0 0 0 1 0 1 0 0 0 0 ch 0 0 0 0 0 1 0 1 0 0 0 0 ch

+ + 50 50 00 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 1 1 0 0 1 0 0 1 1 0 0 1 0

——————————————————————————————————

00 0 0 00 0 0 0 0 0 0 10 0 0 0 1 0 0 0 0 0 1 00 0 0 0 0 1 0

1 0 0 0 0 0 1 0

符号位符号位符号位符号位

真值:真值: -12-1266

真值:真值: -12-1266

例:表达式中有符号数与无符号数的计算问题例:表达式中有符号数与无符号数的计算问题

运行结果:运行结果:c = 2147483598c = 2147483598 (( VCVC下) 下) c = 32718c = 32718 (( BCBC下) 下)

运行结果:运行结果:c = 2147483598c = 2147483598 (( VCVC下) 下) c = 32718c = 32718 (( BCBC下) 下)

运行结果:运行结果:c = -50c = -50 (( VCVC 下) 下) c = -50c = -50 (( BCBC 下) 下)

运行结果:运行结果:c = -50c = -50 (( VCVC 下) 下) c = -50c = -50 (( BCBC 下) 下)

#include <stdio.h> #include <stdio.h>

void main ( ) void main ( ) { { unsigned int a = 30;unsigned int a = 30; int b = -130, c; int b = -130, c;

c = (a + b) / 2; c = (a + b) / 2; printf("c = %d\n", c); printf("c = %d\n", c); } }

#include <stdio.h> #include <stdio.h>

void main ( ) void main ( ) { { unsigned int a = 30;unsigned int a = 30; int b = -130, c; int b = -130, c;

c = (a + b) / 2; c = (a + b) / 2; printf("c = %d\n", c); printf("c = %d\n", c); } }

程序一程序一程序一程序一 #include <stdio.h> #include <stdio.h>

void main ( ) void main ( ) { { int b = -130, c; int b = -130, c;

c = (30 + b) / 2; c = (30 + b) / 2; printf("c = %d\n", c); printf("c = %d\n", c); } }

#include <stdio.h> #include <stdio.h>

void main ( ) void main ( ) { { int b = -130, c; int b = -130, c;

c = (30 + b) / 2; c = (30 + b) / 2; printf("c = %d\n", c); printf("c = %d\n", c); } }

程序二程序二程序二程序二

Why?Why?Why?Why?

  对于表达式对于表达式 (a + b) / 2(a + b) / 2 在运算之前,在运算之前,考虑到变量考虑到变量 aa为无符号整型,因此为无符号整型,因此 bb 必必须被转化为无符号整型,即须被转化为无符号整型,即 bb被转化为被转化为42949671664294967166 (( VCVC 下,下, -130-130 的四个字节的四个字节的补码,最高位为数据位)或的补码,最高位为数据位)或 6540665406

(( BCBC 下,下, -130-130 的两个字节的补码,最的两个字节的补码,最高位为数据位),所以高位为数据位),所以(( a + ba + b )) / 2/ 2

其实就是其实就是 (30 + 4294967166) / 2 = 214748(30 + 4294967166) / 2 = 21474835983598 (( VCVC 下下)或)或(( 30 + 6540630 + 65406 )) / 2 = / 2 =

3271832718 (( BCBC 下下))。。

  对于表达式对于表达式 (a + b) / 2(a + b) / 2 在运算之前,在运算之前,考虑到变量考虑到变量 aa为无符号整型,因此为无符号整型,因此 bb 必必须被转化为无符号整型,即须被转化为无符号整型,即 bb被转化为被转化为42949671664294967166 (( VCVC 下,下, -130-130 的四个字节的四个字节的补码,最高位为数据位)或的补码,最高位为数据位)或 6540665406

(( BCBC 下,下, -130-130 的两个字节的补码,最的两个字节的补码,最高位为数据位),所以高位为数据位),所以(( a + ba + b )) / 2/ 2

其实就是其实就是 (30 + 4294967166) / 2 = 214748(30 + 4294967166) / 2 = 21474835983598 (( VCVC 下下)或)或(( 30 + 6540630 + 65406 )) / 2 = / 2 =

3271832718 (( BCBC 下下))。。 Why?Why?Why?Why?

  表达式表达式 (30 + b) /2(30 + b) /2 的计的计算,因整常数算,因整常数 3030 为有符号数,为有符号数,bb与整常数之间操作时不影响与整常数之间操作时不影响bb的类型,运算结果 仍然为的类型,运算结果 仍然为 inintt型,所以型,所以 (30 + b) / 2(30 + b) / 2 其实就其实就是是 ((30 - 130) / 2 = -5030 - 130) / 2 = -50 (( VCVC 、、

BCBC 下下)。)。

  表达式表达式 (30 + b) /2(30 + b) /2 的计的计算,因整常数算,因整常数 3030 为有符号数,为有符号数,bb与整常数之间操作时不影响与整常数之间操作时不影响bb的类型,运算结果 仍然为的类型,运算结果 仍然为 inintt型,所以型,所以 (30 + b) / 2(30 + b) / 2 其实就其实就是是 ((30 - 130) / 2 = -5030 - 130) / 2 = -50 (( VCVC 、、

BCBC 下下)。)。

4、课程教学重、难点及分析4、课程教学重、难点及分析(( 22 )程序设计算法思想)程序设计算法思想(( 33 )函数的理解及参数的传递)函数的理解及参数的传递(( 44 )递归程序设计)递归程序设计

运行结果:运行结果:11 ,,22 ,, 22 ,,33 ,, 33 ,, 33 ,,

运行结果:运行结果:11 ,,22 ,, 22 ,,33 ,, 33 ,, 33 ,,

#include <stdio.h>#include <stdio.h>void print (int w);void print (int w);void main ( )void main ( ){ print ( 3 ); }{ print ( 3 ); }void print (int w)void print (int w) ////递归函数递归函数{ { int i;int i; if ( w != 0) if ( w != 0) ////递归结束条件递归结束条件 { { print (w-1);print (w-1); for (i = 1; i <= w; ++i)for (i = 1; i <= w; ++i) printf ("%d ", w);printf ("%d ", w); printf ("\n");printf ("\n"); }}}}

#include <stdio.h>#include <stdio.h>void print (int w);void print (int w);void main ( )void main ( ){ print ( 3 ); }{ print ( 3 ); }void print (int w)void print (int w) ////递归函数递归函数{ { int i;int i; if ( w != 0) if ( w != 0) ////递归结束条件递归结束条件 { { print (w-1);print (w-1); for (i = 1; i <= w; ++i)for (i = 1; i <= w; ++i) printf ("%d ", w);printf ("%d ", w); printf ("\n");printf ("\n"); }}}}

递归调用执行情况如下:递归调用执行情况如下:

主程序主程序

(1)(1)

print(w)print(w) w=3; w=3;

3

print(2);print(2);

( 1 ) w=3

top

(2) (2) 输出:输出: 3, 3, 3, 3, 33

ww

2

print(1)print(1);;

( 2 ) w=2 ( 1 ) w=3

top

(3) (3) 输出:输出: 2, 2, 22

ww1

print(0);print(0);

( 3 ) w=1 ( 2 ) w=2 ( 1 ) w=3

top

(4)(4) 输出:输出:11

ww0

( 4 ) w=0 ( 3 ) w=1 ( 2 ) w=2 ( 1 ) w=3

top

ww

(3) (3) 输出:输出: 2, 2, 22

(2) 2(1) 3

top

(4)(4) 输出:输出:11

(3) 1(2) 2(1) 3

top

(2) (2) 输出:输出: 3, 3, 3, 3, 3 3

(1 ) 3

top

返回返回

(3) 1(2) 2(1) 3

top(4) 0

结束结束

(1)(1)

4、课程教学重、难点及分析4、课程教学重、难点及分析(( 55 )变量的作用域和生存期)变量的作用域和生存期(( 66 )指针与指针变量)指针与指针变量

整型变量整型变量 ii

变量变量 i_pointeri_pointer……

......

……..

....

10102000

2004

2006

2005

2001

2002

2003

指针:指针:一个变量的地址一个变量的地址 指针变量:指针变量:专门存放变量地址的变量专门存放变量地址的变量

20002000

指针变量指针变量指针变量指针变量

整型变量整型变量 ii 的内容的内容整型变量整型变量 ii 的内容的内容

指针变量指针变量 i_pointeri_pointer 的内容的内容(( 是地址是地址 ))

指针变量指针变量 i_pointeri_pointer 的内容的内容(( 是地址是地址 ))

变量的地址变量的地址变量的地址变量的地址

指针指针指针指针

指针变量指针变量

变量变量

变量地址变量地址 (( 指针指针 ))变量地址变量地址 (( 指针指针 ))

变量值变量值变量值变量值指向指向 地址存入地址存入

指针变量指针变量

4、课程教学重、难点及分析4、课程教学重、难点及分析(( 77 )利用指针编程)利用指针编程 关键:时刻记住当前指针的位置关键:时刻记住当前指针的位置(( 88 )链表的定义及操作)链表的定义及操作

【例】 链表插入操作函数【例】 链表插入操作函数 Insert_LinkListInsert_LinkList 。。

void Insert_LinkList(NODE *head, NODE *pnew, int i) void Insert_LinkList(NODE *head, NODE *pnew, int i) {{ NODE *p;NODE *p; int j;int j; p = head;p = head; for (j = 0; j < i && p != NULL; j++) for (j = 0; j < i && p != NULL; j++) //// 将将 pp 指向要插入的第指向要插入的第 ii 个节点个节点 p = p->next;p = p->next; if (p == NULL) //if (p == NULL) // 表明链表中第表明链表中第 ii 个节点不存在个节点不存在 {{ printf ("the %d node not foundt!\n", i);printf ("the %d node not foundt!\n", i); return;return; }} pnew->next = p->next ;pnew->next = p->next ; //// 将插入节点的指针域指向第将插入节点的指针域指向第 ii 个节点的后继节个节点的后继节

点点 p->next = pnew;p->next = pnew; //// 将第将第 ii 个节点的指针域指向插入节点个节点的指针域指向插入节点}}

void Insert_LinkList(NODE *head, NODE *pnew, int i) void Insert_LinkList(NODE *head, NODE *pnew, int i) {{ NODE *p;NODE *p; int j;int j; p = head;p = head; for (j = 0; j < i && p != NULL; j++) for (j = 0; j < i && p != NULL; j++) //// 将将 pp 指向要插入的第指向要插入的第 ii 个节点个节点 p = p->next;p = p->next; if (p == NULL) //if (p == NULL) // 表明链表中第表明链表中第 ii 个节点不存在个节点不存在 {{ printf ("the %d node not foundt!\n", i);printf ("the %d node not foundt!\n", i); return;return; }} pnew->next = p->next ;pnew->next = p->next ; //// 将插入节点的指针域指向第将插入节点的指针域指向第 ii 个节点的后继节个节点的后继节

点点 p->next = pnew;p->next = pnew; //// 将第将第 ii 个节点的指针域指向插入节点个节点的指针域指向插入节点}}

headhead

7070 6565 7878 9090

∧∧

00 11 22 33 446565pnewpnew

假设假设 i = 2i = 2假设假设 i = 2i = 2

pp pp pp

4、课程教学重、难点及分析4、课程教学重、难点及分析(( 99 )文件指针与文件位置指针)文件指针与文件位置指针 文件指针文件指针是指向整个文件的,须在程序中定义说明,只是指向整个文件的,须在程序中定义说明,只

要不重新赋值,文件指针的值是不变的。要不重新赋值,文件指针的值是不变的。 文件内部的位置指针文件内部的位置指针用以指示文件内部的当前读写位置,用以指示文件内部的当前读写位置,每读写一 次,该指针均向后移动,它不需在程序中定义说明,每读写一 次,该指针均向后移动,它不需在程序中定义说明,而是由系统自动设置的。 而是由系统自动设置的。

□ □ □ □ □ □ □ □□ □ □ □ □ □ □ □文件指针文件指针

位置指针位置指针