第Ⅰ部分 选择题 一、单项选择题 在每小题列出的四个备选项中只有一个是符合题目要求的。
第Ⅱ部分 非选择题 二、填空题 1. C++可以使用提取操作符“>>”,从______输入流中提取字符。
cin
[考点] C++输入/输出对象 [解析] C++使用提取操作符“>>”,从cin输入流中提取字符。
2. 使用STL库中的算法对数组进行升幂排序、反转、复制数组的内容等操作,需要包含头文件______。
<algorithm>
[考点] 数组操作 [解析] 使用STL库中的算法,可以实现对数组简单的操作,不过需要在程序源文件中包含头文件<algorithm>。
3. 动态分配内存使用关键字______,释放内存使用关键字______。
new delete
[考点] 对指针分配和释放空间 [解析] 在使用指针时,如果不使用对象地址初始化指针,可以自己给它分配地址。当不再使用时,使用delete指针名,即可释放已经申请的存储空间。
4. 程序的主函数、全局说明、______和用户自定义的函数是C++程序一般包含的四部分。
预处理指令
[考点] C++程序的结构 [解析] C++程序一般可以分为四个部分:程序的主函数、全局说明、预处理指令、用户自定义的函数。
5. 通知函数,它只能使用参数而无权修改它,使用的修饰符是______。
const
[考点] 使用const保护数据 [解析] 用const修饰传递参数,意思是通知函数,它只能使用参数而无权修改它。
6. 给定申请一个对象数组的语句
Shape*p1=new Shape[3];
则在需要释放p1指向的数组对象时,使用的语句是______。
delete[]p1;
[考点] 指针空间的释放 [解析] C++为结构动态分配内存后,当不再使用这个空间时,必须使用ddete释放空间。
7. 在C++语言中,唯一的一个三目运算符是______。
表达式1:?表达式2:表达式3
[考点] C++运算符 [解析] C++中唯一的一个三元运算符是条件运算符“?”,它能够实现简单的选择功能。
8. C++语言支持两种多态性,分别是编译时多态和______。
运行时多态
[考点] C++多态性 [解析] C++语言支持两种多态性,即编译时多态和运行时多态。
9. C++语言程序设计的三种基本结构:______、______、______。
顺序结构 选择结构 循环结构
[考点] C++的算法的基本控制结构 [解析] C++算法控制结构有三种:顺序结构、选择结构、循环结构。
10. C++提供使用______类提供的接口和使用带操控符的特殊函数,这两种格式的控制方式。
ios-base
[考点] C++控制方式 [解析] C++提供了两种格式的控制方式,使用ios-base类提供的接口和使用带控制符的特殊函数。
11. C++专门定义了一个仅仅用在模板中的关键字______,它的用途之一是代替template参数列表中的关键字class。
typename
[考点] 函数模板中的关键字 [解析] C++专门定义了一个仅仅用在模板中的关键字typename,它的用途之一是代替template参数列表中的关键字class。
12. 下面程序运行结束后,c的值为______。
#include<iostream.h>
void main()
{int a, b, c;
for(int a=0, b=10; a<=b; a++, b--)
c=a+b;
cout<<c;
}
10
[考点] C++循环结构 [解析] c依次进行的运算是:0+10、1+9、2+8、3+7、4+6、5+5,最后结果为10。
13. 不同的对象可以调用相同名称的函数,但可导致完全不同的行为的形象称为______。
多态性
[考点] 面向对象的程序设计的多态性 [解析] 利用多态性,程序中只需进行一般形式的函数调用,函数的实现细节留给接受函数调用的对象,这大大提高了我们解决复杂问题的能力。
14. C++源程序经______后生成扩展名为.exe的可执行程序文件。
编译连接
[考点] C++程序的开发过程 [解析] 编译时将程序的源代码转换为机器语言代码,然后经连接,将多个目标文件以及库中的某些文件连在一起,生成一个后缀为.exe的可执行文件。
15. 数据封装给数据提供了与外界联系的标准______,通过它,使用规范的方式,才能访问这些数据。
接口
[考点] 面向对象的程序设计的多态性 [解析] 对象的外部操作对外提供一个信息接口,通过这个接口接受对象外部的消息并为之提供操作。
16. ______是具有相同的属性和操作的一组对象集合。
类
[考点] 类的定义 [解析] 类为属于该类的全部对象提供了统一的描述,其内部包括属性和操作两个主要部分。
17. 使用STL库中的算法,实现查找数组内容的函数是______。
find
[考点] 数组的操作 [解析] 查找数组内是否存在某个值的元素,使用find函数,find(a,a+len,value)。
18. C++程序运行时的内存空间可以分成:全局数据区、堆区、线区、______。
代码区
[考点] C++内存空间 [解析] C++程序运行时,内存空间可以分为全局数据区、堆区、线区、代码区。
19. 声明一个函数function,无返回值,有一个参数类型是double,则声明function函数原型是______。
void function(double a);
[考点] 函数定义的语法形式 [解析] 函数定义的语法形式是: 类型标识符函数名{形式参数表} { 语句序列 }
20. 执行代码:int a=64; cout<<hex<<a;程序的输出结果是______。
40
[考点] 数据的简单输入和输出格式 [解析] hex设置转换基数为十六进制,64的十六进制表示为40。
三、改错题 (每小题4分,共20分。下面的每题中有一处错误,并给出修改意见。)
1. #include<iostream>
using namespace std;
void main(){
int a;
cin>>a;
return 0;
}
去除return 0;
[考点] 返回值类型的使用 [解析] main函数声明返回值类型为void,所以不能出现return 0。
2. #inelude<iostream>
#include<iomanip>
using namespace std;
void main(){
int a=29;
cout<<a<<setw(6)<<endl;}
应改为cout<<setw(6)<<a<<endl;
[考点] 设置输出宽度只对紧接着的那个元素有效 [解析] 使用setw设置输出宽度放在a前边,只对a元素有效。
3. 修改程序中的错误,使其输出为10,20。
#include<iostream>
using namespace std;
void swap(int a, int b)
{int temp;
temp=a; a=b; b=temp;}
void main()
{int x=20, y=10;
swap(x, y);
cout<<x<<" "<<y<<endl;
}
void swap(int a, int b)语句有误
[考点] 引用作为函数参数 [解析] 可以使用引用作为函数参数,实参对象名传给形参对象名,实参对象和形参对象代表同一个对象,所以改变形参对象的值就是改变实参对象的值。
4. #include<iostream>
using namespace std;
void main(){
int *ptr1, *ptr2, a, b, t;
cout<<"请输入两个整数:"<<endl;
cin>>a>>b;
ptr1=&a;
ptr2=&b;
if(ptr1<ptr2)
{t=a; a=b; b=t;}
cout<<"max="<<*ptr1<<", min="<<*ptr2<<endl;
}
if(ptr1<ptr2)改为if(*ptr1<*ptr2)
[考点] 指针的使用 [解析] 比较a、b的大小,应是指针指向的值的比较,所以应该加上*号。
5. void operate(const string &str){
str=str+"ok"}
void main(){
string str="I am";
operate(str);
}
void operate(const string &str)改为void operate(string &str)
[考点] 使用const保护数据 [解析] 用const修饰传递参数,意思是通知函数,它只能使用参数而无权修改它。
四、完成程序题 (每题4分,共20分。)
1. 使用do-while语句编程,求自然数1~10之和。
#include<iostream>
using namespace std;
void main(){
int i(1), sum(0);
do{
______;
i++;
}while(______);
cout<<"sum="<<sum<<endl;}
sum+=i; i<=10
[考点] C++循环结构的使用 [解析] 实现1~10累加,sum为累加变量,所以循环体中为sum+=i,while循环体执行的条件是i<=10。
2. 运行结果如下:
AAAb
BB
CCC
程序如下:
#include<iostream>
using namespace std;
void main()
{char ch[3][4]={"AAA", "BB", "CCC"}, (*q)[4]=ch, *p;
//ch是二维数组,q是指向一维数组的指针,并且一维数组每行只有4个字符
//q取得二维数组ch首地址
int i;
______
*p='b';
______
for(i=0; i<3; i++)
cout<<q[i]<<endl;
}
p=new char; *(q+3)=*p;
[考点] 指针对象的使用 [解析] 定义p为一个char类型的数组指针,然后赋值q[0]数组的第四个位置的值为'b'。
3. 用递归法求从1到n的立方和:
f(1)=1 (n=1)
f(n)=f(n-1)+n^3 (n>1)
#include<iostream>
using namespace std;
int f(int);
int main(){
int n, s;
cout<<"input the number n:";
cin>>n;
s=______;
cout<<"The result is"<<s<<endl;
return 0;}
int f(int n){
if(n==1)return 1;
else return(______);}
f(n); f(n-1)+n*n*n
[考点] 函数的调用 [解析] 使用递归法来求立方和函数,即f(n-1)+n*n*n。
4. 使用指针变量访问数组。
#include<iostream>
using namespace std;
void main(){
int a[10]={1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
int *p;
for(______; ______; p++)
cout<<*p<<" ";
cout<<endl;
}
p=a; p<(a+10)
[考点] 用指针处理数组元素 [解析] 将数组a赋值给指针p,p则指向数组第一个元素,循环停止条件即p指向数组的最后一个元素p<(a+10)
5. 输入两个double类型的数据,输出其中的最大一个。
#include<iostream>
using namespace std;
void main(){
double p, q;
cout<<"请输入两个double型数:";
______;
cout<<"输入的两个数中较大的是";
if(______)
cout<<b<<endl;
else
cout<<a<<endl;
}
cin>>p>>q; a<=b;
[考点] 使用输入/输出对象 [解析] cin用来处理标准输入,并可以在一条语句中多次使用流的符号cin>>p>>q。
五、程序分析题 (每题5分,共10分。)
1. #include<iostream>
using namespace std;
void main()
{
int a=5, b=6;
if(! a) b--;
else if(b)
if(a) a++;
else a--;
else b++;
cout<<a<<", "<<b<<endl;
}
9,5
[考点] C++选择结构的嵌套,一目运算符++ [解析] 本程序经条件判断只执行语句a++,所以最后输出结果为9,5。
2. 运行下面的程序,给出其输出。
#include<iostream>
using namespaee std;
typedef double array[5];
int main(){
array a={12, 34, 56, 78, 90};
array & b=a;
a[2]=100;
for(int i=0; i<5; i++)
cout<<b[i]<<" ";
}
12,34,100,78,90
[考点] 对数组的引用 [解析] 定义了一个数组a的引用b,就等于给数组a取了一个别名b,所以对b的一切操作就是对数组a的操作。
六、程序设计题 (共10分。)
1. 回文数是指其各位数字左右对称的整数,如121,676,94 249等,寻找并输出11~999之间的数m,它满足m,m
2 ,m
3 均为回文数。
#include<iostream> using namespace std; int main(){ bool symm(long n); long m; for(m=11; m<1000; m++) if(symm(m)&&symm(m*m)&&symm(m*m*m)) cout<<"m="<<m<<"m*m"<<m*m<<"m*m*m"<<m*m*m<<endl; } bool symm(long n){ long i, m; i=n; m=0; while(i){ m=m*10+i%10; i=i/10; } return(m==n); }
[考点] 函数的定义与调用,然后就是函数的实现 [解析] 判断一个数是否回文,可以用除以10取余的方法,从最低位开始,依次取出该位的各位数字,然后用最低位充当最高位,按反序重构新的数,比较与原数是否相等,若相等则原数是回文。