第1章 初识C语言 1
1-1 C语言是如何成熟的 2
1-2 使用C语言编写程序有什么优点 2
1-3 C语言语句简练表现在哪些方面 3
1-4 如何利用C语言的弱类型特性 3
1-5 如何利用C语言移植性好这一特性 4
1-6 如何规避C语言的不足之处 4
1-7 C语言主要应用在哪些领域 4
1-8 如何理解C+十是C语言的超集 5
1-9 C语言的开发过程包括哪些步骤 5
1-10 C语言中,程序、文件、函数三者有何关系 5
1-11 组成C语言程序的最小可执行单元及最小模块单元是什么 5
1-12 如何保证程序的可读性 6
1-13 为什么说算法是程序设计的关键 6
1-14 结构化程序设计包含的三种基本结构是什么 7
1-15 如何在Turbo C 2.0中输入一个程序 8
1-16 选用什么方法来调试程序比较好 10
1-17 如何掌握优秀的编程风格 11
1-18 在编写输入语句时应当注意什么 12
1-19 多文件程序如何实现 12
第2章 数据类型 13
2-1 如何区分常量和变量 14
2-2 数据在内存中是如何存储的 14
2-3 怎样合理使用整型数据类型 14
2-4 怎么界定数字型变量的范围 15
2-5 超出int型数据取值范围的数如何进行赋值 15
2-6 不同进制的整型数据之间怎么样进行运算 16
2-7 如何正确确定实型数据的有效数字位数 16
2-8 C语言中允许使用的浮点数包括什么 17
2-9 单精度型和双精度型实型变量有什么区别 17
2-10 怎样区分字符常量与字符串常量 18
2-11 如何理解字符与整数之间的关系 18
2-12 数字在计算机中的表示方法和存储方法分别有哪些 19
2-13 为什么C语言的常量通常用符号常量替代 19
2-14 字符串常量后面的'\0'的含义是什么 20
2-15 如何规定常量的前缀和后缀 20
2-16 如何有效使用转义字符 21
2-17 怎么合理给变量取名 21
2-18 说明一个变量和定义一个变量有什么区别 22
2-19 如果程序中出现没有定义的变量会发生什么现象 22
2-20 变量必须初始化吗?给变量赋初值和赋值有什么区别 23
2-21 一个float变量赋值为3.1时,为什么printf()函数输出的值为3.0999999 23
2-22 如何确定变量所占内存空间 24
2-23 编写程序将小写字母转换为大写字母 24
2-24 如何避免在自动转换数据类型过程中损失数据精度 25
2-25 什么时候应该对数据类型进行强制转换 26
2-26 事先定义类型的变量经过强制转换后,它的类型会发生变化吗 26
第3章 运算符和表达式 27
3-1 如何利用运算符的优先级和结合性 28
3-2 运算符的结合性总是保证“自左至右”或“自右至左”吗 28
3-3 “5/2”和“5%2”的结果分别是什么 29
3-4 如何区分“,”是运算符还是分隔符 30
3-5 什么是左值和右值?数组名为什么不能作为左值 30
3-6 表达式“a=b”和“a==b相同吗 31
3-7 赋值运算符两边的数据类型不相同怎样处理 31
3-8 试用三目运算符找出三个数中的最大值 32
3-9 计算表达式值时需要注意什么 32
3-10 怎样将数学表达式转化为算术表达式 33
3-11 C语言中有哪些简化的运算表达式 33
3-12 计算逻辑表达式有什么特殊要求 33
3-13 如何确定条件表达式结果的数据类型 34
3-14 “++”和“--”运算时需要注意什么 35
3-15 C语言系统如何处理表达式a+++b 36
3-16 如何避免表达式的二义性 36
3-17 在一个表达式中,有几种不同类型的变量如何处理 37
第4章 语句 38
4-1 怎么区分赋值表达式和赋值语句 39
4-2 如何利用空语句 39
4-3 举例说明复合语句的用途 39
4-4 复合语句与分程序有什么区别 40
4-5 if语句后面的括号中的表达式可以是什么类型 40
4-6 举例说明if语句的判断流程 41
4-7 if语句中else个数是否有限制 42
4-8 在含有多个if..else语句中,怎样判断哪个else是属于哪个if的语句 43
4-9 举例说明switch语句的判断流程 44
4-10 什么时候使用switch语句比使用if语句好 45
4-11 switch语句中default关键字是否必须有 46
4-12 在switch语句中使用break语句应该注意什么 47
4-13 利用三种循环体分别编写:从1加到100的程序 48
4-14 while语句中循环条件可以使用什么表达式 48
4-15 while语句和do...while语句有什么区别 49
4-16 for语句后面的三个表达式是否可以省略 50
4-17 如何判断for循环语句中循环体的循环次数 50
4-18 怎样将for循环转换为while循环 51
4-19 编写程序:使用穷举法来判断一个数是否是素数 52
4-20 如何避免循环结构中累加(乘、减)变量忘记置初值或置初值的位置不对的错误 52
4-21 空循环是不是就是无限循环 53
4-22 如何判定循环结束?循环提前结束如何判定 53
4-23 continue语句和break语句有什么区别 53
4-24 循环嵌套时需要注意些什么 54
4-25 如何利用循环嵌套输出菱形 54
4-26 如何使用辗除法求最大公约数和最小公倍数 55
4-27 怎样提高循环语句的执行效率. 55
4-28 C语言提供了哪些转向语句?有什么特点 56
4-29 为什么要慎用goto语句 56
4-30 返回语句return在一个函数体内必须使用吗?并且只能使用一次吗 57
第5章 函数和存储类别 58
5-1 怎样定义一个函数 59
5-2 定义函数时比较容易犯的错误包括什么 59
5-3 怎么区分函数定义和函数说明 60
5-4 如何正确理解函数分类 60
5-5 如何确定是否需要函数说明 61
5-6 如何区分函数的简单说明和原型说明 61
5-7 在函数定义中如何利用关键字void 62
5-8 什么是空函数 63
5-9 什么是库函数?常用的库函数包括什么 63
5-10 一个有返回值的函数,调用时不使用其返回值会出现什么现象 63
5-11 调用一个函数有几个返回值 64
5-12 函数的形参和实参有什么区别 65
5-13 main函数的参数如何设置?其参数有什么作用 66
5-14 函数定义时不作任何类型说明,这种定义代表什么 67
5-15 C语言中函数的调用方式有哪几种 67
5-16 函数传值调用时对函数参数有什么要求 68
5-17 函数的参数传递有哪几种?有什么区别 68
5-18 举例说明如何嵌套调用函数 69
5-19 举例说明怎样使用函数的递归调用 71
5-20 exit()函数与return语句功能有什么不同 73
5-21 在C语言中如何调用库函数 73
5-22 C语言中标识符、语句标号、变量和函数的作用域分别是怎样规定的 74
5-23 变量的存储类有什么作用 74
5-24 变量存储在内存的什么地方 74
5-25 C语言中变量“寿命”有哪些种类 75
5-26 作用域和“寿命”有什么关系 75
5-27 哪些存储类变量属于全局变量?哪些存储类变量属于局部变量 76
5-28 举例说明auto变量是局部有效的 76
5-29 为什么寄存器变量不能随意使用 77
5-30 为什么要尽量不要过多定义静态变量 78
5-31 外部静态变量和内部静态变量如何区分 78
5-32 外部变量的定义和外部变量的说明一样吗 79
5-33 如何理解外部变量是实现函数之间数据通信的有效手段 80
5-34 各存储类变量未被编译系统赋值或赋初值时能否使用 81
5-35 C语言怎样规定外部函数和内部函数 81
第6章 数组 83
6-1 什么情况下需要定义数组这种数据结构 84
6-2 数组下标总是从0开始的吗 84
6-3 C语言为什么不进行数组下标有效性检查 84
6-4 数组下标使用小数会出现什么情况 85
6-5 定义数组时数组元素个数的位置上能不能出现变量 85
6-6 用数组名作函数参数与用数组元素作实参有什么不同之处S 6
6-7 在给一维数组赋初值时,对数组元素个数和初始值表中的数据项的个数有何要求 88
6-8 举例使用循环对数组赋值和输出 88
6-9 什么是信号变量?它有什么功能 89
6-10 为什么要谨慎对待紧跟在数组后面的元素 90
6-11 如何使用冒泡法进行数组元素排序 90
6-12 举例使用比较交换法进行数组排序 91
6-13 使用选择法排序有什么优点 92
6-14 int a[2][3]={ { 1,2,3},{4,5,6}}同int a[2][3]={1,2,3,4,5,6}声明效果相同吗 92
6一15 在给二维数组赋初值时,对数组元素个数和初始值表中的数据项的个数有何要求 93
6-16 如何利用双循环遍历二维数组的各个元素 93
6-17 如何看待二维数组中的行地址与列地址的关系 95
6-18 如何利用数组输出杨辉三角 95
6-19 什么是字符串?一维字符数组就是字符串吗 96
6-20 在给字符数组赋初值时,对数组元素个数和初始值表中的数据项的个数有何要求 96
6-21 编写程序:输入五个地区的名称,并按字母顺序排列输出 97
6-22 在使用scanf()函数读入字符串时需要注意什么 97
6-23 怎样使用字符串输出函数puts() 98
6-24 字符串输入函数gets()的功能是什么 98
6-25 如何正确使用字符串连接函数strcat() 98
6-26 怎样复制字符串 99
6-27 如何确定字符串比较函数strcmp()的返回值 99
6-28 如何使用测字符串长度函数strlen() 99
6-29 '\O'和"\O"有什么区别 100
第7章 指针 101
7-1 如何理解指针就是一种变量 102
7-2 指针的类型和指针所指向的类型是一样的吗 102
7-3 给指针赋值或赋初值时需要注意什么 102
7-4 指针运算符与取地址运算符有什么关系 103
7-5 指针本身的值和指针所指向的变量的值是否相同 103
7-6 空指针有何意义 103
7-7 什么是void指针?有什么用途 103
7-8 指针所占内存有多少 104
7-9 使用只定义而不赋值的指针会有什么后果 104
7-10 是否可以将一个float型变量的地址赋给int型指针 104
7-11 指针运算和地址运算有什么区别 105
7-12 指针变量加上或减去一个整数与一般变量的加减运算有什么区别 106
7-13 任何情况下两指针变量相减都有意义吗 107
7-14 两个指针可以相加吗?为什么 108
7-15 两个指针p<q表示什么 108
7-16 如何正确理解指针相互交换的实质 108
7-17 指针能作为if语句的条件表达式吗 109
7-18 如何避免混淆数组名与指针变量 110
7-19 指向数组的指针和指向数组元素的指针有什么区别 110
7-20 如何避免指针指向越界错误 111
7-21 使用下标法和指针法表示数组中的元素有什么区别?哪一种方法更好 111
7-22 什么是指针数组?它主要有些什么应用 112
7-23 指向指针的指针和指针数组有什么相似之处 113
7-24 在int*p1[2],(*p2)[3];中,p1和有p2什么不同 114
7-25 在数组a(3)(4)中,a+1、&a(1)(0).*(a+1)、a(1)分别代表什么 115
7-26 使用字符指针有什么好处 115
7-27 使用字符串变量指针和字符数组处理字符串有什么不同 116
7-28 怎样判断两个字符串相同 116
7-29 如何使用指针变量作为函数的参数 117
7-30 什么是函数的指针?它与指针函数有什么区别 118
7-31 如何用指向函数的指针变量的方式来调用相应的函数 118
7-32 用指向函数的指针作为函数的参数有何好处 119
7-33 如何正确使用指针函数 120
7-34 用指向数组的指针作为函数参数与用数组名作为函数参数有什么区别 121
7-35 什么是far指针和near指针,它们有什么区别 121
7-36 C语言编译系统允许使用哪些存储模式?应该如何选用存储模式 122
7-37 在连接过程中出现DGROUP:group exceeds 64KB信息应该怎么处理 122
7-38 什么是const指针 122
第8章 编译预处理 124
8-1 C语言包含哪些预处理功能 125
8-2 怎样正确理解宏定义的实质 125
8-3 为什么要使用宏定义 125
8-4 宏定义的作用域有多大 126
8-5 如何结束宏定义的作用 126
8-6 宏定义可以进行嵌套吗 127
8-7 在宏定义中必须使用大写字母吗 127
8-8 宏定义中括号有什么重要的作用 127
8-9 使用宏定义和宏替换时最需要注意的是什么 127
8-10 如何区分带参数的宏定义和带参数的函数 128
8-11 什么时候使用宏代替函数 129
8-12 标准预定义宏包括什么?有什么作用 129
8-13 C语言中使用的#和##运算符有什么用途 129
8-14 文件嵌入预处理指令有什么作用 130
8-15 文件包含只能包含.h文件吗 130
8-16 如何建立.h文件 131
8-17 文件包含命令格式#include〈file〉与#include "file"有什么区别 131
8-18 包含文件可以嵌套吗 131
8-19 文件包含在程序中有什么作用 131
8-20 在什么时候才对程序中某些内容进行条件编译 132
8-21 常用的条件编译##ifdef格式包括什么 132
8-22 条件编译##if常用于什么方面 133
8-23 如何使用条件编译#ifndef格式 133
8-24 什么是行控制预处理指令?它有什么功能 134
8-25 怎样检查一个符号是否被定义 134
第9章 结构体和联合体 135
9-1 如何定义一个结构体 136
9-2 定义一个结构体对结构体成员类型是否有所限制 136
9-3 说明结构体变量有哪些方法 136
9-4 成员运算符(·)和指向结构体成员运算符(->)有什么区别 137
9-5 结构体变量成员为数组和结构体变量为数组元素有什么联系 137
9-6 结构体变量可以进行哪些运算?与数组运算有什么相似之处 138
9-7 怎样正确使用指向结构体变量的指针 139
9-8 如何使用结构体变量作为函数参数和指向结构体变量的指针作为函数参数 140
9-9 结构体和联合体有什么区别和相同之处 140
9-10 如何为联合体变量赋初值 142
9-11 如何验证联合体变量的若干成员是共享内存单元的 143
9-12 栈和堆分别用来做什么 143
9-13 如何正确看待链表这种数据结构体 144
9-14 单链表、双向链表和循环链表有什么不同之处 144
9-15 举例说明如何建立链表 145
9-16 如何查找链表中的结点 146
9-17 如何删除链表中的指定结点 146
9-18 怎样在链表中指定位置插入一个结点 147
9-19 如何看待枚举类型 147
9-20 枚举值是如何确定的 148
9-21 枚举类型有什么优点 149
9-22 如何给枚举类型变量的赋值 149
9-23 使用enum关键字定义常量比用#define来定义常量有什么好处 149
9-24 如何使用typedef定义类型 149
9-25 类型定义是否允许嵌套 150
9-26 类型定义有什么用途 150
9-27 宏定义和类型定义有什么不同之处 151
9-28 什么是位运算,位运算包括哪些 152
9-29 9&5的结果是什么 152
9-30 915的结果是什么 153
9-31 9^5的结果是什么 153
9-32 左移运算和右移运算过程中如何补位 154
9-33 如何实现左右循环移位 154
9-34 什么是位段,位段有什么优点 155
9-35 如何正确使用位段 155
第10章 文件 158
10-1 为什么说“一个C语言文件可以看做是字符流” 159
10-2 非缓冲区文件和缓冲区文件有什么区别 159
10-3 C语言文件可以分为哪些种类 159
10-4 标准文件和一般文件有什么区别 160
10-5 常用的C语言库文件包含哪些 160
10-6 为什么文件打开后要及时关闭 161
10-7 如何定义文件指针?它是怎样获得的 162
10-8 在使用打开文件函数fopen()时需要注意什么 162
10-9 文件的打开方式有哪些 163
10-10 使用fopen()函数打开一个文件时,该文件的读写指针一定指向文件头吗 164
10-11 如何正确使用putchar()函数和getchar()函数 164
10-12 getchar()函数和getch()函数有什么区别 165
10-13 使用printf()函数需要注意什么 165
10-14 printf()函数有哪些参数 165
10-15 如何选择向屏幕上写数据的函数 166
10-16 scanf()函数中参数列表由什么组成 167
10-17 scanf()函数有哪些参数?该函数的返回值是什么 167
10-18 在使用scanf()函数时需要注意什么 168
10-19 在printf()函数和scanf()函数格式符的修饰符“*”有什么作用 169
10-20 scanf()函数在输入信息流中遇到非法输入字符如何处理 169
10-21 在连续使用scanf()函数时,缓冲区内的剩余字符有何影响 169
10-22 scanf()函数中字符格式(%c)和字符串格式(%ls)有什么不同 170
10-23 i++作为printf()函数输出项参数和作为赋值表达式一部分有什么区别 171
10-24 举例说明在printf()函数的格式说明符中使用大写字母的含义 171
10-25 用printf()函数格式符%u能够输出一个负整数吗 171
10-26 fgetc()函数的使用需要注意什么 172
10-27 如何正确使用写字符函数fputc() 172
10-28 fgets()函数的功能是什么 174
10-29 如何使用写字符串函数fputs() 174
10-30 C语言提供了哪些用于整块数据的读写函数 175
10-31 fscanf()函数、fprintf()函数与scanf()函数、printf()函数有什么区别 175
10-32 使用EOF和feof()函数判断文件结束有什么区别 176
10-33 如何对文件进行随机读写操作 176
10-34 检测文件错误用什么函数 177
第11章 图形图像和音频 179
11-1 怎么打开图形图像模式 180
11-2 怎样利用C语言建立独立图形运行程序 181
11-3 如何设置屏幕颜色 181
11-4 如何利用C语言进行画点操作 182
11-5 如何利用C语言进行画线操作 182
11-6 如何使用C语言填充封闭图形 184
11-7 怎样设定屏幕窗口 186
11-8 如何在图形模式下输出文本 187
11-9 怎么用C语言播放或者编写音频文件 189
第12章 内存管理 191
12-1C 语言提供了哪些常用的内存管理函数 192
12-2 如何处理C语言常见内存管理问题 193
12-3 堆和栈有什么区别 194
12-4 高位优先与低位优先的区别是什么 195
12-5 什么是“内存泄漏” 196
12-6 怎样正确和合理地利用内存这种敏感资源 196
12-7 指针参数是如何传递内存的 197
12-8 什么是“野指针” 198
12-9 有了malloc()/free()函数为什么还要用new()/delete()函数 198
12-10 内存耗尽怎么办 199
12-11 如何提高文件访问速度 200
第13章 C语言应用技巧 201
13-1 如何实现C语言的高效编程 202
13-2 在使用C语言生成随机数时,如何解决两次运行产生的随机数列相同的问题 204
13-3 stdlib.h,math.h和time.h分别有什么用途 204
13-4 编写程序时优化数组的寻址有什么技巧 205
13-5 怎样才能检测到链表中存在循环 206
13-6 程序运行结果为nullpointerassignment表示什么 207
13-7 如何实现实现程序到屏幕的无缓冲输出 207
13-8 如何在退出main()函数后调用一些特定的函数 208
13-9 可以使用sizeof()函数来计算一个指针变量所分配的内存块的大小吗 208
13-10 编写一个函数,作用是把一个char组成的字符串循环右移n个 209
13-11 请说出static和const关键字作用 209
13-12 编写一个C函数:若处理器是Big_endian的,则返回0;若是Little_endian的,则返回1 210
13-13 为什么使用const变量来初始化数组时,ANSIC编译器将会报告错误 210
13-14 常用键盘扫描码包括什么 211
13-15 如何在C程序中显示汉字 212
13-16 如何使用C语言进行CGI程序设计 213
13-17 什么是中断?有什么作用 214
13-18 怎样实现文本模式和图形模式之间的转换 214
13-19 如何利用C语言编写一个“棋盘”类游戏 217
13-20 使用C语言编写一个网吧电影管理系统 220
附录A 225