hi,小慕
课程

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

hi,小mooc
C程序设计
第19次开课
开课时间: 2024年09月01日 ~ 2024年12月10日
学时安排: 4小时/周
当前开课已结束 已有 3147 人参加
认证学习
认证成绩和证书
智能问答和解析
视频学习辅助
老师已关闭该学期,无法查看
课程详情
课程评价(1353)
spContent=人类学语言时,学会了听说读写,学数学时,学会了运算推理,学物理时,学会了观察实证,从而可以理解现实生活的周围,以便针对问题提出有效的解决方案。出于同样的理由,我们应该学习编程,这样能更好地理解越来越数字化的世界。编程不只是一门技术,它教会人们如何思考。现在,与我们一起学编程吧!
人类学语言时,学会了听说读写,学数学时,学会了运算推理,学物理时,学会了观察实证,从而可以理解现实生活的周围,以便针对问题提出有效的解决方案。出于同样的理由,我们应该学习编程,这样能更好地理解越来越数字化的世界。编程不只是一门技术,它教会人们如何思考。现在,与我们一起学编程吧!
—— 课程团队
课程概述

程序设计(CPComputer Programming)课程是大学计算机教育的核心课程,它既是各类专业技术的应用基础,又是各种实践环节的软件工具,更是课程设计、学科竞赛、毕业设计、创新创业、创客科技等活动的重要平台。编程能力不仅是学习者进一步专业深造的潜力体现,也是创新人才的重要指标。

学习编程包括语言工具、问题求解、实现方法、算法思想、编程抽象、编程范式、设计模式等内容,涉及算法设计、程序实现、计算科学、软件工程、系统开发、学科交叉等方面。本质上,程序是逻辑演绎的形式化表达,反映的是人类对这个世界的数字化理解。因此,提高编程能力可从两点出发:一是以思维训练为中心的编程技能,二是以学科融合为核心的领域知识。

那么,如何学习编程呢?

1.按“双线索”学习程序语言

任何程序语言,包括C语言,都是一个标准化的、具有庞大知识内容的形式语言体系。因此以语言知识为学习线索必然是整体凌乱、抓不住主次,容易迷失学编程的方向。

须知,计算机的基本工作原理决定了计算机问题求解是“计算数据”的过程,编程就是去解决“如何表示数据”和“如何实现计算”。将“数据表示”和“程序实现”作为学习程序语言的两条主线索,抓住语言对此所起的作用,螺旋上升,交叉推进,如下图:

这时,你会发现程序语言是服务编程的工具而不是目标。

2.有“节奏感”推进编程实践

学习程序语言时需要快节奏,学习编程方法和编程技术时需要慢节奏,即使是敲代码也要有节奏,快慢使得学习者“抓大”(设计方法)“放小”(语言知识),得到最大化的“饱满感”编程训练。

学编程需要完成大量练习,称为“刷题”。编程实践过程中的灵感、技术、习惯、动机、反思以及畅想,将会把程序设计的知识逐一转化成技能,形成编程思维。对编程有激情是一件很美妙的事情,但同时也必须培养自己对于编程周边所有事情的热情。在节奏引领下可以更有效地与计算机对话,从而赋予我们将创意变成原型的能力。

这时,你会发现编程是帮助人们与计算机沟通的工具。

3.从“多维度”进行思维训练

计算科学思维是多维度的,例如基于计算技术的普适思维,特点是抽象和构造;基于算法思想的数学思维,特点是形式化和自动化;基于数据技术的逻辑思维,特点是因果关系和相关关系;基于系统结构的应用思维,特点是整体性和结构性。

程序最重要的两个基本要素是算法和数据结构,编程的难点不是算法或者数据结构本身,而是如何理解和分解问题,并将其映射到最合适的算法或数据结构上,这个映射本身不是程序要解决的问题,是人脑在思维,是构造性思维、逆向思维、猜想与试验、设计思维等全脑思维的艺术。

这时,你会发现编程是思维的体操。

4.用“系统观”拓展编程视野

衡量编程有两个重要指标:编程累计行数(TLOC)和单个程序行数(SLOC)。以解题为主的编程训练能提高TLOC,但却止步于SLOC。即使将小规模、数学型问题做成百上千,TLOC指标上去了,但SLOC却不见长。一般的,SLOC小于300行时很难让人体会到“开发的感觉”,这时编程局限在“数学工具”视野里。显然,单纯的思维训练和仅仅摄取知识信息无法形成系统观。

