第1章
1. 什么是软件?
2. 简述软件的开发过程。
3. 什么是程序设计?
4. 简述程序设计过程。
5. 数据结构的含义是什么?
6. 简述算法的表示方法。
7. 什么是结构化算法?
8. 简述结构化程序设计思想。
第2章C++的基础知识
一、填空题
1. C++语言中的标识符只能由、和三种字符组成,且打头字符不
能是。
2. C++程序的目标文件的扩展名是。
3. 在C++程序中,使用输入输出流需要包含的头文件是。
4. 当执行cin时,从键盘上一次输入多个数据时,每个数据后必须输入一个,
然后才可以接着输入下一个数据。
5. 转义字符序列中的首字符是字符。
6. 空字符串在内存中的存储空间是个字节。
7. 以/*开始,*/结束,在/*和*/之间的部分即为。
8. 赋值表达式y=x++的含义是,y=++x的含义是。
9. cout输出转义字符是使光标移到屏幕上的下一行。
10. C++语言的基本数据类型有、、、、五种。
二、判断题
()1.“C”是字符常量。
()2. 在命名标识符时,大小写字母是不加区分的。
()3. C++程序中,对变量一定要先说明再使用,说明只要在使用之前就可以。
()4. C++程序必须有return语句。
()5. 执行语句const int x=10;后,可以重新对x赋值。
()6. 语句a_char = …\n?表示将小写字母n赋值给字符变量a_char。
()7. short,int都是C++语言的关键字。
()8. C++编译系统对源程序编译时,可以检查出注释语句中的语法错误。
()9. 将一个字符常量放到一个字符变量中,并不是把该字符本身放到内存变量中去,而是将该字符相应的ASCII代码放到存储单元中。
()10. 语句int answer=3+2*9/(10-6);执行完毕后,变量answer的值是7.5。
三、单项选择题
1. C++源程序文件的扩展名为()。
(A).CPP (B).OBJ (C).C (D).EXE
2. 下列变量名中,()是合法的。
(A)double (B)A+a (C)CHINA (D)5s
3. 下列符号能用作C++标识符的是()
(A)xyz/2 (B)2xsale (C)x-sale (D)x_sale
4. 下列各运算符中,()只能用于整型数据的运算。
(A)+ (B)/ (C)*(D)%
5.()不是C++的基本数据类型。
(A)字符类型(B)数组类型(C)整数类型(D)布尔类型
6. 下列运算符中,优先级最高的是()。
(A)% (B)!(C)>= (D)/
7. 字符串常量“ME”的字符个数是()。
(A)4 (B)3 (C)2 (D)1
8. 在C++语言中,080是()。
(A)八进制数(B)十进制数(C)十六进制数(D)非法数
9. 整型变量i定义后赋初值的结果是()。
int i=2.8*6;
(A)12 (B)16 (C)17 (D)18
10.如有int m=31;则表达式(m++*1/2)的值是()。
(A)0 (B)15 (C)15.5 (D)16
11.每个C++程序都必须有且仅有一个()。
(A)预处理命令(B)主函数(C)函数(D)语句
12.在C++语言中,自定义的标志符()。
(A)能使用关键字并且不区分大小写(B)不能使用关键字并且不区分大小写
(C)能使用关键字并且区分大小写(D)不能使用关键字并且区分大小写
13.下列C++标点符号中表示一条语句结束的是()。
(A)# (B)// (C)} (D);
14.下列C++标点符号中表示一条预处理命令开始的是()。
(A)# (B)// (C)} (D);
15. 定义如下变量:int i=2;int j=3;则i/j的结果为()。
(A)0.7 (B)0.66667 (C)0.666666…(D)0
16. 已知int a=2,a+=a-=a*a的值是()。
(A)-4 (B)-2 (C)0 (D)4
17. 下列关于C++关键字的说法中正确的是()。
(A)关键字是用户为程序中各种需要命名的“元素”所起的名字。
(B)关键字是对程序中的数据进行操作的一类单词。
(C)关键字是在程序中起分割内容和界定范围作用的一类单词。
(D)关键字是C++中预先定义并实现一定功能的一类单词。
18.语句n1=2,n2=++n1,n1=n2++,执行后变量n1、n2的值分别为()(A)3,4(B)3,3(C)2,3(D)2,419.字符型数据在内存中的存储形式是()。
(A)补码(B)ASCII码(C)反码(D)原码20.下列程序段执行后输出结果为()
char a=' a '; cout<<"a="< (A)a=A(B)a=33(C)a=65(D)a=A-32 四、阅读程序,写出运行结果 1. #include void main( ) { cout<<"This is a hello world"; cout<<" program"; } 2. #include void main( ) { const int R=10; const double PI=3.14159; double a,b; a=2*R*PI; b=R*R*PI; cout<<"a="< } 五、程序改错 /*求三个整数的平均数 #include int mian( ) {int a,b,c,sum,avg; cout<<"请输入三个整数:/n"; cin>>a>>b>>c>>endl; sum=a+b+c avg=sum/3; cout>>'平均数是:'>>avg; } 第3章基本程序设计 一、判断题 ()⒈if 语句结构中必须有else语句。 ()⒉表达式7>=3+4 || 6<4 && 2<5 的求值结果为假。 ()⒊算术运算符的优先级高于比较运算符。 ()⒋表达式4>6||10>2*6&&2!=! 5求值结果为真。 ()⒌语句for(i=0,x=0;i<90;i++) if(i) x++;执行完后,x的值是89。 ()⒍逻辑表达式10 ()⒎表达式1<3&&5<7的值是1。 ()⒏表达式!(5<8)||2<6的值是1。 ()⒐表达式a+b ()11. 设”int a=3,b=4,c=5;”;表达式”(a+b)>c&&b= =c”的值是0。 ()12. x,y,z为int类型的时候,下列语句执行之后,x的值为10,y的值为20,z的值为10。 x=10;y=20;z=30; if(x>y) x=y;y=z;z=x; ()13. break和continue语句的作用都是终止本层循环的执行。 ()14. 判断变量x的数值是否在3到5之间可以用关系表达式3 ()15. 判断以下程序是否正确。 #include #include “iomanip” using namespace std; void main() { if(a>b) cout< cout<< setw(4)< else cout<< setw(4)< cout<< setw(4)< } ()16. 不管是当型循环还是直到型循环,其循环体都可能在某种条件下一次也不执行。()17. 为了避免可能出现的歧义,C++对if…else语句配对规则规定为:else总是与最近的那个if配对。 ()18. 要运行一个C++程序需要经过编辑、编译、链接和运行四个阶段。其中编译阶段就是对源程序进行语法与语义分析,查找和排除程序错误,通常能够找出程序中的语法错误和逻辑错误。 ()19. switch语句结构中必须有default语句。 ()20. break语句只能结束包含该语句的一层循环结构。 二、单项选择题 1. for(i=0, x=0;!x&&i<=3;i++)循环的次数为()。 (A) 4 (B) 5 (C) 1 (D)是无限循环 2. 若有如下程序段: { int a=2,b=-1,c=2; if(a if(b<0)c=0; else c+=1; cout<<“c="< } 执行后输出到屏幕的结果是______。 (A ) 2 (B) 1 (C) 3 (D) 0 3、若有如下程序段: int i=10; switch(i) { case 9:i++; case 10:i++; case 11:i++; default:i++; } 执行后变量i的正确结果是()。 (A) 11 (B) 12 (C) 13 (D) 14 4. 以下描述中正确的说法是()。 (A) break语句与continue 语句完全一样,可以相互代替 (B) 用break 语句可以提前终止整个循环 (C) 用continue 语句可以提前终止整个循环 (D) 用break语句与continue 语句都不能提前终止执行循环 5. 以下for循环的执行次数是()。 for(x=0,y=0;(y=123)&&(x<2);x++) (A) 执行1次(B) 执行2次(C) 执行3次(D) 是无限循环 6. 以下描述正确的是()。 (A) goto语句只能用于退出多层循环 (B) switch语句中不能出现break语句 (C) 只能用continue语句来终止本次循环 (D) 在循环中break语句不能独立出现 7. 为了避免嵌套的if-else语句的二义性,C语言规定else总是与()组成配对关系。 (A) 缩排位置相同的if (B) 在其之前未配对的if (C) 在其之前未配对的最近的if (D) 同一行上的if 8. break语句的作用是()。 (A) 立即跳出包含该break语句的最小的各种循环语句和switch语句 (B) 立即跳出包含该break语句的最小的各种循环语句 (C) 立即跳出包含该break语句的switch语句 (D) 立即跳出包含该break语句的各种循环语句和switch语句 9. 下面程序段执行完后,x的值是()。 x=0; for(i=0;i<90;i++) if (i) x++; (A) 0 (B) 30 (C) 89 (D) 90 10. continue语句的作用是()。 (A) 结束包含该continue语句的最小的各种循环语句 (B) 结束包含该continue语句的各种循环语句 (C) 结束本次循环,直接进行循环条件的判断 (D) 循环执行完后,结束循环 11. 下列程序段循环()次。 int x=-10; while (++x) { } (A) 9 (B) 10 (C) 11 (D) 无限 12. 在下列运算符中,优先级最低的是()。 (A) || (B)!= (C) < (D) + 13. 下列描述正确的是()。 (A) 表示m>n为false或m (B) switch语句结构中必须有default语句 (C) if语句结构中必须有else语句 (D) 如果至少有一个操作数为true,则包含||运算符的表达式为true 14. 如果switch语句选择表达式中是整型变量,下面哪一项case子句是合法的()。 (A) case “2”: (B) case 2: (C) case 2; (D) case ==2 15. 有如下程序段: …… for(int i = 1;i<4;i++) { if(i%2 == 0) continue; cout< 执行以上程序段的输出结果是()。 (A) 1, (B) 1,3,4, (C) 1,3, (D) 2,4, 16. 下列运算符中优先级最高的是()。 (A)!(B) % (C) -= (D) && 17. 用逻辑表达式表示“大于10而小于20的数”,正确的是()。 (A) 10 18. 如果switch语句中的选择表达式是字符型变量code,下面哪一项case子句是合法的 ()。 (A) case “3”; (B) case …3?; (C) case 3; (D) case =3 19. 设int a=10,b=11,c=12;(a+b) (A) 2 (B) 0 (C) -2 (D) 1 20. 在以下关于C++语言的叙述中,正确的是()。 (A)if 语句结构中必须有else语句(B)switch语句结构中必须有default语句(C)C++程序必须有return语句(D)C++中使用流来执行标准的输入输出操作21. 下列do-while循环的循环次数是()。 已知:int i=5; do{ cout< i--; }while (i!=0); (A) 0 (B) 2 (C) 5 (D) 无限次 22. 若m是一个值为10的int型变量,n是一个bool型变量,则表达式!m||n>0的值()。 (A) 为true (B) 为false(C) 与n的值相反(D) 与n的值相同第4章数组的应用 一、判断题 ()1. 在对全部数组元素赋初值时,不可以不指定一维数组的长度。 ()2. 在对全部二维数组元素赋初值时,可以不指定二维数组的行数。 ()3. 在C++程序中,有定义:int a[10];数组a的最小下标是1。 ()4. 在C++程序中,有定义:int a[10];数组a的最大下标是10。 ()5. 可以用同一个数组表示以一组数值型数据和字符型数据。 ()6. 有声明: int a[3][2]={1,2,3,4,5,6};那么数组元素a[2][1]的初始值是6。 ()7. 有声明: char ch[10]={?a?,?b?,?c?,?d?,?e?};那么赋给数组ch的是字符串“abcde”。()8. 在对全部二维数组元素赋初值时,必须要指定二维数组的列数。 ()9. 字符串"hello,world"在内存中存放时,占用12个字节的空间。 ()10.定义一个一维字符数组有50个元素,用该一维字符数组表示一个字符串数据最多允许有50个字符。 ()11. C++中各种数据类型的变量在定义后会被自动初始化为0值。 ()12. 定义数组时可以用变量来定义数组的大小,但不能用表达式。 ()13. 定义一个有50个元素的一维字符数组,用该数组表示一个字符串数据最多允许有50个字符。 ()14. 定义一个数组后该数组的最小下标取值是0。 ()15. 静态数组被定义时,数组的所有元素自动获取初始值0。 ()16. 数组是C++的基本数据类型。 ()17. 数组不能用来存放字符串。 ()18. 同一数组的所有数组元素在内存中是连续存放的。 ()19. 在C++中数组是具有一定顺序关系的若干相同类型变量的集合体。 ()20. 在给全部数组元素赋初值时,可以不指定二维数组中的常量表达式, 例如:int a[][]={1,2,3,4,5,6}; 二、单项选择题 1. 若有以下定义语句:int a[10]={1,2,3,4,5,6,7,8,9,10};则下列()是对数组元素的正确 使用。 (A) a[10] (B) a[a[3]-5] (C) a[a[9]] (D) a[a[4]+4] 2. 对语句:int a[3][4]={0};描述正确的是()。 (A) 只有元素a[0][0] 可得到初值0 (B) 数组a 中每个元素均可得到初值0 (C) 此说明语句不正确 (D) 数组a 中各元素都可得到初值,但其值不一定为0 3. 若有以下定义,则数组元素a[2][2]的值是()。 int a[][3]={{1,2},{3,2,4},{4,5,6},{1,2,3}}; (A) 4 (B) 5 (C) 2 (D) 6 4. 在下面的一维数组定义中,()有语法错误。 (A) int a[ ]={1,2,3}; (B) int a[ ]; (C) int a[ ]={0}; (D) int a[5]; 5. 在下面的一维数组的定义中,不正确的是()。 (A) int x[10][10];(B) int x[ ][10]={{1,3},5,7}; (C) int x[ ][ ];(D) int x[10][10]={0}; 6. 对长度为N的线性表进行顺序查找,在最坏情况下所需要的比较次数为()。 (A) N+1 (B) N (C) (N+1)/2 (D) N/2 7. 将两个字符串连接起来组成一个字符串时,用()函数。 (A) strcat (B) strlen (C) strcpy (D) strcmp 8. 希尔排序法属于哪一种类型的排序法()。 (A) 交换类排序法(B) 插入类排序法(C) 选择类排序法(D) 建堆排序法 9. 若定义了一个4行3列的数组,则第8个元素是()。 (A) a[1][3] (B) a[2][3] (C) a[3][1] (D) a[2][1] 10.判断两个字符串(分别用a、b表示)是否相等的操作为()。 (A) a= =b (B) if(a= =b) (C) if(strcmp(a,b)) (D) if(strcpy(a,b)) 11. 定义一个一维数组,正确的语句是()。 (A)int a(10); (B)int n=10;int a[n]; (C)int n;cin>>n;int a[n]; (D)const int n=10;int a[n]; 12. 以下那种说法错误?()。 (A)数组中的元素在某些方面彼此相关;(B)数组中的所有元素具有相同的下标;(C)数组中的所有元素具有相同的数据类型;(D)数组中的所有元素具有相同的名字; 13. 语句int a[]={0,1,2}执行后,数组的元素个数是( )。 (A)2 (B)3 (C)4 (D)不知道 14. 下面数组定义错误的是()。 (A)#define n 5 (B)const int n=5; char a[n]={“good”};char a[n]= {“good”}; (C)int n=5;(D)const int n=5; char a[n]={“good”}; char a[n+2]={“good”}; 15. 执行下列语句:int c[4]={0,1,2,3}; for(int i=0; i<4;i++) c[i]=c[i]+i; 则c[3]的值是( )。 (A)0 (B)4 (C)6 (D)8 16. 下列程序执行后d[5]结果是( )。 int d[10]; int I; for (i=0;i<=9;i++) d[i]=i; for( i=0;i<=9;i++) d[i]=d[9-i]; (A)0 (B)4 (C)5 (D)6 17. 数组int area[4]={1,2,3,4}, 执行程序 for (int i=1;i<=4;i++) area[i-1]=1; 那么area[4]的值是( )。 (A)4 (B)3 (C)1 (D)错误 18. 二维数组在内存中的存放顺序是()。 (A)按行存放(B)按列存放(C)由用户自己定义(D)由编译器决定19. 下面初始化不正确的是()。 (A)int a[2][3]={1,2,3,4,5,6}; (B)int a[][2]={7,8,9}; (C)double a[][3]={1,2,3,4,5,6,7};(D)double a[3][2]={{1.5,2.0},{3.5},{5,6,7}}; 20. 若有定义:int a[3][4]={0}; 则以下描述中正确的是()。 (A)只有a[0][0]元素得到初值(B)不正确语句 (C)各元素均得到初值,但不一定为0 (D)各元素均得到初值且为0 21. 下列对字符数组进行初始化的语句正确的是()。 (A)char a[]= “abcd”;(B)char a[][]= “abcd”; (C)char a[4]= “abcd”;(D)char a[2][2]= {“ab”, “cd”}; 22. 二维字符数组[10][10]能够存储()个字符串,每个字符串的长度至多为()。(A)10,10 (B)10,9(C)9,10 (D)9,9 三、阅读程序题 1.#include void main( ) { int a[4],i,j,k; for(i=0;i<4;i++) a[i]=1; k=3; for(i=0;i for(j=0;j a[j]=a[i]+2; cout< } 当执行以上程序时,输出结果是: 2.#include #include using namespace std; void main() { int s[3][3],i,j,k; for(i=0;i<3;i++) for(j=0;j<3;j++) s[i][j]=i-j; for(i=0;i<2;i++) for(j=i+1;j<3;j++) {k=s[i][j];s[i][j]=s[j][i];s[j][i]=k;} for(i=0;i<3;i++) { for(j=0;j<3;j++) cout< cout< } } 当执行以上程序时,输出结果是: 3. #include using namespace std; void main( ) { int a[4],i,j,k; for(i=0;i<4;i++) a[i]=0; k=2; for(i=0;i for(j=0;j a[j]=a[i]+3; cout< } 4. #include using namespace std; void main( ) { int a[2][3],j,k; for(k=0;k<3;k++) for(j=0;j<2;j++) a[j][k]=(j+1)*(k+1); for(j=0;j<2;j++) { for(k=0;k<3;k++) cout<<"**"< cout< } } 5. #include #include using namespace std; void main( ) { int s[4][4],i,j,k; for(i=0;i<4;i++) for(j=0;j<4;j++) s[i][j]=i-j; for(i=0;i<3;i++) for(j=i+1;j<4;j++) {k=s[i][j];s[i][j]=s[j][i];s[j][i]=k;} for(i=0;i<4;i++) { for(j=0;j<4;j++) cout< cout< } } 6. #include using namespace std; void main( ) { const int N=7; int a[N][N],i,j; for(i=0;i for(j=0;j a[i][j]=1; for(i=0;i for(j=i+2;j a[i][j]=a[i][j-1]+a[i][j-2]; for(i=0;i { for(j=0;j if (j else cout< cout< } } 7.#include #include using namespace std; void main( ) { const int N=5; int a[N][N]; int i,j; for(i=0;i { a[i][0]=1; a[i][i]=1; } for(i=2;i for(j=1;j a[i][j]=a[i-1][j-1]+a[i-1][j]; for(i=0;i { for(j=0;j cout<<" "; for(j=0;j<=i;j++) cout< cout< } } 8. #include #include using namespace std; void main( ) { int a[10]={1,1,2,3,2,7,4,2,8,9}; int b=32%6; int i,j,c=0,k=9; for(i=0;i<9;i++) { if(a[i]==b) { c=c+1; k--; for(j=i;j<9;j++) { a[j]=a[j+1];} i--; } } for(i=0;i<=k;i++) cout< cout< cout< } 四、程序填空题 1.功能:将若干个数按从小到大顺序排序。 #include using namespace std; void main( ) { int i,j; double temp; double a[11]; cout<<"输入需排序的10个数:"< for(i=1;i<11;i++) cin>>a[i]; for(i=1;i<=9;i++) for( ①) if( ②) { temp=a[i]; ③; ④;} cout<<"排序后的10个数为:"< for(j=1;j<=10;j++) cout< cout< } 2.功能:使用冒泡法对10个数从大到小排序。 #include void main( ) { const int N=10; int a[N], j,k; cout<<"Input numbers:"< for(j=0;j for(j=0;j for(k=0; ①; k++) if( ②) { a[k]+=a[k+1]; ③; ④;} for(j=0; ⑤;j++) cout< cout< } 3.功能:把一个数列中的所有相同的数删到只剩下一个。 #include using namespace std; void main( ) { int a[10],i,j,pos=1; for(i=0;i<10;i++) cin>>a[i]; for(i=1;i<10;i++) { for(j=0; ①;j++) if (a[i]==a[j]) break; if( ②) { a[pos]=a[i]; pos++; } } for(i=0; ③;i++) cout< cout< } 五、程序改错 功能:折半查找 1 #include 2 using namespace std; 3 void main( ) 4 { int a[10],low=9,mid,high=0,x,pos; 5 cout<<"请输入10个数(降序):"< 6 for(int i=0;i<=10;i++) 7 cin>>a[i]; 8 cout<<"请输入欲查找的数:"< 9 cin>>x; 10 while(low<=high) 11 { 12 mid=(low+high)/2; 13 if(a[mid]=x) 14 { pos=mid; 15 break; } 16 else if(a[mid]>x) 17 high=mid-1; 18 else 19 low=mid+1; 20 } 21 if(low>high) 22 cout<<"没有找到"< 23 else 24 cout< 25 } 本题有七个错误,写出错误行号及正确语句。() 第5章指针的应用 一、判断题 ()1. 从内存单元中存取数据的方法有直接访问方式和间接访问方式。 ()2. 能够直接赋值给指针变量的整数是0和1。 ()3. 声明了指向int类型的指针,该指针可以被赋予任何类型对象的地址。 ()4. 变量的指针,其含义是指该变量的地址。 ()5. 设有如下定义语句:int *p,a;则语句p=&a;中的运算符‘&?的含义是取变量的值。 ()6. 在使用指针变量时,可以把常量或表达式的地址赋给指针变量,表示该指针指向常量或表达式的地址。 ()7. 设有定义语句:int a[10];该数组的数组名a是数组首地址,是一个地址常量,是数组第一个元素的地址。 ()8. 设有如下语句:int *p,a[10]={0};则可用语句:{ for(p=a;p>*p;} 从键盘输入数组的值。 ()9. 在操作一个一维数组时,可能会用到两个指针变量指向该数组,这两个指针变量之间可以进行关系运算,其关系运算的结果表明了这两个指针变量所指向的数组元素的先后关系。 ()10. 对于已经定义好的相同的两个指针变量之间,可以进行加法运算、减法运算和赋值运算。 ()11. 设有如下一段程序: int *var,ab;;ab=100;var=&ab;ab=*var+10;执行上面的程序段后;ab的值为110。 ()12. 有如下定义语句:int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a; 则数值为9的表达式可以表示为*p+=9。 ()13. 有定义语句:int a[5][5],*p;二维数组a首地址可表示为:p=a[0]或p=&a[0][0]。()14. 有定义语句:int a[3][2]={6,5,4,3,2,1},*p=a[0];cout<<*(p+5)< 输出的值为2。 ()15. 在VC++中,存储的分配有两种,即静态存储分配和动态存储分配。 ()16. 静态存储分配:是指程序中使用的变量和数组的类型、数目和大小,是在编程时由程序员分配确定下来的,因此,在程序运行时这些数据占据的存储空间数也是一定的。 ()17. 动态存储分配:在程序运行过程中按照实际需要申请适量的内存单元,使用结束后还可以释放,这种存储分配方法被称为动态存储分配。 ()18. 实现动态分配内存,需要运用指针和使用运算符:new和delete。 ()19. 使用动态存储分配时,用运算符new获取的内存空间,不必须用delete进行释放。 ()20. 对一个指针可以多次调用delete运算符进行释放。在使用delete运算符进行释放时,不用考虑数组的维数。 二、单项选择题 1. 下列关于指针运算的描述错误的是()。 (A) 指针变量是用于存储变量地址的变量 (B) 指针变量是用于存储变量值的变量 (C) 在一定条件下,指针变量可以为空值 (D) 可以使用指针变量来访问数组 2. 若已经定义了a为int型变量,则对指针变量p的定义及初始化正确语句是()。 (A) int *p=a; (B) int p=a; (C) int *p=*a (D) int *p=&a; 3. 若有定义:int x=0, *p=&x;,则语句:cout<<*p;的输出结果是()。 (A) 随机值(B) p的地址(C) x的地址(D) 0 4. 设有定义语句:int n=0,*p=&n,*q;则以下选项中,正确的语句是()。 (A) p=1; (B) p=q; (C) *p=*q; (D) *p=5; 5. 已知一运行正常的程序中有下面的语句,由此可知,变量a和b的类型分别是()。int *p2=&x,*p1=a;*p2=*b; (A) int和int (B) int *和int (C) int和int * (D) int *和int * 6. 设有如下的程序段,程序段运行后输出的结果是()。 { int a=1,b=3,c=5; int *p1=&a,*p2=&b,*p=&c; *p=*p1*(*p2); cout< } (A) 1 (B) 3 (C) 5 (D) 15 7. 设有如下程序段: int x=8,*p=&x; cout<<*p++< (A) 8 (B) 9 (C) 8的地址(D) 9的地址 8. 设有如下程序段: int x=8,*p=&x; cout<<++*p< (A) 8 (B) 9 (C) 8的地址(D) 9的地址 9. 设有定义语句:int *point, a=4;和point=&a;下面均代表地址的一组选项是()。 (A) a, point (B) &a,*point (C) point, &a (D) a, *point 10. 设有定义语句:int a[10],*p=a;对数组元素正确使用的语句是()。 (A) a[p] (B) p[a] (C) *(p+2) (D) p+2 11. 设有定义语句:int a[10]={0,1,2,3,4,5,6,7,8,9},*p=a;则数值不为3的表达式是()。 (A) a[3] (B) p[3] (C) p+=2,*(p++) (D) p+=2,*(++p) 12. 设int x[ ]={1,2,3,4,5,6},*p=x;则数值为3的表达式是()。 (A) p+=2, *++p (B) p+=2, *p++ (C) p+=3, *p (D) p+=2, ++*p 13. 设有定义语句:int a[5],*p=a; 则下列描述错误的是()。 (A) 表达式p=p+1是合法的(B) 表达式a=a+1是合法的 (C) 表达式p-a是合法的(D) 表达式a+2是合法的 14 有下面语句int a[10]={10,9,8,7,6,5,4,3,2,1},*p=a;则数值为2的表达式是()。 (A)a[9] (B)*p[8] (C)*(a+8) (D)p+8 15. 设有如下的程序段,有语法错误的语句是()。 (A)char *p="xinqin";cout< (B) char name[7]=" xinqin ",*p=&name;cout< (C) char name[7]=" xinqin ",*p=name;cout< (D) char name[7]=" xinqin ",*p=&name[2];cout< 16. 设有如下程序段: char *s="abcde"; s+=2; cout<<*s< (A) cde (B) 字符c (C) 字符c的地址(D) 无确定的输出结果 17. 设有如下程序段: char str[ ]="hello",*p=str; *(p+5)的值是()。 (A) 随机值(B) 字母o (C) 字符串结束标志‘\0’(D) 字母o在内存的地址 18. 设有定义语句:int *p[4];则标识符p是()。 (A) 一个指向整型变量的指针 (B) 一个指向整型的指针数组名 (C) 一个指针,它指向一个含有四个整型元素的一维数组 (D) 一个非法的定义语句 19. 设有如下程序段:输出的值为()。 int a[3][3]={9,8,7,6,5,4,3,2,1};; int *p[3]; p[1]=a[1]; cout<<*(p[1]+2)< (A) 4 (B) 5 (C) 6 (D) 7 20. 设有如下程序段: int *point; point=new int(4); 表明了()。 (A) 用动态分配了存放int类型数据的内存空间,将初值4存入该空间中,并将首地址 赋给指针point (B) 用动态分配了存放int类型数据的内存空间,分配的内存空间的大小为4个字节, 并将首地址赋给指针point (C) 用动态分配了存放int类型数据的内存空间,将首地址赋给指针point,且point指 针的值为4 (D) 用动态分配了存放int类型数据的内存空间,将首地址赋给指针point,且point指 针在内存空间的地址值为4 第6章函数的应用 一、判断题 ()1. 一个C++程序通常由有而且只能有一个的主函数、若干个子函数和库函数构成。()2. 用语句cout< ()3. 函数头int main ( )是一个自定义有返回值函数的例子。 ()4. 在C++有返回值的函数中,函数体以return语句结尾。 ()5. 要在C++程序中通过引用来传递变量,则应该在函数头的对应形参名前面加上地址运算符&。 ()6. 在C++有返回值的函数中,return语句有而且只能有一条。 ()7. void函数调用后,可以作为一个值出现在赋值语句的右边赋值给一个变量。 ()8. 变量的生存期指明了该变量在计算机内存中能保留多久。 ()9. V isual C++6.0系统中,使用语句srand(time(NULL));来初始化随机数产生器。()10. Visual C++6.0系统中,用户若需调用内置系统函数,调用前不必使用预编译命令将该函数所在文件包括到用户源文件中,系统会自动调用。 ()11. V isual C++6.0系统中,有调用关系的所有函数必须放在同一源程序文件中。()12. 在C++中,实参与形参结合方式有三种:值调用、引用调用和地址调用。 ()13. 当数组名作为函数调用的实参时,实参与形参表示同一个数组。 ()14. 在C++的函数调用中,主函数可以调用子函数,子函数也可以调用其它的子函数,但子函数不能自己调用自己。 ()15. void函数的函数头以关键字void开始,函数体中最后一条语句为return。 ()16. 只能被声明该变量的函数使用的那些变量被称为全局变量。 ()17. 变量的作用域指明了程序的哪一部分可以使用该变量。 ()18 函数的形式参数可以都有默认值,也可以只有部分有默认值。 ()19 函数的递归调用可分为直接递归调用和间接递归调用。 ()20 同一源文件中,若外部变量名与局部变量名相同,则在执行该函数过程中,外部变量起作用。 二、单项选择题 1. 下面哪一个C++函数和数学表达式53是等价的()。 (A) power(3,5) (B) pow(3,5) (C) pow(5,3) (D) srqt(3,5) 2. 下面哪一条C++语句显示范围3到9之间的随机数()。 (A) 1+rand( )%(9-3+1) (B) 3+rand( )%(9-3+1) (C) 3+rand( )%(9+3-1) (D) 9+rand( )%(9+1-3) 3. V isual C++中,函数返回值的类型是由()。 (A) return 语句中的表达式类型所决定 (B) 调用该函数时的主调函数类型所决定 (C) 调用该函数时系统临时决定 (D) 在定义该函数时所指定的函数类型所决定 4. 以下叙述中正确的是()。 (A) 构成C++程序的基本单位是函数 (B) 可以在一个函数中定义另一个函数 (C) 主函数必须放在其他函数之前 (D) 所有被调用的函数一定要在调用之前进行定义 5. 以下正确的函数头定义形式是()。 (A) int fun(int x;int y) (B) int fun(int x,int y) (C) int fun(int x,y) (D) int fun(int x;) 6. 在下面的函数原型中,存在语法错误的是()。 (A) void BC( int a ,int );(B) void BC( int ,int ); (C) void BC( int ,int b=5);(D) void BC( int a ;int b); 7. 若有函数原型“int sum(int x, int y);”,则使用语句“cout< (A) 指针传递(B) 引用传递(C) 值传递(D) 内容传递 8. 以下哪一项可以作为void函数cacl( )的函数原形,并且将传递给该函数两个int型变量的 值()。 (A) void cacl(int, int);(B) void cacl(int); (C) void cacl(int &, int &);(D) int cacl(void); 9. 以下说法中哪一项是错误的()。 (A) 在函数头中形参的名字必须和函数调用中实参的名字一样 (B) 在函数头中列出的形参必须包含每个参数的数据类型和名字 (C) 在函数头中,函数名后面的一对空括号代表函数不接受任何信息 (D) 函数的语句被括在一对花括号中 10. 以下哪一条C++语句显示名为address字符串变量所包含的字符的个数()。 (A) cout< (C) cout< 11. 要求函数的功能是交换x和y中的值,且通过正确调用返回交换结果。能实现正确交换功能的函数是()。 (A) void funa(int &x,int &y)(B) void funb(int x,int y) { int p; { int t; p=x;x=y;y=p;} t=x;x=y;y=t;} (C) void func(int *x,int *y)(D) void fund(int x,int y) { *x=*y;*y=*x; } { x=x+y; y=x-y; x=x-y; } 12. 关于引用,下列说法中正确的是()。 (A) 引用是一种特殊类型的变量,是另一个变量的别名 (B) 引用在函数调用中传递的是变量的值 (C) 在声明引用时,要给它另开辟内存单元 (D) 在声明引用时,可以不进行初始化 13. 下列叙述中正确的是()。 (A) C++程序中,main( )函数必须在其它函数之前,函数内可以嵌套定义函数 (B) C++程序中,main( )函数的位置没有限制,函数内不可以嵌套定义函数 (C) C++程序中,main( )函数必须在其它函数之前,函数内不可以嵌套定义函数 (D) C++程序中,main( )函数必须在其它函数之后,函数内可以嵌套定义函数 14. 下面有关函数原型的说法正确的是()。 (A) 函数原型与函数的定义语法是一样的 (B) 如果程序中有自定义函数,必须有和其对应的函数原型 (C) 函数原型的参数和函数定义的参数列表在参数的个数、名称、类型上必须一一对应 (D) 函数原形和函数定义在函数名和返回类型上必须一致 15. 在C++函数头定义中,若省略了返回值的数据类型,其默认的返回值的数据类型为 ()。 (A) int (B) float (C) double (D) void 16. 下列程序运行后的结果是()。 #include using namespace std; void fun(int *a, int b) { int *k; k=a; *a=b; b=*k; } void main( ) { int a=3,*x=&a; int y=5; fun(x,y);