第一章 C语言概述 1
1.1 C语言的特点 1
为什么说C语言是一种不完全的结构化程序设计语言? 1
如何理解“C语言是一种弱类型的语言”? 1
有人说,“C语言是一种中级语言”,这是为什么? 3
C语言语句简练表现在哪些方面? 3
为什么说C语言的移植性强? 4
C语言本身有哪些不足?在实际编程中如何克服这些不足? 5
1.2 C语言程序的格式 6
C语言中,程序、文件、函数三者有何关系? 6
C语言程序在书写格式上有何特点? 7
组成C语言程序的最小可执行单元是什么?最小模块单元是什么? 7
在多个文件的程序中,主函数是否只能有一个? 8
C语言程序的书写格式与可读性有何关系? 8
1.3 C语言的实现 9
如何实现一个C语言的程序? 9
多文件程序如何实现? 10
C语言程序在编译中的致命错和警告错有什么区别?编译错和连接错有何不同? 10
主函数带参数的程序如何实现? 11
如何调试一个C语言的程序? 13
1.4 C语言词法及其规则 13
C语言有哪些单词? 13
标识符是如何规定的?它与关键字有何区别? 14
C语言中常用的分隔符有哪些?各自的作用是什么? 14
C语言主要应用在哪些方面? 15
C语言与C++语言的关系如何? 15
1.5 语言的应用 15
C语言中空白符的含义是什么?它有何作用? 15
第二章 常量、变量、运算符和表达式 17
2.1 常量类型和使用方法 17
C语言中有哪些常量?如何表示? 17
符号常量是怎么回事?为什么要用符号常量? 17
常量的前缀和后缀表示是如何规定的? 18
不可打印的字符常量如何表示?\n和\\表示什么意思? 18
C语言中变量名字是如何规定的?变量名必须都用小写字母吗? 19
C语言中浮点数是怎样表示的? 19
2.2 变量的名字、类型和值 19
给变量赋值和给变量赋初值是一回事吗? 20
C语言中变量类型有哪些?变量类型的高低是怎样规定的? 20
在给数组赋值和赋初值时是否都有“越界”问题? 21
使用初始值表给数组赋初值时,对数组元素的个数和初始值表中数据项的个数有何要求? 21
可以通过赋初值将一个字符串常量赋给一个字符数组,能否将一个字符串常量直接赋值给一个字符数组? 21
2.3 运算符的种类、用法、优先级和结合性 22
如何记住运算符的15种优先级和两种结合性? 22
在程序中出现没有定义的变量会发生什么现象?定义过的变量没有赋值和赋初值能否使用? 22
C语言中有哪几种逻辑运算符?由逻辑运算符组成的表达式的值如何表示? 23
C语言中有哪几种逻辑位运算符?逻辑位运算符与逻辑运算符有何区别? 23
增1减1运算符只能作用在变量上吗?能否作用在表达式上? 23
移位运算符中左移和右移补位规则是否相同? 24
在C语言中,“非0为真,0为假;真用1表示,假用0表示”这句话如何理解? 24
在C语言程序中,如何判断逗号“,”是分隔符还是运算符? 24
如何计算表达式的值和确定表达式的类型? 25
2.4 表达式的种类和求值方法 25
三目运算符有何特点?使用时应注意些什么? 25
运算符sizeof只能作用在类型说明符上吗?为什么? 25
逻辑表达式在计算值上有什么特点? 26
条件表达式的类型如何确定? 27
逗号表达式中由逗号分隔的各个表达式的类型是否要求一致?如果不一致,逗号表达式的类型如何确定? 27
在表达式中连续出现两个以上(含两个)运算符时应注意些什么? 27
书写表达式时应该注意些什么? 27
表达式的二义性是怎么回事?如何避免? 28
在!5和1-5;~5和~-5两组表达式中,每组的表达式的值相同吗? 29
已知: int a=8;请分析表达式a》2和a》=2计算后,a的值是否相同?为什么? 29
2.5 类型转换 29
C语言中有哪些类型转换的机制? 29
一个已定义的变量经过强制类型转换后,它的类型是保留原来的类型还是被转换的类型? 30
能否将一个int型数值赋给float型变量?又能否将一个float型数值赋给int型变量? 31
在一个表达式中,有几种不同类型的变量如何处理?表达式5.76<3和64>tAt是合法的吗? 31
什么是空语句?它有何作用? 32
表达式和表达式语句有何不同? 32
第三章 语句 32
3.1 表达式语句、空语句和复合语句 32
什么是复合语句?它与分程序有何不同? 33
在C语言程序中复合语句有何作用? 33
3.2 分支语句 34
在if语句嵌套的程序段中,如何判断else是属于哪个if的? 34
在if语句中,if条件和else if条件只能用逻辑表达式和关系表达式吗? 35
在if语句中,else短语和else if短语的个数是否有限制? 35
写出switch语句的格式,并说明该语句是如何执行的? 36
在switch语句中,关键字default出现的位置是否有所规定? 37
在swith语句中,break语句起什么作用? 39
在多路分支的情况下,是选择if语句还是选择switch语句的主要依据是什么? 39
3.3 循环语句 40
C语言中规定使用哪些循环语句?这些循环语句各自的特点是什么? 40
while循环和do-while循环的区别是什么? 41
写出for循环语句的格式,并说明该语句是如何执行的? 42
当while循环条件是赋值表达式时,会出现什么现象? 42
任何一个for循环语句都可以写成while循环的格式吗? 44
如何判断for循环中循环体的执行次数? 45
如何判断循环结束?当循环条件为真时如何退出循环? 46
break语句和continue语句在循环体中起什么作用? 47
循环体如何判界?循环体为空语句意味着什么? 48
同一种格式的循环可以嵌套,不同种格式的循环能否嵌套? 48
在开始无法确定循环次数的情况下,应选用哪种循环?用for循环是否可以? 49
在循环嵌套使用时,应注意些什么问题? 50
3.4 转向语句 51
C语言提供哪些转向语句?它们各自的特点是什么? 51
C语言中对使用goto语句有何限制? 52
如何定义语句标号?它有何作用? 52
返回语句return在一个函数体内必须使用吗?且只能使用一次吗? 53
第四章 函数和存储类 55
4.1 函数的定义和说明 55
怎样定义一个函数?函数的定义和说明有何不同? 55
如何说明函数?函数的简单说明和原型说明有何区别? 56
所有的函数是否在调用之前都必须说明? 56
函数的调用可以嵌套,函数的定义能否嵌套? 57
函数定义中的函数类型与参数类型有何关系?函数类型与返回值类型有何关系? 57
4.2 函数的参数和返回值 58
函数的实参和形参分别指的是什么? 58
一个有返回值的函数,调用时不使用其返回值会出现什么现象? 58
一个函数的类型为double型,而它的返回值表达式的类型为int型,这样定义的函数有问题吗? 58
用void类型定义的函数意味着什么?void型函数调用之前是否一定要说明? 58
函数定义时不作任何类型说明,这种定义意味着什么?这种函数在调用之前是否一定要说明? 58
调用一个函数时是否能获得多个返回值?在一个函数中是否可出现多个带有返回值表达式的return语句? 59
主函数main()带有参数意味着什么?对主函数的参数有何规定? 60
4.3 函数的调用方式 61
C语言中有哪些不同的传值调用形式?它们有何区别? 61
函数的传值调用中,对形参和实参有何要求?如果不满足会出现什么现象? 63
什么是函数的嵌套调用?举例说明。 63
什么是函数的递归调用?举例说明。 64
一个函数的若干个参数中,有的采用传递变量值的形式,有的采用传递变量地址值的形式。这样使用是否可以? 65
4.4 作用域 66
C语言中标识符的作用域是怎样规定的?具体指出语句标号、变量和函数的作用域是如何规定的? 66
在一个变量的作用域内,使用分程序对该变量进行重新定义后,新定义的变量与原变量在作用域上有何关系? 67
作用域和寿命有何关系?某个变量在其作用域外是否还可以存在? 68
4.5 存储类 68
存储类的含义是什么?不同存储类的变量有何不同? 68
C语言中,哪些变量属于全局变量?哪些变量属于局部变量?函数参数属于哪类变量? 68
自动类变量和内部静态类变量在作用域和寿命上有何不同? 68
寄存器类变量有何特点?使用时应注意些什么? 69
外部静态变量和内部静态变量在作用域上有何不同?在定义或说明上有何区别? 70
外部变量的定义和说明是不是一回事?何时需要说明外部变量?如何说明? 71
自动类变量在赋值或赋初值之前不能使用,为什么?其他存储类变量是否也如此? 72
外部函数和内部函数是如何规定的? 73
在一个多文件的程序中,如何定义一个只被某个文件引用的变量和函数? 73
外部变量用作函数之间信息传递有何弊病? 73
什么是宏定义?宏定义和宏替换二者有何关系? 74
什么是预处理?预处理包含哪些内容?预处理命令有何特点? 74
5.1 宏定义 74
第五章 预处理和类型定义 74
宏定义中宏名必须用大写字母吗? 75
宏定义的作用域是怎样规定的? 75
宏定义中的嵌套是怎么回事? 76
不同编译系统中宏替换的结果是否相同? 76
为什么说宏定义中正确运用括号是十分重要的? 77
使用宏定义和宏替换时最容易犯的错误是什么? 78
带参数的宏定义与函数在形式上很相似,但二者有何区别? 79
在编程中,有些功能既可用宏定义实现又可用函数实现,这时应该如何选择? 80
5.2 文件包含和文件编译 81
什么是文件包含?文件包含只能包含头文件(.h)吗? 81
如何建立.h文件?建立.h文件时应注意些什么? 82
文件包含的嵌套是什么意思? 82
文件包含在程序设计中有何作用? 83
什么是条件编译?它有什么用途? 83
常用的条件编译的格式有哪几种? 83
类型定义有何用处? 85
5.3 类型定义 85
“类型定义不是定义新的类型”这句话如何理解? 85
类型定义是否允许嵌套? 86
宏定义与类型定义有何不同? 86
第六章 指针 89
6.1 指针的定义、赋值和运算 89
指针是一种变量,它与一般变量的区别是什么? 89
如何给指针赋值或赋初值?C语言中变量地址值如何表示? 89
指针被定义后不赋值为什么不能使用? 90
给一个指针赋值为NULL,这表示什么意思? 91
不同类型的指针能否相互赋值? 91
不同类型的指针所占内存的大小是否相同? 91
指向数组的指针、指向函数的指针和指向指针的指针如何表示?如何赋值? 92
指针本身的值和指针所指向的变量的值是否相同? 93
指针的运算有哪些?任意两个指针做相减运算是否有意义? 93
6.2 指针和数组 95
C语言中规定数组名是一个指针,这种指针与一般指针有何不同? 95
“指针运算实际上是地址运算,但是两者又不相同”这句话如何理解? 95
指向数组元素的指针与指向数组的指针相同吗?为什么? 96
C语言中数组既可用下标方式表示又可用指针方式表示,这两种方式如何选择? 97
写出一维数组、二维数组和三维数组的指针和下标的各种表示形式。 97
在int a[2][3];中,a+1的含义与a[1]的含义是否相同? 98
什么是指针数组?如何给它赋值? 99
在int *p1[2],(*p2)[3];中,p1和p2有何不同? 99
在int a[][2]={1,2,3,4,5,6},*p[3];中,p=a;这样赋值是否可以?p[0]=a;这样赋值是否可以?如果p[1]=a[2];后,*(*(p+1)+1)的值是多少? 100
在int a[]={1,2,3},*p= a[1];中,*p的值与a[1]的值相等吗?a[0]的值和p[0]的值相等吗?p[0]的值与*(a+1)的值相等吗? 100
6.3 字符指针和字符串 101
什么是字符指针?为什么要规定字符指针? 101
什么是字符串?一维字符数组就是字符串吗? 102
在char* p= abcdef ;中,如何使用printf()函数输出该字符串、串中某一字符和某字符的ASCⅡ码值? 102
在char*b[]={ abc , mnp };中,b[0]的含义是什么?printf(*%s\n ,b[0]);输出结果是什么?b[1][2]的含义是什么?printf( %c\n ,b[1][1]);输出结果是什么? 103
已知:char *s1= 123 ,*s2= 456 ,*s[2],*p;又知:s[0]=s1;s[1]=s2; p=*s;试写出printf( %c\n ,*p);printf( %s\n ,p+1); printf( %s\n ,s[1]+2);各自的输出结果? 104
在判断两个字符串s1和s2(s1和s2为字符指针)相等时,使用表达式s1==s2是否可以? 105
在使用strcat(s1,s2)函数时,如果第一个参数s1的字符数组不够大时会发生什么现象? 105
用指针作函数形参实现传址调用中,当在被调用函数中改变形参时,实参一定被改变吗? 106
6.4 指针与函数 106
指向数组的指针作函数参数与数组名作函数参数其作用相同吗? 107
什么叫指针函数?它与指向函数的指针在说明中有何不同? 108
怎样给一个指向函数的指针赋值?试举例说明。 109
指向函数的指针作函数参数时,如何调用指针所指向的函数? 109
第七章 结构、联合和枚举 111
7.1 结构变量的基本概念 111
如何定义结构变量?结构变量与结构有何关系? 111
定义一个结构时对其成员的类型是否有所限制?结构变量可否作结构成员? 112
结构名、结构成员名和结构变量名三者有何关系? 113
结构变量的成员和指向结构变量指针的成员在表示上有何不同? 113
结构变量成员为数组和结构变量为数组元素有何不同? 114
结构的定义可以嵌套,在嵌套时有何规定? 115
结构变量的赋值与数组赋值有何相同之处? 115
指向结构变量的指针赋值与指针赋值是否相同? 116
结构变量都有哪些运算?它与数组的运算有相似之处吗? 116
举例说明结构与数组的关系:数组作结构成员和结构变量作数组元素。 117
7.2 结构的应用 117
结构变量作函数参数和指向结构变量的指针作函数参数有何不同? 119
较复杂的结构关系如何用图解法表示关系帮助理解? 120
什么是单向链表和双向链表?举一个建立并显示单向链表的例子。 122
链表有哪些基本操作?举例说明链表的插入和删除操作方法。 124
什么是位段?为什么要引进位段? 128
7.3 联合和枚举 129
什么是联合?它有何特点?它与结构有什么区别? 129
如何验证联合变量的若干成员是共用内存单元的? 130
能否给联合变量赋初值?试举例说明。 131
为什么说“枚举是若干个有名字的整型常量的集合,枚举变量的取值范围受到其枚举表中枚举符的限制”? 132
枚举符的值是如何确定的?输出枚举变量的值是什么类型的? 132
能够将一个整数值直接赋给一个枚举变量吗?能够直接输出枚举变量的枚举符吗? 133
枚举有何用途? 134
标准文件和一般文件有何区别? 135
C语言文件有何特点? 135
8.1 文件的概念 135
第八章 文件和读写操作函数 135
如何定义文件指针?它是怎样获得的? 136
文件打开后为什么要及时关闭? 136
8.2 标准文件的读写操作 137
常用的标准文件的读写函数有哪些? 137
getchar()函数与getch()函数有何区别? 139
scanf()函数有哪些参数?该函数的返回值是什么? 139
printf()函数有哪些参数?该函数的返回值是什么? 141
scanf()函数和printf()函数中格式符的修饰符*有何不同? 142
scanf()函数和printf()函数中格式符%md的含意有何区别? 142
scanf()函数的输入信息流中的输入项如何确定? 143
scanf()函数输入数据时,常用的三种输入格式是什么? 143
scanf()函数在输入信息流中遇到非法输入字符如何处理? 144
scanf()函数中字符格式(%c)和字符串格式(%ls)有何不同? 145
在连续使用scanf()函数时,缓冲区内的剩余字符有何影响?应如何处理? 145
用printf()函数的格式符%u能够输出一个负整数吗? 147
在printf()函数中格式符的修饰符用#表示何意? 148
在prntf()函数的格式说明符中能否用大写字母?举例说明用大写字母的含意 148
8.3 一般文件的读写操作 149
打开文件的方式有哪些? 149
常用的一般文件的读写函数有哪些? 149
使用fopen()函数打开一个文件时,该文件的读写指针一定指向文件头吗? 154
fgets()函数有几个参数?该函数有哪些结束条件? 154
使用EOF和函数foef()判断文件结束有何区别? 154
如何使用fseek()函数来定位文件读写指针?如何确定文件读写指针的位置? 155
如何使用fwrite()和fread()函数对结构数组进行操作? 156
第九章 其他问题 158
什么是const指针?它有什么用处? 158
什么是左值?什么是右值?C语言中表达式可以作右值吗? 158
两个动态分配内存空间函数:malloc()和calloc()有何不同? 159
far指针与near指针有何区别? 159
栈(stack)和堆(heap)有何不同? 160
如何在指定的整数范围内产生一个随机数? 160
怎样在一个程序的执行期间去运行另一个程序? 161
C语言中变量的寿命有哪几种类? 161
怎样知道一些数字型变量的最大值和最小值? 162
使用enum关键字来定义常量比用#define来定义常量有何好处? 163
如何选择向屏幕上写数据的输出函数? 163
C语言程序中,大括号的常用写法有哪几种? 164
什么是空循环?什么是死循环?二者有何区别? 166
指针能作为if语句的条件表达式吗? 167
如果一个函数的参数很多时,采用什么方法更为合适? 167
C语言编译系统允许使用哪些种存储模式?应该如何选用存储模式? 168
如何避免程序用尽内存? 169
在连接过程中出现“DGROUP:group exceeds 64 KB”信息该怎么处理? 169
exit()函数和return语句作用上有何不同? 170
选用什么方法来调试程序? 170
第十章 自我测试题 172
10.1 选择填空50题 172
10.2 分析程序输出结果75题 180
10.3 自我测试题答案 209