国家二级C++机试(操作题)模拟试卷518
基本操作题
1.请打开考生文件夹下的解决方案文件proj1,程序中位于每个“//ERROR****found****”之后的一行语句有错误,请加以改正。改正后程序的输出结果应为:Name:Smith Age:21 ID:99999 CourseNum:12 Record:970
注意:只修改每个“//ERROR****found****”下的那一行,不要改动程序中的其他内容。
#include<iostream>
using namespace std;
class StudentInfo
{
protected:
//ERROR*******found*******
char Name;
int Age;
int ID;
int CourseNum;
float Record;
public:
StudentInfo(char*name,intAge,int ID,int courseNum,float record);
//ERROR*******found*******
VOid~StudentInfo( ){}
float AVerageRecord( ){
return Record/CourseNum;
}
void show( )const{
cout<<\\
(1)char*Name;
(2)~StudentInfo( ){}
(3)Studentlnfo::Studentlnfo(char*name,int age,int ID,int courseNum,float record)
解析:(1)主要考查考生对动态数组的掌握,由题目可知Name应该指向一个动态数组,而不是一个有效char型字符,因此要定义成char型指针。
(2)主要考查考生对析构函数的掌握,析构函数不需要函数返回类型,应把void去掉。
(3)主要考查考生对构造函数定义的掌握,构造函数也要使用作用域符号“::”。
简单应用题
2.请打开考生文件夹下的解决方案文件proj2,其中有矩阵基类MatrixBase、矩阵类Matrix和单位阵UnitMatrix的定义,还有main函数的定义。请在横线处填写适当的代码并删除横线,以实现上述类定义。此程序的正确输出结果应为:
1 2 3 4 5
2 3 4 5 6
3 4 5 6 7
1 0 0 0 0 0
0 1 0 0 0 0
0 0 1 0 0 0
0 0 0 1 0 0
0 0 0 0 1 0
0 0 0 0 0 1
注意:只能在横线处填写适当的代码,不要改动程序中的其他内容,也不要删除或移动“//****found****”。
#include<iostream>
using namespace std;
//矩阵基础类,一个抽象类
class MatrixBase{
int rows,cols;
public:
MatrixBase(int rows,int cols):rows(rows),cols(cols){)
int getRows( )const{returnroows}//矩阵行数
int getCols( )const{returncols;}//矩阵列数
virtual double getElement(intr,int c)const=0;//取第i个元素的值
void show( )const{
//分行显示矩阵中所有元素
for(int i=0;i<rows;i++){
cout<<endl;
for(int j=0;J<cols;j++)
//**********found**********
cout<<_______<<\\
(1)getElement(i,j)
(2)MatrixBase(rows,cols)
(3)new double[rows*cols]
(4)r==c
解析:(1)主要考查考生对纯虚函数的掌握,函数功能是分行显示矩阵中所有元素。因此在这里要输出行为i、列为j的元素,使用纯虚函数getElement(i,j)实现,输出语句为cout<<getElemenl,(i,j)<<\\
综合应用题
3.请打开考生文件夹下的解决方案文件proj3,其中定义了用于表示特定数制的数的模板类Number和表示一天中的时间的类TimeOfDay;程序应当显示:
01:02:03.004
06:04:06.021
但程序中有缺失部分,请按照以下的提示,把缺失部分补充完整:
(1)在“//**1** ****found****”的下方是一个定义数据成员seconds的语句,seconds用来表示“秒”。
(2)在“//**2** ****found****”的下方是函数advanceSeconds中的一个语句,它使时间前进k秒。
(3)在“//**3** ****found****”的下方是函数advance中的一个语句,它确定增加k后n的当前值和进位,并返回进位。例如,若n的当前值是表示时间的55分,增加10分钟后当前值即变为5分,进位为1(即1小时)。
注意:只在指定位置编写适当代码,不要改动程序中的其他内容,也不要删除或移动“****found****”。填写的内容必须在一行中完成,否则评分将产生错误。
//proj3.cpp
#include<iostream>
#include<iomanip>
using namespace std;
template<intbase>//数制为base的数
class Number
{
int n;//存放数的当前值
public:
Number(int i):n(i){)//i必须小于base
int advance(int k);//当前值增加k
个单位
int value( )const{return n;}
//返回数的当前值
},
class TimeOfDay{
public:
Number<24>hours;//小时(0~23)
Number<60>minutes;//分(0~59)
//**1** ****found****
_______;//秒(0~59)
Number<1000>milliseconds;
//毫秒(0~999)
TimeOfDay(int h=0,intm=0,int s=0,int milli=0)
:hours(h),minuteS(m),seconds(S),milliseconds(milli){}
void advanceMillis(int k){advanceSeconds (milliseconds.advance(k));}//前进k毫秒
void advanceSeconds(int k)//前进k秒
{
//*
本文档预览:3600字符,共5159字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载