实际上,计算方法(数值计算、非数值计算)仅是程序设计方法的一种,程序方法学中还有诸如操作系统、人机界面、图形图像、多媒体、网络通信、数据库、硬件接口等技术领域,每个领域都有独特的编程技术和精巧的解决方法。通过引入高级编程技术的学习,融合各类学科专业的领域知识,拓展求解问题的专业覆盖面、问题复杂度和数量,可以改变编程的广度、深度和力度,形成编程核心模式及对它们不断运用所形成的思维方式的系统观,这是优秀程序员最重要的素质。

这时,你会发现编程是全方位的创新实践。

5.以“跨领域”塑造核心价值

掌握知识和能力是大学学业的价值,但仅仅是这些就可能掩盖了大学学业的核心价值和潜质,即通过知识内化为思维、通过能力提升到创造,最终拥有终身享用不尽的、可持续发展的知识发现、知识获取、知识建构的科学素养。

学会了编程就等于掌握了信息时代的听说读写能力,学习编程形成的心理技能对于我们生活的其他方面都极其有用。通过跨学科、跨领域的延伸,编程将提高问题求解的能力,提升对世界的理解力和改善解决问题的决策能力,建立起批判性思维、系统性思维、创造性思维。通过增加挑战式内容,强化在专业学科研究上表现出很强的发展潜力,形成学业核心价值。

这时,你会发现编程教会人们如何思考。

归纳起来,就是“技能提升、思维训练、系统培养、价值塑造”。

显示全部
授课目标

本科生和社会学习者

