电子科技大学

图片
课程概述

本课程是程序设计C语言和C++语言的入门课程。兼顾基础理论和编程实践。基础理论浅显易懂,编程案例趣味性强。视频使用当下流行的集成开发环境visual studio 2015进行编程与调试工具。从分析问题,寻找解题思路,到编程、调试、运行,都借助于实际案例进行展示。特别是初期的编译错误的定位与解决策略,后面的运行错误借助调试工具进行查错、纠错等,通过一系列事例一一展开,很容易通过视频一步步的演示学会编程方法与调试技术。而调试技术的掌握是初学者的难点之一。完整的编程过程解决了初学者看教材明白,上机却无从下手的问题。

   不少同学学习C语言的难点在指针与函数。而随后的随处可见的C++的成员函数很自然的就解除函数方面的困惑。指针的难点在于和数组、函数等结合下的变化多端,加上指针使用非常容易出错,这种结合下的错误更多且难以解决。本课程先进行理论讲解,通过指针对内存的实际操作情况进行演示与分析,然后通过由浅入深的编程例题和作业逐渐掌握指针。

  学习C语言后,再学习C++,存在面向过程思想向面向对象思想转变的困难,造成学完C++还不能理解C++特点,也不能正确使用C++进行程序设计。本课程通过用C++语言改写前面C语言案例,对比理解二者的区别,体会C++的优势。然后用一个简单的图形界面游戏逐渐扩展功能,使其具有可玩性,功能的增加,使得C语言完成难度增加,而C++的类、继承、派生等面向对象技术却轻松实现这个游戏。通过编程实战掌握C++语言的优势,通过实际案例掌握面向对象思想,解决学而不知何用的困惑。


授课目标
本课程将使学生掌握程序设计基本思想,掌握自顶向下设计和面向对象开发技术,能够熟练应用C和C++语言进行程序设计。了解计算机及其技术基础,具有良好的程序开发组织管理、协作能力;掌握计算机科学基本思维与基本方法;初步具备应用计算机进行软件开发的能力。
证书要求

完成每一章的课后编程作业及期末编程考试。平时编程作业占60%,期末编程考试占40%。

预备知识

计算机的数据存储方式及进制转换

授课大纲

第1章.程序设计概论(1周)

本章主要介绍C/C++语言的发展与特点,C/C++语言的基本程序结构,语法单位,以及C/C++语言程序的开发过程等,为以后各章的学习奠定全面基础。要求学生:

1、了解计算机系统结构,计算机软件,高级语言基础知识,C/C++语言的特点和计算机程序的基本设计过程。

2、理解并熟悉C/C++程序的编写和执行过程,程序的编辑、编译、运行步骤,为今后上机实验做好全面准备。

3、掌握C/C++语言程序的基本结构和基本语法单位。

重点:高级语言丰富的数据类型,强有力的语句功能,种类丰富的运算符,灵活的表达方式,高效率的代码和程序可移植性。


 

第2章.基本数据类型及运算(1周)

本章主要介绍C程序设计的基础知识,内容包括基本数据类型、常量、变量、基本运算、类型转换及运算的优先级与结合性等。要求学生:

1、了解C语言基本类型的转换规则。

2、理解运算的优先级和结合性。

3、掌握C语言中的基本数据基础,掌握数据的基本运算。

重点:根据数据的不同性质和用途把数据进行分类。


第3章.控制语句(1周)

本章主要讲述程序的三种基本结构:顺序结构、分支结构和循环结构。要求学生:

1、了解GOTO语句。

2、理解break,continue在循环语句中所起作用,理解switch 多分支语句。

3、掌握if语句,注意它的各种变形及嵌套关系,掌握C语言的3种循环语句,重点掌握for循环流程,掌握程序设计所必须的逻辑思维能力和算法设计的基本思维与基本方法。

重点:全面介绍流程控制语句,一共8条,分别实现分支结构,循环结构和控制转移。分支、循环结构在实用程序中大量频繁使用,是程序设计的基础。


第4章.数组和结构(1周)

本章介绍一种新的数据类型,数组。其特点是一种有序数据的集合,数组中元素数据类型相同,元素个数确定。主要用于处理大量同类数据。讲述结构及结构变量的定义,结构成员的访问及结构变量初始化等问题。结构类型变量由一组变量组合而成,其中每个变量称为该类型的元素变量(或成员变量),简称元素。对于构造类型的变量来说,重点是掌握访问其元素的方法。要求学生:

1、了解多维数组。

2、理解数组存储方式、结构类型存储方式和结构变量初始化。

3、掌握数组元素的引用方法,掌握结构类型和结构变量的定义、使用过程。

重点:数组名在数组中表示的特定含义。各种构造数据类型变量的引用方法。


 

第5章.指针(2周)

本章主要介绍指针概念、定义、运算及应用。指针类型是C语言提供的一种特殊的数据类型。要求学生:

1、了解多重指针、函数指针等概念。

2、理解指针的概念、掌握两个运算符*和&及其运算。

3、掌握指针与数组,字符串的关系,能运用指针解决实际问题。

重点:指针的概念,指针与数组的关系等。


 

第6章.函数(1周)

本章主要讲述C语言的自定义函数,内容包括:函数定义,函数调用,函数参数,函数与数组,函数与指针,递归函数,命令行参数等。要求学生:

