程序设计基础
分享
课程详情
课程评价
spContent=C语言是一门好学易懂的编程语言,它简单而强大,解决的问题从应用到底层,无所不能。让我们掌握玩转计算机的方法,学习终身受用的编程语言,解决身边的计算问题,给生活加点新鲜颜色,请跟随我们一起学习C语言,将思想幻化在指尖,让代码演绎青春,让程序驱动未来,弹指间掌控计算。
—— 课程团队
课程概述

C语言是一切编程语言的基础,是国际上广泛流行的计算机高级语言。它古老而长青,在各类编程语言排行榜上常年占据前三,具有简洁、紧凑、使用方便、灵活、处理能力强、运行效率高等特点,很多操作系统、设备驱动程序、嵌入式系统等都是用C语言实现的。通过本课程的学习,掌握程序设计的基本知识,并在实践中逐步掌握结构化程序设计的思想和方法,养成良好的编程习惯,培养利用计算机求解问题的能力,初步具备应用高级语言进行程序设计的能力,为后续数据结构、操作系统、面向对象程序设计等课程的深入学习奠定良好的基础。

授课目标
通过本课程的学习,掌握程序设计的基本知识,并在实践中逐步掌握结构化程序设计的思想和方法,养成良好的编程习惯,培养利用计算机求解问题的能力,初步具备应用高级语言进行程序设计的能力,为后续数据结构、操作系统、面向对象程序设计等课程的深入学习奠定良好的基础。
课程大纲

《程序设计基础》课程教学大纲

第一章  C语言概述(1周)

教学内容:

程序设计语言的功能、C语言的发展及特点、C语言程序的基本框架、C语言程序的编程步骤和结构化程序设计思想。

教学要求:

1.了解程序的含义,了解程序设计语言的功能;

2.了解结构化程序设计的基本的控制结构;

3.掌握C语言程序集成开发环境;

4.了解C 语言的特点和基本框架;

5.掌握用流程图描述简单的算法;

6.掌握运行一个C程序的基本步骤。

重点:

1.程序设计的含义;

2.C语言编译环境的使用。

难点:

C语言的三种基本结构

第二章  数据类型、运算符与表达式(2周)

教学内容:

数据的存储和C语言的基本数据类型、常量与变量、各种类型数据的输入和输出、数据类型转换方法、常用运算符及其表达式、顺序结构程序设计。

教学要求:

1.了解规范程序代码的编写;

2.掌握C 语言的基本数据类型的存储方式及表示方法;

3.掌握各种基本数据类型常量和变量的定义;

4.掌握各种数据类型输入和输出的方法;

5.掌握C语言常见的运算符的种类,理解各种表达式的求解规则;

6.掌握顺序结构程序设计方法。

重点:

1.C语言基本数据类型;

2.各种类型数据的输入输出方法;

3.各种运算符及各类表达式求解规则。

难点:

1.类型转换;

2.运算符的优先级和结合性。

第三章  选择结构(2周)

教学内容:

选择结构及作用、关系运算符及表达式、逻辑运算符及表达式、if语句和switch语句实现选择结构的方法及区别。

教学要求:

1.了解选择结构及其作用;

2.掌握关系运算符、逻辑运算符及其表达式的用法;

3.掌握if语句和switch语句的语法格式;

4.理解switch语句中的break的作用,if语句的嵌套实现方法;

5.理解选择结构程序设计方法。

重点:

If语句和switch语句的使用。

难点:

if语句嵌套的层次结构。

第四章  循环结构(3周)

教学内容:

使用whiledo…whilefor语句实现循环结构、whiledo…while的区别、循环嵌套、breakcontinue语句的使用。

教学要求:

1.了解循环的概念和作用;

2.掌握三种循环语句实现循环结构程序设计;

3.了解while do-while 语句的区别;

4.掌握break 语句和continue的使用方法;

5.理解循环嵌套的含义,掌握循环嵌套的实现方法。

重点:

1.三种循环语句;

2.两种跳转语句;

3.循环嵌套。

难点:

循环嵌套。

第五章  数组(3周)

教学内容:

一维数组、二维数组、多维数组以及字符数组。

教学要求:

1.掌握一维数组的定义、引用和初始化以及在内存中存放的方式;

2.掌握二维数组的定义、引用和初始化以及在内存中存放的方式;

3.掌握字符数组的定义、引用和初始化以及在内存中存放的方式;

