C++语言程序设计

问答题使用VC6打开考生文件夹下的源程序文件modi3.cpp,阅读下列程序说明和代码,功能如下:  从屏幕输入数字,然后由大到小插入指定的链中。当输入0时,表示输出的数据已经输入完成,然后把数据打印到屏幕,然后释放内存。  其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。  1.在父节点的Next中保存新插入的节点的指针,请在注释//********1********后添加适当的语句。  2.把pNext的子节点赋给pNext本身,请在注释//********2********后添加适当的

题目
问答题
使用VC6打开考生文件夹下的源程序文件modi3.cpp,阅读下列程序说明和代码,功能如下:  从屏幕输入数字,然后由大到小插入指定的链中。当输入0时,表示输出的数据已经输入完成,然后把数据打印到屏幕,然后释放内存。  其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。  1.在父节点的Next中保存新插入的节点的指针,请在注释//********1********后添加适当的语句。  2.把pNext的子节点赋给pNext本身,请在注释//********2********后添加适当的语句。  3.判定P的子节点不为空,如果不为空,则打印P其中的数据到屏幕,请在注释//********3********后添加适当的语句。  4.用temp1保存动态申请内存节点的链表头,请在注释//********4********后添加适当的语句。  注意:仅在函数指定位置添加语句,请勿改动主函数 main与其他函数中的任何内容。
如果没有搜索结果,请直接 联系老师 获取答案。
如果没有搜索结果,请直接 联系老师 获取答案。
相似问题和答案

第1题:

使用VC6打开考生文件夹下的工程ms9_1,此工程包含一个源程序文件test9_1.cpp,但该程序运行有问题,请改正程序中的错误,使程序的输出结果如下:

4,5

20

源程序文件test9_1.cpp清单如下:

include<iostream.h>

class A

{

protected:

int n,m;

public:

void set(int a,int b){m=a; n=b;)

void show(){cout<<m<<","<<n<<endl;)

/**********found*********/

}

class B:public A

{

int s;

public:

void set(){s=m*n;)

void shows(){cout<<s<<endl;)

};

void main()

{

B b;

/**********found**+******/

b.set();

b.show();

b.set();

/*********found**********/

b.show();

}


正确答案:(1)错误:} 正确:}; (2)错误:b.set(); 正确:b.A::set(45); (3)错误:b.show(); 正确:b.shows();
(1)错误:} 正确:}; (2)错误:b.set(); 正确:b.A::set(4,5); (3)错误:b.show(); 正确:b.shows(); 解析:(1)主要考查考生对类定义格式的掌握,类的结尾应该使用“;”;
(2)主要考查考生对基类与派生类函数调用关系的掌握,根据所要求的输出结果,应该调用的函数为类A的set,而不是类B自身的set函数,应该避免调用的二义性;
(3)主要考查考生对继承与派生的理解,由所要求输出结果可知正确:b.shows()。

第2题:

使用VC++6.0打开考生文件夹下的源程序文件2.cpp。请完成以下两个函数。 (1)funl(intn)求出n的阶乘,必须使用递归调用。 (2)fun2(intn)求出n的阶乘,不能使用递归调用。如果n小于1则返回0。 注意:不能修改函数的其他部分。 试题程序: include<iostream.h> //必须使用递归 intfunl(intn) { } //不能使用递归 intfun2(intn) { } voidmain { inti; cout<<"请输入一个整数:"<<endl; cin>>i; cout<<"输入数字的阶乘是:"<<funl(i)<<endl; cout<<"输入数字的阶乘是:"<<fun2(i)<<endl; return; }


正确答案:
//必须使用递归
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,将遍历的数累乘到变量中即可。

第3题:

使用VC6打开考生文件夹下的工程test28_1,此工程包含一个源程序文件test28_1.cpp,但该程序运行有问题,请改正程序中的错误,使该程序的输出结果为:

5

5

源程序文件test28_1.cpp清单如下:

include <iostream.h>

