C++试题库
一、选择题
1、求“abc\\12\n”字符串的长度( C )
(A) 5 (B) 6 (C) 7 (D) 8
2、字符串常量”\tMyNane\103”的长度是:( B )
(A) 6 (B) 8 (C) 12 (D) 14
3、设x=7,执行语句y=++x,则y等于( D )
(A) 6 (B) 7 (C) 9 (D) 8
4、下列字符列中,合法的长整型常量是:( D )
(A) 4.18e3 (B) 0.46793 (C) 4L (D) 956738
5、在C++中,char类型数据在内存的存储形式是:( D )
(A) 原码(B) 反码(C) 补码(D) ASCII码
6、以下运算符中,优先级最高的是:( B )
7、(A) *= (B) –> (C) && (D) >=
7、若有定义“int x”,则下面不能将x的值强制转换成双精度数的表达式( D )
(A)(double) x (B) double(x)(C)(double)(x)(D) x(double)
8、设有变量定义 int i, j; 与表达式 i==0 && j==0 等价的表达式是:( b )
(A) i||j (B) !i&&!j (C) !i==!j (D) i==j
9、下述叙述正确的是()。
(A)字符型变量不能赋予整数(B) 任意整数都能表示字符
(C)字符型变量可存放多个字符(D) 字符数据的值是整数值
10、设变量int a = 5; 下列哪个表达式计算后,使得变量b的值等于2 ?( A )
(A) b=a/2 (B) b=6-(a--) (C) b=a%2 (D) b=a>3?3:2
11、if…else中为避免嵌套出现二义性,C++规定else子句总与( B )
(A)其之前最近的if语句
(B)其之前最近且尚未配对的if语句
(C)缩排位置相同的if语句
(D)其之后最近的if语句
12、逻辑运算符两侧运算对象的数据( D )
(A)只能是逻辑型数据(B)只能是整型数据
(C)只能是整型或字符型数据(D)可以是任何类型的数据
13、设变量x,y,a,b,c,d的值为1,计算表达式(x=a!=b)&&(y=c!=d)后,变量x,y的值分别是:( B )
(A) 0,0 (B) 0,1 (C) 1,0 (D) 1,1
14、已知 int x=1, y=0; 执行下面程序段后,y的值为( c )。
if(x) { if (x>0) y=1; } else y = -1 ;
(A)-1 (B)0 (C) 1 (D)不确定
15、已知 int x=1, y=0, w ; 执行下面程序段后,w的值为( A )。
if(x) if(y) w=x&&y; else w=y;
(A)0 (B)-1 (C)1 (D)不确定
16、语句while(w) …中的表达式w的等价表示是:( c )
(A) w==0 (B) w==1 (C) w!=0 (D) w!=1
17、语句while(a>b) a--; 等价于( D )。
(A)if(a>b)a--; (B)do{a--}while(a>b);
(C)for(a>b)a--; (D) for(;a>b; a--);
18、已知int i=0,x=0; 下面while语句执行时循环次数为( D )。
while( x || i ) { x ++ ; i ++ ; }
(A) 3 (B) 2 (C) 1 (D) 0
19、执行语句 x=1; while(++x<7)cout<<’*’; 后输出结果是:( a )
(A) ***** (B) ****** (C) ******* (D) ********
20、C++中循环语句while和do …while的主要区别是( A )
(A)do…while的循环体至少无条件执行一次
(B)while的循环控制条件和do…while的循环控制条件的控制条件的控制方式是相反的
(C)do …while允许从外部转到循环体内,while不允许
(D)while的循环体不能复合语句
21、若有以下程序段:
for(m=1;m<=100;m++)
{
cin>>y;
if(y<0)
continue;
cout< } 则下面正确的说法是( D ) (A)当y<0时整个循环结束(B)当y>=0时什么也不输出 (C)cout语句永远也不执行(D)最多输出100个非负整数 22、语句“while(!x)…”等价于( A ) (A)while(x==0)… (B) while(x!=1)… (C) while(x!=0)… (D) while(x==1)… 23、一维数组a正确定义是( D )。 (A)char a(10) (B) int a[] (C)int k=5,a[k] (D)char a[]={‘a’,’b,’c’’} 24、下面不能够判断字符串S是空串的是( D ) (A) if (S[0]==0) (B) if(strlen(S)==0) (C) if(strcmp(S,””)==0) (D)if(S==’\0’) 25、char x[5]={‘a’,’b’,’\0’,’c’,’\0’} 输出的结果是( B ) (A)’a’’b’ (B)ab (C) ab c (D)abc 26、设有下面和程序段 (A) char a[3],b[]="China" a=b; cout< 则() (A)编译出错(B)运行后将输出Ch (C) 运行后将输出Chi (D)运行后将输出Chian 27、判断字符串s1是否大于字符s2是空串的是( A ) (A)if(strcmp(s1,s2)>0)(B)if(strcmp(s1,s2)) (C)if(strcmp(s2,s1)>0) (D)if(s1>s2) 28、下面关于C++字符数组的叙述中,错误的是( D )。 (A)字符数组可以放字符串 (B)字符数组的字符可以整体输入、输出 (C)可以在赋值语句中通过赋值运算符“=”对字符数组整体赋值 (D)可以用关系运算符对字符数组比较大小 29、以下对一维数组a的正确定义是( D ) (A)char a(10); (B)int a[]; (C)int k=5,a[k]; (D)char a[]={‘a’,’b’,’c’}; 30、若二维数组y有m列,则位于y[i][j]之前的元素个数有(C)个 (A)j*m+i (B)i*m+j (C)i*m+j-1 (D)i*m+j+1 31、非数组、指针或引用型变量做实参时,它和对应虚参之间的数据传递方式是( B ) (A)地址传递(B)单向值传递(C)双向值传递(D)由用户指定传递方式 32、若有数组名作为函数调用的实参,则传递给虚参的是( A ) (A)数组的首地址(B)数组第1个元素的值 (C)数组中全部元素的值(D)数组元素的个数 33、以下正确的函数原型声明语句是( C ) (A)int fun(int a,b); (B)float fun(int a;int b); (C)double fun( ); (D)int fun(char a[][]); 34、已有定义“int a=5,&ra=a;”则下叙述中,错误的说法是( C )。 (A)ra是变量a的引用(B)ra的值为5 (C)ra是a的地址值(D)执行“ra=10;”后变量a的值也变为10 35、若有定义“int c[5],*p=c;”,则以下对数组c元素地址的正确引用是( D ) (A)p+5 (B)c++ (C)&c+1 (D)&c[0] 36、设 int x = 1, y = 3 , 能正确表示代数式3x|x-y|的C++表达式是( A )。 (A)abs(x-y)*3*x (B)3x(abs(x-y)) (C)3x||(x-y) (D)3*x*(x-y)|| 3*x*(y-x) 37、有函数原型 void f( int * ); 下面选项中,正确的调用是( C )。 (A) char *s=" ABCD"; f(s); (B) int a=15; f(a); (C) int m=100; f(&m); (D) double pi=3.14; f(pi); 38、下面关于new和delete运算的叙述中,错误的说法是( C )。 (B)如果当前内存无足够的空间可分配,则new运算符返回NULL (C)由new运算符分配的内存空间,当函数执行结束时系统会自动收回 (D)对于程序中的静态数组占用的存储空间不能使用delete来释放 39、下面判断是否构成重载函数的条件中,错误的判断条件是( D ) (A)参数类型不同(B)参数个数不同(C)参数顺序不同(D)函数返回值不同 40、假设a,b是全局变量,下面设置函数参数默认值的函数原型中,错误的是( C ) (A)int fun(int x,int y=10); (B) int fun(int x=5,int y=10); (C) int fun(int x,int y); (D)int fun(int x,int y=a+b); 41、设有定义: struct data { int i; char ch; double q; double f }b; 结构体变量b占用内存的字节数是( D ) (A)18 (B)19 (C)20 (D)21 42、关于结构体概念的叙述中,正确的说法是( C )。 (A)相同类型数据的集合称为结构(B)不同类型数据的集合称为结构体 (C)数据的集合称为结构体(D)整数的集合称为结构体 43、设有说明语句 struct abc { int m; float n; } stype; 则下面错误的叙述是( B ) (A)struct 是定义结构体类型的关键字 (B)stype是结构体类型名 (C)m和n都是结构体成员 (D)stype是结构体变量名 43、对枚举类型ee的定义中,正确的这定义是( A )。 (A)enum ee{A,B,C,D}; (B) enum ee{‘A’,’B’,’C’,’D’}; (C) enum ee={A,B,C,D}; (D) enum ee={‘A’,’B’,’C’,’D’}; 44、关于同类型结构体与同类型联合体赋值的叙述中,正确的说法是( A ) (A)联合体变量之间可以直接赋值,结构体变量之间也可以直接赋值 (B)联合体变量之间可以直接赋值,结构体变量之间不可以直接赋值 (C)联合体变量之间不可以直接赋值,结构体变量之间可以直接赋值 (D)联合体变量之间不可以直接赋值,结构体变量之间也不可以直接赋值 45、一个结构体变量所占用的内存字节数是( D ) (A)结构体中第一个成员所需的内存字节数 (B)结构体中最后一个成员所需的内存字节数 (C)结构体中占用内存最大的成员所需的字节数 (D)结构体中各成员所需的内存字节数和 46、当定义一个联合体变量时系统分配给它的内存字节数是( C ) (A)联合体中第一个成员所需的内存字节数 (B)联合体中最后一个成员所需的内存字节数 (C)联合体中占用内存最大的成员所需的字节数 (D)联合体中各成员所需的内存字节数和 47、下面叙述中错误的是( C )。 (A)预处理命令都必须以“#”开始 (B)在程序中凡是以“#”开始的语句行都是预处理命令行 (C)C++程序在程序执行过程中对预处理命令进行处理 (D)一行只能写一条预处理命令 48、下面表达式组中不等价的一组是( C ) (A)a&=b与a=&a (B) a|=b与a=a|b 49、设x=0011 01012,则下面能使x的高4位取反,高4位清零,则下面能实现此功能的是( C ) (A)x=x&0x0f (B) x=x|0x0f (C) x=x^0360 (D) x=x^033 50、设x=0011 01102,则若想通过x&y运算使x中的低4位不变,高4位清零,则下面能实现此功能的是( B ) (A)x=x|0x0f (B) x=x&0x0f (C) x=x|0xf0 (D) x=x&0xf0 51、设a和b是两个结构体变量,下面正确的表达式是( A ) (A)a=b (B)a=b+1 (C)a>b (D)a==b 52、关于结构体变量运算重载中,正确的单目运算符重载语法格式( B ) (A)函数类型名单目运算符 operator(虚参){函数体} (B)函数类型名 operator 单目运算符 (虚参){函数体} (C)函数类型名单目运算符operator(){函数体} (D)函数类型名 operator 单目运算符(){函数体} 53、后缀—运算符的重载函数语法格式如下: 函数类型 operator--(虚参,int){函数体} 则下面关于第2 个虚参的叙述中,正确的说法是( C ) (A)第2个参数必须给出参数名称 (B)第2个参数不能给出参数名称 (C)第2个参数必须是int型参数,其参数名可有可无 (D)第2个参数也可以是long型参数 54、设分数的结构体定义如下: struct Fraction { int nume; int deno; } ; 则下面关于取自身的单目运算符“+”的运算符重载函数中,最合适是( A )。 (A)Fraction operator +(Fraction x) {return x;} (B) Fraction operator +(Fraction &x) {return x;} (C)void operator +(Fraction x) {return x;} (D)void operator +(Fraction &x) {return x;} 55、派生类对象只能访问基类中的( A ) (A)公有继承的公有的成员(B)公有继承的私有成员 (C)公有继承的保护成员(D)私有继承的公有成员 56、关于派生类叙述中,错误的说法是( B ) (A)派生类中从基类公有继承过来的分有成员的访问权限不变 (B)任何类都有基类 (C)派生类还可作为另一类的基类 (D)基类中的构造函数和析构函数是不可继承的 57、设有类的定义如下: class AAA { int x; char s[12]; } ob; 则在VC++环境下,变量ob所占内存空间字节数是( C )字节 (A)14 (B)15 (C)16 (D)17 58、关于构造函数的叙述中,错误的说法是(B ) (A)构造函数的名称必须为类名 (B)构造函数最多只能有一个 (C)创建对象时自动执行构造函数 (D)构造函数无任何函数类型 59、( A )只能访问静态成员变量 (A)静态成员函数(B)虚函数(C)构造函数(D)析构函数 60、C++中类有两种用法,一种是类的实例化,即生成类对象,另一种是通过( B )派生出新的类 二、判断题 1、!比&&的优先级最低 ( 错 ) 2、字符型变量不能赋予整数 ( 错 ) 3、设int a=1,b=2,c=3,d=4; 则条件表达式a 4、用C++语言编制的源程序要变为目标程序必须要经过编译 ( 对 ) 5、表达式x=i++ 和x=++i 执行结果x 获得不同的结果。 ( 对 ) 6、关于switch 语句中必须要使用break 。 ( 错 ) 7、设有“int x,a,b,c ”,则if(a==b) x++;是不合法的。( 错 ) 8、用x>a&&x<=b 描述区间[a ,b]的表达式是正确的。( 错 ) 9、下面程序 m=-1 do { m=m*n; } while(!m) 是死循环 ( ) 10、for (;;)写法是错误。 ( 对 ) 11、在循环语句体中,continue 的作用是结束本次循环,回到循环头。( 对 ) 12、设int x=6;while(x){循环体},将不执行循环体中语句。( 错 ) 13、#define n 10 int a[n],b[n+1]定义数组是合法的。( 对 ) 14、相同类型的数据的集合称为数组。( 对 ) 15、设有两个数组a[]={‘a ‘,’b ’,’c ’}和b=“abc ”相同的。( 错 ) 16、设有两个数组a[]={‘a ‘,’b ’,’c ’}和b=“abc ”用函数strlen()得到的值是相等的( 错 )。 17、对二维数组 int a[][3]={1,32,45,17,-23,87,36}第一维的值是3( 对 ) 18、数组作为函数的实参传递是单向值传递( 错 ) 19、按C++标识符的语法规定,new 是合法的标识符 ( 错 ) 20、int *buffer=new int[256] 是分配256个字节。 ( 错 ) 21、函数模板参数的类型是通用类型( 对 ) 22、构成重载函数的参数类型是不同。( 错 ) 23、设float *p ,则p+1是当前地址加float 类型的长度( 对 ) 24、对结构体中的成员不能用“->”访问成员。( 错 ) 25、在x 构造体中含有y 构造体在访问y 中的成员的格式是x ·y ·成员名( ) 26、结构体类型定义中可以出现联合体类型的成员,联合体类型中也可以出现结构体类型的成员( 对 ) 27、对数据类型int 的别名的定义可以是typedef Integer=int;( 错 ) 28、enum week{“MON ”,“TUE ”,“WED ”}是错误写法。 ( 对 ) 29、文件包含命令不能装入“*cpp ”类型的文件。( 错 ) 30、设包含文件在D 盘的“ABC ”目录中,则指定路径的语法格式是“#include ”D:\ABC\头文件名.h ””(错) 31、条件编译的作用是根据不同条件进行编译不同程序段,以提高程序的兼容性( 对 ) 32、设x 是8位字节的数据,x&0xf0可对低4位进行清零( 对 ) 33、设对变量int x 进行“<<”运算,结果等价x/2。( 错 ) 34、运算符重载函数作用的提高运算符的处理速度。( 错 ) 35、双目运算符重载语法格式是函数类型名 operator 双目运算符(虚参1,虚参2){函数体}( 对 ) 36、可以对类成员变量直接赋值。 ( 错 ) 37、设成员函数定义p &Set(p a)函数返回值是类p 的对象的引用。( 对 ) 38、构造函数释放指针成员占据的内存空间,析构函数给数据成员赋初值。( 错 ) 39、设AB 为一个类,则AB (AB &x )拷贝构造函数的函数原型。( 对 ) 40、一个类只能拥有一个类。( 错 ) 三、 程序设计 1、求下列分段函数?????≥<≤+-<=205/2051235 2 x x x x x x x y 2、输入1-7之间的数字,输出对应的星期几,要求当用户输入不在1-7的范围要有出错处理的功能。 3、求一元二次方程ax 2 +bx+c=0 的两个实根。 4、求s=1+3+5+…+99的和。 5、输出32~126的ASICII 码,每个字符与它的编码值相对应。 6、编一程序,显示所有的水仙花数。所谓水仙花数,是指一个3位数,其各位数字立方和等于该数字本身。例如153是水仙花数,因为153=13+53+33 。 7、计算 ++++++++=2912211611117141211s 当第i 项的值<10 -4 时结束。(提示:找出表达式的通项 8、设有数组a中有10个有序的整型元素,写出折半查找算法函数,查找到返加1,否则返回-1。不用写主函数。 9、设有整型数组a有10个无序的元素,写选择排序算法程序函数,不用写主函数 10、在已有序的数组中插入数x。 11、在已有序的数组中删除数x。 12、求两个矩阵的和C=A+B。 13、求两个矩阵乘积C=A×B,C=B×A。 14、将矩阵转置。 15、输出输入一个小于10的正整数n显示具有n行的杨辉三角形 提示: 定义二维数组a[i][j],杨辉三角形的形成特点是第1例(下标为0)和主角对角线均为1,其余为1,关系式: a[i][j]=a[i-1][j-1]+a[i-1][j] i=2,3,4…,n-1 j=1,2,3…,j-1 16、编一函数,将字符串s中的字符c1用字符c2替换,并加以调用。 函数形式:void replace(char s[],char c1,char c2); 17、编写一函数,由实参传来一个字符串,统计此字符串字母、数字、空格和其它字符的个数,在主函数中输入字符串以及输出结果。 18、有10个学生成绩,求平均分、最低分、最高分并排序,要求写四个函数并由主函数调用。 19、编写函数求三个数最大和最小值,函数的参数分别为整数、双精度 (1)用函数重载 (2)用模板函数。 20、设有字符串s1,s2编写函数求 (1)比较两个字符串的大小 (2)将s1中第一个与s2不相同字符的地址 (3)将s2连接到s1的后面。 21、编写一个对具有n 个元素的数组x[]求最大值的程序,要求将求最大值的函数设计成函数模板。 22、设计一个点类(Point),具有数据成员x、y(点的坐标),以及设置、输出数据成员及求两点之间距离的功能。 23、设计一个楼房类(building),包含楼的长、宽、层数及每平方法单价等数据成员,并具有求楼房的面积及总价等功能。 24、设计一个字符类要求: (1)输入输出字符串的功能 (2)计算字符串长度 (3)连接两字符串。 C++阅读分析题 1. #include void main() { char c=’m’; int d=5; cout<<"d="< cout<<"c="< } 请写出输出结果。 答案:d=5,c=m 2. #include "iostream.h" void main() { int x,y,z; x=2/4*7; y=2/4*7.0; z=int(2/4.0*7); cout<<"x="< void main() { int x,y,z; x=3; y=++x; z=x; cout<<"x="< void main() { int x,y,z; x=3; y=x++; z=x; cout<<"x="< void main() { int x,y,z; x=3; y=x++; z=x; cout<<"x="< void main() { int x,y,z; x=3;y=5; x=x+y; y=x-y; x=x-y; cout<<"x="< void main() { float a,b,c,t; if (a>b) { t=a;a=b;b=t; } if (a>c) { t=a;a=c;c=t; } if (b>c) { t=b;b=c;c=t; } cout< } 请写出输出结果。 答案:3,7,15 8. #include "iostream.h" void main() { float x,y; x=-5; if (x<0) y=-1; else; if (x<=10) y=x; else y=x*x+1; cout<<"x="< void main() { int m;char a; cin>>m; switch(m/10) { case 1: case 2: case 3: case 4: case 5: a=’C’; case 6: case 7: a=’B’; case 8: case 9: case 10: a=’A’; } cout< } 当输入65时,请问输出的内容是()。关键字:选择结构 答案:A 10. #include "iostream.h" void main() { int m;char a; cin>>m; switch(m/10) { case 1: case 2: case 4: case 5: a=’C’; case 6: case 7: a=’B’; case 8: case 9: case 10: a=’A’; } cout< } 当输入25时,请问输出的内容是()。 关键字:选择结构 答案:A 11. #include "iostream.h" void main() { char c; cin>>c; if(c>=’a’ && c<=’u’) c=c+5; else if(c>=’v’&&c<=’z’) c=c-21; cout< } 当输入b时,请问输出的内容是()。 关键字:选择结构 答案:g 12. #include "iostream.h" void main() { int c; cin>>c; if(c>=8 || c<=3) c=c+5; else c=c-21; cout< } 当输入2时,请问输出的内容是()。 关键字:选择结构 答案:7 13. #include void main() { int i=0; while(++i) { if(i==10) break; if(i%3!=1) continue; cout< } } 请写出输出结果。 关键字:循环结构 答案:147 void main() { int a,b; for(a=1,b=2; b<50;) { cout< a=a+b; b=a+b; } } 请写出输出结果。 关键字:循环结构 答案:1 2 3 5 8 13 21 34 15. #include void main() { int x=5; do{ switch(x%2) { case 1:x--; break; case 0:x++; break; } x--; cout< }while(x>0); } 请写出do-while循环体的执行次数。 关键字:循环结构 答案:3 16. #include void main() { for(int i=1,s=0;i<20;i++) { if(i%2==0 || i%3==0) continue; cout< s+=i; } cout< } 请写出输出结果。 关键字:循环结构 答案:1 5 7 11 13 17 19 73 17. #include void main() { int i=1; do{ i++; cout<<++i<<””; if(i= =7) break; }while(i= =3); } 请写出输出结果。 关键字:循环结构 答案:3 5 18. #include"iostream.h" void main() { int i,t,sum=0; for(t=i=1;i<10;) { sum+=t; ++i; if(i%3==0) t=-i; else t=i; } cout<<"sum="< } 请写出输出结果。 关键字:循环结构 答案:sum=9 19. #include"iostream.h" void main() { int i,n,d[10]={1,2,3,4,5,6,7,8,9,10}; i=n=1; while(i<10) { if(n==1) i+=4; else i-=2; if(i<10) cout< n=1-n; } } 请写出输出结果。 关键字:数组与指针 答案:6 4 8 6 10 8 20. #include int a[8]={36,25,20,43,12,70,66,35}; void main() { int s0,s1,s2; s0=s1=s2=0; for(int i=0; i<8; i++) { switch(a[i]%3) { case 0: s0+=a[i];break; case 1: s1+=a[i];break; case 2: s2+=a[i];break; } } cout< 请写出输出结果。 关键字:数组与指针 答案:114 138 55 21. #include "iostream.h" #include "string.h" void main() { int i,n; char s[101]; cin.getline(s,100); cout<<"处理前:"; cout< n=strlen(s); for(i=n-1;i>=0;i--) if (s[i]!='!') break; s[i+1]=0; cout<<"处理后:"; cout< } 程序运行时,输入字符串“abcdefg”回车并执行到最后,s的内容是()。关键字:数组与指针 答案:abcdefg 22. #include"iostream.h" void main() { int a[]={1,3,5,7,9}; int *p,*q,k; p=&a[0]; q=&a[4]; for(;q-p>0;p++,q--) { k=*p; *p=*q; *q=k; } for(k=0;k<4;k++)