SPOC学校专有课程
2018秋高级语言程序设计(苏小红)
分享
spContent=学习程序设计是一件充满挑战、更充满乐趣的事情,然而学习之初,它之所以给你枯燥乏味的感觉,那是因为没有发掘出它的趣味来。本课程力图用最简明的语言、最典型的实例及最通俗的解释将这种趣味性挖掘出来,带给你全新的学习体验,和你一起欣赏C语言之美,领悟C语言之妙,体会学习C语言之无穷乐趣。
—— 课程团队
课程概述

王国维在《人间词话》中说:古今之成大事业、大学问者,必经过三种境界:

昨夜西风凋碧树。独上高楼,望断天涯路。  

衣带渐宽终不悔,为伊消得人憔悴。 

众里寻他千百度,暮然回首,那人却在灯火阑珊处。 

成为编程高手的过程中,同样也要经历这样三个境界。


程序设计语言数以千计,能广为流传的不过几十种,能风光三十年以上的更是屈指可数,其中影响最大、寿命最长的非C语言莫属。尽管Java等后起之秀呈后来居上之势,但C语言宝刀不老,仍然笑傲天下,论剑江湖,铁杆粉丝遍布世界各地。

https://www.jianshu.com/p/1e7f0e6b99d0

大牛给计算机专业学生的7个建议,告诉你为什么毕业前要学好C语言

来吧小伙伴们,和我们一起踏上爱上程序设计之旅吧。


授课目标

了解软件开发的基本过程和集成开发环境,具备程序测试和调试的能力;掌握多种程序设计技巧和程序调试方法,具备良好的编程素养,针对具体实际问题能够选择恰当的算法和数据结构,并综合运用所学程序设计语言、方法、技巧和常用问题求解策略设计实现程序的能力。

成绩 要求

一、成绩累计方式

(1)自主式作业

由系统随机抽题的自主式作业,占总成绩的20%

学生登录面向学生自主学习的高级语言能力测试平台(SSE),自主选择知识点和难度系数,平台自动从后台的题库系统中随机抽取相应知识点和难度系数的题目给学生,学生在线上限时完成并提交代码,获得作业分。分数评定和奖惩规则如下:

1)根据学生上机测试成绩柔性定制个人作业满分线,使其个人作业满分线与其上机测试总成绩成反比。个人作业满分线=(实验上机随堂测试满分线-实际上机随堂测试总分)*100。若按此公式计算出来的满分线超过了3000分,则3000分封顶,即3000分为个人刷题满分线的上限。注:非计算机专业学生个人刷题满分线的上限为2000分。

2)若未达到自己的个人作业满分线,则按下面公式计算:个人实际刷题分数 / 个人满分线 * 作业满分20分。

3)在习题市场中自主设计有创意的题目或找错题,可减免作业分20分(相当于降低其个人作业满分线)。

(2) 开放式实验大作业

开放式实验大作业,占总成绩的20%。 

实验程序和实验报告的综合成绩由学生在SPOC里互评,教师对学生互评结果进行随机抽查,对于不合理的分数可以由教师重评,取代学生的互评分。

未在规定的截止时间内在SPOC中提交实验程序和报告,按0分计。未在规定的截止时间内在SPOC中完成指定数量的互评,扣除一定的互评分。

不做实验大作业者,即使其他项分数累计可以及格,最终的总成绩也一律按0分计。

(3) 实验上机随堂测试

实验上机随堂测试,占总成绩的50%

第1次实验课熟悉系统环境,进行模拟演练,仅安排2个实验学时。

第2次~第4次实验课,利用3学时进行实验上机随堂测试和试卷点评。实验上机测试内容分别覆盖基本控制结构和穷举/递推/迭代/递归算法、数组和排序查找算法、字符串/结构体等内容。

每次上机随堂测试必做题满分为50分(另有附加分2-5分),总计考3次,最后取3次测试的平均分作为实验上机测试的总分。因属于随堂测试,故缺考者不给补考机会,当次考试成绩按0分计。

(4) 实验主题研讨

实验小班研讨,占总成绩的10%

采用“生讲生评、互动研学、同伴助学”的方式,分小班针对不同的实践研学主题进行互动研讨和同伴助学。

(5)附加分

(1)实验上机随堂测试获得附加题的附加分(2-5分)。

(2)参加期末的“实验课堂大翻转、创意程序大比拼”,可以获得1~10分的附加分。

