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

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

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

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

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

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


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

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

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

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


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

(1)自主式作业(提交截止时间为12月24日)

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

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

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

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

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


(2) 开放式实验大作业(提交截止时间12月24日)

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

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


(3) 实验上机随堂测试

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

第2次~第6次实验课,实验上机随堂测试1个实验学时,试卷点评1个实验学时,剩余1个实验学时进行个性化辅导答疑。

每次上机随堂测试必做题满分为50分(另有附加分5分),总计考5次,最后取5次测试的平均分作为实验上机测试的总分。实验上机测试内容覆盖选择结构、循环结构、函数、穷举/递推/迭代/递归算法、数组、排序查找算法、字符串/指针、结构体/链表等。因故缺考者不给补考机会,当次考试成绩按0分计。

第1次实验课熟悉系统环境,进行模拟演练。


(4) 实验小班研讨(研讨时间:12月21日,提交截止时间12月24日,互评开放时间12月25日,互评截止时间12月31日

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

第7次实验课采用“生讲生评、互动研学的方式”进行实验小班研讨,建议安排在研讨型教室进行。

教师先发布候选的研讨主题,学生进行预选,根据预选结果选择报名人数最多的2个主题,然后学生以4~6人组成一个讨论小组,30~40人构成1个研讨小班,每个小组抽签选择一个研讨主题,相同主题的小组在同一个小班中进行研讨,每个小班研讨1个学时,每个学生至少参加一个主题的研讨。学生课前查阅资料,课上进行研讨和成果分享。其他小班的同学可以不参加,也可以旁听和提问,但不参加小组互评。

每位参加研讨的学生的分数,由两部分构成:研讨分=组间互评分+组内互评分,各占5分,组间互评分由相同小班的其他组同学在SPOC中互评打分,组内个人互评分由每个组的组长根据个人贡献大小确定,相同分数的同学不能超过2人。同在一个小班的其他小组必须提问,如果不提问则扣掉其小组互评分,课后每个小组网上提交1份研究报告(在报告中给出小组内学生的排名)。

可供选择的研讨主题包括但不限于:

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

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

(3)求方程根程序PK。

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

(5)各类游戏设计程序PK。

(6)小型数据库信息管理系统程序PK。

(7)回溯算法及其在人工智能中的应用。

(8)动态规划算法及其在人工智能中的应用。

(9)最短路径算法及其在人工智能中的应用。

(10)分形艺术、计算机动画或图像处理。

(11)其他。


(5)附加分

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

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

第8次实验课采用“生讲生评、互动展学的方式”进行“实验课堂大翻转、创意程序大比拼”,建议安排在大教室进行。学生自愿组队(最多3人)、自选主题,通过查阅资料和自学相关内容,以团队合作方式,综合运用所学程序设计语言、程序设计方法和程序调试技巧,选择和应用恰当的算法和数据结构,采用模块化程序设计方法,设计和实现一个项目驱动的综合应用程序。制作ppt,在实验课上现场讲解设计思路和创新点并演示程序6-8分钟。2-4分钟学生提问或点评。全班同学现场投票和计票,按票数从低到高排序依次给每个小组1-10分。只要报名参加翻转,即使票数为0,也至少能得1分。小组成员的分数根据组内排名依次在小组分数的基础上乘以不同的系数。


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


课程免修

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

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

(3)学生本人可以自愿选择保留或放弃此成绩。若选择保留,则将其免修考试的实际分数作为该课程的最终成绩。若选择放弃,则正常参加校内选课的各项成绩考核。


免自主式作业

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

(2)在中国大学MOOC平台上获得《程序设计基础》大学先修课优秀证书者,可免自主式作业,成绩按比例折合;

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

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


免实验上机随堂测试

(1)免修考试成绩及格者,可免上机测试,成绩按比例折合。

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

(3)参加课堂随机小翻转、小组研讨发言或提问等生讲生评/互动展学活动的学生,可以在5次上机考试中去掉一个最低分后取4次上机测试的平均分。


开放式实验大作业互评标准:(互评开放时间12月25日,互评截止时间12月31日)

1) 根据项目选题难度和代码实现难度确定起评分。学生成绩管理系统V1.0、V2.0、V3.0、V4.0、V5.0、V6.0对应的起评分分别为10分、11分、12分、13分、14分、15分。

2) 根据实验程序完成质量确定是否加分,根据实验反思报告质量确定是否扣分。

加分原则如下:

1) 对程序有优化,例如随机生成学生数据信息,提高了程序的健壮性,增加了增删改学生记录、密码认证、模糊查询、考勤、学分绩、游戏等特殊功能和趣味性元素,根据优化代码的难度酌情加1-5分。用链表和文件实现学生成绩管理系统V6.0,则在起评分15分基础上加1分。

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

扣分原则如下:

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

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

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

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

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

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

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

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

显示全部
课程大纲
预备知识

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

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

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


参考资料

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-16.01mingw-setup.exe,务必选择带mingw的安装包)


常见问题

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

A:

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

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

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

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


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

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

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

对于结果错误,请检查你的程序使用的算法和计算公式是否正确。

对于运行超时错误,请检查你的程序是否存在死循环,死循环通常由永真的循环控制条件或者while后面添加了不必要的分号引起。

注意事项如下:

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

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

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

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

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

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


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

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

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

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


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

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

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


显示全部