class A{

public:

/***************** found *****************

static int n=1;

A(){n++;};

~A() (n--;};

};

/***************** found *****************

int n=0;

int main() {

A a;

A b[3];

A *c=new A;

c=&a;

/***************** found *****************

cout<<c.n<<end1;

cout<<A::n<<end1;

return 0;

}


正确答案:(1) 错误:static int n=1; 正确:static int n; (2) 错误:int n=0; 正确:int A::n=0; (3) 错误:coutc.nend1; 正确:coutc->nend1;
(1) 错误:static int n=1; 正确:static int n; (2) 错误:int n=0; 正确:int A::n=0; (3) 错误:coutc.nend1; 正确:coutc->nend1; 解析:(1)在类的声明中只能对静态数据成员进行引用性声明,不能进行静态数据成员的初始化:
(2)由于静态数据成员是类的成员,所以在初始化时必须限定它所属的类:
(3)c为类的对象指针,访问类成员函数时使用符号“->”,而不能用“.”。

第4题:

使用VC6打开老考生文件夹下的工程test5_1,此工程包含一个源程序文件test5_1.cpp,但该程序运行有问题,请改正程序中的错误,使程序的输出结果如下:

x=3 y=5 z=0

8

源程序文件test5_1.cpp清单如下:

include<iostream.h>

static int x=5;

int z=0;

int *add(int x,int y)

{

cout<<"X="<<X<<"y="<<y<<" Z="<<z<<endl;

z=z+x+y;

/********found*********/

return z;

/********found*********/

};

void main()

{

int y=5;

int x=3;

/*********found********/

cout<<&(add(X,y))<<endl;

}


正确答案:(1)错误:return z; 正确:return &z; (2)错误:}; 正确:} (3)错误:cout&(add(xy))endl; 正确:cout*(add(xy))endl;
(1)错误:return z; 正确:return &z; (2)错误:}; 正确:} (3)错误:cout&(add(x,y))endl; 正确:cout*(add(x,y))endl; 解析:(1)主要考查考生对于函数返回类型的掌握,该函数的返回值应该是指向int型的指针,所以应该将地址作为返回值:
(2)主要考查考生对于类定义格式与函数定义格式区别的掌握,类的定义最后应该使用“;”而函数不需要用“;”;
(3)主要考查考生对于有返回值的函数调用的掌握,函数定义是返回指针型的,调用的时候就应该使用取地址符号。

第5题:

使用VC++6.0打开考生文件夹下的源程序文件2.cpp。阅读下列函数说明和代码,补充空出的代码。使sum(intn)能计算所有n的因子之和(不包括1和自身)。 注意:不能修改程序的其他部分,只能补充sum函数。 试题程序: include<iostream.h> intsum(intn) { } voidmain { cout<<sum(10)<<endl; cout<<sum(200)<<endl; cout<<sum(400)<<endl; return; }


正确答案:
intall=0:
for(inti=2;i<n;i++)
{
if(n%i==0)
{
all+=i:
}
}
returnall;
【解析】为了实现计算所有n的因子之和且不包含1和自身,在函数中定义一个变量all来保存求和结果,并为最终结果在函数结束时返回。在循环中逐个寻找n的因子,为了在计算中排除掉1和n本身,因此循环变量i的变化范围为2~(n-1)。如果n%i==0,说明i是n的因子,因此将i加到all上。

第6题:

使用VC++6.0打开考生文件夹下的源程序文件2.cpp。阅读下列函数说明和代码,补充空出的代码。函数sum(intn)用于计算在n范围内,能被7和11整除的所有整数的和(包括n在内)。 注意:不能修改程序的其他部分,只能补充sum函数。 试题程序: include<iostream.h> doublesum(intn) { } voidmain() { cout<<sum(80)<<endl; cout<<sum(500)<<endl; cout<<sum(1000)<<endl; return; }


正确答案:
intresult=0;
for(inti=11;i<=n;i++)
{
if((i%7==O)&&(i%11==0))
{
result+=i:
}
}
returnresult;
【解析】本题利用循环查找所有小于等于n的能被7和11整除的数,循环变量i从最小值11开始,到n结束,即11<=i<=n。在函数中定义累加变量result用来保存求和结果,在循环体内,逐个判断每个i是否能被7和11整除,即(i%7==0)和(i%11==0)都满足的话,说明i能同时被7和11整除,将该值加到resuh上,循环结束返回result。

第7题:

使用VC++6.0打开考生交件夹下的源程序文件2.cpp。阅读下列函数说明和代码,完成空出部分程序。函数fun(intN[4])的功能是用4个数字,组成互不相同且无重复数字的3位数,并将满足所有条件的数字输出到屏幕, 并且每输出一个3位数就换一行。 程序分析:可填在百位、十位、个位的数字都是1、2、3、0。组成所有的排列后再去掉不满足条件的排列。如果判定第一个数字是0,则也去掉。 试题程序: include<iostream.h> voidfun(intN[4]) { } intmain() intN[4]={1,2,3,0}; fun(N): return0; }


