前言
C语言程序设计是大学计算机基础教学中第一门系统地讲授程序设计的课程,通过介绍一种具体的过程型程序设计语言(C)及其程序设计方法,使学生理解程序设计语言的基本结构,理解计算机学科求解实际问题的基本过程,掌握程序设计的基本思想、方法和技巧,培养良好的程序设计习惯,培养利用计算机求解问题的基本能力。
由于程序设计的思维模式与一般传统课程的思维模式有所不同,因此在初学程序设计时,比较容易陷入语法的细节中,学习了大量的语法知识却无法通过编程来解决问题,导致学生产生挫折感。本书作者在长期的C语言教学过程中,以及程序设计竞赛的辅导过程中,对程序设计课程的教学理念及教学方法进行了认真地思考,并结合多年的教学积累和学生反馈,完成了本书,期望能借助本书增强对学生程序设计能力的培养。
本书结构
本书包含以下内容:
第1章计算机与程序设计概述。包括: 计算机硬件体系结构,计算机软件系统,计算机运算基础,程序设计概述,算法概述等。
第2章C语言基本概念。包括: C语言要素,变量和赋值,运算符和表达式,数据的输入输出,地址运算符和指针,数学函数等。
第3章选择结构程序设计。包括: 关系运算,逻辑运算,if语句,switch语句等。
第4章循环结构程序设计。包括: while语句,do-while语句,for语句,计数循环、标记控制循环、条件循环、文件结束控制循环及其实现,退出循环的方式等。
第5章数组。包括: 一维数组、二维数组、字符数组及字符串的基本概念,一维数组在查找、删除、插入、统计、排序等方面的应用,数组与指针等。
第6章函数。包括: 函数定义,函数调用及参数传递,函数调用与地址传递,函数指针,局部变量与全局变量,编译预处理等。
第7章结构、共用、枚举及位运算。包括: 结构、共用、枚举的基本应用,位运算等。
第8章文件。包括: 文件基本概念,文件的打开与关闭,文件的读写函数等。
第9章动态数据结构。包括: 链表的概念,动态内存分配,单链表的建立、访问、插入和删除等。
第10章算法设计初步。包括: 递推与迭代,枚举,递归与分治,排序等。
本书特点
(1) 强调实践性。本书以任务驱动的方式,通过实例程序的编写和分析,带动对C语言语法的理解和掌握,以循序渐进的方式引导学生解决实际问题。
(2) 重视辅助教学手段对课程的作用。本书提供配套网站(http://acm.nbu.edu.cn),该网站以当前流行的ACM大学生程序设计竞赛平台的模式为参考,提供教材中大部分例题及习题的在线实践环境,供学生提交代码、评测自己的程序以及检验解题结果。学生可随时登录该网站进行在线练习。教师也可方便地检查自己学生的学习状况及学习进展。
(3) 注重语法概念的可读性。循环作为三大基本控制结构之一,是程序设计中的重要概念。但初学者往往觉得循环比较抽象,不容易掌握,尤其对于循环结束条件的控制把握不好。本书从循环的结束条件着手,将任务求解过程中常用的循环结束情况归纳成计数循环、标记控制循环、条件循环、文件结束控制循环等4种形式,使学生在学习循环内容时有比较清晰的思路。
(4) 关注内容的关联性。指针作为C语言的特色,也是C语言学习过程中的难点之一。一般的教材都是作为独立的一章,放在教材的中后部介绍,内容设置上显得比较孤立,削弱了指针与其他内容之间的联系。本书从第2章开始逐渐引入指针的概念,将指针的内容分散到相关的章节
与具体应用结合起来介绍,并将指针的应用作为一种方法来介绍,希望可以降低指针的学习难度,增强指针的实用价值。
(5) 培养算法的初步意识。本书增加了第10章“算法设计初步”的内容,对程序设计过程中的基础算法进行总结,有助于使解题思路更加清晰化,同时也为后续学习奠定了基础。
(6) 条理化的错误分析。初学程序设计的同学最头痛的是检查不出自己程序中的错误,或者无法正确理解错误提示所包含的意思。本书结合多年的教学反馈,在附录E中罗列了常见的编程错误情况,分析错误原因并给出了大致的修改建议。
(7) 实践环境的可操作性。为便于实践操作,本书将程序移植到Visual C++ 6.0环境中运行。所有例题都在Visual C++ 6.0环境下成功运行。
适用对象
本书可作为高等学校本科、高职高专软件专业及相关专业程序设计的入门教材,也可作为ACM程序设计竞赛培训的基础教材,还可供广大程序设计初学者自学使用。
致谢
本书由陈叶芳组织编著。陈叶芳负责设计全书的结构及内容的起草,杨任尔参与了第2、5、6、9章的编写,邬延辉参与了第4、5、8章的编写,王小权参与了第3、6章的编写,李荣茜和钱江波参与了第1章的编写。
感谢浙江大学计算机学院何钦铭教授,本书内容组织的很多思路受益于何教授的启发,何教授又在百忙之中对全书内容进行了审核,并提出了宝贵的意见。
感谢宁波大学信息科学与工程学院的王让定老师、陈华辉老师、周宇老师、王晓东老师、江宝钏老师、李纲老师、石守东老师,他们给我提出了很多建设性的思路和建议,为最后的成稿起了重要的作用。
在教材的酝酿及编写过程中,宁波大学ACM集训队的队员们给了我极大的支持和帮助,他们的淳朴和无私精神,是支撑我完成全书的动力。他们是: 蒋明江、姚海龙、祝风翔、谢伟刚、吴彬、张睿卿、孙佰贵、李云超、李战、陈能仑、王晟宇、王杰波等同学,无法全部列出他们的名字,仅在此表示对他们的谢意。
本书得到宁波大学计算机科学与技术国家高等学校特色专业建设、宁波市服务型重点建设专业、浙江省高校本科计算机科学与技术教学指导委员会专项教学改革项目以及宁波大学教材建设等项目的经费资助,谨致谢意。
本书的编写参考了近年来出版的大量书籍,吸取了很多专家同仁的宝贵经验,在此一并表示衷心的感谢!
教材中肯定还存在很多不足之处,竭诚欢迎广大读者和同行批评指正。作者联系方式: chenyefang@nbu.edu.cn。
陈叶芳
2011年6月
