2018年9月计算机二级C++考试上机练习题及答案(8)
一、程序改错题
使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序运行时有错误,请补充程序中的丢失部分,使得程序运行。可以在修改处增加或者删除一条语句。
本程序完成以下功能:
(1)获得输入的两个数字d1,d2(d1=6,d2=1)。
(2)输出两个中较大的一个(输出6)。
(3)计算d1/d2,如果d2等于0,返回-l(输出结果6)。
(4)输出d1+d2的结果(输出结果7)。
(5)输出d1+1的结果(输出结果7)。
(6)输出d2-1的结果(输出结果0)。
注意:错误的语句在/********error********/的下面。修改该语句即可。其他的语句不能修改。
试题程序:
#include(iostream.h>
voidmain()
{
intd1;
intd2;
intd3;
cout<<"pleaseinputtWOnumber:"< cin>>d1>>d2;
/********error********/
d3=(d1 cout<<"Maxdatais:"< //计算d1/d2如果d2等于0,返回-l
/********error********/
d3=(d2)?d1d2:-l;
cout<<"d1/d2="< /********error********/
d3=(--dl)+(d2++);
cout<<"d1+d2="< cout<<"d1+1="< cout<<"d2-1="< return;
}
二、简单应用题
使用VC++6.0打开考生文件夹下的源程序文件2.cpp。请完成以下两个函数。
(1)funl(intn)求出n的阶乘,必须使用递归调用。
(2)fun2(intn)求出n的阶乘,不能使用递归调用。如果n小于1则返回0。
注意:不能修改函数的其他部分。
试题程序:
#include
//必须使用递归
intfunl(intn)
{
}
//不能使用递归
intfun2(intn)
{
}
voidmain()
{
inti;
cout<<"请输入一个整数:"< cin>>i;
cout<<"输入数字的阶乘是:"< cout<<"输入数字的阶乘是:"< return;
}
三、综合应用题
使用VC++6.0打开源程序文件3.cpp。其中类TC用于把文件输出到屏幕,然后进行文件的分割。分割的方法如下:第一个文件的大小是文件的前一半,另外一个文件的大小是剩余部分。此程序将in.txt文件中的内容输出到
屏幕,并且将文件按照以上方式分割,存于文件out1.txt和out2.txt中。
其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。
(1)从输入文件中获得一个字符,并判断是否到文件结尾,如果到文件结尾,则退出循环。请在注释1后添加适当的语句。
(2)把获得的输入文件的内容存储到bur中,并且用len记录下文件的长度。请在注释2后添加适当的语句。
(3)将输入文件的后一半内容存储在第二个文件中,请在注释3后添加适当的语句。
(4)使用文件流对象打开输入文件in.txt,请在注释4后添加适当的语句。
注意:增加代码或者修改代码的位置已经用符号表示出来。请不要修改其他的程序代码。
试题程序:
#include
#include
#include classTC
{
public:
TC(char*fileName)
{
len=0;
fstreaminfile;
infile.open(fileName,ios::in);
charch;
//********1********
while()
{
cout< //********2********
}
infile.close();
}
voidsplit()
{
fstreamoutfilel;
fstreamoutfile2;
outfile1.open("out1.txt",ios::out);
outfile2.open("out2.txt",ios::out);
inti=0:
for(i=0;i {
outfilel< }
do
{
//********3********
}
while(i!=len);
outfilel.close();
outfile2.close();
}
prwate:
intlen;
charbuf[1024];
};
voidmain()
{
//********4********
TCobj();
obj.split();
return;
}
一、程序改错题
(1)“d3=(d1 (2)“d3=(d2)?d1d2:-l;”应改为“d3=(d2)?d1/d2:-l;”。
(3)“d3=(--dl)+(d2++);”应改为“d3=(d1++)+(d2--);或d3=(++d1)+(--d2);”。
【解析】本题考查了考生对条件表达式和自增自减运算符了解的情况。d3应为d1和d2中较大者的值,所以“(d1(d2)”应改为“(d1>d2)”。若d2不为0,应返回d1/d2的值,而不是d1d2。第3处应该输d1+1d2-l,所以两者的+
+、--应反过来。又因为d3应该是两者原值之和,所以++、--应同时为后缀式或前缀形式。
二、简单应用题
//必须使用递归
jntfunl(intn)
{
if(n<=0)
return0;
if(n==1)
return1;
returnn*funl(n-1);
};
//不能使用递归
intfun2(intn)
{
if(n<=0)
retturn0;
intres=1:
for(inti=1;i<=n;i++)
{
res*=i;
}
returnres;
}
【解析】本题考查的是递归函数和阶乘算法。递归的阶乘算法可以通过判断传入参数,如果大于1,则返回n*funl(n-1),意思是返回n乘以n-1的阶乘;如果等于1,则返回1。这样递归下去就能最终得出n的阶乘。非递归算法可以先建立一个累乘变量,并初始化为1,然后循环遍历1~n,将遍历的数累乘到变量中即可。
三、综合应用题
(1)“while()”应改为“while(infile.get(ch))”。
(2)应添加“bur[len++]=ch;bur[len]=ch;len++;”。
(3)应添加“outfile2< (4)“TCobj();”应改为“TCobi("in.txt");”。
【解析】本题考查了文件流的使用。根据题意,第1处要获得一个字符,并判断是否到文件结尾,所以应使用get函数;第2处应将ch存入buf数组,同时让len增1;第3处将buf中的字节输出给outfile2,注意同时让i增1,否则while循环将进入死循环;第4处TC只确一个带char*参数的构造函数,所以创建对象时必须使用构造参数,根据题意这个参数应该是“"in.txt"”。
编辑推荐:
温馨提示:因考试政策、内容不断变化与调整,长理培训网站提供的以上信息仅供参考,如有异议,请考生以权威部门公布的内容为准! (责任编辑:长理培训)
点击加载更多评论>>