hi,小慕
课程

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

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

国家精品

认证学习

智慧课程

理学工学农学

计算机

经济管理

外语

音乐与艺术

心理学

文史哲法

医学与保健

教育教学

大学生竞赛

软件实训

人工智能

升学/择业

考研

期末突击

专升本

四六级

保研及论文

求职就业

专四专八

大学应试英语

期末资料

终身学习

有声课堂

兴趣技能

hi,小mooc
C语言程序设计精髓
第1次开课
开课时间: 2014年11月03日 ~ 2015年02月27日
学时安排: 1小时/周
当前开课已结束 已有 25727 人参加
老师已关闭该学期,无法查看
课程详情
课程评价(2449)
spContent=​学习程序设计是一件充满挑战、更充满乐趣的事情,然而学习之初,它之所以给你枯燥乏味的感觉,那是因为没有发掘出它的趣味来。本课程力图用最简明的语言、最典型的实例及最通俗的解释将这种趣味性挖掘出来,带给你全新的学习体验,和你一起欣赏C语言之美,领悟C语言之妙,体会学习C语言之无穷乐趣。
​学习程序设计是一件充满挑战、更充满乐趣的事情,然而学习之初,它之所以给你枯燥乏味的感觉,那是因为没有发掘出它的趣味来。本课程力图用最简明的语言、最典型的实例及最通俗的解释将这种趣味性挖掘出来,带给你全新的学习体验,和你一起欣赏C语言之美,领悟C语言之妙,体会学习C语言之无穷乐趣。
—— 课程团队
课程概述

    

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

    

   编程语言层出不穷,不胜枚举,能帮助我们以不变应万变的奥秘何在?答案就是“编程之魂”。传统的编程入门课,都是以教授一种语言的基本语法为主,试图通过语言来传达“编程之魂”,但这样也许你会将更多的精力用在理解语言的语法细节上,只见树木不见森林。  

    期望通过本课程的学习,你不只是简单地能够掌握一种语言的语法,还能理解隐含在语法背后的思想,并初步具备灵活使用这些思想进行编写程序解决实际问题的能力。如果你掌握了这些,你会发现,迈向成功的最后一步不过是选择一种合适的编程工具而已。  

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


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

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

课程大纲

这是目前暂时设计的课程大纲。每周均为1个小时的课时内容。合计15周。根据大家在讨论区的反映,我们会随时对大纲做出调整.

15学时,15周 

12个知识单元:C数据类型,C算术运算和赋值运算,数据的键盘输入和屏幕输出,分支控制,循环控制,函数,数组,指针,指针与数组,结构体和共用体,动态数据结构的C语言实现,文件操作


每周都包括一些进阶内容,这些内容面向想深入学习C语言的学习者,不在考试范围内。


第1周(主讲:苏小红,赵玲玲):

第1章 C数据类型

1.1  C语言的发展历史和特点

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

1.3  变量的定义   

1.4  变量的类型决定了什么?    

    1.4.1  不同类型数据可参与的运算不同

    1.4.2  不同类型数据的表数范围不同   

    1.4.3  不同类型数据占用的内存大小不同    

    1.4.4  不同类型数据的存储形式不同   

1.5  常量

 

第2周(主讲:苏小红):

第2章 C算术运算和赋值运算

2.1  赋值运算符

2.2  算术运算符   

2.3  增1和减1运算符

2.4  算术表达式中的自动类型转换   

2.5  强制类型转换

 

第3周(主讲:苏小红):

第3章 数据的键盘输入和屏幕输出

3.1   数据的格式化屏幕输出    

3.2   数据的格式化键盘输入    

3.3   单个字符的输入输出

3.4   进阶内容1——使用getchar()输入数据存在的问题

3.5   进阶内容2——使用%c格式符输入数据时存在的问题

 

第4周(主讲:苏小红):

第4章 分支控制

4.1  关系运算和逻辑运算

4.2  条件语句  

    4.2.1  if与if-else形式的条件语句      

    4.2.2  else-if级联形式的条件语句      

4.3  开关语句

4.4  进阶内容——赋值中的自动类型转换

    4.4.1 数值溢出问题分析

    4.4.2 精度损失问题分析

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

 

第5周(主讲:苏小红):

第5章 循环控制              

5.1  计数控制的循环-for语句 

5.2  标记控制的循环-while语句和do-while语句

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

5.4  嵌套循环  

5.5  流程的转移控制      

    5.5.1  goto语句      

    5.5.2  break语句与continue语句

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

 

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

第6章 函数-1

6.1  函数的分类和定义 

6.2  函数调用与参数传递      

6.3  函数原型、函数封装

     6.3.1 函数原型、函数封装

     6.3.2 进阶内容——防御性程序设计      

