第一章:考试规则范围概述
题型与分数分布
考试由以下四种类型的题组成:
- 单项选择题,包括公共基础知识部分,共40题,占40分。
- 程序填空题,共3个小空,占18分。
- 程序改错题,包含2个错误,占18分。
- 程序设计题,占24分。
考试环境
考试将在具有 Visual C++ 6.0 的 Windows 7 简体中文版环境中进行。
考试要求
- 熟练使用 Visual C++6.0 集成开发环境。
- 掌握结构化程序设计方法并具有良好的程序设计习惯。
- 理解程序设计中的基础数据结构与算法以及阅读简单程序的能力。
- 在 Visual C++6.0 环境中编写简单的C程序,同时具备基础的纠错与程序调试能力。
考试内容
1. C语言程序的结构:包括程序构成,main函数与其他函数,头文件,数据说明,函数的开始与结束标志,以及程序中的注释。
2. 数据类型及其运算:包括C的数据类型及其定义方法,C运算符的种类、运算优先级和结合性,不同类型数据间的转换与运算。
3. 基本语句:包括表达式语句,空语句,复合语句,与输入输出函数的调用。
4. 选择结构程序设计:包括用if语句实现选择结构,用switch语句实现多分支选择结构,以及选择结构的嵌套。
5. 循环结构程序设计:包括for,while和do-while结构,continue语句和break语句,以及循环的嵌套。
6. 数组的定义和引用:包括一维数组和二维数组的定义、初始化和数组元素的引用,以及字符串与字符数组。
7. 函数:含库函数的正确调用,函数的定义方法,函数的类型和返回值,形式参数与实在参数,参数值的传递,函数的正确调用,嵌套调用,递归调用,局部变量和全局变量,以及变量的存储类别。
8. 编译预处理:包括宏定义和调用,以及“文件包含”的处理。
9. 指针:包括地址与指针变量的概念,地址运算符与间址运算符,一维和二维数组和字符串的地址以及对任意类型数据的指针引用,用指针作函数参数,返回地址值的函数,以及指针数组,指向指针的指针。
10. 结构体与共同体(即“联合")**:包括用typedef说明新类型,结构体和共用体类型数据的定义和成员的引用,通过结构体构成链表,单向链表的建立,结点数据的输出、删除与插入。
11. 位运算:包括位运算符的含义和使用,以及简单的位运算。
12. 文件操作:涉及到缓冲文件系统,包括文件类型指针(FILE类型指针),文件的打开与关闭(fopen,fclose),文件的读写,文件的定位。不要求非标准缓冲文件系统知识。
第二章:C语言基础知识精讲概述
1.C程序: C程序由C语言编写,包括源程序(编译单位),以及生成的“.obj”目标文件和最终的".exe"可执行文件。在C语言中,代码的结构可以归纳为顺序结构、选择结构与循环结构。
#include<stdio.h>
int main(){
printf("Hello, World!");
return 0;
}
这是一个简单的C程序,包括了源程序(编译单位),通过编译器编译后会生成".obj"目标文件,链接器再将多个目标文件进行链接生成最终的".exe"可执行文件。
2.main函数: main函数是程序的入口点,每个C程序都必须且只有一个main函数。
int main(){
printf("This is the main function!");
return 0;
}
main函数在这里作为程序的入口点,它包括了程序执行的所有操作。每个C程序都包括一个main函数。
3.标识符: 标识符是由字母、数字和下划线组成的字符序列,用于标识名字。它可以是关键字、预定义标识符或用户定义的标识符。
int myVariable = 5;
在这里,myVariable
就是一个标识符,它是用户定义的,用于标识一个整型变量。
4.常量与变量: 常量是在程序运行过程中其值不能改变的量。变量是可以改变的量,C语言中没有字符串变量,存放字符串使用字符数组。
#define PI 3.14
int radius = 5;
PI在这里就是一个常量,其在程序运行过程中其值不能改变。而radius则是一个可以改变的量,也就是一个变量。
5.整型数据: 包括基本整型(int)、短整型(short)、长整型(long)和无符号整型(unsigned)。整型常量有十进制、八进制、十六进制表示形式,没有二进制形式。
int basicInt = 20;
short shortInt = 10;
long longInt = 30;
unsigned unsInt = 40;
这里有四种不同类型的整型数据,分别为基本整型、短整型、长整型以及无符号整型。
6.实型数据: 实型数据有两种表示形式:小数形式和指数形式。实型变量分为单精度型(float)和双精度型(double)。
double doubleVar = 5.12;
float floatVar = 9.14;
这里的doubleVar
和floatVar
分别是双精度实型变量和单精度实型变量。
7.算术运算: 算术运算符包括+、-、*、/ 和 %,注意 % 只能用于整型运算。
int num1 = 5;
int num2 = 10;
int sum = num1 + num2;
int diff = num1 - num2;
int prod = num1 * num2;
int div = num2 / num1;
int rem = num2 % num1;
8.赋值: 赋值运算符为"=",它把右边的值赋给左边的变量。还有复合赋值运算符,是将算术运算符和赋值运算符组合在一起形成的运算符。
int x = 10;
x += 20; // x will now be 30
在这段代码中,"x = 10"使用了赋值运算符"=",把10赋值给x。"x += 20"则使用了一种复合赋值运算符,效果和"x = x + 20"一样。
9.自增和自减运算: 自增运算符"++"和自减运算符"--"可以进行前缀和后缀运算。
int y = 5;
y++; // y will now be 6
y--; // y will now be 5
这里的"y++"是自增运算,使y的值加1。"y--"是自减运算,使y的值减1。
10.转义字符: 转义字符用于表示一些不能直接输入或不易输入的字符,如换行符"\n",制表符"\t"等。
printf("Hello, World!\n"); // Newline escape character (\n)
在这个例子中,"\n"是一个转义字符,用于表示换行。
11.数据存储转换: 计算机以二进制形式存储数据。可以将十进制转换为二进制、八进制和十六进制,也可以将二进制、八进制和十六进制转换为十进制。
int z = 10;
printf("Decimal: %d, Hex: %x, Octal: %o\n", z, z, z);
这段代码把一个十进制的整数10转换成十六进制和八进制表示的形式。
12位运算: 位运算处理二进制数的每一个位,并可进行位的移动操作。
double d = 10.5;
int i;
i = (int)d; // i will be 10
这是位运算的一个例子,'&'是二进制位与运算符。
13.强制类型转换: 强制类型转换是将一个运算对象转换成指定类型。格式为(类型名)表达式。
double d = 10.5;
int i;
i = (int)d; // i will be 10
在这里,"(int)d"把一个double型数值10.5强制转换成了int型,小数部分被舍去。
14.注释: 注释是对程序的说明部分,不会被编译器执行,用于提高程序的可读性。方法为“/.../”和"//...",不可嵌套使用。
// 这是单行注释
/*
这是一个
多行注释
*/
这两行展示了如何使用单行和多行注释,它们用于解释代码,但编译器会忽略它们。
附:
考试真题:
1、下列叙述中错误的是( D )——2006年4月选择第44题
A)C语言源程序经编译后生成后缀为.obj的目标程序
B)C语言经过编译、连接步骤之后才能形成一个真正可执行的二进制机器指令文件
C)用C语言编写的程序称为源程序,它以ASCII代码形式存放在一个文本文件中
D)C语言中的每条可执行语句和非执行语句最终都将被转换成二进制的机器指令
【解析】编译过程中,源程序原封不动的部分包括注释,预处理指令,因此选项D错误。
2、下列叙述中错误的是( B )——2006年4月选择第45题
A)算法正确的程序最终一定会结束
B)算法正确的程序可以有零个输出
C)算法正确的程序可以有零个输入
D)算法正确的程序对于相同的输入一定有相同的结果
【解析】即使算法正确,如果我们的程序设计不需要任何输出,也就不会有输出。例如,我们的程序可能只对数据进行内部处理并保存更改,而不需要在屏幕上显示任何内容。所以,算法正确的程序可能没有输出,选项B错误。
3、下列叙述中错误的是(A)——2006年9月选择第11题
A)一个C语言程序只能实现一种算法
B)C程序可以由多个程序文件组成
C)C程序可以由一个或多个函数组成
D)一个C函数可以单独作为一个C程序文件存在
【解析】一个C语言程序可以实现多种算法。我们可以在一个程序中包含多个函数,每个函数都可以实现自己的算法。所以,一份C语言的源文件可以实现多种算法,选项A错误。
4、下列叙述中正确的是(D)——2006年9月选择第12题
A)每个C程序文件中都必须要有一个main()函数 算法正确的程序对于相同的输入一定有相同的结果
B)在C程序中main()函数的位置是固定的
C)C程序中所有函数之间都可以相互调用,与函数所处位置无关
D)在C程序的函数中不能定义另一个函数
【解析】C语言不支持在一个函数内定义其他函数。即,一个函数不能包含另一个函数的定义。在C语言编程中,必须要在主函数main()或者其他用户自定义函数外部定义函数。所以,选项D是正确的。
5、在算法中,对需要执行的每一步操作,必须给出清楚、严格的规定,这属于算法的(C)——2007年4月选择第11题
A)正当性
B)可行性
C)确定性
D)有穷性
【解析】一个算法的确定性指的是,对于同一组输入,算法将总是给出相同的输出结果,并且每一步在规定的条件下,只有一种操作。所以选项C是正确的。
6、下列叙述中错误的是(D)——2007年4月选择第12题
A)计算机不能直接执行用C语言编写的源程序
B)C程序经C编译程序编译后,生成后缀为.obj的文件是一个二进制文件
C)后缀为.obj的文件,经连接程序生成后缀为.exe的文件是一个二进制文件
D)后缀为.obj和.exe的二进制文件都可以直接运行
【解析】.obj文件是目标文件,该文件还必须链接才能生成可以执行的程序。.exe文件才是可以直接被执行的程序,所以选项D错误。
7、下列叙述中错误的是(C)——2007年4月选择第14题
A)C语言是一种结构化程序设计语言
B)结构化程序由顺序、分支、循环3种基本结构组成
C)使用3种基本结构构成的程序只能解决简单问题
D)结构化程序设计提倡模块化的设计方法
【解析】使用顺序、分支和循环三种基础结构就可以解决复杂问题,不仅仅为了解决简单问题。因此,选项C错误。
8、对于一个正常运行的C程序,下列叙述中正确的是(A)—2007年4月选择第15题
A)程序的执行总是从main函数开始,在main函数结束
B)程序的执行总是从程序的第一个函数开始,在main函数结束
C)程序的执行总是从main函数开始,在程序的最后一个函数中结束
D)程序的执行总是从程序中的第一个函数开始,在程序的最后一个函数结束
【解析】无论C程序中包含多少函数,程序的执行始终从主函数main()开始,并在main()函数结束时完成。因此,选项A是正确的。
9、C语言源程序名的后缀是(B)——2007年9月选择第11题
A).exe B).c C).obj D).cp
【解析】C语言源程序的扩展名为.c,所以选项B是正确的。
10、下列叙述中正确的是(C)——2007年9月选择第14题
A)C语言程序将从源程序中第一个函数开始执行
B)可以在程序中由用户指定任意一个函数作为主函数,程序将从此开始执行
C)C语言规定必须用main作为主函数名,程序将从此开始执行,在此结束
D)Main可作为用户标识符,用以命名任意一个函数作为主函数
【解析】C语言规定必须用main作为主函数名,程序将从此开始执行,在此结束。所以选项C正确。
11. 以下选项中合法的标识符是(C)(2009年3月)
A)1_1 B)1-1 C)_11 D)1_
【解析】在C语言中,合法的标识符只能以字母或下划线开始,接下来可以是字母、数字或下划线。选项C,identifier '_11' 是由下划线和数字组成,因此它是合法的。
12. 以下选项中不合法的标识符是(C)(2008年4月)
A)print B)FOR C)&a D)_00
【解析】在C语言中,合法的标识符不能开始字符"&",因此选项C的"&a"不是一个合法的标识符。
13. 可在C程序中用做用户标识符的一组标识符是(A)(2007年9月)
A)and B)Date C)Hi D)case _2007 y-m-d Dr.Tom Bigl
【解析】在C语言中,用户可以定义的标识符不能使用C语言的保留字(也称关键字)。选项A的"and"不是C语言的关键字,所以它是合法的,而选项D的“case”是C语言的关键字,所以这组标识符是非法的。
14. 按照C语言规定的用户标识符命名规则,不能出现在标识符中的是 ( B )(2007年4月)
A)大写字母 B)连接符 C)数字字符 D)下划线
【解析】在C语言中,标识符只能由字母、数字和下划线组成,不能包含连字符或其他特殊符号,因此选项B正确。
15. 以下不合法的用户标识符是(C)(2006年4月)
A)j2_KEY B)Double C) 4d D) _8_
【解析】在C语言中,标识符必须以字母或下划线开头,选项C的"4d"是以数字开始的,所以它不是一个合法的标识符。
16. 以下选项中不属于字符常量的是 (B)(2008年4月)
A)'C' B)"C" C)'\xCC0' D)'\072'
【解析】在C语言中,字符常量使用单引号,如选项A,C和D。而选项B使用了双引号,因此它是字符串常量,不属于字符常量。
17. 以下合法的字符常量的是 (A)
A)'\x13' B)‟\081‟ C)'65' D)”\n”
【解析】选项A是一个十六进制的转义序列,代表一个字符常量,它是合法的。其他选项中,B的八进制数超过了字节的范围,C和D都包含了多个字符,所以这些选项都是非法的字符常量。
18. 已知大写字母A的ASCII码是65,小写字母a的ASCII码是97。下列不能将变量c中的大写字母转换为对应小写字母的语句是 (A)(2007年4月)
A)c=(c-„A‟)%26+‟a‟ B)c=c+32 C)c=c-„A‟ +‟a‟ D)c=(„A‟+c)%26-„a‟
【解析】大写字母到小写字母的转换应该通过添加32(或者说加上' '),而不是进行模运算。所以选项A是不正确的。
19. 以下选项中,值为1的表达式____B____。(2006年9月)
A)1-„0‟ B)1-„\0‟ C)‟1‟-0 D)‟\0‟-„0‟
【解析】表达式B结果为1,因为'\0'是空字符,其ASCII值为0,所以1 - '\0'等于1。其他的表达式结果都不为1。
20. 以下选项中,能用作数据常量的是 ( D )(2009年3月)
A)o115 B)0118 C)1.5e1.5 D) 115L
【解析】选项D的115L是一个长整型常量,是一个合法的数值常量。而选项C的1.5e1.5是不合法的,因为科学计数法的指数部分应该是一个整数。
21. 以下选项中不能作为C 语言合法常量的是(B)。
A)'cd' B)0.1e+6 C)"\a" D)'\011'
【解析】选项B的0.1e+6是一个浮点常量而非C语言合法常量。其他选项都是合法的C语言常量。
22. 以下不合法的数值常量是 (C)
A)011 B)lel C)8.0 E0.5 D)0xabcd
【解析】选项C的8.0 E0.5是不合法的,因为科学计数法的指数部分应该是一个整数。
23. C 源程序中不能表示的数制是( C )。(2008年9月)
A)二进制
B)八进制
C)十进制
D)十六进制
【解析】在C语言源程序中,我们不能直接为二进制数赋值,而八进制数需以0开始,十进制数以1-9开始,十六进制数以0x或者0X开始,所以A是正确答案。
24. 以下关于long、int和short类型数据占用内存大小的叙述中正确的是 ( D )(2007年9月)
A)均占4个字节
B)根据数据的大小来决定所占内存的字节数
C)由用户自己定义
D)由C语言编译系统决定
【解析】不同的C语言编译器会采用不同的数据模型,这些数据模型定义了各种数据类型(如long、int和short)占用的内存大小。因此,这些类型数据占用的内存大小由C语言编译系统决定。
25. 以下选项中,合法的一组C语言数值常量是 ( B )(2007年9月)
A.028 B.12. C.177 D.0x8A
【解析】在C语言中,八进制常量是以0开头,但不能包含8或9。十进制常量不以0开头。十六进制常量以0x或0X开头,并用十六进制数字(0-9,A-F或a-f)表示。选项B的12.是一个合法的十进制浮点常量,所以它是正确的。其他选项中,A的028是非法的,因为它是一个以0开头的八进制数,但包含了8,所以这组数值常量是非法的。
5 e-3 0Xa23 4e1.5 10,000
-0xf 4.5e0 0abc 3.e5