1、了解多重指针、函数指针等概念,了解四种变量的存储方式和内存分配过程,了解命令行参数。

2、理解函数模块化设计过程。

3、掌握函数的定义和调用,掌握传值和传址两种参数传递方式,掌握全局变量,局部变量在程序运行期间的作用域、生命期,理解局部静态变量在程序中值的变化情况。

重点:函数调用的参数传递方式。


 

第7章.C++编程基础(1周)

本章讲述C++的基本编程基础,包括基本的I/O操作(cin、cout的基本使用方式)、C++的常变量、C++的引用类型、内联函数、带默认形参值函数、函数重载、使用new和delete运算符进行动态内存分配与释放的方式。要求学生:

1、掌握cin、cout的基本用法。

2、理解C++常变量与C语言符号常量的异同。

3、理解内联函数的作用、与宏定义的区别,学会定义内联函数。

4、默认形参值函数的定义和使用方式;函数重载的作用、如何进行函数重载、调用重载函数的方式;在函数调用时使用引用进行参数传递的方式。

5、掌握new和delete的基本用法。

重点:cin和cout的基本用法,C++常变量的特点和用法、与C语言符号产量的区别。


 

第8章类与对象(2周)

本章讲述数据封装的基本概念(将一组数据以及操作这组数据的函数形成一个有机的整体);类的定义和使用方式;类成员的访问控制方式;构造函数、拷贝构造函数及析构函数的作用、定义及使用方式;对象数组的定义及初始化方式;对象指针的定义及使用方式,this指针的作用及典型用法;静态成员的特点,作用及使用方式;友元机制的特点及基本使用方式。要求学生:

1、掌握类的定义和类成员的访问控制;

2、掌握构造函数、拷贝构造函数及析构函数;

3、理解this指针;理解静态成员。

4、理解类组合的意义与子对象的初始化方法。

重点:

(1)类的定义和实现方式,访问控制属性对成员引用的影响。

(2)构造函数、拷贝构造函数及析构函数的作用。

 


第9章继承、派生与多态性(2周)

本章讲述派生类的概念和分类;单继承和多继承派生类的定义方式;派生方式下构造函数和析构函数的调用顺序;继承方式下同名成员的访问方式;继承方式对基类成员的影响;类型兼容规则;派生方式下的二义性问题,以及用虚基类解决二义性问题;讲述运算符重载的概念及重载方式;典型的运算符重载实例;引入虚函数的意义、虚函数的定义和使用方式;纯虚函数及抽象类。运算符重载的概念、及语法形式,一元和二元运算符的特点;类型转换函数的基本定义方式;虚函数及抽象类。

 

要求学生:

1、 掌握派生类的定义和使用方式

2、 理解public继承的逻辑意义

3、 理解private继承的逻辑意义

4、理解派生方式下的二义性问题

5、了解类型兼容规则

6、理解运算符重载的概念和意义

7、掌握运算符重载的语法

8、了解将运算符重载为成员函数与重载为友元函数的区别,它们各自的适用范围

9、掌握+、-、*等二元运算符的重载

10、理解如何区分前缀和后缀两种重载形式

11、理解虚函数的概念、作用;掌握虚函数使用方式

12、理解抽象类的特性,掌握抽象类的用法

 

重点:

(1)单继承派生类的定义和实现。

(2)单继承派生类的构造函数和析构函数。

(3)常见运算符(如+、-等)的重载方式。

(4)虚函数。

 


第10章.模板、命名空间和异常处理(1周)

本章主要讲述C++函数模板、类模板的概念、作用定义及使用方式,C++中命名空间的概念和作用,异常处理的作用及语法格式。通过典型案例,理解简单算法设计、表达、程序编写等过程。

 

要求学生:

(1)   理解函数模板、类模板的概念和作用,能够使用模板机制解决简单的实际问题

(2)   理解命名空间的概念和作用

(3)   了解C++的异常处理机制

(4)   了解C++语言协同开发能力和解决实际问题的常见方法

(5)   理解简单算法设计、表达、程序编写等过程,具备利用语言解决实际问题的能力,具备工程实践观和效益意识,具有良好的程序开发组织管理、协作能力。

重点:

(1)函数模板、类模板的机制和典型用法。

(2)命名空间机制和用法。

 


参考资料

 1. C语言程序设计(第3版)

     陈文宇 等

     电子科技大学出版社 2011.8


2. 《C++语言程序设计教程》(第二版)

     沈显君 杨进才等

     清华大学出版社2010.8




常见问题
  1. 一般的开发环境使用scanf,visual studio 2015要求使用scanf_s函数,目的是为了增加安全性。scanf_s只能用于vs开发环境,不具备可移植性。

  2. c,c++的函数返回类型可以任意,但main函数比较特殊,建议返回int,虽然vs2015开发环境可以返回void类型,且编程也更方便,但从安全性考虑和可移植性考虑,使用int main(...)比较好。

  3. 开发工具devc++也挺好用,还有大量的各种开发工具,但我们课程以vs2015为例,在大部分visual studio各种版本都能够正常运行,但vs系列比较大,占用空间多,同学们可以自由选择。而我们作业系统采用爱课程网提供的在线编辑系统,可以实时得到分数,这个系统不是vs开发环境,因此还请同学们采用标准c或者C++函数,而不是vs的函数完成作业。