课程最终成绩 = (1)+(2)+(3)+(4)+(5)

其中,如果(2)实验大作业为0分的话,那么总成绩也为0分。


二、课程免修规则

0. 课程免修的建议:

学过并能熟练使用C语言的同学,建议符合下述标准的参加免修考试。没有学过或者只是学过并不能熟练使用的同学不建议参加免修考试。

免修考试将在课程开课后的2~3周内进行。

1. 课程免修条件

(1)参加ACM/ICPC、NOI / NOIP竞赛并获得省级或省级以上奖项者,在中国大学MOOC平台上选修《C语言程序设计精髓》MOOC课程并获得合格认证证书者,或选修《程序设计基础》MOOC课程(含大学先修课)并获得优秀认证证书者,均有资格参加免修考试。

(2)免修考试成绩在90分及以上者,可以免修本课程。

(3)免修考试及格但未达到90分者的自主式作业成绩可根据免修考试成绩按比例折合。

2. 免自主式作业的条件

(1)免修考试成绩及格者,可免自主式作业,成绩按比例折合,折合系数为0.2;

(2)多次上机考试的总成绩达到满分或超过满分者,可免自主式作业,成绩按满分计;

(3)参加ACM / ICPC、NOI / NOIP竞赛获得省赛一、二等奖或校赛一等奖者,可免自主式作业,成绩按满分计。

3. 免实验上机随堂测试的条件

(1)参加ACM / ICPC、NOI / NOIP竞赛获得省赛一、二等奖或校赛一等奖者,可免上机测试,成绩按满分计。 

(2)参加生讲生评/互动展学活动次数达到一定比例的学生,可以在3次上机考试中去掉一个最低分后取2次上机测试的平均分。


三、开放式实验大作业互评标准

根据项目选题难度和代码实现难度确定起评分:

学生成绩管理系统V1.0、V2.0、V3.0、V4.0、V5.0、V6.0对应的起评分分别为10分、11分、12分、13分、14分、15分。同时用链表和文件实现学生成绩管理系统V6.0,起评分为18分。

根据实验程序完成质量确定是否加分,加分原则如下:

1) 对程序有优化,例如随机生成学生数据信息,提高了程序的健壮性,增加了增删改学生记录、密码认证、模糊查询、考勤、学分绩、游戏等特殊功能和趣味性元素,根据优化代码的难度酌情加1-5分。

2) 对于独立设计并完成的课外综合应用程序,根据选题的新颖程度、实现难度、代码规模设置起评分,可参考同等难度的学生成绩管理系统的起评分,在起评分基础上酌情加1-5分。例如,若同样使用了结构体和文件编写程序,则起评分为15分,与V6.0的起评分相同。

根据实验反思报告质量确定是否扣分,扣分原则如下:

1) 实验反思报告中没有反思内容(反思内容包括:程序编写过程中遇到了哪些问题,如何解决的,哪些问题还没解决,哪些部分今后可以考虑改进,收获和体会等),扣5分。

2)  问题反思不到位,收获和体会不真实可信,扣1分。

3)  报告撰写不认真,格式排版不规范,扣1分。

4) 流程图有错误,或者程序有bug,扣1分。

5)  代码风格不好,缺少函数和重要语句的注释,变量名和函数名不符合命名规范(例如用汉语拼音命名),没有对齐与缩进,扣1分。

6) 没写解决问题的过程和方法,或者解决问题的过程和方法不真实可信,扣1分。

7) 程序的优化部分雷同,或者实验报告中出现雷同内容(包括流程图、代码、反思和学习体会等),一律0分。

以上加分和扣分累计到满分线20分封顶,不再额外加分。

互评过程如果有问题,可以先看网易提供的帮助文档:

https://www.icourse163.org/help/help.htm#/hf?t=3

每个学生至少评5个。未参与互评的将给与所得分的50%,未完成互评的将给与所得分的80%,全部完成互评的将给与所得分的100%。

报告模版在spoc的“实验互评”里下载。


四、主题研讨评分规则

1. 研讨主题确定方法

将教师出的研讨题目和向学生征集的研讨题目给学生投票确定若干个热点话题,分若干小组研讨。每个话题限制人数,保证每个话题的小组数均衡,并且各自投票。

推荐的研讨主题为:

(1) 圆周率计算程序PK。

(2) 定积分计算程序PK。

