};
voidmain(void){
color*pa=newbrightred;
deletepa;
}
问:
程序能否正确执行?
若能结果是什么?
不能则原因是什么?
4.将上题中标有//A的行中的virtual去掉,则程序的结果又如何?
(1分)
5.程序(2分)
#include
voidmain(){
fstreaminfile,outfile;
charch;
infile.open("file1.txt",ios:
:
in);
outfile.open("file2.txt",ios:
:
out);
while(infile.get(ch))
if(ch>='A'&&ch<='Z')
outfile.put(ch);
infile.close();
outfile.close();
}
设在缺省目录下有文件file1.txt,
没有文件file2.txt,文件file1.txt中有
如下内容:
aAbc123Bce
问执行上述程序后file1.txt,file2.txt中
的内容是什么?
6.程序的输出是(2分)
#include
voidrecu(charc)
{
cout<if(c<’5’)recu(c+1);
cout<}
voidmain()
{
recu(‘0’);
}
7.程序的输出是:
#include
intfun1(intx){returnx+1;}
intfun2(intx){returnx*x;}
intfun(int(*f)(int),intn){
for(inti=1,sum=0;i<=n;i++)
sum+=f(i);
returnsum;
}
voidmain(void)
{cout<cout<}
8.下面程序的输出是
#include
#include
classString{
charstr[81];
public:
String(char*p){strcpy(str,p);}
String(){str[0]='\0';}
String&operator=(String);
friendStringoperator+(String&,String&);
friendostream&operator<<(ostream&,String&);
};
String&String:
:
operator=(Stringp){
strcpy(str,p.str);
return*this;
}
Stringoperator+(String&st1,String&st2){
Stringtmp;
strcpy(tmp.str,st1.str);
strcat(tmp.str,st2.str);
returntmp;
}
ostream&operator<<(ostream&os,
String&str)
{os<returnos;
}
voidmain(void)
{Stringa("This"),b("C++"),c(“test.”),d;
d=a+b+c;
cout<}
9.下面程序中编译有错误的语句的标号为__________(2分)
#include
classD{intx,y;
public:
D(inta,intb=0)
{x=a;y=b;cout<<"a"<D(inta)
{x=a,y=0;cout<<"b"<voidSetXY(inta,intb){x=a,y=b};//C
intGetX(){returnx;}//D
intGetY(){returny;}//E
};
voidmain()
{Da(3,3);//F
Db(9);//G
cout<}
其错误原因是:
______________________
10.下面程序依据的数学公式是:
#include
voidmain(void)
{intx,y;
cout<<"Inputx:
"
cin>>x;
switch(x/20)
{case1:
y=x+6;break;
case2:
y=9*x;break;
case3:
y=x+20;break;
default:
y=x;
}
cout<}
三..根据题目要求完善程序
1.下面是求前n个自然数和的递归函数(2分,即求1+2+3...+n)
intsum(intn)
{
if(________)return1;
elsereturn_______;
}
2.下述程序中函数delstr的功能是:
将字符串str中所有出现的子串str1全部删除。
#include
#include
char*delstr(char*str,char*str1)
{char*p,*p1,*q1;
inti;
if(*str=='\0'||*str1=='\0')
returnstr;
p=str;
while(*p!
='\0')
{p1=p,q1=str1;
while(*p1==*q1&&*q1!
='\0')
_______;
if(p!
=p1&&*q1=='\0')
{for(i=0;*p1!
='\0';i++,p1++)
___=*p1;
_____='\0';
}
p++;
}
return___;
}
voidmain(void)
{
charline[80]="Iamastudent.\
Youareastudenttoo.";
cout<cout<<'\n';
}
3.若一链表,每次插入数据时结点总加在链首(即总是作为第一个结点加入),现有函数Push,完成插入数据x。
链表结点结构如下:
structNode{
intdata;
Node*next;};
链表头指针为top,在链空时top为NULL。
试完成下述填空(注:
NULL是C++中的宏定义#defineNULL0,所以NULL等于0)。
voidPush(Node*&top,intx)
{
Node*p;
p=____;
p->data=___;
p->next=__;
__=p;
}
四.根据要求写出程序
1.平面上的点可用坐标(x,y)表示,试用C++设计一个Point类(4分),
其要求为:
(1)私有数据为点坐标(x,y),用整型数表示;
(2)类对外的接口有:
给定一对整型数(a,b),置点坐标(x,y);可取坐标x;可取坐标y;可从标准输出设备输出对象的坐标;
(3)在定义一个Point类的对象时,可用给定的数据初始化(x,y);若没有给出初始化数据,则(x,y)为(0,0)。
2.有函数f(n,k)=1k+2k+┅+nk,试写出程序(6分)
要求:
n,k由键盘读入,为方便,n,k及函数的结果用整型。
3.写一函数完成乘法九九表的输出,格式为:
(6分)