江苏省计算机二级C++考试备考提纲及资料.docx
《江苏省计算机二级C++考试备考提纲及资料.docx》由会员分享,可在线阅读,更多相关《江苏省计算机二级C++考试备考提纲及资料.docx(103页珍藏版)》请在冰豆网上搜索。
江苏省计算机二级C++考试备考提纲及资料
江苏省计算机二级考试备考提纲
第一章VisualC++程序设计入门
1>定义标识符规则:
第一个字符只能是英文字母或下画线,后面可跟字母,数字,下画线;不能是C++语言的关键字。
2>键盘上除去3个字符:
@,¥,其余的可显示字符在程序代码中均能使用。
3>编写程序的注意事项:
/*和*/为多行注释,//为单行注释,从标识起至本行结束:
程序一般包含输入输出编译预处理命令;C++的程序有且只有一个主函数main;对于C++编译器而言,一条语句可以写成若干行,一行内也可以写若干条语句,:
而且它严格区分大小写字母。
4>运算符;1.求模/余运算符%,要求操作数必须都是整形数,若不是整型数必须将操作数强制转化成整型再进行求余运算,否则将出现编译错误,如(int)5.2%3=2;2.若操作数中有负值,求余原则为:
先取绝对值求余,余数取与被除数相同的符号,如-10%3=-1,10%-3=1.3。
而除法运算符/和*,若两个操作数都是整型,则结果也是整型,若有一个是实型,则结果是实型。
4。
注意,如a=4,b=3,c=2,求a>b>c的值,因为原式=(a>b)>c,a>b值为1,则原式相当于1>c,所以最终结果是0。
5。
自增、减运算符的操作数不能是常量或表达式,如2++,(x+1)++都是不合法的,再如,2*a++等价于2*(a++).6.条件运算符“?
:
”是C++中唯一的三目运算符,条件表达式的一般格式为:
逻辑表达式1?
表达式2:
表达式3.,1为真执行2,为假执行3,注意:
条件表达式的功能相当于条件语句,但一般不能取代if语句;表达式1,2,3类型可不同,此时条件表达式的值取较高的类型,如a>b?
2:
5.5,ab时,值为2.0,而不是2。
注意:
逗号运算符计算方法:
按先后顺序依次计算各个表达式的值,最后一个表达式的值作为整个逗号表达式的值。
逗号运算符在在所有运算符中优先级最低;除法与求模运算符的第二个操作数不能为零。
5>注意:
m+++n相当于m++n,因为++运算符为2级,+为4级,所以++高于+。
6>变量:
要先定义后使用;从键盘输入时,多个数据之间用分隔符(空格,制表符,换行符)分隔;输出时,字符串照原样输出,变量输出其值;可用语句cout.setf(ios:
:
fixed);设置小数位输出格式。
7>常量:
用指数法表示的数,在E或e的面前必须有数字且后面必须是整数;字符型常量是用单引号引起来的单个字符,在计算机内部是以它们的ASCII码表示的,如‘b’+2等价于98+2;字符串常量是用双引号引起来的若干个字符,在内存中按顺序逐个存放字符的ASCII码值,并在最后自动存放一个转义字符‘、0’·,所以,“a”比‘a的实际长度大一。
实型(浮点型)常量只能用十进制表示,其有两种表示形式:
小数,如2.414,还有指数,如5.48e-3.整型常量的三种表示方式:
A十进制整数,有正负之分,B八进制整数,以0开头,后面为0~7的数字,C十六进制整数,以0X或0x开头,后面是0~9的数字或A~F(a~f)的字母,如0XA,等于十进制数的10
8>类型转换:
1。
隐式类型转换(自动进行):
A算术转换~“小级别向大级别转换”,char~short~int~float~long~double~longdouble.如:
inta=10;floatb=10.2;a+b;值为20.2,不是20。
B赋值转换~”不管赋值运算符右边是什么类型,都要转换成左边的类型”,当右边范围较大时,左边赋值所得到的值将失去右边数据的精度,如:
inta;floatb=10.2;a=b;值为10,而不是10.2。
2。
强制类型转换,形式:
(类型)表达式或类型(表达式),注意:
在进行类型转换时,操作数的值和类型并不发生改变,改变的只是表示式值的类型,如:
floatb=10.2;cout<<(int)b<<””<
1010.2。
9>表达式:
A赋值~;B逗号表达式:
最后一个表达式的值作为整个表达式的值。
C左值:
指能出现在赋值表达式左边的表达式。
注意:
左值表达式必须要具有存放数据的空间,允许数据存放,所以,常量,表达式都不是都不是左值,不能放在赋值后的左边,如:
‘a’=97就是错误的,因为‘a’是字符型常量,常量值在定以后就不能被修改。
D逻辑表达式的求值优化
第二章简单输入输出
1>C++没有专门的输入输出语句,所有输入输出都是通过输入输出流实现的,输入输出流定义在头文件iostream.h中,所以在输入输出前必须在程序的开头增加一行#include
2<输入操作通过输入流cin来实现,它可输入整数,实数,字符及字符串等基本数据类型,cin>>变量1>>变量2>>……“>>“为提取运算符
3<输入字符:
A:
cin<<变量1<<变量2<<。
。
。
。
,在这种输入格式下,cin不能将空格和回车符赋给变量。
B:
cin.get(字符变量);get为cin中的一个函数,它的参数是字符型变量,这种格式下,字符无论是空格或是回车符都不会被忽略,将依次赋给变量。
4<输入操作是通过输出流cout来实现的,它可对表达式进行输出,<<为插入运算符。
5<当输入或输出八进制或十六进制整数时,必须在cin或out中说明相应的数制,格式为:
十六进制:
cin>>hex>>变量1>>变量2>>。
。
。
八进制,把hex改为oct就行了。
注意,当指明使用某种某种数制后,将一直保持以这种数制进行输入输出,直到再次指明另一种数制输入输出为止。
第三章:
C++的流程控制语句
1>顺序结构:
注意,空语句只有一个分号构成,它不产生任何操作。
2>选择结构:
1,条件语句是允许嵌套的,当嵌套数较多时,其配对原则是:
每个else都与它前面的且离它最近的未配对的if进行配对。
2,switch语句:
A:
switch后的表达式的值必须是或最终可以转化成整型,字符型或者枚举表达式;而case后的常量表达式的值也只能是整型或字符型,并且各case分支的常量表达式的值应各不相同。
B:
该语句的执行过程:
当表达式的值与某个case后的常量表达式的值相等时,执行其后的语句序列,如果语句序列后有break语句,则跳出switch结构;否则执行下一而case分支;若所有case后的常量表达式的值都不能与表达式的值匹配,则执行default分支中的语句。
3>重复结构:
1,for语句:
一般格式:
for(表达式1;2;3)循环体。
注意
(1)表达式1是可以省略的,但分号不能省,省略后应在for语句之前设置循环变量的初值。
(2)表达式2也可以省略,但省略后循环体将无休止的进行下去,只有在循环体中加入break语句才能结束循环。
(3)表达式3(修改循环条件)也可以省略,但程序应在循环体中对循环变量进行修改,以保证循环能正常结束。
(4)当三者同时省略时,for(;;)是一种最简单的for循环语句,但同时它也是一个死循环。
2,while语句:
注意,A:
在循环条件不满足的情况下,循环体可能一次也不执行;B:
当条件表达式不成立,即其值为0或循环体内遇到break,return等语句时,将退出循环。
3,do…..while语句:
注意A:
在while语句的条件表达式后面不能加分号,而在do…while语句的条件表达式后面必须加分号。
B:
无论条件成立与否循环体都至少执行一次,要与while语句区分开。
4,以上三种循环结构内都可以嵌套自己本身或其它的循环语句组成多重循环,但不能嵌套定义。
4>break和continue语句:
1,break语句的用途,A:
用在switch语句的每个分支后,用于执行完某个分支后跳出switch语句。
B:
用在重复结构的循环体中,用于跳出其所在层次的那个循环。
2,continue语句用途:
用在循环体中,结束本次循环,跳回到循环控制表达式部分。
3,区别:
前者语句将结束本层循环;后者语句只是结束了本次循环,本次循环中将不再执行其后的语句,但整个循环并没有因此而结束。
第四章函数和编译预处理
1>函数的定义和调用:
1,main函数称为主函数,它是C++程序不可缺少的部分,每个程序都是从主函数开始执行的,它是整个程序的唯一入口,其它函数可以是库函数(使用时应将说明此函数的头文件包含进程序中)或用户自定义函数(必须先定义后使用)。
2,函数的定义A:
无参函数定义:
数据类型函数名(void)。
void可以省略,其中数据类型为函数返回值类型,如果函数不需要返回任何值,则需定义为void;如果省略返回类型,则默认返回类型为int.B:
有参函数定义:
数据类型函数名(类型变量名1,变量名2,·····),括号内的内容为函数的形式参数,之间用逗号隔开,它们构成了形参表。
3,函数的调用:
格式:
无参函数名();有参函数名(实参表)。
注意:
A:
实参表中若实参个数多余一个,用逗号隔开,实参可以是表达式,变量,常量或者甚至可以是一个具有返回值的函数;函数调用时,实参个数和类型应尽量与形参相符,否则,则需要进行类型转换,当两种类型兼容时进行自动类型转换,否则要用户进行强制类型转换。
B:
函数调用应遵循先定义后使用的原则,若被调用函数的定义放在调用语句之后时,应在调用此函数之前增加函数的原型说明(一般格式:
数据类型函数名(参数表)),它的作用是向编译系统说明程序所要用到的函数的相关信息,函数原型的参数可以写成完整的参数表,即和后面函数定义中的完全相同,也可以只写出参数的类型,而不写参数的变量名。
2>return语句和函数返回值:
1.,return语句一般形式:
return(表达式);或return表达式;作用:
用于返回函数的返回值;用于中断函数的运行。
若函数没有返回值,则return语句后面不加表达式,此时return语句将终止函数的运行,程序返回到主调函数。
注意:
A:
函数类型与return语句中表达式值的类型应尽量保持一致,若不一致,以函数类型为准自动进行类型转换;B:
当被调函数没有返回值时,函数体中不需要使用return语句,此时函数返回值类型应说明为void型,避免调用时错误。
3>参数的三种传递方式:
1,值传递:
A;在值传递过程中,是将每个实参的值传递给相应的形参,但函数处理后的结果并不能通过实参带回给调用者,所以形参在函数内的变化并不能改变函数之外实参的值,因此函数只能通过return语句返回一个值,值传递好处在于函数具有相对独立性,函数的执行对函数之外的变量没有影响。
帮助理解:
值传递时,实参传递给形参的并不是它本身,而是一个复本,所以函数体内所有对函数的操作,只不过是对实参复本的操作,并不会改变实参本身。
B:
实参对形参的数据传送是单向的,实参和形参占用不同的内存单元,所以二者同名也不会相互影响。
4>递归函数的定义和调用:
A定义:
函数的递归调用是函数嵌套的一种特殊情况,分两种情况,一是在函数调用时,函数可以相互调用,形成循环;二是函数调用自身,这种函数成为直接递归函数。
B是用递归的条件,略。
C递归的执行过程,略。
5>作用域:
指程序中定义的标识符的作用范围。
(1)块作用域:
用花括号{}括起来的程序称为一个块,在一个块中说明的标识符的作用域为块作用域,此作用域开始于声明点,结束于块结束处,具有块作用域的变量称为局部变量。
(2)文件作用域:
函数定义之外声明的标识符或用extern说明的标识符称为全局标识符,其作用域为文件作用域,它开始于声明点,结束于源文件结束。
注意:
当全局标识符与块中标识符同名时,全局标识符将被屏蔽,块中标识符将作为变量使用,若要在块中引用全局标识符,则需使用作用域运算符“:
:
”。
(3)函数原型作用域:
在函数原型参数表中声明的参数的作用域。
它从说明处开始,到函数原型说明结束处结束。
由此可见,函数原型中所说明的参数对函数定义中的变量无关,所以在函数原型参数表中的标识符可以与函数定义参数表中的标识符不同,甚至可以省略。
(4)函数作用域:
在函数内定义的标识符,在函数中处处有效,C++中只有标号具有函数作用域。
(5)类的作用域:
6>存储类:
存储类型
关键字
存储方式
作用
补充
自动类型变量
auto
动态(局部)
是使用最广泛的一种类型;不赋初值,其初值为不确定值
函数内凡省略说明的变量均作为自动变量
静态类型变量
static
静态(全局或局部)
具有记忆功能,将上次对该变量的调用结果进行保留
变量仅限于本源程序文件内使用
寄存器类型变量
register
动态(局部)
用于使用频率最高的变量
其变量的值存放在CPU的寄存器中,而不是存储器中,以提高效率
外部类型变量
extern
静态(全局)
用于多个文件组成的程序中,指同一变量
全局变量的使用在定义之前时应将它说明为外部变量
补充说明:
1.变量分静态和动态两种,静态变量是程序开始执行时就分配存储空间,直到程序运行结束;动态变量是程序运行过程中用到时才分配内存空间,到其作用域之外时,收回其内存。
2外部类型变量一般用于多个文件组成的程序中,指同一变量,它只能在一个文件中的函数体外定义一次,且只能在一个文件中为其赋初值,但可以在多个文件中被说明并使用,是全局变量。
3,auto和register类型变量没有默认初始值,后两者有,整型为0,浮点型为0.0,字符型为空。
7>函数的重载:
指几个不同的函数共用一个相同的函数名。
在调用重载函数时,编译器通过识别不同的实参而调用不同的函数,对于同名函数,只有参数表不同(类型或个数不同)才可以实现重载,仅返回值不同不能实现重载。
8>编译预处理:
注意:
若程序没有预处理命令,将直接进行编译;C++语言提供了多种预处理功能,如宏定义,文件包含,条件编译等。
它么均以#号开始,由于预处理不属于C++语句,故不以分号结束。
9>“宏”:
1,不带参数的宏:
一般格式:
#define宏名字符串或字符;2,带参数的宏:
一般格式:
#define宏名(参数表)字符或字符串,注意:
其中宏名与参数表间不能有空格;参数表中若参数多于一个,参数之间用逗号分隔;参数只作标识符使用,不能指定参数类型。
3,使用宏定义应注意:
A:
宏展开时,只作简单替换,不作任何运算和语法检查。
B:
若宏定义多于一行,必须使用“、”进行换行。
C:
宏定义中可以引用已定义过的宏名。
D:
带参的宏定义与函数在定义和使用的形式都有一些相似之处,但还是有本质区别的,区别如下:
(1)函数调用时须将实参表达式的值先求出再赋予形参而宏展开则对实参表达式不作任何计算直接代换形参;
(2)函数是在程序运行时被调用的,而宏展开则是在编译前进行的;(3)函数的形参和实参都是有类型的,而且二者的类型应一致,否则须进行类型转换。
而宏的形参是没有类型的,它只是一个符号,展开时代入指定的字符即可而不必进行类型检查。
10>文件包含:
1定义:
指在一个源程序文件中将另一个源程序文件的全部内容包含进来,它可以用来把多个源程序文件连成一个源程序文件进行编译,结果将生成一个目标文件。
2,语法格式:
#include<被包含文件名>或#include“被包含文件名”。
第一种格式用于包含c++库文件,编译器从制定的库文件(即从约定的目录include开始查找)目录查找;而后者用于包含用户文件,编译器先从当前目录开始查找,再从约定的目录include开始查找。
3,注意点:
A:
从理论上说,#include命令可以包含任何类型的文件,只要符合C++语法(如.cpp文件),但一般用于包含扩展名为.h的头文件;B:
#include可以放在程序的任何位置,一般在开头,其定义可以嵌套;C:
一个include命令只能指定一个被包含文件。
第五章数组
1>一维数组:
(1)定义方式:
数据类型数组[常量表达式]。
注意点:
A:
数组元素下标的下界为0;B:
定义数组的表达式只能是常量表达式(一个最终可以转换成正整数值的相关表达式),不能包含变量;C:
数组名代表整个数组的首地址,它是一个常量,其值不能改变,所以不能进行自增自减运算或被赋予它值。
(2)初始化:
A:
只给部分元素赋初值,其余未赋值元素初值为0;B:
给全部元素赋初值;C:
编译系统根据初值个数确定数组大小;D:
若不对static数组元素赋初值,则系统会自动为全部元素赋以0值。
(3)使用情况:
A:
表示形式:
数组名[下标表达式],其中下标为正整型常量或值为正整型的表达式。
注意点:
数组必须先定义后使用;引用数组元素时,只能逐个元素地引用,不能一次引用整个数组;数组元素下标从0开始,数组的最后一个元素地下标是数组的长度大小减1;C++语言程序设计自由度大,对数组下标越界不作检查,因此需要由程序员自己保证数组访问的正确性。
2>二维数组:
(1)定义方式:
数据类型数组名[常量表达式1][常量表达式2]1表行,2表列。
注意点:
行和列的下标都从0开始;数组在内存中存放时按行序优先原则(即先顺序存放本行各元素,再存放次行元素);在C++中,二维数组可以看作是对一维数组的直接扩展,即把二维数组看作一种特殊的一维数组来定义,它的每一个元素又是一个一维数组。
(2)初始化:
A:
对数组的全部元素赋初值。
可以按行赋,每行元素用花括号括起来,也可以按元素排列顺序赋,注意:
第一维的长度可以不指定,但第二维长度必须指定。
B:
对数组的部分元素赋初值。
格式类型同上,未赋值元素初值为0。
(3)使用情况:
类比一维数组。
3>数组与函数:
1,由于数组结构上的特殊性,数组作为函数的参数时存在两种形式:
A:
单个数组元素作为函数的参数——值传递,如:
voidfun(intx){x=200}。
由于数组的每个元素都是一个具有相同数据类型的变量,所以,从函数的角度来看,单个数组元素作为函数的参数与普通变量作为函数的参数是没有区别的,都属于值传递,所以函数体对形参的修改并不改变实参的值。
B:
数组名作为函数的参数——地址传递。
传递给形参的是数组的地址。
由于形参和实参表示的是内存中的同一地址,函数中对形参的一切操作实际是对它所对应的内存地址中的值进行的,因而可能改变实参的值。
此时我们往往将数组名作为第一个参数,数组大小作为第二个参数,如:
voidfun(inta[],intn){a[0]=200}.
4>字符数组:
1,定义:
char数组名[常量表达式]注意点:
1,字符数组是一种特殊的一维数组,一维数组所有的使用方法同样适用于字符数组,此外字符数组还有自己特殊的操作方法;2,字符数组与整形数组之间有着密切的关系,但含义不同,字符数组中的每个元素都是一个字符,如:
chars1[5]={1,2,0},s2[5]={‘1’,’2’,’0’};inta[5]={1,2,0};则s1和a中存放的内容相同,但与s2不同,s2相当于整形数组{49,50,48,0,0};3,字符数组与字符串非常接近,但字符串一定有结束标识,而字符数组不一定有。
2,初始化:
(1)将字符逐个依次赋给数组(即给部分或全部元素赋值,未赋值元素初值为0),如:
chars1[]={‘a’,’b’,’c’,’d’,’e’};
(2)将整个字符串赋给数组:
如:
chars3[]={“abcde”};chars4[10]=”abcde”;注意:
1以上数组,s1有五个元素,不含结束标志;s3有6个元素,最后一个元素为系统自动添加的结束标志(‘、0’);s4有十个元素,后5个元素都是结束标志。
2,用字符串给字符数组初始化,最后总隐含一个结束标志,所以用来初始化的字符串的可见字符个数要小于字符数。
3,一个字符串是否结束,判断的唯一标志是结束标志‘、0’。
5>字符串处理函数:
1,字符串拷贝(复制)函数strcpy:
格式:
strcpy(字符数组1,字符串2)注意:
A,作用是将2中第一个结束标志前的内容(包括第一个结束标志)复制到1中;B:
1必须定义的足够大,以便容纳被拷贝的字符串;C:
字符数组1必须写成数组名形式,而字符串2可以是字符数组名,也可以是一个字符串常量;D:
字符串整体赋值时只能用strcpy函数,不能用赋值运算符=,它只能对一个字符进行赋值。
2,求字符串长度函数:
格式:
strlen(字符串),注意点:
A;该函数返回的是字符串的长度,不包括结束符,即第一个结束标志前的字符个数;B:
sizeof()所求的是数据或类型(常量,变量,类型,数组等)在内存中所占用的字节数。
3,字符串比较函数:
格式:
strcmp(字符数组1,字符数组2)。
A作用:
用于比较两个字符数组或字符串的大小,若相等返回0,前者大返回1,后者大返回-1;B:
比较规则:
从两个字符数组或字符串的首字符开始,从左到右依次比较字符的ASCII码值,直到出现两个字符不同或遇到结束符为止。
注意:
结束标志的值小于空格字符的值。
4,字符串拼接函数:
格式:
strcat(字符数组1,字符数组2),作用:
将2中第一个结束标志前的内容(包括第一个结束标志)拼接到1中第一个结束标志的后面,从1的结束标志处开始拼接,该结束标志被删除,字符数组2同样可以是一个字符串常量,操作结果放在字符数组1中,函数返回的是字符数组1的地址。
注意:
字符数组1必须足够大以便容纳连接后的新字符串。
第六章结构体·共同体和枚举类型
1>结构体:
(1)定义:
A:
要定义结构体变量必须先定义结构体类型,定义格式:
struct结构体类型名{类型名成员1;类型名成员2;····};注意点:
花括号后面的分号不能忘记;结构体是一种数据类型,定义结构体时系统并不会给成员分配内存;其定义是可以嵌套的。
B:
结构体变量定义格式:
struct结构体类型变量名;或struct{···}变量;其中第一种格式关键字可省,但前提是结构体类型已经定义了;第二种格式则是在定义结构体类型的同时定义了变量。
注意点:
A系统不为结构体类型分配内存,不能对其进行赋值等运算;但结构体变量是占用系统内存的,故可对其进行赋值等运算。
B结构体类型变量的作用域与一般变量的作用域相同。
(2)初始化:
对结构体变量初始化的方法是使用花括号将每个成员的值括起来进行赋值。
(3)结构体变量的引用:
不能整体引用,只能引用变量成员,引用方式:
结构体变量名·成员名,其中·为成员运算符,结合性从左到右。
注意:
只有同类型的结构体变量才可以相互赋值;若结构体类型存在嵌套时,对变量的成员需逐级(由外到内)进行依次引用;结构体变量可以作为函数的参数,函数也可以返回结构体的值。
(4)结构体数组:
定义以及初始化与结构体变量类似,注意以下几点即可:
A:
由于结构体数组的每个元素都是结构体(相当于一个结构体变量),故要将一个元素的所有成员值放在一个花括号中,以便区分每个元素;B:
数组元素的引用方式:
结构体数组名[下标]·成员名。
2>共同体(联合体union):
是C++的一种构造数据类型,也是一种由用户自己定义的数据类型。
与结构体相似处:
由若干数据类型组合而成,组成共用型数据的若干个数据也成为成员;不同处:
共同体的共用型数据中所有成员占用相同的内存单元,因此变量中的所有成员的首地址相同,变量的地址就是该变量成员的地址;共同体变量中的所有成员共享一段公共存储区,故共同体变量所占内存字节数等于最长成员所占字节数,而结构体变量中的每个成员分别占有独立的存储空间,所以其所占字节数是成员所占字节数的总和。
3>枚举类型:
(1)定义方法:
enum枚举类型名{枚举常量1,2,3····,n};其中每个枚举常量对应一个整数值作为序号,依次是0,1,2····n-1;用户也可以自己为枚举常量确定对应的序号,在枚举类型执行期间,每一个枚举类型的元素用一个整数来表示,若没有规定元素所取的整数值时(若其前一个元素有规定,则根据前一个元素的整数值加1),把枚举元素的序号从0开始作为对应元素的值,