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

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

授课目标

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

课程大纲
预备知识

本课程面向零基础的学习对象,学习过《大学计算机基础》会对学习该课程有帮助。

参考资料

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