课程大纲
第1讲 了解计算机的工作原理
课时目标:了解计算机的基本工作原理、体系结构
1.计算机系统的组成、用途各异的计算机
2.指令与计算机程序、计算机中的数
课后测验:了解计算机的工作原理
第2讲 信息在计算机中的表示
课时目标:了解计算机中信息的表示和存储方法
1.进制数的转换
2.数值数据、字符数据、其他数据的表示与存储
课后测验:信息在计算机中的表示
第3讲 编程的理论基础
课时目标:了解程序语言、算法、程序设计的概念和特点
1.程序语言、计算机问题求解的基本特点
2.计算机算法及其表示、程序设计技术
课后测验:编程的理论基础
第4讲 编写第一个C程序
课时目标:掌握C程序的基本语法、结构和开发步骤
1.C语言的历史、C语言基本词法、编写第1个C程序
2.编写简单的程序、C程序基本结构、开发步骤、编码风格
课后测验:编写第一个C程序
第5讲 将简单数据引入C程序中
课时目标:掌握C语言支持的数据类型和数据描述方法
1.数据类型、常量
2.变量、类型定义的修饰
资料片:国际大学生程序设计竞赛――2014西安赛区:欢迎
资料片:国际大学生程序设计竞赛――竞赛规则
课后测验:将简单数据引入C程序中
第6讲 数值数据的运算与处理
课时目标:掌握数值型数据的运算
1.运算符与表达式、算术运算
2.自增自减运算、位运算
课后测验:数值数据的运算和处理
第7讲 逻辑数据的运算与处理
课时目标:掌握逻辑型数据的运算
1.关系运算、逻辑运算
2.用布尔代数简化逻辑式子、条件运算、其他运算、常量表达式
课后测验:逻辑数据的运算和处理
第8讲 赋值和类型转换
课时目标:掌握赋值运算符的使用、混合运算以类型转换的规则
1.赋值运算符、隐式类型转换
2.混合运算的风险控制、显式类型转换
资料片:AlphaGo
课后测验:赋值与类型转换
第9讲 编写程序语句
课时目标:掌握简单的输入输出实现getchar以及putchar函数
1.编写简单语句、复合语句、注释,语句的写法
2.编程实现单个字符输入输出
资料片:那些年的编程快手们――用代码将梦想照进现实
课后测验:编写程序语句
第10讲 编程实现简单数据的输出
课时目标:掌握输入函数printf函数的使用以及常见的输出格式控制
1.printf函数和输出格式控制(1)
2.printf函数和输出格式控制(2)
课后测验:编程实现简单数据的输出
第11讲 编程实现简单数据的输入
课时目标:掌握输入函数scanf函数的使用以及常见的输入格式控制
1.scanf函数和输入格式控制(1)
2.scanf函数和输入格式控制(2)
课后测验:编程实现简单数据的输入
第12讲 编程实现选择分支
课时目标:掌握顺序结构和简单选择结构的实现
1.程序顺序结构和跳转结构
2.程序选择结构
课后测验:编程实现选择分支
第13讲 编程实现嵌套的选择分支
课时目标:掌握复杂选择结构的实现
1.选择结构的嵌套
2.程序如何应用选择结构
资料片:算法的舞蹈――冒泡排序Bubble Sort
课后测验:编程实现嵌套的选择分支
第14讲 编程实现循环
课时目标:掌握三种循环语句的语法和使用
1.while循环、循环三要素
2.循环不变式、do和for循环
资料片:算法的舞蹈――选择排序Select Sort
课后测验:编程实现循环
第15讲 循环的终止、加快和嵌套
课时目标:掌握循环的控制方法,掌握continue和break语句的语法和使用
1.终止、加快、嵌套循环
2.编写计数型、条件型循环,循环程序时间性能分析
资料片:算法的舞蹈――插入排序Insert Sort
课后测验:循环的终止、加快和嵌套
第16讲 编程实现枚举算法
课时目标:掌握枚举、迭代和递推等基本算法的策略及编程逻辑
1.枚举算法策略
2.迭代算法、递推算法
资料片:算法的舞蹈――快速排序Quick Sort
课后测验:编程实现枚举算法
第17讲 调用函数-返回与参数传递
课时目标:掌握函数的定义方法
1.函数定义语法和函数返回
2.如何设计函数参数
资料片:算法的舞蹈――归并排序Merge Sort
课后测验: 调用函数-返回与参数传递
第18讲 调用函数-原型与声明
课时目标:掌握自定义函数以及库函数的调用方法
1.函数声明、原型及库函数调用方法
2.常用库函数和第三方函数库使用
资料片:算法的舞蹈――希尔排序Shell Sort
课后测验:调用函数-原型与声明
第19讲 调用函数-调用形式
课时目标:掌握函数的嵌套和递归调用
1.函数调用优化,函数嵌套和递归调用
2.递归算法策略、分治算法策略
资料片:算法的天籁之音――6分钟“听”15种排序算法
课后测验:调用函数-调用形式
第20讲 设计函数-函数间的数据传递(1)
课时目标:掌握作用域的概念规则
1.对象作用域概念
2.多模块下的作用域设计
资料片:排序算法比较
课后测验:设计函数-函数间的数据传递(1)
第21讲 设计函数-函数间的数据传递(2)
课时目标:掌握程序映像和对象生命期的基本概念
1.程序映像及加载
2.对象生命期设计
课后测验:设计函数-函数间的数据传递(2)
第22讲 设计函数-接口与实现分离
课时目标:掌握多模块程序的设计方法
1.对象初始化
2.多模块下的接口设计
课后测验:设计函数-接口与实现分离
第23讲 编写规模化程序
课时目标:掌握多文件程序的开发方法
1.多文件程序结构与组织
2.规模化程序的工程设计
课后测验:编写规模化程序
第24讲 编程任务的自动化工具
课时目标:掌握预处理命令宏的定义和使用方法
1.用宏实现编程任务自动化
2.编译器预定义宏
课后测验:编程任务的自动化工具
第25讲 编程任务的接口与版本控制
课时目标:掌握文件包含及条件编译预处理命令的功能和使用方法
1.文件包含
2.实现版本控制
课后测验:编程任务的接口与版本控制
第26讲 配置开发环境
课时目标:掌握专业函数库的配置和使用方法
1.开发环境参数与配置
2.使用第三方开发库
第27讲 批量数据的表示与处理
课时目标:掌握数组的定义和初始化以及元素引用方法
1.一维数组
2.多维数组 课后测验:批量数据的表示与处理
第28讲 批量数据的遍历与访问
课时目标:掌握数组的遍历方法
1.数组元素的遍历
2.矩阵运算
课后测验:批量数据的遍历与访问
第29讲 函数之间实现批量数据传递
课时目标:掌握函数之间传递数组的方法
1.幻方编程
2.传递数组参数
课后测验:函数之间实现批量数据传递
第30讲 构建大数和高精度类型
课时目标:掌握使用数组进行特殊数据运算的方法
1.构建大数类型
2.高精度运算和混合编程
课后测验:构建大数和高精度类型
第31讲 文字信息的表示与处理
课时目标:掌握字符串的表示及常用处理实现
1.字符串的表示与处理
2.字符串应用
课后测验:文字信息的表示与处理
第32讲 实现排序算法
课时目标:掌握批量数据的排序实现方法
1.实现冒泡、选择、插入排序
2.实现快速、归并、希尔等排序算法
课后测验:实现排序算法
第33讲 用空间换取时间编程方法
课时目标:理解算法的时间复杂度和空间复杂度的概念;掌握基本的空间换时间的编程策略
1.实现查找算法
2.用空间换取时间编程
课后测验:用空间换取时间编程方法
第34讲 探究指针的本质与使用
课时目标:理解指针的本质和简单使用方法
1.指针的本质是什么?
2.使用指针
课后测验: 探究指针的本质与使用
第35讲 指针运用的风险控制
课时目标:理解指针类型的限定以及运算规则
1.指针的有效性和风险控制
2.指针的运算规则
课后测验:指针运用的风险控制
第36讲 数组元素的简洁表示
课时目标:掌握使用指针访问数组元素的方法
1.指向一维数组元素的指针
2.指向多维数组元素的指针
课后测验:数组元素的简洁表示
第37讲 大批量数据的简洁表示
课时目标:掌握使用指针访问数组的方法
1.指向数组的指针和指针数组
2.多级指针和批量数据简洁表示
课后测验:大批量数据的简洁表示
第38讲 完美实现函数之间的数据交换
课时目标:掌握函数之间传递数组的机制和语法
1.批量文字简洁表示
2.函数之间数据交换的高效方法
课后测验:完美实现函数之间的数据交换
第39讲 字符串查找与匹配
课时目标:掌握字符串的常见操作
1.函数之间传递字符串数据
2.字符串查找与匹配算法
课后测验:字符串查找与匹配
第40讲 回调函数
课时目标:掌握函数指针的定义和使用
1.学会用指针数据
2.学会用回调函数
课后测验:回调函数
第41讲 使用动态内存
课时目标:掌握内存申请和释放的常见函数
1.获取动态内存
2.使用动态内存
课后测验:使用动态内存
第42讲 复杂数据在C程序中的表示
课时目标:掌握结构体类型对象的定义和使用方法
1.结构体类型与对象
2.用指针简洁表示复杂数据
课后测验:复杂数据在C程序中的表示
第43讲 编程使用复杂数据
课时目标:了解共用类型的定义和使用方法;掌握枚举和位域的定义和使用方法
1.共用体类型和对象
2.枚举与位域
课后测验:编程使用复杂数据
第44讲 构建数据类型体系
课时目标:掌握链表的机制和定义方法
1.构建数据类型体系
2.用链表表示动态“数组”
课后测验:构建数据类型体系
第45讲 链表的运算
课时目标:掌握链表的基本操作方法
1.链表的运算
2.结点插入和删除
课后测验:用链表表示动态的复杂数据
第46讲 常用算法及策略
课时目标:掌握常用算法的策略及编程逻辑
1.动态规划与贪心算法
2.图搜索与回溯算法
第47讲 编程操作永久性数据
课时目标:掌握文件系统的基本概念,以及操作文件的常用函数
1.文件系统概念
2.操作文件
课后测验:编程操作永久性数据
第48讲 编程读写文件
课时目标:掌握编程读写文件的方法
1.用C程序读写文件
2.编程处理各种格式的文件
课后测验:编程读写文件
展开全部
预备知识