4.了解字符串、字符串的存储,掌握字符串的操作;

5.了解多维数组;

6.掌握数组解决实际问题的方法。

重点:

1.数组的定义和引用;

2.字符串及其操作。

难点:

字符串及其操作。

第六章  函数(2周)

教学内容:

函数的定义和调用、函数的参数传递、函数嵌套、函数递归、变量作用域、变量存储类别、内部函数与外部函数。

教学要求:

1.掌握函数的定义与调用;

2.掌握函数的参数及参数传递方式;

3.了解变量存储类型的概念及各种存储类型变量的生存期和有效范围;

4.掌握使用函数嵌套和函数递归求解复杂的问题;

5.了解内部函数与外部函数的概念和区别。

重点:

1.函数的定义、调用、声明;

2.函数参数传递;

3.函数嵌套和函数递归。

难点:

1.函数嵌套

2.函数递归

第七章  指针(2周)

教学内容:

指针的概念与定义、指针变量及其运算、指针作为函数的参数、指针与数组、指针与函数、指针与字符串、指针数组的概念与应用、命令行参数的使用、指针作为函数的返回值、利用指针实现内存的动态分配。

教学要求:

1.理解并掌握指针的概念与定义;

2.掌握指针变量的定义方法、指针指向的含义、指针的取内容运算、取地址运算、赋值运算、关系运算、算术运算,以及各个运算的含义;

3.掌握通过指针来指向变量、访问变量的方法;

4.掌握指针变量作为函数参数的用法;

5.理解指针、数组与地址的关系;

6.掌握使用数组名作为函数参数进行编程及利用指针进行数组相关操作的方法;

7.掌握通过指针实现动态内存分配,并能进行编程;

8.掌握字符串常用处理函数,并能使用字符指针进行字符串相关操作;

9.掌握指针数组的定义形式、含义及应用;

10.了解命令行参数的使用方法;

11.掌握指针作为函数的返回值的用法;

重点:

1.指针变量的基本运算;

2.指针作为函数参数;

3.数组名作为函数参数;

4.字符指针的使用;

5.指针数组的使用;

6.指针作为函数返回值。

难点:

1.指针与数组的联系;

2.指针变量作为函数参数的地址传递、指向函数的指针的应用;

3.指针数组。

第八章  结构体与共用体(2周)

教学内容:

结构的基本概念与定义(含嵌套结构)、结构体类型变量的定义、引用和初始化,结构体数组,指针与结构体数组、链表、共用体、typedef

教学要求:

1.了解结构体、共用体的概念、存储特点及应用;

2.掌握结构变量和结构成员变量,熟悉结构成员变量的引用;

3.理解结构体数组及其定义和使用;

4.掌握结构体与数组、指针、函数之间的操作;

5.掌握单链表的概念和基本操作;

6.了解共用体、自定义类型、枚举类型的概念和应用。

重点:

1.结构的定义与成员引用方式;

2.结构数组的应用;

3.结构指针的基本概念与使用。

难点:

1.嵌套结构的定义;

2.结构指针作为函数参数;

3.链表的基本操作。


预备知识

本课程面向零基础的学习对象。学习过“大学计算机基础”会对学习有帮助。

证书要求

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

参考资料

[1]C程序设计》3,谭浩强主编,清华大学出版社,2014

[2]C程序设计题解与上机指导》,谭浩强主编,清华大学出版社,2014

[3]C语言程序设计》,甘勇主编,中国铁道出版社,2015

[4]《标准C语言基础教程》(第4版) []Gary J. Bronson,电子工业出版社,2006

[5]C程序设计语言》, []Brian W. Kernighan, Dennis M. Ritchie,徐宝文等译,机械工业出版社,2006

[6]C语言程序设计教程与项目实训》,丁学钧主编,清华大学出版社,2016

[7]C语言项目是系统开发教程》(微课版),彭顺生主编,人民邮电出版社,2016

[8]《案例式C语言程序设计》,刘艳军主编,清华大学出版社,2016

[9]http://blog.csdn.net/column/details/c-introduction.html 

[10]http://shenglongfeicool.blog.163.com/



常见问题

在C语言的学习过程中,有很多的共性问题,抽取出部分请大家参考。

