- 相關(guān)推薦
2016年計(jì)算機(jī)二級(jí)C++上機(jī)模擬試題
計(jì)算機(jī)二級(jí)C++考試按照新大綱需要學(xué)習(xí)的內(nèi)容有:C++語(yǔ)言概述、C++語(yǔ)言數(shù)據(jù)類型、運(yùn)算符和表達(dá)式、基本控制語(yǔ)句、數(shù)組、指針與引用、函數(shù)、類和對(duì)象繼承、模板等內(nèi)容。以下為大家整理了關(guān)于C++上機(jī)模擬考試題,希望能幫助到大家!
一、改錯(cuò)題
使用VC6 打開考生文件夾下的工程kt12_1 ,此工程包含一個(gè)源程序文件kt12_1.cpp ,但該程序運(yùn)行有問題,請(qǐng)改正函數(shù)中的錯(cuò)誤,使該程序的輸出結(jié)果為:
100
源程序文件kt12_1.cpp 清單如下:
#include
template
class pair
{
T value1,value2;
public:
pair(T first,T second)
{value1=first;value2=second;}
/*****************found*****************/
char getmax();
};
/*****************found*****************/
T pair::getmax()
{
T retval;
/*****************found*****************/
retval=value1>value2??value1:value2;
return retval;
}
void main()
{
pairmyobject(100,75);
cout<
}
【說明】題目里的#include
如果改為#include
using namespace std;
會(huì)導(dǎo)致該題目中的pair 與標(biāo)準(zhǔn)庫(kù)的pair 重名,而報(bào)錯(cuò)。
如果要改用標(biāo)準(zhǔn)庫(kù),則該題目pair 的名字需要修改例如改為pair1
【參考答案】
(1 )將char getmax (); 改為:T getmax ();
(2 )缺少模板的聲明,前面需要加上: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” 語(yǔ)句的掌握,這個(gè)語(yǔ)句是一個(gè)復(fù)合語(yǔ)句,先計(jì)算第一個(gè)表達(dá)式,如果為真則整個(gè)式子值為表達(dá)式2 的值,否則為表達(dá)式3 的值,題目中錯(cuò)誤的使用了兩個(gè)問號(hào)。
#include
using namespace std;
template
class pair1
{
T value1,value2;
public:
pair1(T first,T second)
{value1=first;value2=second;}
/*****************found*****************/
T getmax();//char getmax();
};
/*****************found*****************/
template T pair1::getmax()//T pair1::getmax()
{
T retval;
/*****************found*****************/
retval=value1>value2?value1:value2;//retval=value1>value2??value1:value2;
return retval;
}
void main()
{
pair1myobject(100,75);
cout<
}
二、簡(jiǎn)單應(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ù)fun 的花括號(hào)中填寫若干語(yǔ)句。
文件kt12_2.cpp 的內(nèi)容如下:
#include
#include//#include
#include
#include//#include
using namespace std;
void fun(char*s,char t[])
{
}
void main()
{
char s[100],t[100];
cout<<"Please enter string S:"<
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 。
【調(diào)試過程】
#include
#include//#include
#include
#include//#include
using namespace std;
void fun(char*s,char t[])
{
int len,j=0,m;
len=strlen(s);
// cout<
// t[0]=len;// 已經(jīng)檢查可以這樣賦值
// t[0]='a';
// t[3]='c';
for(int i=1;i
{
// 檢測(cè)ASCII 是否為奇數(shù),如果是奇數(shù)就賦值給t[j]
if(s[i]%2==1){t[j]=s[i];j++;}//if(((int)s[i])%2==1){t[j]=s[i];j++;}
// 檢測(cè)字符串s 是否結(jié)束,如果是就將t[j] 除了有內(nèi)容以外的后面的都賦值為空NULL
}
// cout<
//cout<
/* int m;
m=s[0]%2;
cout<
*/
/* int ascii;
char a = 'c';
ascii = (int)a;
cout<
*/
/* int ascii;
char a = s[0];
ascii = (int)a;
cout<
*/
m=j;
for(int k=m;k<100;k++)// 之前k=len 先只嘗試將比s 長(zhǎng)的后面都賦值為空NULL
{
t[j]=NULL;
j++;
}
}
void main()
{
char s[100],t[100];
cout<<"Please enter string S:"<
gets(s);
fun(s,t);
puts(t);
}
【優(yōu)化答案】
三、綜合應(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)谧⑨?ldquo;//**1** ”之后添加適當(dāng)?shù)恼Z(yǔ)句。
(2 )完成類ARRAY 的拷貝初始化構(gòu)造函數(shù),注意解決重復(fù)刪除的問題,請(qǐng)?jiān)谧⑨?ldquo;//**2** ”之后添加適當(dāng)?shù)恼Z(yǔ)句。
(3 )完成類ARRAY 的重載的運(yùn)算符函數(shù)[] ,參數(shù)i 為int 型,如果i 超界則輸出錯(cuò)誤信息并退出,否則把下標(biāo)為i 的元素返回,請(qǐng)?jiān)谧⑨?ldquo;//**3** ”之后添加適當(dāng)?shù)恼Z(yǔ)句。
(4 )完成類ARRAY 的重載的運(yùn)算符函數(shù)= ,同樣需要注意解決重復(fù)刪除的問題,不能只是簡(jiǎn)單的賦值,請(qǐng)?jiān)谧⑨?ldquo;//**4** ”之后添加適當(dāng)?shù)恼Z(yǔ)句。
注意:除在指定位置添加語(yǔ)句之外,請(qǐng)不要改動(dòng)程序中的其他內(nèi)容。
源程序文件kt12_3.cpp 清單如下:
#include
#include
class ARRAY
{
private:
int *p,num;
public:
ARRAY(){p=new int[10],num=10;}
ARRAY(int i)
{ //**1**
{ cout<<" 錯(cuò)誤! 數(shù)組長(zhǎng)度應(yīng)為正。\n";
exit(0);
}
p=new int[i];
num=i;
}
ARRAY(const ARRAY &a);
int &operator[](int i);
~ARRAY(){delete p;}
ARRAY &operator=(const ARRAY &a);
friend ARRAY operator+(ARRAY &a,ARRAY &b);
friend ostream& operator<<(ostream &os,ARRAY &a);
};
ARRAY::ARRAY(const ARRAY &a)
{
//**2**
for(int i=0;i
p[i]=a.p[i]; }
int &ARRAY::operator[](int i)
{ //**3**
{
cout<<" 越界訪問!";
exit(0);
}
return p[i];
}
ARRAY &ARRAY::operator=(const ARRAY &a)
{
num=a.num;
p=new int[num];
for(int i=0;i
p[i]=a.p[i];
//**4**
}
ARRAY operator+(ARRAY &a,ARRAY &b)
{
if(a.num!=b.num)
{
cout<<" 數(shù)組長(zhǎng)度不相同!"<
exit(0);
}
ARRAY t(a.num);
for(int i=0;i
t.p[i]=a.p[i]+b.p[i];
return t;
}
ostream &operator<<(ostream &os,ARRAY &a)
{
int i=0;
for(;i
{
cout<
if(!((i+1)%10))cout<
return os; }
void main()
{ ARRAY a(3);
a[0]=a[1]=a[2]=3;
cout<<'a'<
ARRAY b(a);
cout<<'b'<
ARRAY c(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ù)刪除的問題,這種方法要掌握。
這里頭文件如果改為:#include
#include 會(huì)報(bào)錯(cuò)。fatal error C1001: INTERNAL COMPILER ERROR
(compiler file 'msc1.cpp', line 1786)
error C2433 :'ostream' : 'friend' not permitted on data declarations
#include
#include
class ARRAY
{
private:
int *p,num;
public:
ARRAY(){p=new int[10],num=10;}
ARRAY(int i)
{ //**1**
if(i<=0)
{ cout<<" 錯(cuò)誤! 數(shù)組長(zhǎng)度應(yīng)為正。\n";
exit(0);
}
p=new int[i];
num=i;
}
ARRAY(const ARRAY &a);
int &operator[](int i);
~ARRAY(){delete p;}
ARRAY &operator=(const ARRAY &a);
friend ARRAY operator+(ARRAY &a,ARRAY &b);
friend ostream& operator<<(ostream& os,ARRAY& a);
};
ARRAY::ARRAY(const ARRAY &a)
{
//**2**
num=a.num;
p=new int[num];
for(int i=0;i
p[i]=a.p[i]; }
int &ARRAY::operator[](int i)
{ //**3**
if (i>=10||i<0)
{
cout<<" 越界訪問!";
exit(0);
}
return p[i];
}
ARRAY &ARRAY::operator=(const ARRAY &a)
{
num=a.num;
p=new int[num];
for(int i=0;i
p[i]=a.p[i];
//**4**
return *this;
}
ARRAY operator+(ARRAY &a,ARRAY &b)
{
if(a.num!=b.num)
{
cout<<" 數(shù)組長(zhǎng)度不相同!"<
exit(0);
}
ARRAY t(a.num);
for(int i=0;i
t.p[i]=a.p[i]+b.p[i];
return t;
}
ostream &operator<<(ostream &os,ARRAY &a)
{
int i=0;
for(;i
{
cout<
if(!((i+1)%10))cout<
return os; }
void main()
{ ARRAY a(3);
a[0]=a[1]=a[2]=3;
cout<<'a'<
ARRAY b(a);
cout<<'b'<
ARRAY c(2);
c=a+b+b;
cout<<'c'<
c=((b=(a+b))+c);
cout<<'a'<
a[7]=3;
cout<
}
【計(jì)算機(jī)二級(jí)C++上機(jī)模擬試題】相關(guān)文章:
全國(guó)計(jì)算機(jī)二級(jí)《C++》上機(jī)試題及答案08-15
計(jì)算機(jī)二級(jí)C++模擬試題及答案09-22
2016計(jì)算機(jī)二級(jí)《C++》上機(jī)練習(xí)題06-09
計(jì)算機(jī)二級(jí)考試C++語(yǔ)言程序設(shè)計(jì)上機(jī)考試試題05-10
計(jì)算機(jī)二級(jí)《Java》上機(jī)試題及答案11-01
計(jì)算機(jī)二級(jí)VF上機(jī)模擬題05-23
2016計(jì)算機(jī)二級(jí)考試《Access》上機(jī)試題09-07