学习者应该先修过或已经掌握计算机导论或者大学计算机基础的主要内容,了解计算机的发展过程,理解计算机系统的构成和基本工作原理,并能够熟练地操作计算机及通过互联网获取信息资源。不能双手盲打键盘的学生,需要在开课初期多练习,迎头赶上!

参考资料

1.姜学锋、刘君瑞,C程序设计(第2版),清华大学出版社,2022年6月,ISBN9787302610434在线购买

2.姜学锋、魏英,C程序设计实验教程,清华大学出版社,2011年,ISBN 978-7-302-24943-6在线购买

3.姜学锋、刘君瑞、汪芳,C程序设计习题与解析,清华大学出版社,2011年,ISBN 978-7-302-24942-9在线购买

常见问题

Q : 课程除了MOOC平台上的单元测试题目,还需要完成其他平台的作业?


A : 本课程为学生提供了大量的基础编程技能训练题,有需要的同学登录NOJ平台:https://10.12.13.248平台完成课程相关的编程练习。该部分作业不占MOOC课程学期成绩,同学们根据自己实际情况有选择完成。


Q : NOJ平台上的作业完成有什么限制?


A : NOJ平台上的编程练习题根据知识点将100个编程题分为10季。一般同学们需要按照顺序完成,每个题目打开后需要在两周内提交正确答案,过期未提交或未通过的题目,将不能获得该题目的相应分数。


Q : NOJ平台上的课程设计需要完成么?


A : 课程设计作为提高学生综合实践与创新能力的重要途径,鼓励学有余力的同学尽量完成,不计入MOOC课程总成绩。

西北工业大学
3 位授课老师
姜学锋

姜学锋

副教授

刘君瑞

刘君瑞

副教授

张秀伟

张秀伟

副教授

推荐课程

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

猴博士爱讲课

311978人参加

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

猴博士爱讲课

165561人参加

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

王道论坛

17898人参加
下载
下载

下载App