资源描述:
计算机在我们的身边无所不在,现在的手机也是计算机,我们用它来学习、写作、交友,等等。驱动计算机运行的关键在于软件,也就是程序。而程序设计的关键,在于程序设计的思想。在本课中,课程团队将带着你,深入浅出,逐步揭开程序的秘密,从第一个简单的程序开始,领略程序的艺术,感受计算的魅力。
这是怎样的一门课
在人工智能与大数据的时代,程序设计或许变得越来越重要。程序设计是理工科专业学生基本的技能之一,但是即使是非理工科专业的学生,在很多软件中,可以利用程序设计让软件发挥出更强大的功能。
程序设计,也不仅仅是程序设计本身,计算思维一种利用计算机来解决问题的方式。学习程序设计,可以更好的理解计算机的工作方式,这也是本课程期望带给大家的。
授课团队的期望(教学愿景)
1. 在本课程中,我们期望带给你一个五彩斑斓的程序的世界,这里剔除了不同不同计算机语言的复杂苛刻的表达,而只留下了设计程序最基本的东西:过程与存储,算法与数据结构。
2. 在本课程中,我们为你带来了计算思维,这不仅仅是掌握一种利用计算解决问题方法,也是你未来面对各种问题的一种严谨的,结构化的思维方法,一种解决问题的方法。
3. 通过本课程的学习,我们期望你能够将计算机语言运用到你未来的工作学习中去,用到你的科研或工程中去,计算机语言,是一种工具,也不仅仅是一种工具,因为这种工具很可能彻底改变了你思考问题的方式。
4. 在本课程中,你或许会经历一些小小的坎坷,如何面对问题,如何拨开迷雾去伪存真,如何坚持不懈,如何适应、融入大学的学习,也是我们教学团队希望本课程带给大家的。
所以,你还不开始行动?
在这门课上我能学到什么?(学习目标)
本课程由浅入深,介绍计算机语言的基础知识,以计算思维和伪码作为入门,让学生逐步了解计算机语言的工作方式。
1. 通过本课程的学习,你能够描述大部分常用的程序设计算法(1.1),熟练运用多种程序的基本结构(1.2),灵活的调度存储(1.3),构建数据的结构(1.4),编写中小规模的代码(1.5)。
2. 通过本课程的学习,你能够分解略有些复杂的程序设计问题,逐级分解,直到每一个环节都是你力所能及且可以实现的(2.1),你也能够将程序设计运用到数学、物理等你正在学习,或你将要学习的课程中去,解决你遇到的实际问题(2.2)。
3. 通过本课程的学习,你能够对比不同计算机语言之间共同与差异(3.1),在实际的编程中,利用语言的优势(3.2),规避计算机语言所不能及的方面(3.3),触类旁通。
4.1 通过本课程的学习,在算法与存储的学习、运用中,你将描述自己在遇到困难时,是如何面对问题,处理问题,解决问题的(4.1),辨析自己的思维特质(4.2),更深入的了解自我,并在本课程中,参与课程之间的成员将相互介绍(4.3),相互学习,相互促进,相互进步(4.4)。
4.2 在本课程的线下课程中,同学们将经历团队项目的体验。在项目中,每一个小组成员都明确自己适合的角色,寻找自己未来在工作中的立足点(4.5),组织协调成员之间的关系(4.6),协调每个成员的工作量(4.7),帮助有困难的团队成员完成任务(4.8),激励整个团队向共同的目标前进(4.9)。
5. 通过本课程的学习,你将能够看到冷冰冰的计算机背后,其实是一个活灵活现、五彩缤纷的世界。你将能够调试有问题的程序(5.1),你将经历各种问题的解决过程,面对问题的表象,拨开迷雾,通过各种手段,解析问题的本质,并逐步找到问题的根源(5.2)。
6. 通过本课程的学习,你将看到网络学习的魅力。你进行资料搜集(6.1),综述现有的方法(6.2),提出自己的见解(6.3),在学习中暂时的搁置疑惑,允许“暗盒”的存在,并对问题进行全局的分析与判断(6.4),在学习中描述你的工作,有理有据,合乎逻辑与结构的撰写出你思考的过程(6.5)。
谁在讲授这门课?
李骏扬老师毕业于东南大学自动化学院,2002年本科毕业留校,2004年获得硕士学位,2014年获得博士学位。李骏扬老师讲授程序设计课程已经19年,国家级首批线上线下混合式一流课程负责人,曾获得首届全国教师教学创新大赛一等奖,江苏省教学成果一等奖,全国卓越高校联盟青年教师授课竞赛二等奖。
李老师教学方式独特,其课程既风趣,又有挑战,曾获得东南大学青年教师授课竞赛二等奖,教学奖励金二等奖,并多次入围东南大学“吾爱吾师”十大最受欢迎教师评选。
李老师认为,思维是课堂教学的关键,李老师的课堂注重思维与逻辑,也注重实践与练习,在李老师的课程中,同学们必须将自己的大脑充分的运转起来,通过各种分析、剖析,探究计算机程序运行的本质,理解计算机的工作过程。
本课程的教学团队还包括:
魏海坤:教授,博士生导师,东南大学自动化学院院长,研究领域:神经网络;
仰燕兰:讲师,博士,东南大学自动化学院教师;
杨万扣:博士,博士生导师,东南大学自动化学院教师,研究领域:人工智能;
如何开始本课程的学习?
开始本课程的学习,首先需要做好以下准备:
1. 进入课程公告,下载并安装X-Program编程平台,或者Visual Studio。
2. 合理安排好你的学习时间,在所有的截止日期之前完成相应的作业和单元测试
3. 每一单元的学习目标在课程大纲中发布,学习目的是每单元学习的纲要,也请同学们务必重视
4. 课程每个单元的视频内容在左侧“课件”的内容中
5. 课程每个单元每一课时,既包括了视频,也包括了授课内容的文档,以及评测等,你可以在视频的上方横向选项卡中切换该课时不同的内容
6. 每课时都包括了一个或多个讨论题目,请同学们认真参与讨论,应为每一个讨论都是一次深层次的思考
7. 尽管测试中大多都是选择题,但都需要融入你的思考,有的题目需要理解算法过程,有的题目是在理解知识内容基础上的应用,有的题目是对不同方法的对比与分析,以及对不同方法的评价,所以请认真对待每一次的测试。
授课目标
大学一年级学生,或对程序设计感兴趣的同学
课程大纲
第一单元:无所不在的程序
1.1 开篇:程 与 序
1.2 一步一步往前走的程序
1.3 丰富多彩的输入与输出
附A:X-Program的下载、安装与使用
附B:【计算之美】为什么采用二进制?以及各种数字在计算机中的二进制表达
附C:本课程教学建议
附D:在 Visual Studio 中编写 C / C++
第一单元测试
第二单元:数据和表达式
2.1 程序的存储单元——变量
2.2 表达式
2.3 区分数学公式和程序中的表达式
2.4 更复杂的表达式
附A:在 X-Program 中调试程序【十分重要!】
2.5 看看 C / C++ 程序是什么样子的
2.6 C / C++ 中的变量与数据类型
第三单元:分支结构
3.1 一元二次方程的无解情况
3.2 比较与逻辑运算符
3.3 多个维度的判别
第四单元:循环结构
4.1 对标准步骤进行循环
4.2 累加,每次循环都有一些小改变
4.3 求最大值,在循环中左挑右选
4.4 一个多功能融合的循环,并自己编程
4.5 九九乘法表,双层循环的嵌套,用变量控制循环的次数
第五单元:基础算法专题
5.1 百鸡百钱:穷举,并控制搜索范围
5.2 求质数:在搜索中一票否决
5.3 打印太极图,在搜索中利用状态变量
5.4 梅花数,拆分10进制数字
5.5 疯狂的兔子,递推问题
第五单元作业 X1
第六单元:数值计算
6.1 泰勒展开(sin的计算)
6.2 积分,理解数值方法
6.3 牛顿迭代,另类解方程
6.4 求PI,条条大路通罗马
附A 计算之美:分形艺术
第六单元作业 X1
第六单元作业X2
第七单元:数组
7.1 一组数字
7.2 海滩拾贝壳
7.3 排序一:冒泡
7.4 排序二:选择与插入
7.5 排序三:归并排序
第十一单元:结构体——面向对象的开始
11.1 面向对象的开场白
11.2 结构体——从一个点开始
11.3 结构体、指针、数组的融合
11.4 结构体三案例:分数、背单词、图片
11.5 你必须知道的结构体语法
第十一单元作业
第十一单元测验
第十二单元:类的初体验
12.1 让结构体 “动” 起来
12.2 从结构体到类
12.3 类的自我保护与后门:封装与友元
12.4 不仅仅为了初始化:构造与析构
第十二单元作业
第十三单元:理解存储
13.1 程序的四大存储区域
13.2 动态内存分配
13.3 引用
13.4 拷贝构造
13.5 一步一步解决问题:订单系统
13.6 存储的常见错误与调试方法
第十三单元作业
第十四单元:运算符重载
14.1 运算符重载的入门:算术运算与比较运算
14.2 一些原则:友元?作为成员重载?是否加上 const 标记?
14.3 赋值/联合赋值运算符的重载,以及引用的原则
14.4 输入输出运算符的重载
14.5 特殊运算符:++/–、[ ]、强制类型转换
第十五单元:模板
15.1 函数的模板:一个可以对任意类型的数组进行排序的函数
15.2 类的模板
15.3 模板与数据结构:一个列表模板类的实现
15.4 单向链表
第十六单元:继承(持续更新中)
16.1 继承,从功能的拓展开始