一、基础知识和数据类型、表达式、掌握关键词的具体用法及适用范围对象。

  1. 拼写错误,主要包括大小写及关键词拼写问题。

  2. {},[],(),‘’,“”不配对。解决这个问题最好的方法就是每当写这些符号的时候就先写成一对,然后再在中间加内容。

  3. 忘记在语句的末尾加分号,或在预处理命令后多加分号。记住:每一个语句的后边都要加分号,而预处理命令并不是语句,所以不加分号,他们必须每行一条,不能把多个命令写在一行。

  4. 混淆/和\;注释对应的符号是,而转义字符是以\开头,除号是/。

  5. printf()和scanf()的参数设置有误。

二、流程控制

  1. 丢掉语句结束标记“;”,尤其是for语句中表达式后或do-while语句后的分号,或在预处理命令后边、while()后、for()后加“;”。  

  2. If语句或循环语句中逻辑表达式或关系表达式书写错误。一定要注意C语言的条件与数学表达式的区别(例如我们数学中经常写到的0≤x≤9,在C语言中应该写成x>=0&&x<=9。  

  3. if-else嵌套时不配对。最好在写每个条件时要用两个{}分别将两个分支先括起来,再添加其中的语句,以保证其配对不易错。

  4. switch()语句中的格式不正确。()中的表达式结果一定是一些明确的值,不能是区间;表达式的所有可能结果要列在case后边,case与常量之间有一空格,不要丢掉必要的break;

  5. 随意修改循环控制变量i的值,导致循环次数的改变,尤其是当循环有嵌套时。在循环体中,不要将循环控制变量进行另外的改变。

  6. 分不清什么情况下用双重循环,什么情况下用两个控制变量写成一重循环。当I不变,j又循环一遍的时候用双重循环。当I,j同时变化的时候用一重循环,此时,循环控制变量有两个,但条件只写一个就可以,因为另一个总是进行相应的变化的。

  7. 忽略循环体与循环控制变量的关系。其实,很多情况下,循环控制变量都在循环体中起到非常重要的作用。应该利用上这种关系。

三、数组与指针 

  1. 字符串的输入有错误:主要表现在使用scanf()或gets()时加了&,或输入字符串时用循环,(这样的话,字符个数无论多长,都不会为自动加\0,将来引用的时候也就不能以字符串的形式引用。

  2. 对字符串的处理中,循环条件仍然写成I<N。由于字符串是不定长的,所以循环条件一般为str[I]!=’\0’ 或I<strlen(str)。

  3. 而输入所对应的变量是指针时(常见的有:输入的变量是字符数组名或指向字符串的指针)不能加&。

  4. 指针定义后未赋值就引用。如果在定义时不知道赋什么值,可以用p=NULL赋初值,以避免引起的灾难性错误。

  5. 分不清p和*p。前者是指针,即地址,后者表示指针所间接引用的数据,但如果是二级指针或多级指针,取*以后得到的仍然可能是地址。    

四、函数  

  1. 函数定义的时候,函数头部加分号,而函数声明的地方忘了加分号。

  2. 函数实参格式不对,主要表现在:给出实参时,多给出数组类型,或者,形参是数组int a[];的时候,给出的a[]或a[I]。

  3. 递归时忘了设置边界条件,这样易造成死循环调用。

  4. 使用函数之前未声明(包括C库函数的声明)。建议大家,将所定义的一切函数都在程序开始的预处理命令后加上函数原型的声明,这样做不仅可以避免错误,而且整个程序的结构看起来更清楚。

五、结构体共用体

  1. 结构体类型定义有误,主要表现在:结构体类型里还有嵌套的时候,忘记了成员名称。

  2. 结构体类型名和结构体变量名混淆。例如: struct STU {….  Struct data  {int year,month,day; }birthday };  struct STU a; struct STU是类型名称,而且不分配空间,且不能直接引用。只有定义了结构体类型struct STU的变量a以后,才为a分配相应的内存空间,引用时也要是a.??? 。

  3. 结构体变量的成员引用不正确,尤其是当结构体类型中有嵌套定义的时候。一定要一级一级的引用。例如:上边的例子:如果引用其中的年的话,一定是a.birthday.year. 不能直接a.year。

  4. 对结构体变量进行输入输出的时候,整体输入或整体输出。除作为函数参数外,不能对结构体变量整体操作,只能一个成员一个成员地输入、输出。

  5. 不理解共用体的“共占内存”。对共用体中的成员变量,一定要靠一个标记区别它们,并分别按不同类型引用它们。切记:共用体变量不能做函数形参。