(3) 求方程根程序PK。

(4) 冒泡改进算法程序PK。

2. 学生小组构成及其研讨主题确定

学生自愿组合成5-7人的小组,每个小组抽签决定研讨主题及研讨顺序,设计抽签的票,1-1,1-2,1-3,1-4,2-1,2-2,2-3,2-4等,抽签决定,不满意的私下自行交换。

3. 讲解流程与方法

在每个主题中,按照事先抽签的标号顺序进行讲解。各小组组长负责提前三天把“主题内容、抽签标号、组长、小组成员分工,小组成员排序”发给助教。

4. 讲解注意事项

(1) 主要以ppt讲解为主,不一定要现场运行程序,可以提前把程序的运行结果粘贴到ppt中。

(2) 主要是讲解决该问题有哪些方法,核心思想是什么?每一类方法的优缺点、难点、适用背景是什么?有哪些具体的实际应用?等等,建议把不同类方法的结果分析总结或对比一下,将不同方法、不同测试数据的结果放到一个表格中对比,最后给出结论。

(3) 每个小组现场讲解时间控制在3-5分钟,同学现场提问1-2分钟。(讲解时间和回答提问的时间,各班根据人数自行规定)

5. 投票的参考标准

(1) 方法分析是否透彻,优缺点总结是否到位,方法是否更胜一筹

(2) 是否能用最通俗的语言把方法讲明白(不是光自己明白,能给大家讲明白)

(3) 回答同学提出的问题准确无误

6. 投票流程

每个小组发4张空白不记名投票单,每个主题研讨结束后投出一张票。

每个小组讲解完,下面的听者提问(后一个小组的同学必须向前一个小组提问,第一个小组必须向最后一个小组提问,其他同学可以随机提问)。

一个主题的所有小组都讲完并且提问完,全班所有主题小组现场给这个主题的小组投票:每个小组在这个主题中选出自己认为表现最好的两个小组(超过2组的票视为无效的废票),写在不记名投票单上(如果自己小组参与了这个主题可以投自己),然后收票。

所有主题都讲完,按主题进行唱票、计票。

(参考的唱票和计票方式:第一主题的学生为第二主题唱票、监票和计票。以此类推,第四主题为第一主题唱票、监票和计票)。

按照每个小组得票数排序(票数可以并列)。

7. 评分方法

小组组间得分标准:

第1名:5分

第2~3名:4分

第4~6名:3分

其他:2分

小组组内评分标准:

按照组内成员(含组长)的排序确定组内成员分数,按排序分别为:5,5,4,4,3,3,2,2...每个分段最多两人。

研讨结束后,小组长负责将本小组的研讨主题,研讨内容,小组成员分工,小组成员排序,小组成员分数等信息发给老师或助教。


五、翻转课堂评分规则

1.每个小组抽签决定答辩顺序

2. 大翻转只演示程序,可以制作一个PPT,主要讲算法设计的思路和优化方法,把学生设计的精华和亮点及关键技术放上,这个PPT只是备用,当有人提问,需要解释或口头说不清的时候,拿出来展示一下。(讲解时间和回答提问的时间,各班根据人数自行规定)

3.每个学生发一张空白不记名投票单。

4.每个小组讲解完,下面的听者提问。

5.所有组都讲完,学生开始投票:每组学生选出自己认为表现最好的两个小组,写在不记名投票单上(可以投自己)。现场投票、唱票、计票。

6.按照每个小组得票数排序(票数可以并列)。小组得分规则:

1~2名:10分

3~4名:9分

...

17~18名:2分

其他:1分

7. 每个学生课堂翻转的最后成绩是按照小组排名得分及组内排名系数计算

   三人一组系数: 1, 0.6, 0.3

   两人一组系数: 1, 0.7

   个人成绩 = 小组排名得分*个人系数

课程大纲
预备知识

大学计算机课程中已经学过的二进制、内存、冯诺依曼计算机基本工作原理,基本控制结构以及算法的概念和表示方法等基础知识。

高等数学中有关定积分的基础知识。

线性代数中有关矩阵运算的基础知识。


参考资料

