赞
踩
C++程序设计期末试题
一、单项选择题
1.C++源程序文件的默认扩展名为(A)。
A.cpp B.exe C.obj D.lik
2.C++程序从上机到得到结果的几个操作步骤依次是(B)。
A.编译、编辑、连接、运行B.编辑、编译、连接、运行C.编译、运行、编辑、连接D.编辑、运行、编辑、连接
3.以下标识符中不全是保留字(关键字)的是(B)。
A.case for int B.default then while C.bool class long D.goto return char
4.程序中主函数的名字为(A)。
A.main B.MAIN C.Main D.任意标识符
5.C++程序的基本模块为(D)。
A.表达式B.标识符C.语句D.函数
6.可用作C++语言用户标识符(变量名)的一组标识符是(B)。
A.void define+WORD B.a3_b3_123 YNC.for-abc CaseD.2a DO sizeof
7.存储以下数据,占用存储字节最多的是(D)。
A.0 B.‘0’C.“0”D.0.0
8.设”int a=15,b=26;”,则”cout<<(a,b);”的输出结果是(D)。
A.15 B.26,15 C.15,26 D.26
9.设x是一个bool型的逻辑量,y的值为10,则表达式x&&y的值为(C)。
A.1 B.0 C.与x值相同 D.与x值相反
10.假定一个二维数组的定义语句为“int a[3][4]={{3,4},{2,8,6}};”,则元素a[2][1]的值为(A)。
A.0 B.4 C.8 D.6
11.若定义了函数double*function(),则函数function的返回值为(B)。
A.实数型 B.实数的地址 C.指向函数的指针 D.函数的地址
12.函数重载是指(A)。
A.两个或两个以上的函数取相同的函数名,但形参的个数或类型不同
B.两个以上的函数取相同的名字和具有相同的参数个数,但形参的类型可以不同
C.两个以上的函数名字不同,但形参的个数或类型相同
D.两个以上的函数取相同的函数名,并且函数的返回类型相同
13.以下关于函数模板叙述正确的是(C)。
A.函数模板也是一个具体类型的函数
B.函数模板的类型参数与函数的参数是同一个概念
C.通过使用不同的类型参数,函数模板可以生成不同类型的函数
D.用函数模板定义的函数没有类型
14.假定指针变量p定义为“int*p=new int(100);”,要释放p所指向的动态内存,应使用语句(A)。
A.delete p; B.delete*p; C.delete&p; D.delete[]p;
15.关于封装,下列说法中不正确的是(D)。
A.通过封装,对象的全部属性和操作结合在一起,形成一个整体
B.通过封装,一个对象的实现细节被尽可能地隐藏起来(不可见)
C.通过封装,每个对象都成为相对独立的实体
D.通过封装,对象的属性都是不可见的
16.面向对象方法的多态性是指(C)。
A.一个类可以派生出多个特殊类
B.一个对象在不同的运行环境中可以有不同的变体
C.针对一消息,不同的对象可以以适合自身的方式加以响应
D.一个对象可以是由多个其他对象组合而成的
17.文件包含命令中被包含的文件的扩展名(C)。
A.必须是.h B.不能是.h C.可以是.h或.cpp D.必须是.cpp
18.预处理命令在程序中都是以(B)符号开头的。
A.* B.# C.& D.@
19.以下叙述中正确的是(B)。
A.使用#define可以为常量定义一个名字,该名字在程序中可以再赋另外的值
B.使用const定义的常量名有类型之分,其值在程序运行时是不可改变的
C.在程序中使用内联函数使程序的可读性变差
D.在定义函数时可以在形参表的任何位置给出缺省形参值
20.设有如下函数定义int f(char*s){char*p=s;while(*p!=’\0’)p++;return(p-s);}在主函数中用cout<<f(“good”)调用上述函数,则输出结果为(B)。
A.3 B.4 C.5 D.6
二、填空题
1.C++语言是在__C___语言的基础上发展起来的。
2.行尾使用注释的开始标记符为___//___。
3.一条表达式语句必须以__分号___作为结束符。
4.程序文件的编译错误分为___warning___和__error___两类。
5.从一条函数原型语句“int fun1(void);”可知,该函数的返回类型为_int_,该函数带有_0_个参数。
6.假定x=5,y=6,则执行表达式y+=x--计算后,x和y的值分别为_4_和_11_。
7.unsigned short int和int类型的长度分别为__2__和___4__。
8.字符串”\nThis\’s a pen\n\n”的长度为_____15_____。
9.在C++中存储字符串”abcdef”至少需要___7___个字节。
10.假定x和y为整型,其值分别为16和5,则x/y和double(x)/y的值分别为_3_和_3.2_。
11.假定x是一个逻辑量,则!x||false的值为____!x______。
12.数学算式3xy/(x+y)的C++表达式为____3*x*y/(x+y)____。
13.设enum Printstatus{ready=2,busy,error};则cout<<busy的输出结果是__1__。
14.假定x=10,则表达式x<=10?20:30的值为__20____。
15.在switch语句中,每个语句标号所含关键字case后面的表达式必须是__常量__。
16.若while循环的“头”为“while(i++<=10)”,并且i的初值为0,同时在循环体中不会修改i的值,则循环体将被重复执行___11__次后正常结束。
17.若“double x=100;”是文件F1.CPP中的一个全局变量定义语句,若文件F2.CPP中的某个函数需要访问此x,则应在文件F2.CPP中添加对x的声明语句为_extern double x;_。
18.若要把一个整型指针p转换为字符指针,则采用的强制转换表达式为__(char*)p __。
19.假定p是一个指向整数对象的指针,则用__*p __表示该整数对象。
20.假定p所指对象的值为25,p+1所指对象的值为42,则*++p的值为___42____。
三、程序填空,对程序、函数或类中划有横线的位置,根据题意按标号把合适的内容填写到程序下面相应标号的后面。
1、打印出100到200之间的所有素数(即除1和它本身再没有其他约数的数)。
#include<iostream.h>
#include<math.h>
void main()
{
int i,j;
for(i=100;i<=200;i++)
{
int temp=int(sqrt(i));
for(j=2; __ j<=temp __;j++)
if(i%j==0) __ break __;
if(__ j>temp __)cout<<i<<'';
}
cout<<'\n';
}
2、斐波那契数列的第1和第2个数分别为0和1,从第三个数开始,每个数等于其前两个数之和。求斐波那契数列中的前20个数,要求每行输出5
个数。
#include<iostream.h>
void main()
{
int f,f1,f2,i;
cout<<”斐波那契数列:\n”;
f1=0;f2=1;
cout<<setw(6)<<f1<<setw(6)<<f2;
for(i=3;i<=20;i++){
f=______f1+f2______;
cout<<setw(6)<<f;
if(_____ i%5==0 ______)cout<<endl;
f1=f2;
f2=____f_______;
}
cout<<endl;
}
3、采用指针访问方式从键盘给数组a[N]输入数据,然后对元素值重新按逆序存放并输出。
#include<iostream.h>
const int N=8;
void main()
{
int a[N],*p,*q;
for(p=a;p<a+N;p++)___cin>>*p ___;
p=a;q=a+N-1;
while(p<q){
int r=*p;*p=*q;*q=r;
___ p++ ___;___ q--___;
}
for(p=a;p<a+N;p++)
cout<<*p<<'';
cout<<endl;
}
四、写出程序运行结果
1. #include<iostream.h>
#include<stdlib.h>
void main()
{
int a[8]={25,48,32,85,64,18,48,29};
int max,min;
max=min=a[0];
for(int i=0;i<8;i++){
if(max>a[i])max=a[i];
if(min<a[i])min=a[i];
}
cout<<"max:"<<max<<endl;
cout<<"min:"<<min<<endl;
}
运行结果:max:85 min:18
2.#include<iomanip.h>
void main()
{
int i,j;
for(i=0;i<5;i++){
for(j=i;j<5;j++)cout<<’*’;
cout<<endl;
}
}
运行结果:
*****
****
***
**
*
五、指出程序或函数的功能
1.#include<iostream.h>
void main()
{
int i,s=0;
for(i=2;i<=30;i+=2)s+=i*i;
cout<<"s="<<s<<endl;
}
功能:计算并输出22+42+62+...+302的值。
六、程序改错,请根据程序段或函数模块的功能改写个别地方的错误
1、在下面的定义中,NODE是链表接点的结构,appendToList则是一函数,其功能是:在list所指向的链表的末尾添加一个新的值为x的接点,并返回表头指针。函数中有两处错误,指出错误所在行的行号并提出改正意见。
Struce NODE{
Int data;
NODE*next;
};
NODE*appendToList(NODE*list,int x)
{NODE*p=new int; //1行
p->data=x; //2行
p->next=NULL; //3行
if(list==NULL)return p; //4行
NODE*p1=list; //5行
While(p1->next!=NULL)p1=p1->next; //6行
p1=p; //7行
return list; //8行
}
错误行的行号为2和8。
分别改正为 NODE *p=new NODE;和 p1->next=p; 。
2、下面程序段第4—9行中存在着三条语句错误,请指出错误语句的行号并说明原因。
Class A
{
int a,b;
const int c;
public:
A(){a=b=c=0;}
A(int aa,int bb):c(aa+bb){a=aa;b=bb;}
};
A a,b(1,2,3);
A x(2,3),y(4);
错误行的行号为5、8和9。
错误原因分别为在函数体给常量c赋值、定义b多一个参数和 定义y少一个参数。
七、编程题
1.按照函数原型语句“void p(int n);”编写一个递归函数显示出如下图形,此图形是n=5的情况。
1
22
333
4444
55555
函数:
void p(int n)
{
if(n!=0) {
p(n-1);
for(int i=0; i<n; i++) cout<<n;
cout<<endl;
}
}
2.求出从键盘上输入的10个整数中的最大值,要求输入变量用x表示,存储最大值的变量用max表示。
程序:
#include<iostream.h>
void main()
{
int x,max;
cin>>x;
max=x;
for(int i=0;i<9;i++) {
cin>>x;
if(x>max) max=x;
}
cout<<"max:"<<max<<endl;
}
3.根据下面类中Search函数成员的原型和注释写出它的类外定义。
class AA{
int*a;
int n;
int MS;
public:
void InitAA(int aa[],int nn,int ms){
if(nn>ms) {cout<<"Error!"<<endl;exit(1);}
MS=ms;
n=nn;
a=new int[MS];
for(int i=0;i<n;i++)a[i]=aa[i];
}
int Search(int x); //从数组a的前n个元素中顺序查找值为x的第一个元素,//若查找成功则返回元素的下标,否则返回-1。};
类外定义:
int AA::Count(int x)
{
int i,c=0;
for(i=0; i<n;i++)
if(a[i]==x) c++;
return c;
}
选作题:
1.某班级学生进行百米跑测试,规定成绩在12秒以内(含12秒)为优秀,在12秒以上至15秒为达标,在15秒以上为不达标,编一程序,从键盘上输入每个人的成绩,以x作为输入变量,并以小
于0的任何数作为终止标志,分别用变量c1,c2和c3统计并输出成绩为优秀、达标和不达标的人数。
2.假定要求下面程序的输出结果为“11/15”,其主函数中存在着三行语句错误,请指出错误语句行的行号并改正错误行。
#include<iostream.h>
class Franction
{
int nume;
int deno;
public:
void FranSimp();Franction FranADD(const Franction&x);Void
InitFranction(){nume=0;deno=1;}Void InitFranction(int n,int d){nume=n;deno=d;}Void FranOutput(){cout<<nume<<’/’
<<deno<<endl;}};void main()//1行{//2行Franction a,b,c;//3行a.InitFranction(6,15);//4行b.InitFranction(1);//5行
c.initFranction();//6行c=FranAdd(a,b);//7行cout<<c.nume<<’/’<<c.deno<<endl;//8行}//9行错误行的行号为(1)、(2)和(3)。分别
改正为(4)、(5)和(6)。3.根据下面类中MaxMin函数成员的原型和注释写出它的类外定义。class AA{int*a;int n;int MS;public:void
InitAA(int aa[],int nn,int ms){if(nn>ms){cout<<"Error!"<<endl;exit(1);}MS=ms;n=nn;a=new int[MS];for(int i=0;i<n;i++)a[i]=aa
[i];}int MaxMin(int&x,int&y);//从数组a的前n个元素中求出//最大值和最小值,并分别由引用参数x和y带回,//同时若n大于0则返回1,否
则返回0。
};要求:1、不要互相抄袭,自己独立完成;2、另建一个文档作答,注意写好对应的题号;3、注意些好自己的名字与学号;4、元旦前将答案
上交至:dhy@zqu.edu.cn,或406434@qq.com,或hy.dai@live.cn
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。