课程

中国大学MOOC,为你提供一流的大学教育

认证学习
为你提供认证成绩和证书,以及AI高效学习服务
查看详情
大学

国家精品

认证学习

智慧课程

理学工学农学

计算机

经济管理

外语

音乐与艺术

心理学

文史哲法

医学与保健

教育教学

大学生竞赛

软件实训

人工智能

升学/择业

考研

期末突击

专升本

四六级

保研及论文

求职就业

专四专八

大学应试英语

大学生涯规划

期末资料

终身学习

名师专栏

兴趣技能

hi,小mooc
27考研全科新手规划
期末考试会员
SPOC学校专有课程
2016秋C语言程序设计(苏小红)
第1次开课
开课时间: 2016年08月29日 ~ 2016年12月31日
学时安排: 3
当前开课已结束 已有 57 人参加
立即自学
往期不提供结课证书,想参加下学期课程, 点击这里预约>>
spContent=学习程序设计是一件充满挑战、更充满乐趣的事情,然而学习之初,它也许会给你枯燥乏味的感觉。本课程力图用最简明的语言、最典型的实例及最通俗的解释将这种趣味性挖掘出来,带给你全新的学习体验,和你一起欣赏C语言之美,领悟C语言之妙,体会学习C语言之无穷乐趣。
学习程序设计是一件充满挑战、更充满乐趣的事情,然而学习之初,它也许会给你枯燥乏味的感觉。本课程力图用最简明的语言、最典型的实例及最通俗的解释将这种趣味性挖掘出来,带给你全新的学习体验,和你一起欣赏C语言之美,领悟C语言之妙,体会学习C语言之无穷乐趣。
—— 课程团队
课程概述

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

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

授课目标
基础目标:建立从问题到程序的认知,系统地掌握一种高级语言的基本语法和程序设计的基本思想; 提高目标:掌握多种程序设计技巧和程序调试方法,具备编写高质量程序的良好编程素养; 发展目标:具备综合运用所学程序设计语言、方法和技巧,解决复杂实际问题的编程能力;
成绩 要求

本课程考试成绩由四部分组成:

1.上机考试,占总成绩的50%——考察实战能力

第1次实验课熟悉集成开发环境和考试系统,从第2次课开始,每次实验课考1次,1道编程题(10分),1道附加改错题(附加分2分),总计考6次,分别考核选择结构、循环结构、函数、数组和指针、字符串、综合应用。前5次去掉一个最低分,加上最后一次综合应用考试成绩,作为上机考试成绩。

2.指定实验,占总成绩的15%——系统编程能力训练

从学习指导书上的学生成绩管理系统V1.0,V2.0,V3.0,V4.0,V5.0,V6.0中任选一个完成,根据难度的不同分别对应的满分为7分,8分,9分,10分,11分,12分。如果用链表完成学生成绩管理系统,或者完成一个课外的综合应用程序并有新意(例如,与众不同的随机点名系统,手机通讯录系统,电子词典等等),则给15分。

最后一次(第8次)实验课不考试,检查指定实验的完成情况,若第7次实验课未完成,则按0分处理。要求能够准确回答检查教师针对程序的提问,如果不能正确回答,则回答错一个问题就扣1分。代码风格也算作为评分标准,代码风格不好的扣2分。

3.平时随堂测验,占总成绩的15%——考察自主学习能力

要求学生按照教师的要求完成指定的自学内容,上课时携带A4打印纸1张抄写题目完整内容并给出回答,题型采用编程题、程序填空题、程序改错题、选择题、判断对错题、简答题的形式。题目从以下内容中选择2道题。

1)课前作业题,课前思考题

2)MOOC第3周到第12周的非练兵区的编程题(总计10周,每周4道编程题)、MOOC的周测验题

随堂测验次数不限,每次15分,如果多次随堂测验,则取多次测验的平均分。

4.SSE随机抽题作业,占总成绩的20%——编程能力的强化训练

