一、语法标识符:由字母、数字和下划线三种字符组成,且必须以字母或下划线开头。关键字不能作为用户定义的标识符。用户定义标识符:合法:char2_abca3P1不合法:intp[i]break3aa+bclasspublic常量:合法:'\n''\102''\t''\72'不合法:'ABC'1.2e0.5M'[]'运算符和表达式:•结合性及优先级例:(1)a+=a*2a=a+(a*2)若初始情况下a=3,则执行上述运算后a=?(2)x==0?a++:b++若已知a=4,b=3,x=5则a、b?(3)若已知inta[5]={0,2,4,6,8},*p=a;设a的首地址为1000,则:执行*p++后表达式的值为0,p的值为1004执行++*p后表达式的值为1,p的值为1000执行*++p后表达式的值为2,p的值为1004•对操作数的要求(1)(i+j)++,3++(╳)++,--变量(2)a%ba,b必须为整型9•结果的类型intn,s=0;for(n=1;n=10;n++)s+=1/n;上述结果为1,若要得到正确结果,应用如下形式:s+=1.0/n或:s+=1/(float)n•用逻辑表达式表达某个命题如:ch‘0’||ch‘9’ch是非数字字符x=0&&x=200&&x%2==0x是0到200之间的偶数•用随机函数产生在某一区间的数rand()%101rand()%51+50•&&与||运算并结合自增、自减运算已知a=b=1;则执行以下语句后,各变量的值为?--a&&++b;++a||--b;a=0,b=1a=2,b=1初始化与赋值:错误:inta=b=c=0;应为:inta=0,b=0,c=0;或:inta(0),b(0),c(0);或:inta,b,c;a=b=c=0;•引用intx=5,&y=x;y是x的引用,二者同步变化.输入和输出流cin,cout例:charc[20];cinc;若输入howdoyoudo则c的值为howgets(c)则c的值为:howdoyoudo改为voidmain(){charch=‘b’,s[]=“abcde”;coutch+2;//输出100(‘d’的ASCII码)ch=ch+2;//输出dcout*(s+2);//输出ccouts+2//输出cde}cout依据其后表达式类型决定输出内容语句:•if(条件表达式)几种等价关系if(x)依据x的类型不同,分别等价于如下形式:if(x!=0)if(x!=‘\0’)思考:if(!x)的等价关系if(x!=NULL)switch语句switch(a%5){case0:couta++;case1:cout++a;case2:couta--;case3:cout--a;}若a=2,则输出:20chara=’A’;switch(a){case‘A’:couta-1;case‘B’:couta+1;case‘C’:couta++;default:cout--a;}•循环:(1)do_while先执行后判断,至少执行一次for,while先判断后执行,可能一次也不执行for循环条件中常使用逗号表达式voidmain(){inti;for(i=0;i5;i+=2);couti;}voidmain(){inti;for(i=0;i5;i+=2)couti‘‘;}intk=3;while(k=0)k++;for(intk=1;k==3;k++);6024注意区分空循环执行次数?(2)break语句x=0;for(j=4;j=6;j++){if(j%2)break;x+=j;}coutx;4退出switch语句或本层循环,在双重循环中使用时,注意退出的是哪一层。数组避免下面错误:chars[5]={“Thisisabook};chars[10];s=Iamfine;不要越界数组名是地址常量,不可被赋值只有字符数组可整体操作数组名做函数形参时,一维数组省略长度说明,二维数组省略第一维的长度说明。如:voidsort(intx[],intn)voidfun(char[][10],intn)二维数组的输入、输出、元素的赋值123456789函数定义:函数头的末尾无分号若函数类型为非void类型,则函数中应有return语句返回同类型的数据。参数一一说明类型调用:以语句的形式调用(函数类型为void)以表达式形式调用(函数类型非void)说明:函数定义在后调用在前时需要。参数传递:值参数——单向地址参数(数组名或指针变量)-------参数本身单向传递,但指针变量所指内容或数组元素的改变是双向的引用参数————形参的改变影响实参。参数缺省:voidfun(inti,intj,intk,intm=3,intn=4)假设函数调用语句为:fun(1,2);//错误,至少应有三个实参fun(10,20,30,,50);//错误,只能从左至右匹配函数重载要求:参数个数不同参数类型不同函数名相同变量的作用域和存储类别静态变量只初始化一次,若未初始化,默认值为0.动态变量每调用一次函数,便初始化一次。若未初始化,默认值为不定值voidtest(){inti=0;staticintj=0;i++;j++;coutijendl;}voidmain(){inti;test();test();}i=1,j=1i=1,j=2当全局变量和局部变量同名时,局部变量起作用intm=10;voida(intn){n=15/n;m=m/2;}voidmain(){intn=3;a(n);cout“n=“n“,m=“mendl;}n=3,m=5voidcube(intx){x=x*x*x;}voidmain(){intx=5;cube(x);coutxendl;}voidcube(int*x){*x=(*x)*(*x)*(*x);}voidmain(){intx=5;cube(&x);coutxendl;}intcube(intx){x=x*x*x;return(x);}voidmain(){intx=5;x=cube(x);coutxendl;}voidintx=5;voidcube(){x=x*x*x;}voidmain(){cube();coutxendl;}例:分析下面程序传值调用结果为5传址调用结果为125虽为传值调用,但返回值赋值给x,故结果为125无参函数,使用的全局变量,故结果为125#includeiostream.hvoidcube(int&x){x=x*x*x;}voidmain(){intx=5;cube(x);coutxendl;}引用调用结果为125指针运算float*p,*q;若已知p=1000,则q=1004则:q-p的值为1p+2的值为1008inta=3,*p=&a,*q1,*q2,&b=a;q1=newint(6);//*q1的值为6q2=newint[10];//q2指向存放10个整数的连续内存的首地址deletep;()deleteq1;deleteq2;p是指向变量a的指针b是变量a的引用指针和数组若:inta[5]={1,3,5,7,9},*p=a+1;则:*p+1的值为4*(p+1)的值即p[1]的值为5注意一些概念的区别:若有函数:voidfun(int*p,int&q)则相应的函数调用语句:voidmain(){inta,b;……fun(&a,b);……}指针变量做形参变量的引用做形参变量的地址做实参变量做实参•例:分析下面程序#include“stdio.h”voidf(float*p1,float*p2,float*s){s=newfloat;*s=*p1+*p2;}voidmain(){floata=1.0,b=2.0,*s=&a;f(&a,&b,s);cout*sendl;}1.0形参的指向已变,与实参不再指向相同的内容返回指针值的函数求一维数组a中的最大值。inta[8]={45,6,35,-12,100,11,3,-40};voidmain(){int*p,____(1)____;p=max();cout*p;}int*max()//函数的返回值为指针{inti,k=0;intt=a[0];for(i=1;i8;i++)if(ta[i]){t=a[i];k=i;}return(___(2)___);}*max()&a[k]函数定义在调用之后故需函数说明#includeiostream.hvoidmaxmin(inta[],intn,int*p,int*q){inti,max=a[0],min=a[0];for(i=1;in;i++){if(a[i]max)max=a[i];if(a[i]min)min=a[i];}*p=max;*q=min;}voidmain(){inti,n,a[100],max,min;cinn;for(i=0;in;i++)cina[i];maxmin(a,n,&max,&min);coutmax=maxmin=minendl;}结构体structstudent{intnum;charname[20];floatscore;}st={123456L,”zhangsan”,88},stclass[30],*p=&st,st1;st.score=78;strcpy(stclass[5].name,”lisi”);p-score=78;strcpy(p-name,”lisi”);st1=st;(结构变量之间可整体赋值)I/O流类打开文件的方式:创建流类对象的同时打开文件ofstreamoutfile(abc.dat);fstreamoutfile(abc.dat,ios::out);先创建流类对象、再打开文件ofstreamoutfile;outfile.open(abc.dat);几个读写成员函数ifstreamofstreamfstreamget、getline、put、write、readchars[10]=“abcdefg”;cout.write(s,2).put(‘a’);文件打开时,默认的模式为文本文件二进制文件需显式地打开:ios::binary常用内部函数:•字符串处理函数需使用#include“string.h”strlen(str)如:strlen(“\nabcd”)的结果为5(不包含对‘\0’的统计)strlwr(str)strupr(str)strcpy(str1,str2)如:chars1[30]=“abcd”;strcpy(s1+2,“123”);couts1;输出结果为:ab123strcat(str1,str2)strcmp(str1,str2)需使用#include“stdio.h”gets、puts()需使用#include“math.h”sqrt、fabs面向对象程序设计基础三个特性封装性继承性多态性类定义形式:包括成员函数的两种实现方式数据成员、成员函数通常的访问权限类体中不允许对数据成员初始化访问权限public:可以被外部程序访问private:只能被该类的成员函数访问protected:能被该类和派生类的成员函数访问。二、算法1.求级数和通常求级数部分和可通过如下步骤实现和=0;通项=第一项while(通项尚未足够小){和=和+通项;通项=f(通项);}描述通项的变化,通常需多条语句或项数未达到要求根据给出公式求级数部分和如:计算sin(x)的值,公式为:当第n项的绝对值小于10-5时结束。sinx=0;t=x;i=1;while(fabs(t)=1e-5){sinx=sinx+t;t=-t*x*x/((i+1)*(i+2));i=i+2;}2.素数(1)intisprime(intm){inti;for(i=2;m%i!=