6.4  断言

6.5  进阶内容——代码风格

 

第7周(主讲:苏小红):

第6章 函数-2

6.6 递归     

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

    6.6.2  递归函数与函数调用栈      

    6.6.3  进阶内容——尾递归 

6.7  变量的作用域

6.8  变量的存储类型

 

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

第7章 数组

7.1  一维数组的定义和初始化以及下标越界访存问题

7.2  二维数组的定义和初始化以及下标越界访存问题

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

7.4  排序算法的函数实现

7.5  查找算法的函数实现

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

 

第9周(主讲:苏小红):

第8章 指针-1

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

8.2  指针变量做函数参数 

8.3  字符指针-1   

    8.3.1  字符数组和字符指针

    8.3.2  字符串处理函数


第10周(主讲:苏小红):

第8章 指针-2

8.3  字符指针-2     

    8.3.3  向函数传递字符串 

    8.3.4  从函数返回字符串  

    8.3.5  进阶内容——缓冲区溢出与缓冲区溢出攻击  

8.4 函数指针及其应用

 

第11周(主讲:苏小红):

第9章 指针与数组

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

9.2  指针和二维数组间的关系

9.3  指针数组及其应用  

    9.3.1 指针数组的定义   

    9.3.2 用指针数组表示多个字符串 

    9.3.3 用指针数组表示命令行参数

 

第12周(主讲:苏小红):

第10章 结构体和共用体

10.1  为什么要使用结构体类型,结构体类型的声明

10.2  结构体变量和结构体数组

    10.2.1  结构体变量的定义和初始化     

    10.2.2  结构体数组的定义和初始化     

    10.2.3  结构体成员的引用    

10.3  结构体指针      

    10.3.1  指向结构体变量的指针

    10.3.2  指向结构体数组的指针    

10.4  向函数传递结构体   

10.5  结构体所占内存的字节数

    10.5.1 结构体变量所占内存的字节数   

    10.5.2 结构体数组所占内存的字节数   

    10.5.3 结构体指针所占内存的字节数   

10.6  共用体

 

第13周(主讲:苏小红,赵玲玲):

第11章  动态数据结构的C语言实现-1

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

11.2 进阶内容——常见的内存错误      

    11.2.1  内存分配未成功就使用    

    11.2.2  内存分配成功但未初始化就使用     

    11.2.3  内存越界使用   

    11.2.4  内存泄露   

    11.2.5  内存释放后仍然继续使用 

11.3 动态数组  

    11.3.1  一维动态数组   

    11.3.2  进阶内容——二维动态数组

 

第14周(主讲:赵玲玲):

第11章  动态数据结构的C语言实现-2

11.4  利用结构体实现单向链表    

    11.4.1  引言  

    11.4.2  单向链表的定义

    11.4.3  单向链表的建立

    11.4.4  单向链表的删除操作

    11.4.5  单向链表的插入操作

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

 

第15周(主讲:苏小红,叶麟):

第12章  文件操作

12.1  二进制文件和文本文件 

12.2  文件的打开和关闭

12.3  按字符读写文件

      12.3.1 按字符读写文件

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

12.4  按格式读写文件     

12.5  按数据块读写文件  

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


展开全部
预备知识

本门课程的基本内容是面向零基础的学生。进阶内容是面向有一定编程基础或者大学计算机基础的学生,但是进阶内容不做为课程考试内容。

证书要求

评分方案:

评分按照周测验和期末考试的答题情况进行,周测验75分(每周5分,15周合计75分),课堂讨论10分,期末考试15分。


证书:

设置“合格”(达到60分以上)、"优秀"(达到80分以上)两档标准,由任课教师签发课程结业证书,其中成绩“优秀”者将颁发优秀证书。


参考资料

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

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


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

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


3. 参考教材

1)苏小红,王宇颖,孙志岗,《C语言程序设计(第2版)》,高等教育出版社,2013年8月,购书网址:亚马逊

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

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

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

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


4.相关链接

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

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


常见问题

Q:本门课程面向的授课群体是什么?没有任何基础能学习本课程吗?

A:本门课程的基本内容是面向零基础的学生。进阶内容是面向有一定编程基础或者大学计算机基础的学生,但是进阶内容不做为课程考试内容。


Q:本课程与其他课程在授课内容和讲授方法上有何不同?