SSE刷题满分线是3000分(相当于每天刷4~5道题,为防止期末突击完成作业,SSE每天最多允许抽10道题,刷题超过5000分酌情有附加分),及格线是500分(相当于每周刷5道题)。提交截止时间为最后一次上课后的下一周周日。

抵SSE刷题分的方法:

1)通过在习题市场出题代替SSE刷题,每审核通过1道题,则抵SSE刷题分100分。若机上考试低于5分的成绩超过一次,则将出题获得的分数乘以系数0.8,若机考成绩全部低于5分,则取消所有的出题加分。

2)通过参加翻转课堂(详见上一个文档)。

3)参加ACM竞赛校赛和省赛获奖,省赛一等奖抵SSE刷题分2000分,省赛二等奖抵SSE刷题分1000分,校赛一等奖抵SSE刷题分500分,校赛二等奖抵SSE刷题分200分。

4)每找到SSE上一道题目的错误,抵SSE刷题50分。

5.参加翻转课堂,可以代替SSE刷题或者赢得附加分

有两种方式参与课堂翻转:

1)第一种参与课堂翻转的方式——参与课上作业的讨论和思路讲解,可抵在SSE上的刷题分

参与内容:课上作业内容都是课前作业内容的延伸和拓展。

参与方式:以2-3人组成的讨论小组,进行课上讨论,共同完成课上作业任务,如果提前布置了课上作业,则小组也可以在课前讨论并给出解决方案。

全班第一个完成的小组选派一名代表上台讲解解题思路,回答老师和同学的提问,其他小组若有更好的解题方法,也可以上台进行方法比拼。

参与翻转课堂的分数,可以累计到SSE刷题分中。若参与一次翻转课堂并演讲,则抵在SSE上刷题分500分。

若选择两人一个小组,则同组内的另一位同学的分数在上台讲解的同学的分数基础上乘上系数0.7。若另外一位同学没来上课,则系数为0。

若选择三人一个小组,则同组内的三位同学的分数在上台讲解的同学的分数基础上分别乘上系数0.6和0.3。哪个系数分配给谁由上台讲解的同学指定。若另外两位同学没来上课,则系数为0。

2)第二种参与课堂翻转的方式——参与最后一次课的创新作品展示和答辩,可以获得附加分(起评分5分,满分10分)

参与形式:在最后一次上课前,课外完成一个与众不同的综合应用程序,在课上展示和答辩,可以获得附加分。要求独立完成,如果多人一个小组合作完成,则只给参与演讲答辩的同学加分。

内容和要求:采用自顶向下、逐步求精的模块化设计思想设计的一个小型数据库管理系统,也可以是一个游戏,或者其他作品。参与演讲答辩的同学需准备5分钟的ppt讲解和程序现场演示,并回答教师或者同学的提问。要求按照系统需求分析、系统设计(总体设计、各个模块的设计)、系统实现(各个模块的实现)、系统测试的思路讲解设计实现过程、采用的数据结构和算法、遇到的问题和解决方法。

评分方式:由全班同学投票确定分数,按每人获得的票数多少排序,第一名给与满分10分,排在后面的依次减1分。只要参加演讲,至少获得1分。

对上述评分方式如有异议,请在开课一周之内发邮件给老师sxh@hit.edu.cn,提出改进意见。

如有同学违反规定作弊或者造假,可以随时向老师实名举报,并出示证据,举报邮箱sxh@hit.edu.cn,一经核实,取消被举报同学的相应项成绩,并给举报人物质奖励。

显示全部
课程大纲

MOOC课程内容进度安排:

第1周 初识C语言(主讲:苏小红,叶麟,赵玲玲):

1.1  计算机基础

1.2  C语言的集成开发环境 Code::Blocks和Visual C++6.0介绍

1.3  变量的定义和debug简介   

1.4  不同类型数据的存储与表示    

1.5  宏常量与const常量 

第2周 简单计算(主讲:苏小红):

2.1  赋值运算符

2.2  算术运算符   

2.3  增1和减1运算符

2.4  自动类型转换与类型提升   

2.5  强制类型转换 

