(3)for语句和while语句是先判断循环条件,条件为1时再执行循环体;而do?while语句是先执行循环体后判断循环条件;
(4)循环前各变量的值是多少?循环中各变量的值如何变化?循环后各变量的值是多少?循环了多少次?。 [试题]
[2007春]选择题22 A [2006秋]选择题24 D
[考试要求]四、break和continue语句。★★★ [主要知识点]
1、break退出循环语句或switch语句。
2、continue语句是中止本次循环,立即进入下次循环。
第三部分 构造类型和指针类型数据
一、构造类型数据[一维数组和二维数组,结构体和共同体(联合体)]。 [考试要求](一)构造类型变量的说明及初始化。 [主要知识点]
1、一维数组的说明及初始化。★★★
(1)定义格式:类型 数组名[数组大小]; 定义时注意,数组的必须大小确定。
①指定大小:用字符型、枚举类型或整型的常量及常量表达式指定大小。如: int a=5;float b[a],c[‘a’-90],d[ ];
其中数组c的定义是正确的,而b和d的定义是错误的,d[ ]只能出现在形参中。下列数组的定义正确吗? #define m 5
const int n=10;
float x[m],y[n],z[15.0]; ②由初始化的数据确定大小。
当定义数组时,可以不指定其大小,而由其初始化时的数据确定其大小。如: int a[]={1,2,3}; (2)初始化
①一维数组初始化的方法:用列表初始化。
②字符数组初始化的方法:除了用列表(可以是整型数据或字符)初始化外,还可以用字符串初始化。如:
char c1[]={97,98,99},c2[]={‘a’,‘b’,‘c’}; char c3[]=“abc”,c4[]={“abc”};
注意数组c1、c2、c3、c4的大小,c1和c2的大小为3,而c3和c4的大小为4。 ③初始化时,注意元素个数不能大于数组大小。如: char c[5]=“china”; 是错误的。
2、二维数组的说明及初始化。★★★
(1)定义格式:类型 数组名[数组行数][数组列数]; 二维数组的行数和列数要求与一维数组大小相似。对于二维数组,只能由元素个数确定其行,而不能由元素个数确定其列,如:
int b[][3]={1,2,3,4,5},c[3][ ]={1,2,3,4,5};
其中b的定义是正确的,而c的定义是错误的。 (2)初始化的方法
①用一维列表初始化,如:int a[][3]={1,2,3,4,5}; ②用二维列表初始化,如:int a[][3]={{1,2},{3},4,5}; 3、结构体和共同体(联合体)★ [试题]
[2007春]选择题27 A [2006春]选择题24 D [2006春]选择题29 A [2007秋]选择题23 D
[考试要求](二)构造类型变量成员(元素)的使用。★★★ [主要知识点]数组的使用:面向元素。
1、一维数组:通过单循环遍历数组,对元素进行操作,如: int a[10]={1,2,3,4,5,6,7,8,9,10},s=0;
for(int i=0;i<10;i++)//求一维数组所有元素的和 s+=a[i];
for(i=0;i<10;i++) //按每行5个元素的方式输出 {
cout<
if((i+1)%5==0)cout<<‘\\n’; }
2、字符数组:通过单循环遍历数组,以字符串结束标记作循环结束条件,如: char s[]=“abcdef”;int i=0; while(s[i]){ s[i]+=‘A’-‘a’;i++; }
3、二维数组:通过嵌套的双循环遍历数组,通常外循环控制行,内循环控制列,如: float b[4][5]={…};
for(int i=0;i<4;i++)//按矩阵方式输出 { for(int j=0;j<5;j++) }
cout<
[试题]
[2007秋]填空题5 (6)15 (7)20
[2007秋]填空题9 (14)1 (15)6 (16)1
二、指针与引用。
[考试要求](一)指针与地址的概念,取地址运算符&和取值运算符*;★★ [主要知识点]
1、地址:内存单元的编号(变量保存位置)。 2、指针:首地址。
3、取地址运算符&:得到地址。
4、取值运算符*:得到与地址对应的内存中的内容。 [考试要求](二)指针变量的定义、初始化;★★★ [主要知识点]
1、概念:指针变量是保存某地址(指针)的变量。 2、定义与初始化
(1)一般指针变量(指向普通变量或数组元素)的定义格式:类型 *变量名;如: int n=10,a[5]={1,2,3,4,5}; int *p1=&n,*p2=a,*p3=&a[3];
(2)指向一维数组的指针变量(二维数组的行指针)的定义格式:类型 (*变量名)[二维数组的列数];如: int a[4][5]={1,2,3,4,5};
int (*p4)[5]=a,(*p5)[5]=a+1;
(3)指针数组(每个元素都是一个指针变量)的定义格式:类型 *变量名[元素个数];如: int *p6[5]={&a[0],&a[1],&a[2],&a[3],&a[4]};
char *p7[4]={“123”,”45678”,”abcd”,”efgfijk” };
(4)二级指针变量(指向指针的指针)的定义格式:类型 **变量名;如: int **p8=p6;
[考试要求](三)指针的运算;★★★ [主要知识点]
1、赋值运算:对指针变量初始化,或改变指针所指的位置;如: int *p9=p2,*p10;p10=p3; 2、算术运算(+、-)
(1)指针变量加(减)一个整数(n):指针从当前位置向后(前)移动n个存储单元; (2)指针变量相减:两指针相差多少个存储单元;如p10-p9的值为3,而(int)p10-(int)p9的值为12;
(3)指针变量不允许相加,如p10+p9是错误的。
3、关系运算:比较指针所指位置的前后关系,如p10>p9的值为1,而p10 p+=2; // p原来指向字符‘a’,运算后p指向字符‘c’ *p+=2; // 把 p所指的字符‘c’,修改为字符‘e’ [试题] [2006春]填空题2 (2)age [2006秋]填空题5 (5)3 [考试要求](四)指针与数组★★★,指针与结构体,指针与函数★★,指针数组★,二级指针★; [主要知识点] 1、指针与数组 (1)指针与一维数组和字符数组 ①指针指向一维数组(指向数组的首元素)时,可用指针名代替数组名,如: float b[10],*p; p=b;//p=&b[0]; b[i]可表示为:p[i]、*(b+i) 或 *(p+i)。 ②指针指向一维数组的某个元素时,指针名所代替的是从该元素开始的数组,如: float b[10],*p; p=&b[j];// p=b+j; p[i]所表示的是*(p+i),即b[i+j]、*(b+i+j)。 ③指针名虽然可以代替数组名,但其本质是不同的,如: char *p1=“abcd”,s[]=“12345”,*p2=s+2; cout< 另外,数组名(字符串)虽然也是一个地址,但是值不能被改变常量指针。如: int *p,a[5]={1},b[5]; p=a;p=b;p++; //正确 b=a;a=p;b=p;a++; //错误 ④通过指针操作一维数组。如把数组的前n(0 for(int i=0,t;i [2006秋]填空题11 (19)q=p=str (20)min>*p (21)p>str (22)p-- [2007秋]填空题6 (8)a:4 (9)e:3 (2)指针与二维数组 ①用行指针指向二维数组时,可用指针名代替数组名,如: float b[3][6],(*p)[3]; p=b;//p=&b[0]; b[i][j]可表示为:p[i][j]、*(*(p+i)+j) 或 *(p[i]+j)等。 ②当把二维数组看成一维数组时,可用元素指针指向二维数组的首元素,操作二维数组,如: float b[3][6],*p; p=&b[0][0];// p=*b; p=b[0];p=(int*)b; p=*(b+0);等 for(int i=0;i<3*6;i++)//通过元素指针输出二维数组 { cout< if((i+1)%3==0)cout<<‘\\n’; } ③虽然既可以用行指针操作二维数组,也可以用元素指针操作二维数组,但由于其含义不同,操作方法也不同。如: float b[3][6],(*p1)[3]=b,*p2=b[0]; p1++;//p1自增后指到下一行(第二行) p2++;//p2自增后指到下一个元素(第一行第二列) [试题] [2007春]选择题28 B [2006春]选择题25 C 2、指针与函数 (1)指针作函数的参数,传递地址和数组,格式:类型 函数名(指针形参){?}。 ①传递变量地址。 ②传递一维数组。 [试题] [2007秋]填空题12 (23)i+=2 (24)a[pn]=t (25)px!=i+1 (26)a[px]=t [2006春]填空题8 (11)3 3 11 (14)19 20 0 0 [2006春]填空题13 (23)i==n-1 (24)*p>*(p+1)或*p>=*(p+1) (25)*p<*(p+1)或*p<=*(p+1) (26)test_order(x,n) ③传递二维数组。 [试题] [2007春]填空题11 (19)(int*p)[COL]或int p [ROW][COL] (20)p[i][j-1]等 (21)p[i][0] (22)i=0;i (2)函数返回指针。函数类型为指针,格式: 类型* 函数名(形参){?;return 指针;} ①返回变量地址。 ②返回数组名。 ③返回指针变量。 [试题] [2007秋]填空题8 (12)4 (13)33000 [2006秋]填空题9 (15)Hllo How ar you (16)1111 11 (3)指向函数的指针。先使指针指向函数,然后通过指针调用函数。 ①定义指向函数的指针,要求类型和参数与所指向的函数一致,定义格式: 类型(*指针名)(形参); ②使指针指向函数,其格式为: 指针名=函数名; ③用指向函数的指针调用函数,其格式为: (*指针名)(实参); 或 指针名(实参); [试题] [2006春]填空题9 (13)1 (14)8 (15)2 [2007春]填空题12 (23)s-1 (24)*s++ (25)(*fp)(char*s,char) (26)str,c 3、指针数组与二级指针 指针数组通常与二级指针结合起来处理系列字符串(二维字符数组),如: char *p[4]={“123”,”45678”,”abcd”,”efgfijk” },**pp=p; 指针数组p中4个元素分别保存了列表中4个字符串的首地址,所以语句“cout< [考试要求](五)new与delete的应用★★★; [主要知识点] 1、动态空间:new运算符分配动态空间,delete运算符释放动态空间。