1.VisualC++的基本概念(1)标识符:以字母、数字、下划线组成的字符序列,第一个字符必须是字母或下划线。不能与关键字同名,且不含空格标点符号和其他字符,同时区分大小写。例:不正确的:enum、int、2b、a+3、a-3、#include等均不是正确的标识符正确的:_32、include、Int、a_3、abc(2)数据类型:字符型(char,1)、整型(int,4)、实型(float,4),双精度(double,8),无值型(void,0)、布尔型(bool,1)int之前还可以用unsigned、signed、short、long修饰,表示不同字节的整数类型char之前还可以用unsigned、signed修饰(表达式的数据类型以整个表达式中最高的数据类型为准)例:’1’+’2’、’1’+2、18/3+5.、18+5.0/2,注意常用数学函数的返回值类型(3)常量:(字面常量、标识符常量)整型常量——有十进制、八进制(以0开头)、十六进制(0X(x)开头)三种形式;实型常量——有普通和科学计数法两种形式。科学计数法时,e的前面必须要有数字,且在e之后必须是整数;(注意2.5f和2.5的区别,注意2.0和2.)字符型常量——必须以单引号引起来,转义序列以“\”开始,用数值描述时有\ddd和\xhh两种形式,即只能是一个八进制或十六进制的数,取值范围在0~255,且十六进制必须以x开头。字符串型常量——用双引号括起来,存储时系统默认在结尾添加“\0”。区分sizeof(字符串)和strlen(字符串)的值。标识符常量的定义——#definea4常变量的定义——constinta=4;注意标识符常量和常变量两者的异同点(4)变量:需遵循“先定义后使用,先赋值再操作”的原则。(5)算术运算符:(详见书,几个需要注意的如下)“/”运算符:两边都是整型,则做整除运算(去尾取整),有一个是实型,则是真正的商。“%”运算符:取余,其两边都必须是整型数。(6)关系运算符:关系成立,表达式结果为整数1,否则为整数0。(7)逻辑运算符:!&&||非0为真,用整数1表示,0为假。注意逻辑运算表达式计算时的优化问题(短路特性)。(8)sizeof()运算符:用于计算某一操作数类型的字节数。(9)赋值表达式:=左边只能是变量,a++或a--不能放在=左边=两边数据类型不同时,以左边的数据类型为准=的优先级仅高于逗号运算符复合的赋值表达式中,将复合的赋值运算符右边的部分看作一个整体进行处理(10)逗号表达式:从左往右依次计算各表达式,以最后一个表达式的值作为整个逗号表达式的值。(11)强制类型转换:(type)表达式或type(表达式)(12)优先级顺序:单目优于双目,双目优于三目,在此基础上,算术→位移(插入、提取)→关系→位→逻辑→条件→赋值→逗号。(优先级的序号越小,其优先级越高)(13)自增(++),自减(--)运算符谁在前先做谁,只能对变量进行++或--。a++或a--的结果可理解为表达式,++a或--a的结果可理解为变量。常与逻辑运算的短路特性合在一起考查(14)数据的输入和输出:C++语言本身没有输入输出语句。(P36)在输入数据的过程中,如果输入的一行仅仅是一个回车时,cin把该键作为空格处理,仍等待输入数据。需要注意的是,用cin输入数据时,实际输入数据的个数、类型及顺序,必须与cin中列举的变量一一对应,否则输入的数据不准确。列如:intb;charc='x';cinbc;coutb','cendl;若输入af,则输出的是0x.则变量b的值为0,而变量c没有获得输入的值,并使后面的cin无法正确提取数据。(15)C++语言用非零值表示逻辑“真”值。2.VisualC++的基本语句(顺序、选择、循环)(1)单选语句:if(表达式)S表达式的值非0(成立),则执行S;否则,跳过S直接执行后继的语句。(2)二选一语句:if(表达式){S1;}else{S2;}*表达式可以是符合C++语法规则的任一表达式*表达式非0(成立),执行S1;否则执行S2.(3)嵌套的条件语句:if(表达式1){S1;}elseif(表达式2){S2;}……else{S;}注意:else和谁配对?与最靠近它的且没有else与之配对的if进行配对(4)条件运算符:?:表达式1?表达式2:表达式3表达式1成立,以表达式2的值为整个表达式的结果,否则以表达式3的值为整个表达式的结果(5)开关语句switch语句:switch(表达式){case常量表达式1:S1;break;case常量表达式2:S2;break;……default:S3;}例:inta=7;switch(a%5){case0:couta++;case1:cout++a;case2:couta--;case3:cout--a;default:couta;}输出的结果是755.你知道是为什么吗?intk=0;charc='A';do{switch(c++){输出的结果是4,但是你猜猜如果把c++改成++c结果会是什么呢,没错就是2.啦啦啦case'A':k++;break;case'B':k--;case'C':k+=2;break;case'D':k=k%2;continue;case'E':k=k*10;break;default:k=k/3;}k++;}while(c'G');coutkendl;*表达式和常量表达式的值只能是整型、字符型或枚举型。*根据表达式的值选一个对应的常量表达式后的语句执行,直到碰到break或switch的}结束*default的位置没有规定,但需考虑是否要添加break*if和switch使用的注意:前者可以表示连续的条件区间也可以表示离散的条件,而后者只能表示离散的条件,因此,任一个switch结构可以转换成if结构,但反之不行。当用switch表示连续的条件时需设法将连续的条件转换成离散的形式。(6)循环语句:while(表达式)S执行过程:表达式非0做循环体S。循环体有可能一次也不被执行。do{S}while(表达式);(分号不可以忘)执行过程:先执行循环体S,再判断表达式的值,非0继续循环。循环体至少做一次for(表达式1;表达式2;表达式3)S执行过程:表达式1、2、3均可省略,若省略,需在合适的位置进行处理*三种循环可以相互转换,不管用哪种循环,一定要把握好循环条件(什么样的情况下循环)、循环体(循环做什么)*不能出现死循环!(7)break、continue语句break——跳出整个循环,不再循环(结束该层的循环)continue——结束本次循环,进入下一次循环3.函数(1)C++源程序、目标程序、可执行程序的后缀名。(2)任何一个C++程序必须有一个且只能有一个main函数。(3)函数要先定义后使用,若先使用后定义需在使用前加函数原型说明:(绿皮书p32.T12)列如:intf1(int,int=1);此原型声明即是对的。intf2(int=1,int);此原型声明即是错的。(4)函数不能嵌套定义,但可以嵌套调用(递归)。(5)形式参数和实际参数:在函数定义中,在参数表中一一列出的参数称为形式参数(对于函数体来说,它们是已知量、要在函数体中进行处理的量,无需再重新定义);在函数调用时依次列举的参数称为实际参数(传递给函数实际处理的值或量)。即当调用函数时,实参和形参各占一个独立的存储单元。(6)函数的返回值:每个函数都可以有return语句。若函数无返回值,则可不写return语句,或直接写“return;”,若函数有返回值,则必须有return语句。C++语言的函数中,return语句中的表达式的类型可以与函数的类型不一致。一个return只能返回一个值,同一时刻只有一个return语句有效。(7)函数的调用:(各函数之间即允许直接递归调用,也允许间接递归调用)语句调用、表达式调用函数调用时,实参和形参之间有传值、传址、引用三种不同的数据传递形式(8)标识符的作用域:*这里的标识符其实包括了变量和常量,所谓作用域则说明了标识符能被使用的范围。*作用域分为块作用域、文件作用域、函数原型作用域、函数作用域、类作用域和命名空间作用域*块作用域:在块内说明的标识符,其作用域始于标识符的说明处,止于块的结尾处。只能在该块内引用。*文件作用域:在所有函数之外定义的变量称为全局变量。全局变量(标识符)的作用域。从定义位置开始到该源程序文件结束。也可通过extern将其作用域外延到包含它的工程中的其它文件。*同一块内不允许出现同名的局部变量,不同块作用域内允许,当两个块重叠的情况下出现局部变量重名,则遵循“县官不如现管”的原则。*局部变量和全局变量重名时,也遵循“县官不如现管”的原则。此时若想在同名的局部变量作用域内强制访问该全局变量可通过域作用符(::)访问(9)变量的存储类型:auto、static、extern、register在C++语言中,函数的默认存储种类是extern。在C++语言中,全局变量的默认存储种类是extern。auto类型的变量在程序运行到定义处系统为之分配内存,在其作用域完结处系统自动回收其存储区域static类型的量分为static局部变量和static全局变量。两者均在程序一运行时系统就为其分配内存,但它们的作用域仍遵循各自的作用域特性,static局部变量会出现虽存在但不能被访问(不在作用域范围内)的情况。用static修饰局部变量的时,其初始化是在相关函数或语句块第一次被执行时完成的,以后再执行相关函数或语句时不再被执行。在程序执行期间,这些变量一直占用固定的存储空间,保持着最近一次的操作结果。在程序声明的全局变量总是静态变量,其默认值是0。若在声明全局变量的时候加上static,则表示所声明的变量仅限本源程序文件内使用。(10)内联函数:(实质是用存储空间换取运行时间)用inline说明。在编译时将函数体嵌入到每个内联函数调用处,省去了函数调用时的参数传递、系统栈的保护与恢复等的时间开销,但增加了代码(消耗了内存空间)。(11)函数重载:判断重载:同函数名,形参的个数或类型不同。(与函数的返回值无关)(12)缺省参数值的函数:在调用函数时,若明确给出了参数的值,则使用相应参数的值;若没有给出参数值,则使用缺省值。缺省值的给定需从最右边的参数开始。(13)exit和return的使用4.数组(1)数组概念:数目固定、类型相同的若干个变量的有序的集合。(2)数组定义:(数组的大小在编译的时候必须确定,在程序执行过程中不能改变,所以不能用变量说明数组的大小。)一维数组的定义:数组名[常量表达式];二维数组的定义:数据类型数组名[常量表达式1][常量表达式2];二维数组在内存中的存储:按行存放。(3)数组的初始化:初始化的数据个数不能超过定义的元素个数。若是部分初始化,则余下来元素的值根据类型,整型默认为0,字符型为空……二维数组的初始化:可以省略第一维的大小。例:inta[][3]={1,2,3,4,5,6};数组(除字符数组外)不能被整体输入或整体输出。不可以给数组做整体的赋值,字符数组也不可以。(3)一维数组作为函数的参数:若一维数组做函数的形参,则调用该函数时,相应的实参用数组名。传递给形参的是实参数组所占内存的起始位置值,这样两个数组就合用实参数组的内存单元。(4)字符数组:元素是字符的数组。注意:字符数组中可以存放字符串也可以存放单纯的字符,是否是字符串,关键看有没有'\0'。字符数组初始化:chars1[3]={‘c',‘a',‘r'};chars2[4]={‘c',‘a',‘r‘,‘\0'};chars2[]={“car”};//字符串后自动加'\0'chars2[]=“car”;//字符串后自动加'\0'字符数组可以被整体输入或输出,例:chars[20];cins;coutsendl;(5)常用字符串处理函数:#inc