《高级语言程序设计》学习指南.docx
《《高级语言程序设计》学习指南.docx》由会员分享,可在线阅读,更多相关《《高级语言程序设计》学习指南.docx(36页珍藏版)》请在冰豆网上搜索。
《高级语言程序设计》学习指南
《高级语言程序设计》学习指南
《高级语言程序设计》是计算机学科的专业基础课,一般是在大学一年级第一学期开设,是同学们进入大学的第一门课程。
从课程名称看,“高级语言”是定语,“程序设计”是主语,体现了本课程的重点。
学习本课程一定要抓住“程序设计”这个纲,学习的目的是学会“怎么编程序”、是培养自己的“计算思维”思想,而不是背那些C语言的符号、说明、语句等。
就是说,学习本课程主要学习程序设计思想和方法,培养基本的算法和程序设计能力、良好的程序设计风格和团队精神。
培养程序设计能力的关键是实践。
要想学好程序设计,洞悉该课程的精髓,并灵活运用;一定要重视实验课和课程设计课。
不仅要在理论课环节掌握基本的理论知识,而且还要在配套的实践环节进行实际操作。
一定要多编程序,注意培养自己找出算法、提出算法的能力,才会深入理解程序设计思想和方法,并将所学知识应用到实际中,成为程序设计高手。
大学一年级第一学期正是同学们由中学学习向大学学习进行过渡的重要阶段;要想学的好大学课程(尤其是本课程),最重要的是转变学习模式和学习方法。
大学学习更多是靠自学,强调自我管理;因此需要掌握的不仅仅是教师课上所讲内容,还有很大一部分是在课外自我学习过程中获得;相对课上有限学时的讲授,还需要额外付出2-3倍或者更多的时间进行自学;才有可能真正掌握所学课程内容。
1.课堂学习
课堂是学习《高级语言程序设计》基础理论的最好时机。
上课前,应适当浏览教材,了解课上所学内容,掌握课程梗概。
上课时,要认真听老师授课,如果遇到问题应及时提出,必要时要和教师当堂进行讨论。
需注意该课程实践性极强,教师很多情况下会直接在C语言编译环境中进行讲解,这时更需要集中精神听课,对开发环境有一个初步了解,为实践教学做好铺垫。
课后,要复习课堂内容,如果条件允许可以上机调试课堂所讲例题。
要独立认真完成作业和练习,通过习题不断深化对相关概念理解,发现薄弱环节。
遇到问题时,首先要独立思考,努力通过查阅资料解决问题。
如果自己无法解决时,可以和同学和教师进行讨论,解决问题。
通常,一个问题可以有多个解,不要局限于一个解,而要试着寻找其他解。
本课程的重点是学习程序设计,而C语言仅作为此类知识的载体。
对C语言采取“有所取、有所不取”的策略,对与学习程序设计方法密切相关部分重点介绍(例如各种控制结构、数据结构等);对与学习程序设计方法有关但不十分密切部分简单介绍(例如共用体);对与学习程序设计方法关系不大的部分根本不介绍(例如goto语句)。
因此,学习过程中要了解这一点,明确学习的重点和难点。
本课程采用“案例驱动”讲解程序设计方法,其中包括了不少程序设计的经典案例。
“案例”不是为了解释语言概念,而是从构造算法出发,以训练学生的实际编程能力为目标。
本课程采用如下图所示的教学模式,明确此模式,不仅可以帮助理解教师授课内容,同时也可以明确课后学习的基本方式。
提出有意义的问题
设计算法
分析算法特点
编出程序
课后习题
配合讲述大量例题
介绍所用语言成分
运行程序
"授之以渔"的教学模式
2.实践课程
《高级语言程序设计》是实践性极强的课程,可以说没有上机实践,就不算学习程序设计。
本课程的实践课程包括:
课堂实践、实验课、课程设计3部分有学时的实践课程;此外还开设创新实践无学时的教学环节。
课堂实践:
课堂讲授例题时,在设计出算法之后,教师会直接在计算机上编出程序、调试和运行程序、最后得到结果。
目的是让学生对程序加深理解;对实践过程有一个初步印象,初步感受和熟悉上机实验过程。
与之配套的是课后复习时,学生要自己动手演练教师课堂演示的过程,加深理解。
实验课:
在课程内容进行到一定阶段之后,开始实验课。
实验题目代码规模较小,其目的是让学生自己动手完成有目的布置的实验题目,解决一些有意义的问题,掌握解决实际问题的方法步骤,巩固理论课所学知识。
实验课采取小班授课模式,这样学生会有更多机会和教师进行面对面的交流,这种交流对于程序设计课程非常重要,可以说是事半功倍;因此一定要充分利用实验课。
由于课程时间有限,因此一定要在课前要进行预习,编写好实验所需代码;课上时间主要用于程序调试和运行。
如觉得实验题目有些难,则可以从书上例题开始,进行编译、调试和运行等环节,逐渐掌握所学知识点,而后完成实验题目。
课程设计:
课程设计在理论课程和实验课结束后进行,一般以3-5人为一个小组,完成较大的有实际价值的程序设计题目。
目的是让学生深刻体会程序开发的全过程,初步体验软件工程方法;培养学生的团队协作精神,同时强调团队工作中的个人责任。
由于是小组完成,就有做多、做少或者不做的问题;要想学的好,就必须端正态度,积极、真正地参与到开发过程中;而不是等、靠、要。
课程设计同样采取小班授课的模式,相对于实验题目,课程设计题目描述比较笼统,其中有许多内容需要自我发挥;因此与教师交流就变得十分重要,不仅有助于掌握题目具体要求,而且还可知道自己想法是否实用。
同样小组内的交流也十分重要,需要实时交流明确各自的分工和进度,才能协同完成题目。
创新实践:
创新实践以科技活动小组形式进行,由兴趣浓厚的学生自愿组成,包括:
申报并完成学校立项并给与资金资助的“大学生创新机会计划”项目、参加ACM程序设计大赛等竞赛、参与教师的科研项目、由教师指导自选题目等,培养学生的初步科研能力和创新精神。
若想参加,就必须时时关注各类通知,本着“重在参与”的理念参与活动;但是一旦参入其中,就必须认真对待,不要虎头蛇尾。
3.网络资源
作为国家精品课程,本课程网站
下边针对本课程各章的知识点、重点和难点,提出以下学习指导意见,供同学们参考。
祝大家学业进步!
第一章绪论
本章需要掌握程序、程序设计、算法、PAD图和程序执行等相关概念。
课程内容由解决“鸡兔同笼”问题为案例来驱动,问题不难(解二元一次方程),采用的消去法也是中学知识。
【例1.1】我国古代数学著作《孙子算经》提出“鸡兔同笼”问题如下:
“今有鸡兔同笼,上有三十五头,下有九十四足,问鸡兔各几何?
”。
其难点在于如何理解消元法,如何将消元法的思想和计算过程描述出来,然后翻译成C语言的代码,最终运行得到结果。
部分内容是需要记忆的,如同学习英语、法语等语言类似,很多东西需要“先记忆,再理解”;许多问题需要先放一放,在后面章节的讲述中会自然找到答案。
对VisualC++集成开发环境熟悉,不仅需要浏览教材中图文讲解,还要注意教师课堂演示。
更重要的是自己动手,可以选择以例1.1为切入点,进行练习。
本章的重点是:
把某问题的计算过程描述出来,这也是本课程的基本任务和重点。
本章乃至整个课程的难点就是“算法训练”,算法训练除了数学基础之外,靠长期积累和悟性。
大家要打好数学基础,并且要多训练,多编程序,平时多站在算法的角度思考问题。
第二章简单程序
本章以“求绿化带宽度”为案例,引入顺序程序设计思想;同时介绍如标识符、变量、常量、运算符、表达式、输入/输出等基本语言成分;其中许多内容需要记忆,虽然繁琐但不可避免;所有内容不用一次全记下来,许多随课程内容不断深入,即可在不知不觉中记住。
【例2.1】如图2.1所示,在长500m、宽300m的近似矩形的地域内保护80000m2的地块,求沿四周植树建绿化带的宽度。
“2.2语句”需要知道语句是对数据的操作,对语句的基本分类有一个大概的印象。
“2.3表达式”需要注意C语言表达式和数学中表达式的区别,尤其是在书写方面;区别‘赋值’和数学中‘=’,了解相关运算符号的意义和使用方式。
“2.4基本符号”需要知道ASCII码,理解程序中数字和字符在存储上的不同,掌握标识符的构成规则,可以灵活对程序代码添加注释。
“2.5数据”需要了解什么是数据,掌握变量和常量的基本概念和使用方式。
“2.6数据类型”需要了解数据类型的意义,掌握算数类型变量的声明和使用方式,了解混合运算规则和隐式类型转换,可以使用显示类型转换。
“2.7输入和输出”需要能灵活掌握数据输入和输出函数的使用。
上述内容需要配合课后作业、习题和实验题目,进行练习;心中需要记住:
程序代码是人类大脑思维的反映,编写代码就是将这一思维过程用计算机语言书写出来。
不要产生畏难情绪,从目前情况来看,电脑是人造的,再怎么聪明,还是不能超越人类。
本章的重点是:
C语言表达式构成及其运算规则。
表达式构成这章可以掌握,但是其运算规则可以掌握个大概,知道运算符分优先级、同级运算分“左结合”“右结合”就可以。
具体运算符可以在后续学习中逐步掌握。
第三章分支程序设计
本章重点讲述程序设计中的分支结构,贯穿始终的是以“对学生成绩判断”为案例。
【例3.1】编程序,输入某学生本学期程序设计课程成绩,判断并输出他是否及格。
【例3.4】学校曾经组织了一次“程序设计大奖赛”,规定本学期程序设计课的成绩可以根据是否在大奖赛上获奖而加5分。
编程序,计算某同学的程序设计课成绩。
【例3.8】学校曾经组织了一次“程序设计大奖赛”,规定本学期程序设计课的成绩可以根据大奖赛的成绩适度加分。
加分规则是参赛者加5分,三等奖加15分,二等奖加20分,一等奖加30分,总分不超过100分。
编程序,计算某同学的程序设计课成绩。
分支结构对应实际生活中的“选择”这一行为;经提炼和抽象,分为单分支、双分支和多分支三种结构,分别对应‘if语句’、‘if-else语句’和‘switch-case语句’。
“3.1双分支语句”需要掌握分支语句中判断条件,分支执行的顺序,以及程序书写的格式。
“3.2单分支”需要掌握单分支语句的执行过程,了解else的二义性问题,知道如何避免此问题。
“3.3逻辑判断”需要掌握什么是布尔类型和与之相关的关系运算和逻辑运算。
“3.4多分支”需要掌握“switch-case”语句的执行过程,尤其是其中“break语句”对程序执行过程的影响。
“3.5枚举类型”需要理解枚举类型与整数类型的联系和区别,并能灵活使用。
本章重点是掌握单双分支结构及描述这种结构的if语句。
例3.7一元二次方程求解,是分支语句的经典例题,建议仔细研读,并能上机调试运行。
一、双分支结构在流程图中表示成类似下图的形式,PAD表示形式如下图。
其中:
●B是条件;
●S1、S2都是具体操作语句。
其含义是:
1.首先计算条件B,
2.若B的值为true(真),则执行语句S1规定的操作,然后跳过S2,执行后继操作;
3.否则B值为false(假),则跳过S1,执行语句S2规定的操作,然后执行后继操作。
双分支逻辑控制结构在C中用双分支if语句描述,形式是:
if(B)
S1
else
S2
二、单分支的逻辑判断结构在流程图中用下图表示,在PAD图中用下图的形式表示。
其中:
●B是一个条件表达式;
●S是一个语句。
它的含义是:
计算B的值,若B为true则执行语句S规定的操作,然后执行后继操作;否则什么也不执行,跳过语句S,直接去执行后继操作。
单分支的逻辑控制结构用单分支if语句表示,形式是
if(B)
S
第四章循环程序设计
本章以“计算平均学习成绩”为案例,讲授程序设计中的循环结构。
“循环”对应实际生活中的“重复”或者“反复”操作过程。
经抽象和精炼后分为“先判断条件循环”和“后判断条件循环”两大类;C语言中提供了“while语句”、“do-while语句”和“for语句”实现循环操作。
【例4.1】某评估单位要对学生的学习情况进行评估,需要计算每个学生的平均学习成绩。
编程序,从终端逐次输入一个学生n门课程的成绩,计算并输出他的平均成绩。
【例4.9】某评估单位要对学生的学习情况进行评估,需要计算全班50名学生每个学生的平均学习成绩。
编程序,从终端逐次输入各个学生n门课程的成绩,计算并输出各个学生的平均成绩。
“4.1计算平均成绩”需要掌握循环程序的基本构成:
循环判断条件、循环体和循环控制方式,可以看懂流程图。
“4.2后判断循环条件”需要掌握“do-while语句”的具体执行过程,并灵活使用。
“4.3先判断循环条件”需要掌握“while语句”的具体执行过程,并灵活使用,理解“先判断条件”和“后判断条件”循环在循环次数的差别。
“4.4for语句”需要掌握“for语句”的具体执行过程,并灵活使用;知道for语句和while语句间的对应关系。
“4.5多重循环”需要能灵活将上述三种循环嵌套使用,并能清楚区分每个循环的控制条件和循环体。
“4.6程序设计实例”需要能够理解其中循环所起作用,并能用于自己代码编写。
“循环”概念虽然容易理解,但要能够准确控制循环还需要大量练习。
初学者在不清楚循环具体作用时,建议逐条语句单步执行程序,记录相关变量每次循环时的当前值,从其变化中体会循环概念。
至此程序设计中的三大控制结构“顺序”、“分支”和“循环”都已介绍完。
三种流程控制方式说起来很简单,关键是应用,而应用的关键是首先找出算法。
上机实验过程中要有意识的将三种控制结构结合在一起编写程序。
本章重点是在实际程序设计过程中怎么发现循环,构造循环,并用三种循环语句之一描述。
一、后判断条件的循环在流程图中表示成类似下图的形式,PAD表示形式如下图。
其中:
●e是布尔型表达式,是循环控制条件,控制循环继续进行或结束。
●S是一个语句列,是被重复执行部分,即循环体。
其含义是:
1)执行语句列S;
2)计算表达式e值;
3)若e值为true则转向1继续循环,否则转向4结束循环;
4)循环结束,向后执行其后继操作。
按该含义,显然循环体S起码被执行一次。
并且在S中一定有改变e值的操作,使其值最终变为false。
S
e
F
whilee
S
图4.10while语句的流程图图4.11while语句的PAD图
二、先判断条件的循环在流程图中表示成类似下图的形式,其PAD表示形式如下图。
与前文的后判断条件循环一样,其中:
●e是布尔型表达式,是循环控制条件,控制循环继续进行或结束。
●S是一个语句,是被重复执行部分,构成循环体。
其含义是:
1)计算e值。
2)若e值为true则向下执行循环体,转入3);否则循环结束,转向5)。
3)执行语句S。
4)继续循环,转向1)。
5)循环结束,向下执行其后继操作。
按该语义,显然循环体S有可能一次也执行不到。
并且一旦进入循环,在S中也一定有改变e值的操作,最终使其值变为false。
三、for语句是while语句的一种缩写方式,也是先判断条件的循环,最经常被用于描述循环次数已知的循环。
其形式是:
for(e1;e2;e3)
S
在for语句中:
●for是关键字,指明for语句开始。
●S是一个语句,是for循环的循环体。
●e1、e2、e3都是表达式,可以是任意表达式,没有什么限制。
但是,这三个表达式在for语句中起循环控制作用,它们分担的角色分别是:
◆e1,称初值表达式,经常用于设置该循环开始时的一些初值。
◆e2,称终值表达式,用于控制循环结束。
◆e3,称增量表达式,经常用于每次执行循环体后对循环控制条件的修正。
for语句的语义如下图的流程图所示,并用下图的PAD图表示。
其执行过程是:
1)计算表达式e1。
2)计算表达式e2,若e2的值为true,则向下执行步骤3);否则(e2值为false)转向步骤5),结束循环。
3)执行循环体S。
4)转回步骤2),继续循环。
5)循环结束,向下执行后继语句。
可以使用for循环语句编出各种灵活的循环结构程序,只要能保证循环正确执行。
比如e1、e2、e3中的任意一个,甚至全部都可以为空;e1、e2、e3中的任意一个,甚至全部都可以为逗号表达式,从而在循环过程中描述多项操作和控制。
第五章模块化程序设计-函数
本章以“求给定三角形的重心”为案例,介绍“模块化程序设计”和“函数”的概念,程序设计中的“函数”和数学中的“函数”紧密相关,但不完全一样,学习过程中需要格外注意。
“函数”对应程序的“模块化设计”,这与日常工作中的任务划分近似。
【例5.1】求给定三角形的重心。
“5.1模块化设计”分别给出了不用函数和用函数书写的两套代码,通过对比其不同,认真体会“模块化程序设计”的思想,理解其重要性。
“5.2函数”需要掌握函数定义、函数调用和函数原型。
其间许多内容都可在数学中寻找到影子:
如返回值对应值域,参数对应定义域等。
函数调用要理解什么是形式参数、实际参数,明白形式参结合方式。
函数原型则与表标识符先声明后使用的规则紧密联系。
“5.3程序设计实例”需要能够改写以前未用函数书写的代码,并能自己编写函数。
随着函数的引入,代码量将会逐渐增加,出错在所难免,学会程序调试方法对定位、纠正程序中错误大有益处。
此时应该知道如何设置断点、单步执行程序、查看变量当前值等。
本章的重点是模块化程序设计,关键是程序模块的划分,正确引进函数。
函数定义格式是:
类型说明符标识符(参数列表)
复合语句
●主函数向被调用函数传递数据信息采用“形式参数”与“实在参数”结合的方法;
●被调用函数向主函数传递数据一般使用函数值;还可以使用指针参数。
●C函数的参数都是值参数。
值参数的意义及参数结合动作是:
1.函数调用中,与值参数对应的实在参数是一个表达式(单个变量,常量是表达式的特例),并且要求实在参数表达式与形式参数变量之间赋值兼容。
2.当程序运行时,调用函数,进行参数结合的动作是:
1首先计算实在参数表达式的值;
2把实在参数的值按赋值转换规则,转换成形式参数的类型;
3把转换后的实在参数表达式值送入形式参数变量中。
3.在整个函数活化期间,值参数表示形式参数本身,它是函数内的一个局部变量,已经与实在参数脱离关系,与实在参数无关了。
在函数内对形式参数的赋值不影响实在参数。
4.当函数执行结束返回后,实在参数值无任何变化,还是调用函数之前的值。
第六章批量数据组织—数组
本章仍然以“学生成绩管理”为案例,介绍“批量数据组织-数组”的概念。
数组是相同类型数据的集合,把相同类型数据顺序排列在一起,便构成数组。
前五章所涉及内容都针对单个变量或单一数据;如何表示和处理批量数据是此章的重要内容。
数学中与数组最相关的概念是“向量”和“行列式”,其上操作也比较类似。
【例6.1】为了分析学生对程序设计课程的掌握程度,需要对该课程成绩进行统计。
编程序,输入一个班50名学生的程序设计课程成绩,然后按10分为一段,统计各段成绩的学生人数,并输出。
【例6.3】为了分析本学期学生的学习情况,需要对本学期所开课程的成绩分别进行统计。
编程序,输入一个班50名学生的程序设计等5门课程成绩,然后按10分为一段,分别统计各科中每个分数段成绩的学生人数,并输出。
“6.1数组类型”需要掌握数组声明、如何使用下标表达式;知道对数据的操作只能是对其中每个成分逐一进行操作。
“6.2多维数组”需要掌握多维数组声明、如何使用下标表达式,多维数组在内存中的排列结构。
“6.3程序设计实例1”需要认真体会数组下标的控制方式方法,对于初学者建议单步执行程序,观察各下标变量的当前值,以其帮助对程序的理解。
“6.4线性表-分类”需要掌握什么是分类,为什么分类,理解“主元排序”、“冒泡排序”和“逐步递增子序列排序”的思想并能自己写出相关代码。
“6.5线性表-检索”需要掌握什么是检索,理解“顺序检索”和“二分检索”的思想并能自己写出相关代码。
“6.6数组初值”需要掌握一维和多维情况下数组初值赋值方法。
“6.7字符串”需要掌握如何用一个字符数组保存字符串,并进行相应的操作。
“6.8类型定义”深入理解数据类型的概念,并能声明自己的数据类型和使用。
“6.9线性表—栈和队列”需要掌握栈和队列两种线性表不同的存取方式和相关操作。
“6.10程序设计实例2”需要理解如何用栈来实现表达式值计算的思想。
上机实验中需要有意识地使用VC提供的代码调试功能,观察数组下标变量的值,体会其控制操作,加强对所学知识的理解。
本章是在学完各种控制结构后,开始学习数据组织。
到此同学们编程手段越来越丰富,本章讲述的内容也比较多。
本章的重点是如何组织批量数据包括数组的声明、下标表达式,以及在线性表数组上的一些操作(插入排序、冒泡排序、顺序检索、对半检索)算法。
数组用数组声明符声明,把数组声明符放在变量声明中声明数组变量。
数组声明符结构是:
<标识符>[<常量表达式>]
其中
●标识符是要声明的数组的名字,即数组变量名字;
●常量表达式给出要声明的数组的尺寸,即相应数组由多少个成分组成。
●数组声明符所在的变量声明的类型说明符指出数组的类型,也是数组中每个成分的类型。
访问数组变量的某一个元素,使用下标表达式(subscript-expression),下标表达式的形式是:
<数组变量>[<表达式>]
其中
●数组变量指出访问哪个数组的元素;
●方括号中的表达式的类型必须是整数类型,它具体指明访问的是数组的哪一个元素。
第七章指针
指针是C语言中最重要的概念,其关键是充分理解指针即变量地址的含义,领悟指针使用要领。
“7.1指针与变量”需要掌握如何声明不同类型的指针变量,理解指针变量和指针所指变量之间的区别与联系。
“7.2指针操作”需要掌握求地址、取内容和指针赋值操作。
“7.3指向指针的指针”需要理解指针所指变量、指针变量和指向指针的指针变量,三者之间的区别与联系。
“7.4指针与数组”需要掌握如何用指针变量标识数组,并访问数组中的每个元素。
“7.5指针与多维数组”需要掌握多维数组在内存中的存储方式,掌如何用指针标识多维数组,并访问数组中的每个元素。
“7.6指针数组”需要掌握如何声明指针数组,以及如何使用指针数组。
“7.7指针与字符串”需要掌握变量字符串和常量字符串间的区别与联系,以及如何用指针控制操作字符串。
平时预习和复习中,要依据不同例题画出内存变量存储示意图,并根据程序运行,演示变量值的变化;从而深入理解指针概念。
实验中要有意识地使用调试工具,在实际开发环境中观察指针变量和指针所指变量值,明确指针、地址、指针数组、字符串等概念的内涵,从而尽快掌握指针使用的要领。
本章的重点是:
弄清指针变量和指针所指变量的关系、指针与数组之间的关系。
一、编译程序在把高级语言程序翻译成机器语言程序时,给每个变量都分配一块适当的存储空间,以便随时保存变量的值。
变量的地址就是这块存储区的首地址,变量的值就是这块存储区中现行保存的数据。
设有变量v,分配在内存0F000开始的一块存储区中,现行值为2.7183,则如图所示。
变量指针就是变量的地址,用&v表示。
二、数组名不代表整个数组,而是数组的首地址,即第一个元素的地址。
也可以用指针变量标识数组。
设有指针变量iptr。
则“iptr=a”不是把整个数组a全部送入iptr中,而是把数组a的首地址(即a[0]的地址)送入iptr中。