SPOC学校专有课程
2021秋高级语言程序设计(黄剑华,袁永峰)
分享
spContent=C语言是最受欢且应用较多的编程语言,它具有效率高,兼有高级和低级语言的特点,几乎没有不能用C语言实现的软件,没有不支持C语言的系统。本课程力图用最简明的语言、最典型的实例及最通俗的解释带给你全新的学习体验,让你更好地了解计算机,了解计算思维,希望你能了解它,爱上它,领悟C语言之妙。 学习程序设计是一件充满挑战、更充满乐趣的事情,然而学习之初,它之所以给你枯燥乏味的感觉,那是因为没有发掘出它的趣味来。本课程力图用最简明的语言、最典型的实例及最通俗的解释将这种趣味性挖掘出来,带给你全新的学习体验,和你一起欣赏C语言之美,领悟C语言之妙,体会学习C语言之无穷乐趣。 —— 课程团队
—— 课程团队
课程概述

   对于这个地球上大多数人来说,真正的数字化革命还没有开始。在接下来的10年里,变化将无处不在,让我们一起来给这个世界编码吧!——Eric Schmidt Google执行主席    

   

我们会用15周的时间来深入讲解C语言,在授课过程中,我们会注重多解释一些“为什么”以及错误程序的分析,从环环相扣的问题入手,将一些易被忽视且对高水平程序设计很重要的“点”,沿着数据结构从简单到复杂的主线逐一展开,在实例的“不断深化和提升”中引出知识点,通过对问题的举一反三和前后知识点的融会贯通,由浅入深地引导你循序渐进地编写规模逐步增大的程序。

   在过去30年90%的时间里,C语言独领风骚,仅偶尔被 Java 超越,可见其魅力。C语言作为一种高级语言,其实并不高级,但正是这种“低级”给我们更多思考的机会。期望通过本课程的学习,你不只是简单地能够掌握一种语言的语法,还能理解隐含在语法背后的思想,并初步具备灵活使用这些思想进行编写程序解决实际问题的能力。如果你掌握了这些,你会发现,迈向成功的最后一步不过是选择一种合适的编程工具而已。 


   你想从“菜鸟”升级为“程序猿”吗?那就加入“稀饭”的行列,和我们一起踏上爱上C语言之旅吧。

授课目标

能够编写C语言程序解决实际问题。掌握需求分析、功能设计和利用C语言编程、调试、测试等基本技能。

成绩要求

(1)自主式作业 

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

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

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

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

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

(2) 开放式实验大作业 

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

实验程序和实验报告的综合成绩由学生在 SPOC 里互评,教师对学生互评结果进行随机抽查,对于不 合理的分数可以由教师重评,取代学生的互评分。 未在规定的截止时间内在 SPOC 中提交实验程序和报告,按 0 分计。未在规定的截止时间内在 SPOC 中完成指定数量的互评,扣除一定的互评分。 

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

(3) 实验上机随堂测试 

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

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

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

每次上机随堂测试必做题满分为 50 分(另有附加分 2 分),总计考 3 次,取 3 次测试的平均分作为 实验上机测试的总分。 

因属于随堂测试,故缺考者不给补考机会,当次考试成绩按 0 分计。因病不能参加考试者,需出具医 院开的病假条,按实际参加测试的次数计算平均分。 

(4) 实验小班研讨(分两次课进行) 

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

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

注意:本环节可以不参加,不参加本环节的学生的各项累计总分最高为 90 分。想冲击 90 分以上的 学生必须参加本环节。 

(5)附加分 

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

2)实验上机测试结束后参加生讲生评可以获得 1~3 分的附加分。例如,某道题未获得满分的同学 可邀请该题获得满分的同学一起上台讲题(鼓励每两人组成一个互帮互学小组),采用你问我答的方式分 析讲解程序的错误和错误原因,两人可同时各加 1 分。任课教师也可以调取未获得满分的卷子,现场征集 讲题者,此时仅给讲题者一人加 1 分。三次上机实验测试,每人最多加 3 分。

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

其中,如果(2)实验大作业为 0 分的话,那么总成绩也为 0 分。(4)和(5)两个环节不是必须项。


为积极响应国家低碳环保政策, 2021年秋季学期开始,中国大学MOOC平台将取消纸质版的认证证书,仅提供电子版的认证证书服务,证书申请方式和流程不变。

 

电子版认证证书支持查询验证,可通过扫描证书上的二维码进行有效性查询,或者访问 https://www.icourse163.org/verify,通过证书编号进行查询。学生可在“个人中心-证书-查看证书”页面自行下载、打印电子版认证证书。

 

完成课程教学内容学习和考核,成绩达到课程考核标准的学生(每门课程的考核标准不同,详见课程内的评分标准),具备申请认证证书资格,可在证书申请开放期间(以申请页面显示的时间为准),完成在线付费申请。

 

认证证书申请注意事项:

1. 根据国家相关法律法规要求,认证证书申请时要求进行实名认证,请保证所提交的实名认证信息真实完整有效。

2. 完成实名认证并支付后,系统将自动生成并发送电子版认证证书。电子版认证证书生成后不支持退费。


课程大纲
预备知识

本门课程的基本内容是面向零基础的学生。


进阶内容是面向有一定编程基础或学过本平台的“程序设计基础”MOOC课程(https://www.icourse163.org/course/HIT-56001)的学生,但是进阶内容不做为课程的考试内容


参考资料

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


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


2.  作业在线测试系统


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


3. 参考教材


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


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


3)苏小红,孙志岗,陈惠鹏,《C语言大学实用教程(第4版)》,电子工业出版社,2017年1月,购书网址:亚马逊


4)苏小红,孙志岗等,《C语言大学实用教程学习指导(第4版)》,电子工业出版社,2017年3月,购书网址:亚马逊


5)苏小红等,《程序设计基础》,高等教育出版社,待出版


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语言程序设计学习指导(第4版)》。


安装软件的完整步骤可参考: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语言程序设计学习指导(第4版)》上有关于如何使用这个软件的详细介绍,它是一个开源的跨平台的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/1q7iVuo8qjFVVW9YLf3BDvQ 提取码: f2n7


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定义变量得到的计算结果也可能在结果的最后一位小数上有所不同。