- ISBN:9787030446107
- 装帧:一般胶版纸
- 册数:暂无
- 重量:暂无
- 开本:16开
- 页数:343
- 出版时间:2016-01-01
- 条形码:9787030446107 ; 978-7-03-044610-7
内容简介
《C语言程序设计实践教程》采用理论和实践相结合的方式组织C语言程序设计教学内容,由理论知识篇和上机实践篇两部分组成。理论知识篇以程序设计过程为主线,以任务驱动方式讲授C语言的各种语言成分以及程序设计的基本概念、基本理论和基本方法;上机实践篇以Visual C++6.0为程序开发环境,介绍C语言程序的上机操作过程、程序调试方法以及实验内容,给出10个实验内容,其中含两道综合实训题,对每个实验明确实验要求,提示分析问题解决问题的方法和程序设计的思路,以培养学生的程序设计能力和上机实践能力。 《C语言程序设计实践教程》体系完整,内容由浅入深,条理清晰,语言流畅,实例丰富,提供了多套模拟试题,也为任课教师提供 PPT课件和《C语言程序设计实践教程》例题源代码,实用性强。
目录
理论知识篇
第1章 绪论 2
1.1 程序与程序设计语言 2
1.1.1 计算机与程序 2
1.1.2 程序设计语言 2
1.1.3 高级语言程序的开发过程 3
1.2 C语言的发展和特点 4
1.2.1 C语言的发展历史 4
1.2.0 C语言的特点 5
1.2.3 C和C++ 6
1.3 C程序的结构与书写风格 7
1.4 本书组织结构和主要内容 8
本章小结 10
习题1 10
第2章 数据的基本类型与基本运算11
【任务2.1】计算圆的面积和周长 11
2.1 基本数据类型 11
2.1.1 整型 12
2.1.2 实型 13
2.1.3 字符型 13
2.2 常量 14
2.2.1 字面常量 14
2.2.2 符号常量 15
2.3 变量 16
2.3.1 变量的概念与命名 16
2.3.2 变量的定义和初始化 16
2.3.3 变量的赋值 19
2.4 数据的基本运算 19
2.4.1 C语言运算符简介 19
2.4.2 算术运算符与算术表达式 20
2.4.3 关系运算符与关系表达式 20
2.4.4 逻辑运算符与逻辑表达式 21
2.4.5 自增、自减运算符 23
2.4.6 运算符的优先级与结合性 25
2.5 数据类型转换 26
2.5.1 自动类型转换 26
2.5.2 强制类型转换 28
2.6 完成【任务2.1】的程序 28
2.7 简单程序设计实例 29
本章小结 30
习题2 30
第3章 数据的输入/输出 33
【任务3.1】计算圆的面积和周长(改进版) 33
3.1 C语言的输入/输出 33
3.2 字符的非格式化输入/输出函数 33
3.3 格式化输出函数printf 34
3.3.1 printf函数概述 34
3.3.2 printf函数的格式说明 35
3.3.3 printf函数的使用 37
3.4 格式化输入函数scanf 39
3.4.1 scanf函数概述 39
3.4.2 scanf函数的格式说明 40
3.4.3 scanf函数的使用 41
3.5 完成【任务3.1】的程序 43
3.6 程序设计实例 43
本章小结 45
习题3 45
第4章 程序的基本结构与基本语句 48
4.1 程序与基本语句 48
4.1.1 程序 48
4.1.2 C基本语句 51
4.2 顺序结构 52
【任务4.1】利用海伦公式求三角形面积 53
4.2.1 赋值语句 53
4.2.2 逗号运算符与逗号表达式 55
4.2.3 完成【任务4.1】的程序 55
4.2.4 顺序结构程序设计举例 56
4.3 分支结构 57
【任务4.2】利用海伦公式求三角形面积(改进) 57
4.3.1 单分支if语句 57
4.3.2 双分支if语句 58
4.3.3 完成【任务4.2】的程序 59
【任务4.3】百分制成绩转换成五级记分制成绩 61
4.3.4 多分支if语句和if语句的嵌套 61
4.3.5 条件运算符与条件表达式 63
4.3.6 switch语句 64
4.3.7 完成【任务4.3】的程序 65
4.3.8 分支结构程序设计举例 67
4.4 循环结构 71
【任务4.4】求100以内所有自然数的累加和 71
4.4.1 for 语句 71
4.4.2 while语句 72
4.4.3 dowhile语句 73
4.4.4 几种循环的比较 74
4.4.5 break和 continue语句 74
4.4.6 完成【任务4.4】的程序 76
【任务4.5】打印图形 77
4.4.7 循环的嵌套 78
4.4.8 完成【任务4.5】的程序 80
4.4.9 循环结构程序设计举例 81
本章小结 86
习题4 86
第5章 函数和模块化程序设计 90
5.1 模块化程序设计方法 90
5.2 用户自定义函数 91
【任务5.1】用函数实现累加求和 91
5.2.1 函数的定义与声明 91
5.2.2 函数调用 93
5.2.3 完成【任务5.1】的程序 95
5.3 系统库函数 96
【任务5.2】用函数实现素数判定 96
5.3.1 头文件与文件包含 97
5.3.2 数学函数 98
5.3.3 随机函数 99
5.3.4 完成【任务5.2】的程序 100
5.4 变量的作用域 100
5.4.1 局部变量 100
5.4.2 全局变量 102
5.4.3 重名问题 102
5.5 变量的生存期 103
5.5.1 动态变量 104
5.5.2 静态变量 104
5.6 函数的嵌套调用 105
【任务5.3】方程近似解 105
5.6.1 函数的嵌套调用 106
5.6.2 完成【任务5.3】的程序 106
5.7 递归函数 108
【任务5.4】求阶乘 108
5.7.1 函数的递归定义与调用 108
5.7.2 完成【任务5.4】的程序 108
5.8 函数应用程序设计实例 109
本章小结 115
习题5 116
第6章 数组 119
6.1 一维数组 119
【任务6.1】计算平均成绩 119
6.1.1 一维数组的定义与初始化 119
6.1.2 一维数组的操作 120
6.1.3 完成【任务6.1】的程序 121
6.1.4 一维数组应用举例 122
6.2 二维数组 125
【任务6.2】计算多科平均成绩 125
6.2.1 二维数组的定义与初始化 125
6.2.2 二维数组的操作 126
6.2.3 完成【任务6.2】的程序 127
6.2.4 二维数组应用举例 128
6.3 字符串与字符数组 130
【任务6.3】统计字符个数 130
6.3.1 字符数组的定义与初始化 130
6.3.2 字符串的输入/输出 132
6.3.3 字符串处理函数 135
6.3.4 完成【任务6.3】的程序 138
6.3.5 字符数组应用举例 139
6.4 数组名作为函数参数 140
【任务6.4】统计学生成绩 140
6.4.1 一维数组名作为函数参数 140
6.4.2 二维数组名作为函数参数 142
6.4.3 完成【任务6.4】的程序 143
6.5 数组应用程序设计实例 145
本章小结 146
习题6 147
第7章 指针 150
7.1 指向变量的指针 150
【任务7.1】通过自定义函数实现整数排序 150
7.1.1 指针的概念 150
7.1.2 指针变量的定义与初始化 151
7.1.3 通过指针访问变量 154
7.1.4 指针变量作为函数参数 154
7.1.5 指针的强制转换 157
7.1.6 void指针类型 157
7.1.7 完成【任务7.1】的程序 158
7.2 指向数组的指针 159
【任务7.2】通过自定义函数实现数组逆序 159
7.2.1 指针变量与一维数组 159
7.2.2 指针变量与二维数组 161
7.2.3 数组指针作为函数参数 165
7.2.4 完成【任务7.2】的程序 166
7.3 指针数组和指向指针的指针 167
【任务7.3】多个字符串排序 167
7.3.1 指针数组的定义与使用 168
7.3.2 指针数组与字符串数组 169
7.3.3 指向指针的指针 171
7.3.4 main函数的形参 172
7.3.5 完成【任务7.3】的程序 174
7.4 指向函数的指针 175
【任务7.4】主函数中实现对排序函数正序逆序操作的控制 175
7.4.1 函数指针的定义与使用 176
7.4.2 函数指针作为函数参数 176
7.4.3 完成【任务7.4】的程序 178
7.5 返回指针的函数 180
【任务7.5】自定义函数中字符串的传入和传出 180
7.5.1 返回指针的函数定义与调用 180
7.5.2 完成【任务7.5】的程序 182
7.6 指针应用程序设计实例 183
本章小结 185
习题7 185
第8章 自定义数据类型与链表 187
8.1 结构体类型与结构体变量 187
【任务8.1】学生信息表中数据的输入和输出 187
8.1.1 结构体类型与结构体变量的定义与使用 187
8.1.2 嵌套的结构体类型与结构体变量 191
8.1.3 完成【任务8.1】的程序 193
8.2 结构体数组 194
【任务8.2】学生信息表中数据操作(改进1) 194
8.2.1 结构体数组的定义与初始化 194
8.2.2 完成【任务8.2】的程序 196
8.3 指向结构体的指针与内存管理 200
【任务8.3】学生信息表中数据操作(改进2) 200
8.3.1 指向结构体变量的指针 200
8.3.2 指向结构体变量的指针与无名变量 201
8.3.3 指向结构体变量的指针与动态数组 203
8.3.4 结构体指针作为函数参数206
8.3.5 完成【任务8.3】的程序 207
8.4 单向链表 208
【任务8.4】学生信息表中数据操作(改进3) 208
8.4.1 链表的概念 209
8.4.2 单向链表中的基本操作 211
8.4.3 完成【任务8.4】的程序 216
8.5 共用体类型 220
8.6 给数据类型定义别名 223
8.7 枚举类型 224
8.8 结构体与链表应用程序设计 225
实例 225
本章小结 226
习题8 227
第9章 文件 231
【任务9.1】学生记录文件保存 231
9.1 文件的概念 231
9.1.1 C文件的分类 231
9.1.2 文件操作的基本步骤 232
9.1.3 文件类型的指针 232
9.2 文件的常用操作 233
9.2.1 文件的打开与关闭 233
9.2.2 文件的读写 236
9.2.3 文件的定位 245
9.2.4 文件的检测 248
9.3 其他文件操作函数 249
9.4 完成【任务9.1】的程序 250
9.5 文件应用程序设计实例 251
本章小结 254
习题9 255
第10章 编译预处理与多文件组织 258
10.1 宏定义 258
10.1.1 无参宏定义 258
10.1.2 带参宏定义 260
10.2 条件编译 263
【任务10.1】方程近似解(多文件版) 263
10.2.1 条件编译的形式 263
10.2.2 保护头文件 265
10
节选
理论知识篇 第1章 绪论 本章主要介绍程序、程序设计以及程序设计语言的基本概念,概述C语言的发展、特点以及C语言的标准,通过几个C语言源程序的实例结构,介绍C语言程序基本结构与书写规则,并对本书组织结构和主要内容作简单说明。 1.1 程序与程序设计语言 1.1.1 计算机与程序 计算机是当今信息化社会必不可少的工具。它是一种按照事先编写的程序,自动对数据进行输入、处理、输出和存储的系统。计算机要完成不同的工作,就要运行不同的程序。程序就是为完成某项任务而编写的一组计算机指令序列。编写程序的过程称为程序设计。程序设计是软件开发的关键步骤,软件的质量主要是通过程序的质量来体现的。在进行程序设计之前必须根据实际需求确定使用什么程序设计语言来编写程序。 1.1.2 程序设计语言 人与人之间交流需用相互理解的语言沟通,人与计算机交流也要使用相互理解的语言。程序设计语言就是用来实现人与计算机之间交流的,它经历了从机器语言、汇编语言到高级语言的发展历程。 1.**代语言——机器语言 机器语言是由 0和1组成的指令序列。例如,指令1011011000000000表示要计算机执行一次加法操作;而指令1011010100000000则表示要计算机执行一次减法操作。它们的前八位表示操作码,后八位表示地址码。 机器代码可以直接被计算机所识别,因此机器语言*大的特点是效率高、执行速度快。但是采用机器代码编写程序,要求程序员熟记所用计算机的全部指令代码和代码的含义,编程序时,程序员必须自己处理每条指令和每一个数据的存储分配、输入 /输出,还要记住编程过程中每步所使用的工作单元处在何种状态。可想而知,用机器语言编写程序是一件十分烦琐且容易出错的工作。 2.第二代语言——汇编语言 由于用机器语言编程存在工作量大、易于出错等问题,因此人们考虑采用一些简洁的英文字母、符号串替代特定指令的二进制串,使表达方式更接近自然语言。例如,用“ ADD”代表加法,“MOV”代表数据传送等,这样人们就很容易读懂并理解程序在干什么,纠错及维护都很方便。这种采用英文缩写的助记符标识的语言称为汇编语言。 但是,计算机并不认识这些符号,因此需要一个专门的程序,负责将这些符号翻译成二进制数形式的机器语言才能被计算机执行,这种翻译程序称为汇编程序。 汇编语言是一种与机器语言一一对应的程序设计语言,虽然不是用 0、1代码编写,但实质是相同的,都是直接对硬件进行操作,只不过指令采用助记符标识,更容易识别和记忆。机器语言和汇编语言均与特定的计算机硬件有关,程序的可移植性差,属于低级语言。由于汇编语言源程序的每一句指令只能对应实际操作过程中一个很细微的动作,如移动、加法等,因此汇编源程序一般比较冗长、复杂,容易出错,而且使用汇编语言编程需要有更多的计算机专业知识,所以人们只有在直接编写面向硬件的驱动程序时才采用它。 3.第三代语言——高级语言 到了20世纪 50年代中期,人们研制了高级语言。高级语言是用接近自然语言表达各种意义的“词”和常用的“数学公式”形式,按照一定的“语法规则”编写程序的语言。这里的“高级”,是指这种语言与自然语言和数学公式相当接近,而且不依赖于计算机的型号,通用性好。高级语言的使用,改善了程序的可读性、可维护性和可移植性,大大提高了编写程序的效率。 用高级语言编写的程序称为高级语言源程序,不能被计算机直接识别和执行,也要用翻译的方法把高级语言源程序翻译成目标程序才能执行。 高级语言的出现大大简化了程序设计,缩短了软件开发周期,显示出强大的生命力。此后,编制程序已不再是软件专业人员才能做的事,一般工程技术人员花上较短的学习时间,也可以使用计算机解题。随着计算机应用日益广泛地渗透到各学科和技术领域,后来发展了一系列不同风格的、为不同对象服务的程序设计语言,其中较为著名的有 FORTRAN、BASIC、COBOL、ALGOL、LISP、LP/1、PASCAL、C等十几种语言。 1.1.3 高级语言程序的开发过程 有人认为程序设计是一门艺术,而艺术在很大程度上是基于人的灵感和天赋,它往往没有具体的规则和步骤可循。对于一些小型程序的设计,上述说法可能有一些道理。但是,对于大型复杂程序的开发,灵感和天赋不是很好的解决之道,几十年的程序开发实践已表明这一点。事实上,程序设计是一门科学,程序的开发过程是有规律和步骤可循的。通常,高级语言程序的开发遵循以下步骤。 1.明确问题 用计算机解决实际问题,首先要明确解决什么问题,即做什么。如果对问题都没有搞清楚或理解错了,就试图解决它,其结果是可想而知的。 2.算法设计 明确问题之后,就要考虑如何解决它,即如何做。计算机解决问题的方式就是对数据进行处理,因此,首先要对问题进行抽象,抽取出能够反映问题本质特征的数据并对其进行描述,然后设计计算机对这些数据进行处理的操作步骤,即算法设计。 3.选择某种语言进行编程 算法设计完成后,就必须要用某种实际的程序设计语言来表达,即编程实现。现在的程序设计语言很多,用哪一种语言来编程呢?从理论上讲,虽然各种语言之间存在着或多或少的差别,但它们大多数都是基于冯 ?诺依曼体系结构的,它们在表达能力方面是等价的,因此对于同一个设计方案,用任何一种语言都能实现。 在实际中,采用哪一种语言来编程可以考虑以下因素决定: (1)设计方案。例如,对于采用功能分解的设计方案,用某种过程式程序设计语言进行编程比较合适;对于面向对象的设计方案,采用面向对象的程序设计语言来实现,就比较自然和方便。 (2)编程语言效率的高低、使用的难易程度、数据处理能力的强弱等。 (3)一些非编程技术的因素。例如,编程人员的个人喜好。 选定了编程语言之后,下面就是使用该语言编写程序。对于同一个设计方案,不同的人会写出不同风格的程序。程序设计风格的好坏会影响到程序的正确性和易维护性。程序设计风格取决于编程人员对程序设计的基本思想、技术以及语言掌握的程度。 4.测试与调试 程序写好之后,其中可能含有错误。程序错误通常有3种: (1)语法错误:是指程序没有按照语言的语法规则来书写,这类错误可由编译程序来发现。 (2)逻辑(或语义)错误:是指程序没有完成预期的功能。 (3)运行异常错误:是指对程序运行环境的非正常情况考虑不周而导致的程序异常终止。这些错误可能是编程阶段导致的,也有可能是设计阶段甚至是问题定义阶段的缺陷。程序的逻辑错误和运行异常错误一般可以通过测试来发现。测试方法有很多,比如: (1)静态测试,不运行程序,而是通过对程序的静态分析,找出逻辑错误。 (2)动态测试,利用一些测试数据,通过运行程序,观察程序的运行结果是否与预期的结果相符。 值得注意的是,不管采用何种测试手段,都只能发现程序有错,而不能证明程序正确。例如,想要用动态测试技术来证明程序没有错误,就必须对所有可能的输入数据来运行程序并观察运行结果,这往往是不可能的,并且也没有必要。测试的目的就是要尽可能多地发现程序中的错误。 测试工作不一定要等到程序全部编写完成才开始进行,可以采取编写一部分、测试一部分的方式来进行,*后再对整个程序进行整体测试。即先进行单元测试,再进行集成测试。 如果通过测试发现程序有错误,那么就需要找到程序中出现错误的位置和原因,即错误定位。给错误定位的过程称为调试(debug)。调试一般需要运行程序,通过分段观察程序的阶段性结果来找出错误的位置和原因。 5.运行与维护 程序通过测试后就可交付使用了。由于所有的测试手段只能发现程序中的错误,而不能证明程序没有错误,因此在程序的使用过程中可能会不断发现程序中的错误。在使用过程中发现并改正错误的过程称为程序的维护。程序维护可分成3类: 正确性维护,是指改正程序中的错误。 完善性维护,是指根据用户的要求使得程序功能更加完善。 适应性维护,是指把程序移植到不同的计算平台或环境中。 1.2C语言的发展和特点 1.2.1C语言的发展历史 1969年,美国贝尔实验室的 Ken Thompson 和 Dennis Ritchie开始研制 UNIX操作系统。UNIX的早期版本是用汇编语言编写的。但汇编语言依赖于计算机硬件,程序的可读性和可移植性都比较差。为了提高程序的可读性和可移植性,希望改用高级语言编写系统软件,但一般的高级语言不能像汇编语言一样直接对硬件进行操作。因此,他们决定开发一种高级语言来编写 UNIX操作系统。 1970年,Ken Thompson以 BCPL语言为基础,设计出了既简单又能访问硬件的 B语言 (BCPL的**个字母),并用 B语言对用汇编语言编写的 UNIX操作系统进行了部分改写,此时的 B语言过于简单,功能有限。1972~1973年,Dennis Ritchie在 B语言的基础上设计出了C语言(BCPL的第二个字母)。C语言既保持了 BCPL和 B语言精练和访问硬件的优点,又克服了它们过于简单和无数据类型等缺点。1973年,Ken Thompson和 Dennis Ritchie将 UNIX操作系统的 90%用C语言改写。 多年来,UNIX V系统配备的C语言一直是公认的C语言标准,这在由 Brian Kernighan和 Dennis Ritchie合著的 TheC Programming Language(Prentice -Hall于1987年出版,国内在2004年出版了该书的中译本《C程序设计语言(第2版)》)中介绍。 在C语言的发展过程中还有两个重要的标准:C89和C99标准。1983年,美国国家标准协会(ANSI)着手制定C语言的标准,于1989年正式被批准为 ANSX3.159 -1989,一年以后,该标准也被 ISO(国际标准化组织)接收,定为 ISO/IEC 9899:1990。通常仍称C89标准。 随着C语言的继续发展,1999年C99标准应运而生。C99保持了几乎所有C89的特征。总的来说,C99与C89之间有3种变化: (1)在C89基础上增加的特性。其中*主要的是C99增加了 5个新的关键字(C89具有32个关键字,而C99达到37个关键字):_Bool、_Imaginary、restrict、Complex和 inline。 增加的其他特性主要包括:变长数组;单行注释;long long int数据类型;可以在语句出现的任何地方定义变量;对预处理程序的增加;for语句内的变量声明;柔性数组结构成员;新的库和头文件等。 (2)删除了C89中的某些特性。例如,“隐含的 int”。在C89中,大多数情况下,当没有明确指定类型标识符时,通常认为其为 int类型,但这一点在C99中是不允许的。 此外C99中还删除了函数的隐含声明。在C89中,如果一个函数在使用前未被声明,将被视为隐含的函数声明,但C99不支持这一点。 (3)修改了C89中的某些特性。例如,放宽的转换限制、扩展的整数类型、增强的整数类型提升规则、对 return语句的约束等。 1.2.2C语言的特点 与其他高级语言相比,C语言之所以发展迅速,成为*受欢迎的语言之一,主要原因是它具有强大的功能。归纳起来,C语言具有以下一些特点。 1.C语言是中级语言 通常,C语言被称为中级语言。这并不是说它功能差、难以使用,而是C语言既具有高级语言的基本结构和语句,又具
-
断代(八品)
¥15.5¥42.0 -
家居设计解剖书
¥29.3¥39.0 -
当代中国政府与政治(新编21世纪公共管理系列教材)
¥30.2¥48.0 -
中医基础理论
¥50.7¥59.0 -
习近平新时代中国特色社会主义思想概论
¥18.2¥26.0 -
编辑审稿实务教程
¥35.1¥45.0 -
社会学概论(第二版)
¥33.0¥55.0 -
古代汉语(第四册)
¥13.3¥35.0 -
当代教育心理学(第3版)(本科教材)
¥23.8¥66.0 -
落洼物语
¥8.4¥28.0 -
EPLAN电气设计
¥29.9¥39.8 -
软件定义网络(SDN)实战教程
¥49.6¥69.8 -
[社版]大汉战神:霍去病传
¥14.0¥40.0 -
介入护理学(案例版)
¥52.4¥69.8 -
学前教育史(第二版)
¥31.2¥48.0 -
西方经济学(宏观部分·第八版)(21世纪经济学系列教材)
¥41.7¥49.0 -
西方经济学(微观部分·第八版)(21世纪经济学系列教材)
¥17.9¥56.0 -
数理经济学的基本方法(第4版)(精)
¥56.9¥79.0 -
老子道德经注校释(精)/新编诸子集成
¥30.1¥43.0 -
科技论文规范写作与编辑(第4版)
¥63.0¥75.0