1.  面向读者的教材网站(https://book.sunner.cn) 

该网站的服务对象是我们自编教材的读者,提供教材课件、例题源代码、教材勘误表等资源,便于学生浏览和下载后自学,读者也可利用该网站反馈教材使用意见和建议。

2.  作业在线测试系统(https://sse.hit.edu.cn/t)

该网站的服务对象是使用我们自编教材的读者,在我们编写的由高等教育出版社出版的《C语言程序设计(第3版)》的封底有一个刮刮卡,刮开可以获得一个免费的注册账号,登陆我们开发的C语言作业在线测试系统,在该系统中可以自主选择教材对应章编号中的习题进行自测,提交习题答案后,系统会实时显示评分,另外在习题市场中读者还可以发布题目给其他读者练习。

3. 参考教材

1)苏小红,王宇颖,孙志岗,《C语言程序设计(第3版)》,高等教育出版社,2015年9月,购书网址:京东

2)苏小红,车万翔,王甜甜,《C语言程序设计学习指导(第3版)》,高等教育出版社,2015年9月,购书网址:京东

5.相关链接

爱课程国家精品资源共享课https://www.icourses.cn/coursestatic/course_3153.html

相关MOOC课程:程序设计基础https://www.icourse163.org/course/hit-56001#/info

带gcc编译器和gdb调试器的code::blocks集成开发环境的官网下载地址:https://www.codeblocks.org/downloads/26

(例如codeblocks-17.12mingw-setup.exe,一定要带mingw哦),安装注意事项见《C语言程序设计学习指导(第3版)》。

安装软件的完整步骤可参考:https://jingyan.baidu.com/article/b24f6c822756b886bfe5da90.html 


https://www.jianshu.com/p/1e7f0e6b99d0 大牛给计算机专业学生的7个建议,告诉你为什么毕业前要学好C语言)


常见问题

Q:如何提问,能得到快速的解答?

A:

1)标题:撰写标题时,要注意把要问的问题的出处和核心词写出来,最好用【】标出来,比如【第1周编程题在线测试的第1题】求解。

2)内容:内容上要把你不懂的地方说出来,最好详细点,把自己尝试修改的过程也说一下。

3)附源代码:把源码贴到讨论区(不要使用图片,因为图片看不清,也不能拷贝),这样大家可以通过你贴出的源码帮你分析错在哪里。

4)附错误提示:把编译出错的提示也贴出来(一般是英文形式),这样大家不用拷贝粘贴和调试程序也能帮你分析出错原因了。


Q:常见的运行结果错误的原因有哪些?

A:程序提交后通常显示三类错误:格式错误、结果错误、运行超时。

对于格式错误,请检查你的程序的输入输出信息是否和题目要求的完全一致。

对于结果错误,请检查你的程序使用的算法和计算公式是否正确,如果涉及浮点运算,可以尝试将float换成double或者反之。

对于运行超时错误,请检查你的程序是否存在死循环,死循环通常由永真的循环控制条件或者while后面添加了不必要的分号引起。注意在本网站提交程序进行测试时,不要使用flush()函数清除缓冲区,输入字符串也不要使用fgets(),原因详见视频讲解 。

注意事项如下:

1)数据输入输出的格式没有严格按照题目的要求写,直接拷贝粘贴题目中给的格式字符串和提示信息,是最简单和不易出现格式错误的方法

2)输入输出字符串中的字符大小写有错误,或者空格数量和位置与题目中的要求不一致,或者缺少换行等。

3)仔细审题,例如题目要求计算半圆的周长,就不要加上直径,更不要计算整个圆的周长。

4)如果只有几个测试用例通过,还有没有通过的测试用例,那么说明你没有考虑所有的可能性,甚至是非法输入的情况。

5)检查是否为英文输入,切记切换成英文状态再输入。一些同学误用了中文作为输入法,就会出现不能编译的问题,例如中文状态下输入的分号和英文状态下输入的分号是完全不同的,语句的末尾使用的分号一定要在英文状态下输入。

Q:如果无法正常观看视频,我该怎么办?

A:如果无法正常观看视频,请尝试进行如下操作:

1.确认你使用了支持视频播放的浏览器。切换到flash播放器无法调整播放速度,切换到HTML5播放器可以调整播放速度。建议都切换到HTML5播放器。

2.清除浏览器的浏览数据及缓存。

3.关闭硬件加速。请在浏览器的 设置 - 显示高级设置 中,将“使用硬件加速模式”(如果可用)一项取消勾选,并重新启动浏览器。

