C++旧版课程库

C++ PSTK - 5

Level 5(C++)单选题 一、注释 1.在C++语言中,以下哪个是在代码后添加单行注释( ) (A)/ (B)# (C)// (D)& 2.在C++语言中,哪个是多行注释( ) (A)/ / (B)/* */ (C)/* /* (D)*/ */ 二、数组 1.申请100个"小房子",用来存储整数,以下正确的是( ) (A)int a100; (B)int a[100]; (C)float a[100]; (D)int a(100); 2.在C 语言中,引用数组元素时,其数组下标的数据类型允许是( ) (A)只能整型常量 (B)实型表达式 (C)整型常量或整型表达式 (D)任何类型的表达式 3.定义如下变量和数组: int i; int x[4][4] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}; 则下面语句的输出结果是( ) for(i = 0;i < 4;i++) printf("%d ",x[i][3-i]); (A)1 5 9 13 (B)1 6 11 16 (C)4 7 10 13 (D)4 8 12 16 4.若有说明:int a [ 10 ];则对a 数组元素的正确引用是( ) (A)a[10] (B)a[3.5] (C)a(5) (D)a[9] 5.以下能对一维数组a 的所有元素进行正确初始化的语句是( ) (A)int a[ 10 ] = ( 0 , 0 , 0 , 0, 0 ) ; (B)int a{10} = { }; (C)int a[ ]= { 0 } ; (D)int a[10] = (10*1); 6.以下叙述中正确的是 ( ) (A)数组下标的下限由数组中第 1 个被赋值元素的位置决定 (B)数组下标的下限是 1 (C)数组元素的下标下限由第一个非零元素的位置决定 (D)char c1,c2,*c3,c4[40];是合法的变量定义语句 7.以下叙述中正确的是 ( ) (A)语句 char a[3];a = "AB";是合法的,因为数组有三个字符空间的容量,可以保存两个 (B)语句 char a[2] = {"A","B"}; 定义了一个包含两个字符的数组 (C)语句 int a[] = {0};是不合法的,遗漏了数组的大小 (D)语句 int a[8] = {0};是合法的 8.下列数组定义语句中,不合法的是( ) (A)int a[3] = { 0, 1, 2, 3 }; (B)int a[] = { 0, 1, 2 }; (C)int a[3] = { 0, 1, 2 }; (D)int a[3] = { 0 }; 9.已知char a[][50]= { "fortran", " basic", "pascal", "java", "c++" };,则 cout << a[3];的显示结果是( ) (A)pasal (B)一个地址值 (C)java (D)c++ 10.下列关于数组概念的描述中,错误的是( ) (A)数组中所有元素类型是相同的 (B)数组定义后,它的元素个数是可以改变的 (C)数组在定义时可以被初始化,也可以不被初始化 (D)数组元素的个数与定义时的每维大小有关 11.定义一个能存储20个整数的整型数组,并且数组名为sum,以下代码正确的是( ) (A)int a[20]; (B)int sum[19]; (C)int sum[20]; (D)int a[21]; 12.从键盘读入十个整数存入数组num中,以下代码正确的是( ) (A) int num[10]; for(int i = 0;i <= 10;i++) { scanf("%d",&num[i]); } (B) int num[10]; for(int i = 0;i < 9;i++) { scanf("%d",&num[i]); } (C) int num[10]; for(int i = 0;i <= 9;i++) { scanf("%d",&num[i]); } (D) int num[10]; for(int i = 0;i < 10;i++) { scanf("%d",num[i]); } 13.定义一个数组如下:int a[11];该整型数组a最多能同时存储几个整数?( ) (A) 9 (B)10 (C)11 (D)12 三、二维数组 1.定义一个可以存储3行5列的二维字符数组,以下正确的是( ) (A)int a[3][5]; (B)char a[3][5]; (C)char a[3][6]; (D)int a[3][6]; 2. 以下叙述中正确的是 ( ) (A)语句 int a[][3]={1,2,4,5};是错误的初始化形式 (B)在逻辑上可以把二维数组看成是一个具有行和列的矩阵或表格 (C)语句 int a[4][3]={{1,2},{4,5}};是错误的初始化形式 (D)语句 int a[4][3]={1,2,4,5};是错误的初始化形式 3.以下对二维数组a 的正确表示是( ) (A)int a[3] [ ]; (B)float a(3,4); (C)double a[1] [4]; (D)float a ( 3 ) ( 4 ); 4.若有说明:int a [3][4];则对a 数组元素的正确引用是( ) (A)a [2][4] (B)a[1,3] (C)a[4-2][0] (D)a(2)(4) 5.若有说明:int a[3][4];则对a 数组元素的非法引用是( ) (A)a[0][2*1] (B)a [1][3] (C)a[4-2][0] (D)a [0][4] 6.以下能对二维数组a 进行正确初始化的语句是( ) (A)int a[2][ ]={{1,0,1},{5,2,3}}; (B)int a[ ][3]={{1,2,3},{4,5,6}}; (C)int a[2][4]={1,2,3},{4,5},{6}} ; (D)int a[ ][3]={{1,0,1}{ } , {1,1}} ; 7.以下不能对二维数组a 进行正确初始化的语句是( ) (A)int a[2][3]={0} ; (B)int a[ ][3]={{1,2},{0}} ; (C)int a[2][3]={{1,2},{3,4},{5,6}} ; (D)int a[ ][3]={1,2,3,4,5,6} ; 8.若有说明:int a[3][4]={0};则下面正确的叙述是 ( ) (A)只有元素a[0][0]可得到初值。 (B)此说明语句不正确 (C)数组a 中各元素都可得到初值,但其值不一定为0 (D)数组a 中每个元素均可得到初值0 9. 在main函数中若有说明:int a[3][4];则数组a 中各元素 ( ) (A)可在程序的运行阶段得到初值0 (B)可在程序的编译阶段得到初值0 (C)不能得到确定的初值 (D)可在程序的编译或运行阶段得到初值0 10.若二维数组a 有m 列,a[0][0]为第1个位置,a[0][1]为第2个位置,则计算任一元素a[i][j]在数组中位置的公式为 ( ) (A)i * m + j (B)j * m + i (C)i * m + i - 1 (D)i * m + j + 1 11.以下对二维数组a进行正确初始化的是( ) (A)int a[2][3]={{1,2},{3,4},{5,6}}; (B)int a[ ][3]={1,2,3,4,5,6 }; (C)int a[2][ ]={1,2,3,4,5,6}; (D)int a[2][ ]={{ 1,2},{3,4}}; 12. 在定义int a[5][6];后,a[0][0]为第1个位置,a[0][1]为第2个位置,数组a中的第10个元素是( ) (A)a[2][5] (B)a[2][4] (C)a[1][3] (D)a[1][5] 13.int num[20][20];二维数组num最多存储几个整型数据( ) (A)20 (B)400 (C)19 (D)380 14.已知int a[ ][3]={{0,1},{2,3,4},{5,6},{7}}; 则 a[2][1]的值是( ) (A)0 (B)2 (C)6 (D)7 15.下面选项中等价的是( ) (A)int a[2][3]={1,0,2,2,4,5};与int a[2][]={1,0,2,2,4,5}; (B)int a[][3]={1,0,2,2,4,5};与int a[2][3]={1,0,2,2,4,5}; (C)int a[2][3]={3,4,5};与int a[][3]={3,4,5,6}; (D)int a[2][3]={0,1};与int a[2][3]={{0},{1}}; 16.下列对字符数组进行初始化的语句正确的是( ) (A)char a[] = "Hello"; (B)char a[][] = {'H','e','l','l','o'}; (C)char a[5] ="Hello"; (D)char a[2][5] = {"Hello","World"}; 17.将二维字符数组a中第0行第4列赋值为'#',以下正确的是 ( ) (A)a[4][0] = '#'; (B)a[0][4] = '#'; (C)a[0][4] = "#"; (D)a[4][0] = "#"; 四、字符串 1.下列字符列中,可以作为″字符串常量″的是( ) (A) ABC (B)″xyz″ (C)′uvw′ (D)′a′ 2.下面不正确的字符串常量是( ) (A)‘rst' (B)"14‘14" (C)"0" (D)" " 3.以下叙述中正确的是 ( ) (A)字符串常量"str1"的类型是:字符串数据类型 (B)有定义语句:char str1[ ] = "str1";数组 str1 将包含 4 个字符 (C)字符数组的每个元素可存放一个字符,并且数组最后一个元素必须是‘\0'字符 (D)下面的语句用赋初值方式来定义字符串是没有语法错误的 char str1[ ]={'s','t','r','1','\0'}; 4.以下叙述中正确的是 ( ) (A)函数调用 strlen(s);会返回字符数组 s 实际占用内存的大小(以字节为单位) (B)当拼接两个字符串时,结果字符串占用的内存空间是两个原串占用空间的和 (C)两个字符串可以用关系运算符进行大小比较 (D)C++本身没有提供对字符串进行整体操作的运算符 5.以下叙述中正确的是 ( ) (A)对于字符串常量"string!";系统已自动在最后加入了‘\0'字符,表示串结尾 (B)对于一维字符数组,不能使用字符串常量来赋初值 (C)语句 char str[10] = "string!";和 char str[10] = {"string!"};并不等价 (D)在语句 char str[10] = "string!";中,数组 str 的大小等于字符串的长度 6.设有定义 char str[] = "Hello"; 则语句printf("%d %d",sizeof(str),strlen(str));的输出结果是 ( ) (A)6 6 (B)6 5 (C)5 6 (D)5 5 7.若有以下说明: char s1[ ] = {"tree"},s2[ ] = {"flower"}; , 则以下对数组元素或数组的输出语句中,正确的是( ) (A)printf("%s%s",s1[5],s2[7]); (B)printf("%c%c",s1,s2); (C)puts(s1);puts(s2); (D)puts(s1,s2); 8.给出以下定义: char x[ ] = "abcdefg"; char y[ ] = {'a','b','c','d','e','f','g'}; 则正确的叙述为 ( ) (A)数组x和数组y等价 (B)数组x和数组y的长度相同 (C)数组x的长度大于数组y的长度 (D)数组x的长度小于数组y的长度 9.合法的数组定义是( ) (A)int a[6] = {"string"}; (B)int a[5] = {0,1,2,3,4,5}; (C)char a = {"string"}; (D)int a[ ] = {0,1,2,3,4,5}; 10.给出下面定义:char a[ ] = "abcd";char b[ ] = {‘a','b','c','d'}; 则下列说法正确的是( ) (A)数组a与数组b等价 (B)数组a和数组b的长度相同 (C)数组a的长度大于数组b的长度 (D)数组a的长度小于数组b的长度 11.设char s1, s2;分别指向两个字符串,可以判断字符串s1的字典序是否大于字符串s2的表达式为( ) (A)strcmp(s1,s2) < 0 (B)strcmp(s1,s2) == 0 (C)strcmp(s1,s2) > 0 (D)strcmp(s2,s1) > 0 12.设char s1, s2;分别指向两个字符串,可以判断字符串s1和s2是否相等的表达式为( ) (A)s1 = s2 (B)strlen(s1,s2) (C)strcpy(s1,s2) == 0 (D)strcmp(s1,s2) == 0 13.设有char s1 = "ABCDE", s2 = "ABCDE",s3 = s1;,下列表达式中值等于true的是( ) (A)strcmp(s1,s2) (B)strcmp(s1,s3) == 1 (C)strcmp(s2,s3) == -1 (D)strcmp(s1,s3) == 0 14.运行下面程序段的输出结果是( ) char s1[10] = {'S','e','t','\0','u','p','\0'}; printf("%s",s1); (A)Set (B) Setup (C) Set up (D) 'S''e''t' 15.以下程序段的输出结果是( ) char s[ ] = "an apple"; printf("%d\n",strlen(s)); (A)7 (B)8 (C)9 (D)10 16.若有说明:char c[10]={'E','a','s','t','\0'};,则下述说法中正确的是( ) (A)c[7]不可引用 (B)c[6]可引用,其值为空格符 (C)c[4]不可引用 (D)c[4]可引用,其值为空字符 17.若有说明char c[7] = {'s','t','r','i','n','g'};则对元素的非法引用是( ) (A)c[0] (B)c[9-6] (C)c[4*2] (D)c[2*3] 18.如有说明:char s1[5],s2[7]; ,要给数组s1和s2整体赋值,下列语句中正确的是( ) (A)s1 = getchar(); s2 = getchar(); (B)scanf("%s%s",s1,s2); (C)scanf("%c%c",s1,s2); (D)gets(s1,s2); 19.以下程序输出的结果是( D ) char str[ ] = "1a2b3c"; int i; for(i = 0;str[i] != '\0';i++) if(str[i] >= '0' && str[i] <= '9') printf("%c",str[i]); (A)123456789 (B)1a2b3c (C)abc (D)123 20.当接收用户输入的含有空格的字符串时,应使用( )函数 (A)gets( ) (B)getchar( ) (C)scanf( ) (D)printf( ) 21.定义一个数组s,并将字符串"hello"存入数组s,下列语句正确的是( ) (A)int s[5] = "hello"; (B)char s[5] = "hello"; (C)int s[6] = "hello"; (D)char s[6] = "hello"; 22.求字符串长度的函数是( ) (A)len() (B)strlen() (C)Strlen() (D)strcat() 23.char s1[50] = "Hello,Aha World!";字符串s1的长度是( ) (A)14 (B)15 (C)16 (D)50 24.已知s1,s2是字符串,可以将s1复制给s2的语句是( ) (A)strcpy(s1,s2); (B)strcpy(s2,s1); (C)strlen(s1,s2); (D)strcmp(s1); 25.函数调用:strcat(strcpy(str1,str2),str3)的功能是( ) (A)将串str1复制到串str2中后再连接到串str3之后 (B)将串str1连接到串str2之后再复制到串str3之后 (C)将串str2复制到串str1中后再将串str3连接到串str1之后 (D)将串str2连接到串str1之后再将串str1复制到串str3中 五、逻辑运算符 1.在下列运算符中,( )优先级最高 (A)<= (B)= (C)+ (D) 2.已知x = 43,ch ='A',y = 0;则表达式(x >= y && ch < 'B'&& !y)的值是( ) (A)0 (B)语法错 (C)1 (D)"假" 3.设变量m,n,a,b,c,d均为0,执行(m = a == b) || (n = c == d)后,m,n的值是( ) (A)0,0 (B)0,1 (C)1,0 (D)1,1 4.设有代码"int a = 5;",则执行了语句"a += a -= a * a;"后,变量a的值是( C ) (A)3 (B)0 (C)-40 (D)–12 5.有如下程序段: int a = 14,b = 15,x; char c = 'A'; x = (a && b ) && (c < 'B'); 执行该程序后,x的值为( ) (A)ture (B)flase (C)0 (D)1 6.设a是整型变量,执行(a = 4 * 5,a * 2)后,则表达式a + 6的值是( ) (A)20 (B)26 (C)40 (D)46 7.设有:int a = 1,b = 2,c = 3,d = 4,m = 2,n = 2;执行(m = a > b)&&(n = c< d)后n的值为( ) (A)1 (B)2 (C)3 (D)4 8.设int k = 7,x = 12;则能使值为3的表达式是( ) (A)x %= (k %= 5) (B)x %= (k - k % 5) (C)x %= k - k % 5 (D)(x %= k) - (k %= 5) 9.设有语句int x = 3,y = 4,z = 5;则下面表达式中值为0的是( ) (A)'x' && 'y' (B)x <= y (C)x | | y + z && y - z (D)!((x < y) && !z | | 1) 10.判断char型变量n是否为小写字母的正确表达式为( ) (A)'a'<= n <= 'z' (B)(n >= a)&&(n <= z) (C)('a'>= n)| |('z'<= n) (D)(n >= 'a')&&(n <= 'z') 11.在下列运算符中,( )优先级最低 (A)! (B)&& (C)!= (D)= 12.已知int i = 1, j = 2;,则表达式 ++i + j 的值为( ) (A)1 (B)2 (C)3 (D)4 13.已知 int i = 0, j = 1, k = 2;,则逻辑表达式 ++i || --j && ++k 的值为( ) (A)0 (B)1 (C)2 (D)3 14.执行下列语句后,x的值是( ),y的值是( ) int x, y; x = y = 1; ++x || ++y; (A)不确定 (B)0 (C)1 (D)2 15.设x为整型变量,不能正确表达数学关系 1< x < 5 的C++逻辑表达式是( ) (A)1 < x < 5 (B)x == 2 || x == 3 || x == 4 (C)1 < x && x < 5 (D)!(x <= 1)&& !(x >= 5) 16.以下符号中为逻辑与的是( ) (A)&& (B)|| (C)& (D)% 17.请问经过表达式a = 5 ? 0 : 1的运算,变量a的最终值是( ) (A)6 (B)1 (C)0 (D)5 18.设已有说明语句"int a = 5;",则执行语句"a += a *= a %= 3;"后,a的值为 ( ) (A)8 (B)18 (C)0 (D)2 19.设x和y均为bool型变量,则x && y为真的条件是( ) (A)它们均为真 (B)其中一个为真 (C)它们均为假 (D)其中一个为假 六、函数 1.以下叙述中正确的是 ( ) (A)任何情况下都不能用函数名作为实参 (B)简单递归不需要明确的结束递归的条件 (C)函数的递归调用不需要额外开销,所以效率很高 (D)函数既可以直接调用自己,也可以间接调用自己 2.以下关于建立函数的目的的说法正确的是( ) (A)提高程序的执行效率 (B)提高程序的可读性 (C)提高运行速度 (D)减少程序文件所占内存 3.若调用一个void类型函数,且此函数中没有return 语句,则正确的说法是该函数( ) (A)没有返回值 (B)返回若干个系统默认值 (C)能返回一个用户所希望的函数值 (D)返回一个不确定的值 4.以下正确的说法是 ( ) (A)定义函数时,形参的类型说明可以放在函数体内 (B)return 后边的值不能为表达式 (C)如果函数值的类型与返回值类型不一致,以函数值类型为准 (D)如果形参与实参的类型不一致,以实参类型为准 5.C++规定,函数返回值的类型是由( ) (A)return 语句中的表达式类型所决定 (B)调用该函数时的主调函数类型所决定 (C)调用该函数时系统临时决定 (D)在定义该函数时所指定的函数类型所决定 6.以下叙述中正确的是 ( ) (A)函数名允许用数字开头 (B)函数调用时不必区分函数名称的大小写 (C)函数调用时,函数名必须与被调用的函数名完全一致 (D)在函数体中只能出现一次 return 语句 7.在c++中,若定义一个函数的返回类型为void,则以下叙述正确的是( ) (A)函数返回值需要强类型转换 (B)函数不执行任何操作 (C)函数本身没有返回值 (D)函数不能修改实际参数的值 8.函数的参数可以有几个( ) (A)1个 (B)2个 (C)没有参数 (D)可以有,可以没有 9.所有在函数中定义的变量,都是( ) (A)全局变量 (B)局部变量 (C)静态变量 (D)寄存器变量 10.在C++中不返回任何类型的函数应该说明为( ) (A)int (B)char (C)void (D)double 11.决定C++语言中函数的返回值类型的是( ) (A)return语句中的表达式类型 (B)调用该函数时系统随机产生的类型 (C)调用该函数时的主调用函数类型 (D)在定义该函数时所指定的数据类型 13.设存在函数int max(int,int)返回两参数中较大值,若求22,59,70三者中最大值,下列表达式不正确的是( ) (A)int m = max(22,max(59,70)); (B)int m = max(max(22,59),70); (C)int m = max(22,59,70); (D)int m = max(59,max(22,70)); 14.函数的返回值类型可以是( ) (A)int (B)float (C)char (D)以上三项都可以 七、复杂循环(嵌套循环) 1.输入一个数a,输出a有几个约数,以下代码正确的是( ) (A)int a,count = 0; cin >> a; for(int i = 1;i <=a ;i++) { if(i % a == 0) count = count + 1; } cout << count; (B)int a,count = 0; cin >> a; for(int i = 1;i <= a;i++) { if( a % i == 0) count = count + 1; } cout << count; (C)int a,count = 0; cin >> a; for(int i = 1;i <= i;i++) { if( a % i == 0) count = count + 1; } cout << count; (D)int a,count = 0; cin >> a; for(int i = 1;i <= a;i++) { if( a % i = 0) count = count + 1; } cout << count; 2.要求以下程序的功能是计算:s = 1 + 1 / 2 + 1 / 3 + .. + 1 / 10 int n; float s; s = 1.0; for(n = 10; n > 1; n--) s = s + 1 / n; cout << s << endl; return 0; 程序运行后输出结果错误,导致错误结果的程序行是( ) (A)s = 1.0; (B)for(n = 10; n > 1; n--) (C)s = s + 1 / n; (D)cout << s << endl; 3.输入5个数,相邻的三个数相乘,输出对10取余的最大数,以下程序正确的是( ) (A)int a[10],maxn,t; for(int i = 1;i <= 5;i++) cin >> a[i]; for(int i = 1;i <= 5;i++) { t = (a[i] * a[i+1] * a[i+2]) % 10; if(t > maxn) maxn = t; } cout << maxn; (B)int a[10] = {0},maxn,t; for(int i = 1;i <= 5;i++) cin >> a[i]; for(int i = 1;i <= 2;i++) { t=(a[i] * a[i + 1] * a[i + 2]) % 10; if(t > maxn) maxn = t; } cout << maxn; (C)int a[10],maxn = 0; for(int i = 1;i <= 5;i++) cin >> a[i]; for(int i = 1;i <= 3;i++) { t=(a[i] * a[i + 1] * a[i + 2]) / 10; if(t > maxn) maxn = t; } cout << maxn; (D)int a[10],maxn = 0,t; for(int i = 1;i <= 5;i++) cin >> a[i]; for(int i = 1;i <= 3;i++) { t=(a[i] * a[i + 1] * a[i + 2]) % 10; if(t > maxn) maxn = t; } cout << maxn; 4.在下列选项中,没有构成死循环的程序段是( ) (A)int i = 100; while (1) { i = i % 100 + 1; if (i > 100) break; } (B)for( ; ; ); (C)int k = 1000; do { ++k;} while (k >= 1000); (D)int s = 36; while (s) { --s; } 5.下面程序的输出结果是( ) int i; for(i = 1;i <= 5;i++) { if (i % 2) cout << "*"; else continue; cout << "#"; } cout<<"$"; (A)*#*#*#$ (B)#*#*#*$ (C)#*#*$ (D)*#*#$ 6.若i为整型变量,则以下循环语句的循环次数是 ( ) for(i = 2;i == 0;) cout << i--; (A)无限次 (B)0次 (C)1次 (D)2次 7.对于for(表达式1;;表达式3)可理解为( ) (A)for(表达式1;0;表达式3) (B)for(表达式1;1;表达式3) (C)for(表达式1;表达式1;表达式3) (D)for(表达式1;表达式3;表达式3) 8.以下程序段的执行结果是( ) int i,j,m = 0; for(i = 1;i <= 15;i += 4) for(j = 3;j <= 19;j += 4) m++; cout << m << endl; (A)12 (B)15 (C)20 (D)25 9.下面程序的输出结果是( ) int i; for(i = 1;i < 6;i++) { if (i % 2 != 0) { cout << "#"; continue; } cout << "*"; } (A)#*#*# (B)##### (C)***** (D)*#*#* 10.下面程序的输出结果是( ) int x = 10,y = 10,i; for(i = 0;x > 8;y = ++i) cout << x-- << " "<< y <<" "; (A)10 1 9 2 (B)9 8 7 6 (C)10 9 9 0 (D)10 10 9 1 11.执行以下程序后,输出的结果是( ) int y = 10; do { y--; }while (--y); cout << y--; (A)-1 (B)1 (C)8     (D)0 12.有如下程序 int n = 9; while(n > 6) { n--; cout << n; } 该程序段的输出结果是( ) (A)987 (B)876 (C)8765 (D)9876 13.有如下程序 int i,sum = 0; for(i = 1;i <= 3;sum++) { sum += i; } cout << sum; 该程序的执行结果是( ) (A)6 (B)3 (C)死循环 (D)0 14.以下循环体的执行次数是( ) int i,j; for(i = 0,j = 1; i <= j + 1; i += 2, j--) cout << i << endl; (A)3 (B)2 (C)1 (D)0 15.下面程序的输出结果是( ) int i,k = 0, a = 0, b = 0; for(i = 1;i <= 4;i++) { k++; if (k % 2 == 0) { a = a + k; continue; } b = b + k; a = a + k; } cout << "k=" << k << " a=" << a << " b=" << b; (A)k=5 a=10 b=4 (B)k=3 a=6 b=4 (C)k=4 a=10 b=3 (D)k=4 a=10 b=4 16.执行下面程序段后,k的值是( ) int i,j,k; for(i = 0,j = 10;i < j;i++,j--) k = i + j; (A)9 (B)11 (C)8 (D)10 17.阅读以下程序,程序运行后的输出结果是( ) int x; for(x = 5;x > 0;x--) if (x-- < 5) cout << x << ","; else cout << x++ << ","; (A)4,3,2 (B)4,3,1, (C)5,4,2 (D)5,3,1, 18.以下程序段的输出结果是( ) int k,n,m; n = 10;m = 1;k = 1; while (k <= n) { m *= 2;k += 4; } cout << m; (A)4 (B)16 (C)8 (D)32 19.观察下面这段代码,运行结果正确的是( ) for(int i = 1;i <= 4;i++) { for(int j = 0;j <= 4;j++) { cout << "#"; } cout << endl; } () #### #### #### #### (B) ##### ##### ##### ##### (C) ##### ##### ##### ##### ##### (D) #### #### #### #### #### 20.输出如下图形,下列代码错误的是( ) * ** *** **** (A)for(int i = 1;i <= 4;i++) { for(int j = 1;j <= i;j++) { cout << "*"; } cout << endl; } (B)for(int i = 0;i <= 3;i++) { for(int j = 0;j <= i;j++) { cout << "*"; } cout << endl; } (C)for(int i = 1;i <= 4;i++) { for(int j = i;j >= 1;j--) { cout << "*"; } cout << endl; } (D)for(int i = 1;i <= 4;i++) { for(int j = 0;j <= i;j++) { cout << "*"; } cout << endl; } 21.以下不是无限循环的是( ) (A)for(int i = 1;i <= 3;) { cout << "*"; } (B)while(1) { cout << "*"; } (C)for(int i = 1;;i++) { if(i < 0) { break; } cout << "*"; } (D)int i = 1; while(i <= 3) { cout << "*"; i++; } 22.输出下图的数字三角形,下列哪种写法是正确的( ) 1 2 2 3 3 3 4 4 4 4 5 5 5 5 5 (A)for(int i = 0;i <= 4;i++) { for(int j = 1;j <= i;j++) { cout << i << " "; } cout << endl; } (B)for(int i = 0;i < 5;i++) { for(int j = 1;j <= i;j++) { cout << i << " "; } cout << endl; } (C)for(int i = 1;i <= 5;i++) { for(int j = 1;j <= i;j++) { cout << i << " "; } cout << endl; } (D)for(int i = 1;i <= 5;i++) { for(int j = 1;j < i;j++) { cout << i << " "; } cout << endl; } 八、指针和链表 1.下列哪个是不正确的( ) (A)静态指针可以是整型 (B)int * p 是定义一个指针p (C)p = &a,这里p就等于a的值 (D)指针是一个指示器,它告诉程序在内存的哪块区域可以找到数据 2.以下程序输出结果是( ) int n; int *Pointer; int main() { Pointer = &n; n = 15; printf("n:%d\n",n); printf("*Pointer:%d\n",*Pointer); *Pointer = 25; printf("n:%d\n",n); return 0; } (A)n:15 *Pointer:15 n:25 (B)n:15 *Pointer:15 *n:15 (C)n:15 *Pointer:0 n:15 (D)n:0 Pointer:15 n:25 3.下列关于指针类型的描述哪个是正确的( ) (A)(const int) * Pointer = & SomeNumber, Pointer是指向一个整型常量,Pointer为常量,可修改。 (B)(const int) * Pointer = & SomeNumber, Pointer是指向一个整型常量,*Pointer为常量,不可修改。 (C)const(int *) Pointer = & SomeNumber, Pointer为常量,可修改。 (D)const(int *) Pointer = & SomeNumber, (int *)Pointer为常量,不可修改。 4.下列关于指针的初始化哪个是不正确的( ) (A)int * p = NULL ,NULL是特殊的地址 (B)int a; int * p = &a; p初始化为a的地址 (C)int * p = new(int) ,申请一个空间给p,*p内容不确定 (D)对于定义的局部指针变量,其内容(地址)是固定的 5.下列关于链表不正确的是( ) (A)链表的第一个结点称为表头 (B)链表的最后一个结点称为表尾 (C)在表尾结点中,由于指针域不指向任何结点,所以不放东西 (D)指向表头的指针head称为头指针,存放了表头的地址 6.数组和链表都可以用于存储一组彼此有关联的数据,以下说法中是不正确的是( ) (A)数组占用一块连续的存储区域,链表可能占用若干不连续的存储区域 (B)数组和链表所占用的存储区域均不能在程序运行期间动态的分配 (C)数组中的数据可以随机存取或顺序存取,链表中的数据只能顺序存取 (D)数组的长度是固定的,链表的长度是不固定的 7.下列关于malloc函数说法错误的是( ) (A)malloc函数原型为void*malloc(unsigned int size); (B)malloc的作用是在内存的动态存储区中分配一个长度为size的连续空间 (C)malloc函数是一个指针型函数,返回的指针指向该分配域的结尾位置 (D)malloc的全称是memory allocation(动态内存分配) 8.下列malloc与new的区别错误的描述是( ) (A)malloc是libc里面实现的一个函数,new本身不是函数 (B)new依赖于头文件 (C)new返回指定类型的指针,malloc是强行转换为实际类型的指针 (D)malloc只管分配内存,并不能对所得的内存进行初始化 九、堆、栈 1.以下关于堆、栈说法错误的是( ) (A)栈内存是一片内存区域 (B)栈是先进后出的数据结构 (C)堆是线性数据结构 (D)堆的STL包含于algorithm头文件中。 十、STL基础(string、vector) 1.在c++中STL是( )的缩写 (A)Sort The Library (B) Standard Template Library (C) Seven T-shirt Lady (D) SevenTh Library 2.下面关于STL 哪个是错误的( ) (A)STL是 C++ 标准库的一部分,不用单独安装。 (B)STL是 C++ 从C语言中继承来的。 (C)STL 组件主要包括容器,迭代器、算法和仿函数。 (D)STL 从根本上讲是"容器"的集合,也是组件的集合。 3.下面STL 的容器中,哪一个作用跟数组最为相似( ) (A)vector (B)list (C)map (D)set 4.下面STL 的容器中,哪一个经常用来实现队列( ) (A)vector (B)queue (C)map (D)set 5.下面STL 的容器中,如果要储存一个班级学生的学号姓名住址等信息,哪一个最为合适( ) (A)vector (B)deque (C)map (D)list 6.下列关于容器vector错误的是( ) (A)vector():表示用来存放 T 类型的元素。 (B)vector定义后,其长度还可以变化。 (C)vector在尾部增加或删除元素的效率最高。 (D)vector不能在非尾部增加或删除元素。 7.下列函数可以用来统计string的容量是( ) (A)size() (B)leng() (C)length() (D)capacity() 8.关于vector和数组,下面说法错误的是( ) (A)都是对同一种类型的数据进行储存。 (B)都可以用下标操作进行处理。 (C)都可以用size函数获取长度。 (D)都可以用迭代器进行操作。 9.关于vector和数组,下面说法正确的是( ) (A)vector跟数组一样没有方法获取其长度。 (B)两者的长度在初始化以后都是固定不变的。 (C)数组可以添加新元素,vector不行。 (D)都可以用下标操作进行处理。 10.定义v是vector后,v.empty()可( ) (A)将v全部清空。 (B)用于判断是否v为空。 (C)返回v[0]的值。 (D)将v内所有的值用NULL替换。