前言 程序设计是大学计算机基础教育和计算机专业的基础核心课程,是其他专业技术课或实践环节的软件工具和验证手段,也是大学生参加课程设计、毕业设计、创新实践、科技制作和学科竞赛等活动的主要实现平台,是各类专业必修的计算机类基础课程。 一直以来,C#语言在国内外得到广泛应用,其设计宗旨为“简单、现代、通用”。它安全、稳定、简单、优雅,是由C和C++衍生出来的面向对象编程语言,在继承C和C++强大功能的同时,去掉了一些复杂特性(例如,没有宏及不允许多重继承)。同时,C#综合了Visual Basic简单的可视化操作和C++的高运行效率,以其强大的操作能力、优雅的语法风格、创新的语言特性和便捷的面向组件编程支持成为.NET开发的首选语言,在TIOBE编程语言排行榜上名列前茅。 然而,程序设计的学习难度是很大的,尤其是C#这种完全面向对象的语言。很多学生无法把解题的思路变成代码,更谈不上利用程序设计解决实际应用问题。作者经过多年教学经验总结发现,教学过程中过多强调程序语言本身,缺乏思维引导和编程技能训练是造成教学效果不佳的重要原因。 为此,作者结合自主研发的程序设计综合训练平台等系列教学软件,以及慕课等线上资源,遵循“技能提升、思维训练、系统培养、价值塑造”教学理念,精心构建本教材知识体系,力图在内容选取与深度把握上适合高等院校和专业培训的教学目标和学习要求。本书体现出以下特点。 1. 程序设计中的计算思维 程序设计中的逻辑过程如图1所示。 图1程序设计中的逻辑过程 从一个待求解的问题到编写出程序代码,或者从一个现实的需求到编写出应用软件,中间经过分析、抽象、模型、设计、实现五大逻辑过程,涉及对现实问题的观察、理解能力,对问题现象及本质的分析、归纳能力,对事物的抽象思维能力,建立(数学、计算机)模型能力,工程表达与设计能力,运用计算机程序语言的代码实现、实践能力,以及反复迭代优化的系统思想。模型之前是人类的现实世界,模型之后是计算机世界,因此,编程的实质就是把现实世界抽象为一个计算特征的模型,然后使用计算机语言实现,在计算机里能够正确运行。 在上述展现“武”的技术硬实力过程中,其实隐含着“文”的软实力,彰显“文武”之道,体现了程序员世界观、认识论、方法论的深度,逻辑推理、实证精神、辩证法的高度,科学素养和思想、实践观,情怀、信念意志和品格的高度。 所以,学习程序设计,不仅要学习语言知识,还要有意识地开展思维训练,有目的地提高综合的、系统的能力,有计划地提升信息素养。为此,在学习或教学过程中,阅读计算机科学发展史及计算机科学中的数学、逻辑学、数理逻辑、程序员修养等课外读物是十分有益的。 2. 双线索的程序设计知识体系 本书的双线索程序设计知识体系以“数据表示”和“程序实现”作为教学上的两条主线索,螺旋上升、交叉推进,如图2所示。 图2双线索C#语言知识体系 首先,本书通过简单程序引出程序基本结构,以编程为目标给出两条线索:数据表示和程序实现。其次,从引入简单程序框架开始,逐步解决运算和程序组织,进而上升到程序模块化的实现。再次,从基本类型提高到复杂数据类型,上升到结构体和类层面的数据表示。双线索结构揭示了程序设计与应用软件开发的一般规律。 实际教学效果表明,双线索程序设计知识体系突出了程序设计方法学,使程序语言成为服务于编程的工具而不是目标,学习者既能获得语言知识,又能掌握编程技能。 3. 优化程序设计知识安排 本书在程序设计语言知识方面采用了“快节奏”,在程序设计方法和编程技术方面采用了“慢节奏”,解决了多年来程序设计教与学的难题。书中,语言基础知识的内容被大幅度压缩,从一开始就以简单程序框架展开程序知识的学习,直接进入以程序模块化为主的教学环境。这种安排策略便于教师精讲知识,学生早练多练。而较难的以编程技术为核心的专题则被分配更多学时,便于教师组织技能训练,学生获得编程技巧。 另外,本书的所有内容安排紧密结合实际应用问题求解的认识过程和循序渐进的规律,章节知识点的名称也体现出程序设计与自然领域的对应关系,使得学生在学习过程中更容易实现程序设计知识向编程技能的转化。 4. 配套系列教学软件和慕课资源,可实施混合式教学 自2001年以来,基于软件开发科研优势,结合一线教学和课程改革的经验,围绕课堂、实验、作业、设计、考核5个教学环节,我们开发了系列教学软件。例如,“程序设计在线评测系统NOJ”采用计算机系统使学生通过大量习题的训练提高解题速度以解决TLOC(Total Lines of Code,累计代码行数);“软件设计协同开发平台DevForge”按专业软件开发方式引导、跟踪、自动评阅学生课程设计程序和报告以解决SLOC(Software Lines of Code,软件代码的行数);“远程网络考试系统inTest”实现技能测试和实践考核等。这些教学平台的使用,使得实验机房变成了学生讨论、思考、相互教授的研究场所,形成数字化课堂教学、网络辅助教学、电子教室、智能答疑、综合训练等立体化教学环境,为落实教学理念和教学目标提供了先进工具。 本书对应的慕课“C#程序设计”列入国家精品在线开放课程、国家级一流本科课程,已在“爱课程网”开设14期,可申请MOOC或SPOC学习。 基于系列教学软件和慕课资源,课程教学可实施线上线下混合式教学,如图3所示,并可向使用本教材的高校提供混合式教案。 图3融合能力培养的KTCPD混合式教学模式 本书分为9章,内容从结构化的程序设计逐步上升到面向对象程序设计的方法,知识体系结构和内容安排策略由刘君瑞和姜学锋共同设计完成,第1章由姜学锋编写,第2~9章由刘君瑞编写,全书由刘君瑞统稿。在书稿的编著过程中,得到了许多专家的关心和热情支持,清华大学出版社对本书的出版十分重视并进行了周到的安排。在此,对所有鼓励、支持和帮助过本书编写工作的领导、专家、同事和广大读者表示真挚的谢意! 由于时间紧迫及作者水平有限,书中难免有错误、疏漏之处,恳请读者批评指正。 作者2022年10月于西北工业大学