4.检查你的网速。你可以尝试在其他视频网站播放视频(如优酷、土豆等),如果你在其他网站仍无法观看视频,那么你的网络连接很可能有问题。你需要重新连接你的网络或者切换至网速更快的网络以实现流畅的视频播放。

Q:我想考二级,学完这个课程可以考吗? 

A:二级考试题考查语言的语法细节较多,所以能否通过二级考试,要看你的应试水平如何。本课侧重于讲解程序设计的方法以及错误程序的排错方法,更关注实战能力,因此应该说本课程对学生的要求是高于二级考试的要求的。


Q:上机编写C语言程序使用什么软件好?

A:课程演示会使用Code::Blocks+gcc+gdb集成开发环境,但是你使用任何其他C语言开发工具也都可以。不过,我们推荐使用Code::Blocks,在教材网站(https://book.sunner.cn)上有软件下载的网址链接,《C语言程序设计学习指导(第3版)》上有关于如何使用这个软件的详细介绍,它是一个开源的跨平台的C/C++集成开发环境,它安装简单,比Visual C 6.0等其他集成开发环境更简单易学。

 

Q:使用codeblocks在sources中新建一个file,也就是不在原来默认的main.c里面写代码,那么应该如何调试才能使运行的时候直接运行新建的里面的程序呢?

A:给工程添加完新的文件后,移出旧的文件main.c再重新编译即可,移出文件的方法和添加的方法类似。

 

Q:为什么安装好软件后创建新项目的时候软件总是说:could not save project<invalid path> maybe the file is write-protected 呢?

A:codeblocks要求软件安装的目录最好不要带空格或汉字,不要按默认设置安装到program file目录下,卸载后再选择安装到根目录下试试。更多注意事项,参见高等教育出版社的《C语言程序设计学习指导(第3版)》


Q:请问为什么我在Code::Blocks里面点开Debug中的watch里面是空白的?

A按照视频1.2讲的方法新建一个控制台应用程序,不要直接新建一个C文件,直接新建或者打开一个 C文件是无法使用调试功能的。

检查一下是不是将CB安装到默认的program files目录下了,CB不能安装到中文或者有空格的目录下,请卸载软件,重新安装到根目录下,再试试。

此外,全速运行程序时,是看不到watch窗口内的内容的,必须在单步运行的时候才能看到watch窗口内的内容。


Q:为什么我的程序编译不了?

A:一种可能是你安装了不带编译器和调试器的版本,重新安装带编译器和调试器的版本。免费开源的C 语言集成开发环境Code::Blocks+gcc+gdb的官方下载网址:https://www.codeblocks.org/downloads/26(目前最新版本是codeblocks-17.12mingw-setup.exe)。请下载带gcc编译器和gdb调试器的code::blocks(下载软件名中务必包含mingw),否则程序无法编译。无法从官方下载软件的,也可以从百度云盘上下载:链接: https://pan.baidu.com/s/1bqzj4yN 密码: sucp

C 语言集成开发环境code::blocks的安装和使用方法见教材《C语言程序设计学习指导(第3版)》

如果不想重装系统,可参考

https://zhidao.baidu.com/link?url=T8WrKoa6dHXfZdTIOFex4uWais6SaTY2VbmNnLyKL77fb62LdzxrdJxBT_-UVf48AA9Z14K8l_nyueKFxD_q4Rh3BH0UMZvx5Kvxjx8o1MG重新设置编译器和调试器。

安装软件的完整步骤可参考:https://jingyan.baidu.com/article/b24f6c822756b886bfe5da90.html 

另一种可能是你用的系统自带了迈克菲杀毒软件,请卸载迈克菲上毒软件即可。


Q:为什么我的程序无法运行,显示cannot open output file bin\Debug\election.exe Permission denied.

A:可能是你的文件正在别的程序中使用,或者还有程序的副本正在执行(或者你上次运行没有关闭),因此不能写入election.exe,把副本关闭或者结束election.exe任务应该就能够纠正这个问题。另外,请检查一下你的IDE是不是是不是安装到C盘的默认目录下了,请将IDE安装到D盘,并将你的程序也保存到D盘,不要保存到C盘。


Q:为什么我的程序与网站上的程序运行结果中的小数点最后一位存在差异?

A: 这是因为网站的OJ使用的操作系统和编译器与我们自己使用的操作系统和编译器不一样,从而导致浮点运算的精度不一致。

此外,使用float和double定义变量得到的计算结果也可能在结果的最后一位小数上有所不同。