第3周 输入输出(主讲:苏小红):

3.1  数据的格式化屏幕输出    

3.2  数据的格式化键盘输入    

3.3  单个字符的输入输出

3.4  进阶内容1——用getchar()输入数据存在的问题(错误案例分析)

3.5  进阶内容2——用%c格式符输入数据存在的问题(错误案例分析) 

第4周 选择结构(主讲:苏小红):

4.1  关系运算和逻辑运算

4.2  条件语句     

4.3  开关语句及错误案例分析

4.4  进阶内容——数值溢出和精度损失问题分析

4.5  进阶内容——软件测试和错误实例分析   

第5周 循环结构(主讲:苏小红):           

5.1  计数控制的循环和累加累乘-for语句 

5.2  标记控制的循环和递推求解-while和do-while语句

5.3  条件控制的循环—猜数游戏

5.4  嵌套循环  

5.5  流程的转移控制和穷举法求解问题

5.6  进阶内容——软件调试与错误实例分析 

第6周 函数(主讲:苏小红):

6.1  函数定义、函数调用与参数传递、函数原型 

6.2  函数封装与程序的健壮性     

6.3  断言与防御式编程    

6.4  进阶内容——代码风格 

第7周 函数与递归(主讲:苏小红):

7.1  函数的嵌套调用和递归调用   

7.2  递归函数与函数调用栈      

7.3  进阶内容——尾递归 

7.4  变量的作用域

7.5  变量的存储类型 

第8周 数组(主讲:苏小红,叶麟):

8.1  数组的定义和初始化

8.2  进阶内容——数组元素的访问和螺旋矩阵

8.3  向函数传递一维数组和二维数组

8.4  计算最值和查找算法的函数实现

8.5  排序算法的函数实现

8.6  进阶内容——数组的其他应用 

第9周 指针与字符串(主讲:苏小红):

9.1  指针变量的定义、初始化及其解引用    

9.2  指针变量做函数参数 

9.3  字符数组和字符指针

9.4  字符串处理函数

第10周 指针与函数(主讲:苏小红):

10.1  向函数传递字符串 

10.2  从函数返回字符串  

10.3  进阶内容——缓冲区溢出与数组下标越界问题  

10.4  进阶内容——函数指针及其应用 

第11周 指针与数组(主讲:苏小红):

11.1  指针的算术运算

11.2  指针和一维数组间的关系

11.3  进阶内容——指针和二维数组间的关系

11.4  进阶内容——指针数组及其应用  

第12周 结构体和共用体(主讲:苏小红):

12.1  结构体类型与结构体变量

12.2  结构体数组

12.3  结构体的相关计算和操作

12.4  向函数传递结构体及结构体指针   

12.5  枚举类型和共用体及其应用

12.6  进阶内容——结构体应用的典型实例 

第13周 动态内存分配(主讲:苏小红,赵玲玲):

11.1 C程序的内存映像和动态内存分配 

11.2 进阶内容——动态数组  

11.3 进阶内容——常见的内存错误及其解决对策     

第14周 文件操作(主讲:苏小红,叶麟):

14.1  二进制文件、文本文件和标准输入输出流 

14.2  文件的打开和关闭

14.3   按格式读写文件     

14.4   按字符和行读写文件

      14.4.1 按字符和行读写文件

      14.4.2 进阶内容——使用函数feof()的注意事项

14.5  按数据块读写文件  

14.6  文件的随机读写和文件缓冲

第15周 动态数据结构(主讲:赵玲玲):

15.1  单向链表      

15.2  进阶内容——其他数据结构简介


注:进阶内容有一定的难度,不在考试范围内。

展开全部
预备知识

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

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

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

参考资料

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

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

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

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

3. 参考教材

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

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

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

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

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-16.01mingw-setup.exe)

常见问题

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


显示全部
源课程

该SPOC课程部分内容来自以上源课程,在源基础上老师进一步增加了新的课程内容

哈尔滨工业大学
1 位授课老师
苏小红

苏小红

博士,教授,博士生导师

下载
下载

下载App