一、改錯(cuò)題
使用VC6打開考生文件夾下的工程kt12_1,此工程包含一個(gè)源程序文件kt12_1.cpp,但該程序運(yùn)行有問題,請(qǐng)改正函數(shù)中的錯(cuò)誤,使該程序的輸出結(jié)果為:
100
源程序文件kt12_1.cpp清單如下:
#include
template
classpair
{ Tvalue1,value2;
public:
pair(Tfirst,Tsecond)
{value1=first;value2=second;}
/*****************found*****************/
chargetmax(); };
/*****************found*****************/
Tpair::getmax()
{ Tretval;
/*****************found*****************/
retval=value1>value2??value1:value2;
returnretval; }
voidmain()
{ pairmyobject(100,75);
cout< 【參考答案】
(1)將char getmax ();改為:T getmax ();
(2)缺少模板的聲明,應(yīng)改為:template
(3)將retval = value1>value2?? value1 : value2;
改為:retval = value1>value2? value1 : value2;
【試題解析】
(1)主要考查對(duì)模板使用的理解,該函數(shù)屬于模板類定義的一
部分,對(duì)于返回值類型,應(yīng)該使用模板類名稱T,這樣編譯的時(shí)候才能被接受;
(2)主要考查是模板的使用,前面的模板類已經(jīng)聲明完成了,在類的外面定義類的成員函數(shù)時(shí)仍然需要使用模板的聲明,這樣在后面的函數(shù)定義體中才能使用模板類;
(3)主要考查對(duì)“表達(dá)式1? 表達(dá)式2 : 表達(dá)式3”語句的掌握,這個(gè)語句是一個(gè)復(fù)合語句,先計(jì)算第一個(gè)表達(dá)式,如果為真則整個(gè)式子值為表達(dá)式2的值,否則為表達(dá)式3的值,題目中錯(cuò)誤的使用了兩個(gè)問號(hào)。
二、簡單應(yīng)用題
請(qǐng)編寫函數(shù)fun(),其功能是將s所指字符串中除了下標(biāo)為奇數(shù)、同時(shí)ASCII值也為奇數(shù)的字符之外,其余的所有字符都刪除。字符串中剩余的字符所形成的一個(gè)新的字符串放在t所指的數(shù)組中。
例如:s所指字符串中的內(nèi)容為ABCDEFG12345,其中字符A的ASCII碼值雖為奇數(shù),但元素所在的下標(biāo)為偶數(shù),因此必需刪除;字符1的ASCII碼值為奇數(shù),所在數(shù)組中的下標(biāo)也為奇數(shù),不刪除,最后t所指的數(shù)組中的內(nèi)容應(yīng)是135。
請(qǐng)勿修改主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)su的花括號(hào)中填寫若干語句。
文件kt12_2.cpp的內(nèi)容如下:
#include
#include
#include
#include
voidfun(char*s,chart[])
{
}
voidmain()
{ chars[100],t[100];
cout<<"PleaseenterstringS:"< gets(s);
fun(s,t);
puts(t); }
【參考答案】
void fun(char *s,char t[ ])
{ int i,j=0,n;
n=strlen(s);
for(i=0;i if(i%2!=0&&s[i]%2!=0)
{ t[j]=s[i];j++;}
t[j]='\0'; }
【試題解析】
本體的解題思路是要先搞清楚在字符參與數(shù)值運(yùn)算時(shí),用的是其ASCII碼值來進(jìn)行計(jì)算。其次是判斷某數(shù)是奇數(shù)的方法,即判斷該數(shù)
與2的余數(shù)是否為0。
三、綜合應(yīng)用題
使用VC6打開考生文件夾下的工程kt12_3。此工程包含一個(gè)kt12_3.cpp,其中定義了類ARRAY,但類的定義并不完整。請(qǐng)按要求完成下列操作,將程序補(bǔ)充完整。
(1)完成類ARRAY的帶一個(gè)參數(shù)的構(gòu)造函數(shù),參數(shù)i為int型,如果i不是正數(shù)則輸出錯(cuò)誤信息并退出,否則申請(qǐng)int型的大小為i的空間,然后把i賦值給類的數(shù)據(jù)成員num。請(qǐng)?jiān)谧⑨尅?/**1**”之后添加適當(dāng)?shù)恼Z句。
(2)完成類ARRAY的拷貝初始化構(gòu)造函數(shù),注意解決重復(fù)刪除的問題,請(qǐng)?jiān)谧⑨尅?/**2**”之后添加適當(dāng)?shù)恼Z句。
(3)完成類ARRAY的重載的運(yùn)算符函數(shù)[],參數(shù)i為int型,如果i超界則輸出錯(cuò)誤信息并退出,否則把下標(biāo)為i的元素返回,請(qǐng)?jiān)谧⑨尅?/**3**”之后添加適當(dāng)?shù)恼Z句。
(4)完成類ARRAY的重載的運(yùn)算符函數(shù)=,同樣需要注意解決重復(fù)刪除的問題,不能只是簡單的賦值,請(qǐng)?jiān)谧⑨尅?/**4**”之后添加適當(dāng)?shù)恼Z句。
注意:除在指定位置添加語句之外,請(qǐng)不要改動(dòng)程序中的其他內(nèi)容。
源程序文件kt12_3.cpp清單如下:
#include
#include
classARRAY
{ private:
int*p,num;
public:
ARRAY(){p=newint[10],num=10;}
ARRAY(inti)
{ //**1**
{ cout<<"錯(cuò)誤!數(shù)組長度應(yīng)為正。\n";
exit(0); }
p=newint[i];
num=i; }
ARRAY(constARRAY&a);
int&operator[](inti);
~ARRAY(){deletep;}
ARRAY&operator=(constARRAY&a);
friendARRAYoperator+(ARRAY&a,ARRAY&b);
friendostream&operator<<(ostream&os,ARRAY&a); };
ARRAY::ARRAY(constARRAY&a)
{ //**2**
for(inti=0;i p[i]=a.p[i]; }
int&ARRAY::operator[](inti)
{ //**3**
{ cout<<"越界訪問!";
exit(0); }
returnp[i]; }
ARRAY&ARRAY::operator=(constARRAY&a)
{ num=a.num;
p=newint[num];
for(inti=0;i p[i]=a.p[i];
//**4** }
ARRAYoperator+(ARRAY&a,ARRAY&b)
{ if(a.num!=b.num)
{ cout<<"數(shù)組長度不相同!"< exit(0); }
ARRAYt(a.num);
for(inti=0;i t.p[i]=a.p[i]+b.p[i];
returnt; }
ostream&operator<<(ostream&os,ARRAY&a)
{ inti=0;
for(;i { cout< if(!((i+1)))cout< returnos; }
voidmain()
{ ARRAYa(3);
a[0]=a[1]=a[2]=3;
cout<<'a'< ARRAYb(a);
cout<<'b'< ARRAYc(2);
c=a+b+b;
cout<<'c'< c=((b=(a+b))+c);
cout<<'a'< a[7]=3;
cout< 【參考答案】
(1)if(i<=0)
(2)num=a.num;
p=new int[num];
(3)if(i>=num||i<0)
(4)return *this;
【試題解析】
主要考查對(duì)一個(gè)特殊的類--安全數(shù)組的掌握,其中涉及了友元函數(shù)、重載函數(shù)等,其中(2)中必需申請(qǐng)新的空間,這樣可以使得兩個(gè)對(duì)象分別占用不同的兩個(gè)空間,在自動(dòng)調(diào)用析構(gòu)函數(shù)時(shí)不會(huì)遇到重復(fù)刪除的問題,這種方法要掌握。
使用VC6打開考生文件夾下的工程kt12_1,此工程包含一個(gè)源程序文件kt12_1.cpp,但該程序運(yùn)行有問題,請(qǐng)改正函數(shù)中的錯(cuò)誤,使該程序的輸出結(jié)果為:
100
源程序文件kt12_1.cpp清單如下:
#include
template
classpair
{ Tvalue1,value2;
public:
pair(Tfirst,Tsecond)
{value1=first;value2=second;}
/*****************found*****************/
chargetmax(); };
/*****************found*****************/
Tpair::getmax()
{ Tretval;
/*****************found*****************/
retval=value1>value2??value1:value2;
returnretval; }
voidmain()
{ pairmyobject(100,75);
cout< 【參考答案】
(1)將char getmax ();改為:T getmax ();
(2)缺少模板的聲明,應(yīng)改為:template
(3)將retval = value1>value2?? value1 : value2;
改為:retval = value1>value2? value1 : value2;
【試題解析】
(1)主要考查對(duì)模板使用的理解,該函數(shù)屬于模板類定義的一
部分,對(duì)于返回值類型,應(yīng)該使用模板類名稱T,這樣編譯的時(shí)候才能被接受;
(2)主要考查是模板的使用,前面的模板類已經(jīng)聲明完成了,在類的外面定義類的成員函數(shù)時(shí)仍然需要使用模板的聲明,這樣在后面的函數(shù)定義體中才能使用模板類;
(3)主要考查對(duì)“表達(dá)式1? 表達(dá)式2 : 表達(dá)式3”語句的掌握,這個(gè)語句是一個(gè)復(fù)合語句,先計(jì)算第一個(gè)表達(dá)式,如果為真則整個(gè)式子值為表達(dá)式2的值,否則為表達(dá)式3的值,題目中錯(cuò)誤的使用了兩個(gè)問號(hào)。
二、簡單應(yīng)用題
請(qǐng)編寫函數(shù)fun(),其功能是將s所指字符串中除了下標(biāo)為奇數(shù)、同時(shí)ASCII值也為奇數(shù)的字符之外,其余的所有字符都刪除。字符串中剩余的字符所形成的一個(gè)新的字符串放在t所指的數(shù)組中。
例如:s所指字符串中的內(nèi)容為ABCDEFG12345,其中字符A的ASCII碼值雖為奇數(shù),但元素所在的下標(biāo)為偶數(shù),因此必需刪除;字符1的ASCII碼值為奇數(shù),所在數(shù)組中的下標(biāo)也為奇數(shù),不刪除,最后t所指的數(shù)組中的內(nèi)容應(yīng)是135。
請(qǐng)勿修改主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)su的花括號(hào)中填寫若干語句。
文件kt12_2.cpp的內(nèi)容如下:
#include
#include
#include
#include
voidfun(char*s,chart[])
{
}
voidmain()
{ chars[100],t[100];
cout<<"PleaseenterstringS:"< gets(s);
fun(s,t);
puts(t); }
【參考答案】
void fun(char *s,char t[ ])
{ int i,j=0,n;
n=strlen(s);
for(i=0;i if(i%2!=0&&s[i]%2!=0)
{ t[j]=s[i];j++;}
t[j]='\0'; }
【試題解析】
本體的解題思路是要先搞清楚在字符參與數(shù)值運(yùn)算時(shí),用的是其ASCII碼值來進(jìn)行計(jì)算。其次是判斷某數(shù)是奇數(shù)的方法,即判斷該數(shù)
與2的余數(shù)是否為0。
三、綜合應(yīng)用題
使用VC6打開考生文件夾下的工程kt12_3。此工程包含一個(gè)kt12_3.cpp,其中定義了類ARRAY,但類的定義并不完整。請(qǐng)按要求完成下列操作,將程序補(bǔ)充完整。
(1)完成類ARRAY的帶一個(gè)參數(shù)的構(gòu)造函數(shù),參數(shù)i為int型,如果i不是正數(shù)則輸出錯(cuò)誤信息并退出,否則申請(qǐng)int型的大小為i的空間,然后把i賦值給類的數(shù)據(jù)成員num。請(qǐng)?jiān)谧⑨尅?/**1**”之后添加適當(dāng)?shù)恼Z句。
(2)完成類ARRAY的拷貝初始化構(gòu)造函數(shù),注意解決重復(fù)刪除的問題,請(qǐng)?jiān)谧⑨尅?/**2**”之后添加適當(dāng)?shù)恼Z句。
(3)完成類ARRAY的重載的運(yùn)算符函數(shù)[],參數(shù)i為int型,如果i超界則輸出錯(cuò)誤信息并退出,否則把下標(biāo)為i的元素返回,請(qǐng)?jiān)谧⑨尅?/**3**”之后添加適當(dāng)?shù)恼Z句。
(4)完成類ARRAY的重載的運(yùn)算符函數(shù)=,同樣需要注意解決重復(fù)刪除的問題,不能只是簡單的賦值,請(qǐng)?jiān)谧⑨尅?/**4**”之后添加適當(dāng)?shù)恼Z句。
注意:除在指定位置添加語句之外,請(qǐng)不要改動(dòng)程序中的其他內(nèi)容。
源程序文件kt12_3.cpp清單如下:
#include
#include
classARRAY
{ private:
int*p,num;
public:
ARRAY(){p=newint[10],num=10;}
ARRAY(inti)
{ //**1**
{ cout<<"錯(cuò)誤!數(shù)組長度應(yīng)為正。\n";
exit(0); }
p=newint[i];
num=i; }
ARRAY(constARRAY&a);
int&operator[](inti);
~ARRAY(){deletep;}
ARRAY&operator=(constARRAY&a);
friendARRAYoperator+(ARRAY&a,ARRAY&b);
friendostream&operator<<(ostream&os,ARRAY&a); };
ARRAY::ARRAY(constARRAY&a)
{ //**2**
for(inti=0;i p[i]=a.p[i]; }
int&ARRAY::operator[](inti)
{ //**3**
{ cout<<"越界訪問!";
exit(0); }
returnp[i]; }
ARRAY&ARRAY::operator=(constARRAY&a)
{ num=a.num;
p=newint[num];
for(inti=0;i p[i]=a.p[i];
//**4** }
ARRAYoperator+(ARRAY&a,ARRAY&b)
{ if(a.num!=b.num)
{ cout<<"數(shù)組長度不相同!"< exit(0); }
ARRAYt(a.num);
for(inti=0;i t.p[i]=a.p[i]+b.p[i];
returnt; }
ostream&operator<<(ostream&os,ARRAY&a)
{ inti=0;
for(;i { cout< if(!((i+1)))cout< returnos; }
voidmain()
{ ARRAYa(3);
a[0]=a[1]=a[2]=3;
cout<<'a'< ARRAYb(a);
cout<<'b'< ARRAYc(2);
c=a+b+b;
cout<<'c'< c=((b=(a+b))+c);
cout<<'a'< a[7]=3;
cout< 【參考答案】
(1)if(i<=0)
(2)num=a.num;
p=new int[num];
(3)if(i>=num||i<0)
(4)return *this;
【試題解析】
主要考查對(duì)一個(gè)特殊的類--安全數(shù)組的掌握,其中涉及了友元函數(shù)、重載函數(shù)等,其中(2)中必需申請(qǐng)新的空間,這樣可以使得兩個(gè)對(duì)象分別占用不同的兩個(gè)空間,在自動(dòng)調(diào)用析構(gòu)函數(shù)時(shí)不會(huì)遇到重復(fù)刪除的問題,這種方法要掌握。