正确答案:
inti,j,k;
for(i=0;i<4;i++)//百位循环
{
for(j=0;j<4;j++)//十位循环
for(k=0;k<4;k++)//个位循环
{
if(i!=j&&j!=k&&k!=i&&N[i]!=0)//
当三位数不同,并且百位不为0
{
cout<<N[i]<(N[i]<<N[k]<<endl;//输出这三位
数组成的数字
}
}
}
【解析】本题利用3层循环,对3位数字是否相同进行判断。如果3位数不同,并且百位不为0,那么依次输出这3位数,即由3位数组成的数字。

第8题:

使用VC++6.0打开考生文件夹下的源程序文件2.cpp。阅读下列函数说明和代码。函数num(ehar*str)用于返回字符串中非数字的个数。 例如:abcl23abc45 返回值为:6 将函数num补充完整。 注意:请勿改动主函数main。 试题程序: include<iostream.h> intnum(char*str) { } intmain { charstr[1024]; cout<<"pleaseinputastring:"<<endl; cin.getline(str,1024); cout<<"charnumberis"<<num(str)<<endl: return0; }


正确答案:
intnumber=0;
for(inti=0;sir[i]!=0;i++)
if(str[i]>9‖str[i]<0)//非数字字符
number++:
returnnumber;
【解析】利用循环搜索数组str中的元素,循环变量从0开始,直到str[i]=0(到了字符数组末端),不断从str中读取元素。每读到一个元素就判断是否是非数字字符,即满足条件“str[i]>9‖str[i]<0”的字符为非数字字符,非数字字符个数加1,循环结束就得到了非数字字符的个数。

第9题:

使用VC++6.0打开考生文件夹下的源程序文件2.cpp。阅读下列函数说明和代码,完成空出部分程序。函数fun(intn)的功能是实现对一个整数的加密,具体的加密方法是一个4位长的整数,用每位数字加上3然后除以9的余数代替该数字,再将第1位和第4位交换,第2位和第3位交换,然后返回得到的密码。 程序输出结果为 1864 2075 注意:不能修改其他部分的代码。 试题程序: include<iostream.h> include<cmath> intfun(intn) { } intmain() { inti=1357: cout<<fun(i)<<endl; i=2468; cout<<fun(i)<<endl: return0; }


正确答案:
inti,a[4],t;
a[0]=n%10;//取整型n的第1位数字
a[1]=n%100/10;//取整型n的第2位数字
a[2]=n%1000/100;//取整型n的第3位数字
a[3]=n/1000;//取整型n的第4位数字
for(i=0;i<=3;i++)//每位数字加3,取余
{
a[i]+=3;
a[i]%=9;
}
t=a[0];//根据加密算法交换
a[0]=a[3];
a[3]=t;
t=a[1];
a[1]=a[2];
a[2]=t;
returna[3]*1000+a[2]*100+a[1]*10+a[0];
//重组,返回加密数字
【解析】本题首先取得要加密整数的每一位数字,并存
入数组。根据加密算法,利用循环实现每位数字加3,再除以9取余。根据加密算法进行数字交换,最后重组,返回密码。

第10题:

使用VC6打开考生文件夹下的工程test30_1,此工程包含一个源程序文件test30_1.cpp,但该程序运行有问题,请改正程序中的错误,使该程序的输出结果为:

Previous=9,Next=11

源程序文件test30_1.cpp清单如下:

include <iostream.h>

/***************** found *****************/

void prevnext (int,int &,int&);

int main ( )

{

int x=10,y,z;

prevnext (x,y,z);

cout << "Previous=" << y << ", Next=" << z<<end1;

return 0;

}

/***************** found *****************/

void prevnext (int x, int prev, int next)

{

/***************** found *****************/

prev=x--;

next=++x;

}


正确答案:(1)错误:在main()函数前缺少prevnext函数的声明 正确:void prevnext(intint &int &); (2)错误:void prevnext(int xint prevint next) 正确:void prevnext(int xint &prevint &next) (3)错误:prev=x--; 正确:prev=x-1;
(1)错误:在main()函数前缺少prevnext函数的声明 正确:void prevnext(int,int &,int &); (2)错误:void prevnext(int x,int prev,int next) 正确:void prevnext(int x,int &prev,int &next) (3)错误:prev=x--; 正确:prev=x-1; 解析:(1)函数在使用前必须已经被定义,main()中调用prevnext函数,而该函数的实现在main()之后,所以在main()之前必须添加该函数的声明;
(2)由运行结果可知,通过函数prevnext调动要改变main()中的实参值,所以prey和next都应为引用型参数:
(3)由运行结果prev=x-1,而源程序的prev=x,x=x-1,这里涉及的是运算符的优先级问题。

更多相关问题