A:在授课过程中,我们会注重解释“为什么”,揭示知识点背后的原理和思想,适时引入错误程序的分析、测试与调试,将一些易被忽视且对高水平程序设计很重要的“点”逐一展现给你,沿着数据结构从简单到复杂的主线展开,将软件工程相关的思想和方法渗透其中,从紧密结合实际的问题出发,在一个实例的“不断深化和提升”中逐步引出相关知识点,通过对问题的举一反三和前后知识点的融会贯通,由浅入深地启发引导你循序渐进地编程,让你在不知不觉中逐步加深对程序设计方法的了解和掌握。期望通过这样的设计,你在学完以后,不只是简单地掌握了C语言的语法,还能够理解隐藏在语法背后的思想,并初步具备灵活使用这些思想进行编程的能力。


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

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


Q:如何学好程序设计? 

A:“熟读唐诗三百首,不会吟诗也会诌”,编程也是如此。写出的漂亮程序不是听课听出来的,也不是看书看出来的,而是读别人的程序读出来的,更是自己动手练出来的。学习编程一定要多读多写多练啊,除此以外是没有捷径可走的。


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

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

 

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

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

 

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

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

 

Q:在高级语言,比如说C语言中,我们要赋一个很大很大的数(超过了所有数据类型的取值范围),那要怎么办呢?

A:用数组或链表的方式来存储大数,并制定相应的运算规则。以数组为例,一个元素存储数据的一位,数据的位数就是数组元素的个数,链表存储就是一个节点代表一位。高等教育出版社出版的《C语言程序设计学习指导(第2版)》中给出了一个用数组实现的计算50位阶乘的例子。

 

Q:计算机有16位和32位之分,在某些情况下的计算可能会发生数值溢出。数值溢出是因为计算的数值太大导致的,但是为什么我们的电脑里的自带计算器可以计算很大很大的数却不会发生问题呢?

A:先说“计算机有16位和32位之分”的问题,计算机字长代表了计算机进行一次整数运算所能直接处理的二进制数据的位数。字长越长,计算机运算速度就越快,运算精度越高,内存容量越大,性能就越强(因支持的指令多)。32位计算机的运算速度高于16位计算机,是因为32位计算机一次可进行32位的运算,而16位计算机每次只能进行16位的运算,所以它必须将较大的数拆分成16位的量才能计算,这就造成了其速度变慢。

高级语言中引入了数据类型的概念才会出现数值溢出,因为不同的数据类型所占内存的字节数及其取值范围是不同的并且是有限的,当向某种类型的变量赋以超出该类型取值范围的数值时,就会产生数值溢出。当程序从高位计算机向低位计算机移植(例如从64位系统移植到32位系统)时,很可能出现溢出问题。做无符号整数减法时,如果被减数小于减数,也会发生溢出。

 

Q:c语言的头文件有何用处?不同的头文件有何区别?

A:include 文件包含命令是把尖括号<>或引号""内指定的文件包含到本程序中来,成为本程序的一部分。被包含的文件通常是由系统提供的,其扩展名为.h,因此也称为头文件。C语言的头文件中包括了各个标准库函数的函数原型。在程序中调用一个库函数时,必须包含该函数原型所在的头文件。""是在编译器指定的目录(目录名通常为include)中查找这个头文件,而<>是先在源文件当前所在的目录中查找,找不到就在系统指定的目录中找.

 

Q:怎样判断一个函数需不需要返回值?

A:C语言中函数可以通过return返回一个值,是一个便利条件,因为它确实在很多情况下可以为我们提供便利,尽管有些函数看似无需返回值,但其实为什么还要将其设计成有返回值就是为了要利用这个便利条件。例如,scanf(),printf(),strcpy(),strcat()等其实都是有返回值的,而这个返回值还确实很有用。以scanf()为例,它返回的是正确读入的数据个数,如果出错则返回0值,这样我们就可以通过测试scanf()的返回值来判断用户是否正确读入了数据,而strcpy(str1,str2)返回的是str1指针,即拷贝后的字符串的地址,这样就可以将strcpy函数调用用在链式操作中了。

 

Q:函数和指针的联系是什么?
A:指针可以做函数参数的类型,也可以做函数返回值的类型,还可以让指针指向一个函数(即函数指针)。

 

Q:定义指向函数的指针时,指针类型是与函数返回值一致呢,还是与函数参数的类型一致?

A:函数指针的基类型是指它所指向的函数的返回值的类型,因此函数指针的基类型应与函数返回值的类型一致。


显示全部
哈尔滨工业大学
4 位授课老师
苏小红

苏小红

博士,教授,博士生导师

赵玲玲

赵玲玲

副教授

叶麟

叶麟

副教授

推荐课程

猴博士C语言不挂科-4小时学完C语言

猴博士爱讲课

312370人参加

猴博士Java不挂科-2小时学完Java

猴博士爱讲课

165807人参加

计算机网络期末冲刺-4小时突击计算机网络

王道论坛

17925人参加
下载
下载

下载App