题目
●试题八
阅读以下说明和C++代码,将解答写入答题纸的对应栏内。
【说明】
源程序文件vectorClass.cpp,其中定义了用于表示向量的类vector,但类vector的定义并不完整。请按要求完成下列操作,将类vector的定义补充完整,并给出输出结果。
1.补充类vector的构造函数,该函数有参数x和y,它们都是int型的数据,默认值都为0。请使用参数列表的形式分别将类的数据成员a和b分别初始化为参数x和y的值。
2.完成类vector的成员函数input(int x,int y)的定义,将int型的参数x和y分别赋值给数据成员b和a。
3.完成类vector的友元函数friend double Multiply(vector &x,vector &y)的定义,先定义double型的临时变量c,然后将参数对象x和对象y的数据成员a与b分别相乘再相加后赋值给c,最后返回c的值。
注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。
源程序文件vectorClass.cpp清单如下:
#include <iostream.h>
class vector
{
int a;
int b;
public:
vector((1) ): (2)
{
}
void input(int x,int y)
{ (3)
}
void output()
{
cout<<'('<<a<<','<<b<<")"<<endl;
}
friend double Multiply(vector &x,vector &y);
};
double Multiply(vector &x,vector &y)
{
double c;
(4)
return c;
}
void main()
{
vector x(10,20),y;
double d;
y.input(2,3);
d=Multiply(x,y);
cout<<d<<endl;
}
程序输出结果是: (5) 。
第1题
试题六(共 15 分)
阅读以下说明和 C++代码,将应填入 (n) 处的字句写在答题纸的对应栏内。
[说明]
C++标准模板库中提供了 vector 模板类,可作为动态数组使用,并可容纳任意数据类型,其所属的命名空间为 std。vector模板类的部分方法说明如下表所示:
[C++代码]
include <iostream>
include <vector>
using namespace (1) ;
typedef vector< (2) > INTVECTOR;
const int ARRAY_SIZE = 6;
void ShowVector(INTVECTOR &theVector);
int main(){
INTVECTOR theVector;
// 初始化 theVector,将 theVector的元素依次设置为 0 至 5
for (int cEachItem = 0; cEachItem < ARRAY_SIZE; cEachItem++)
theVector.push_back((3) );
ShowVector(theVector); // 依次输出 theVector中的元素
theVector.erase(theVector.begin() + 3);
ShowVector(theVector);
}
void ShowVector(INTVECTOR &theVector) {
if (theVector.empty()) {
cout << "theVector is empty." << endl; return;
}
INTVECTOR::iterator (4) ;
for (theIterator = theVector.begin(); theIterator != theVector.end(); theIterator++){
cout << *theIterator;
if (theIterator != theVector.end()-1) cout << ", ";
}
cout << endl;
}
该程序运行后的输出结果为:
0, 1, 2, 3, 4, 5
(5)
第2题
●试题八
阅读下列函数说明和C代码,将应填入(n)处的字句写在答题纸的对应栏内。
【说明】
以下程序的功能是:从键盘上输入一个字符串,把该字符串中的小写字母转换为大写字母,输出到文件test.txt中,然后从该文件读出字符串并显示出来。
【程序】
#include<stdio.h>
main()
{FILE*fp;
charstr[100];inti=0;
if((fp=fopen("text.txt" (1) ))==NULL)
{printf("can't open this file.\n");exit(0);}
printf("input astring:\n");gest(str);
while(str[i])
{if(str[i]>=′a′ && str[i]<=′z′)
str[i]= (2) ;
fputc(str[i], (3) );
i++;
}
fclose(fp);
fp=fopen("test.txt", (4) );
fgets(str,100,fp);
printf("%s\n",str);
(5) ;
}
第3题
试题五(共 15分)
阅读以下说明和C++代码,将应填入 (n) 处的字句写在答题纸的对应栏内。
【说明】
已知类 LinkedList 表示列表类,该类具有四个方法:addElement()、lastElement()、umberOfElement()以及removeLastElement()。四个方法的含义分别为:
void addElement(Object): 在列表尾部添加一个对象;
Object lastElement(): 返回列表尾部对象;
int numberOfElement(): 返回列表中对象个数;
void removeLastElement(): 删除列表尾部的对象。
现需要借助LinkedList来实现一个Stack栈类,C++代码1和C++代码2分别采用继承和组合的方式实现。
【C++代码 1】
class Stack :public LinkedList{
public:
void push(Object o){ addElement(o); }; //压栈
Object peek(){ return (1) ; }; //获取栈顶元素
bool isEmpty(){ //判断栈是否为空
return numberOfElement() == 0;
};
Object pop(){ //弹栈
Object o = lastElement();
(2) ;
return o;
};
};
【C++代码 2】
class Stack {
private:
(3) ;
public:
void push(Object o){ //压栈
list.addElement(o);
};
Object peek(){ //获取栈顶元素
return list. (4) ;
};
bool isEmpty(){ //判断栈是否为空
return list.numberOfElement() == 0;
};
Object pop(){//弹栈
Object o = list.lastElement();
list.removeLastElement();
return o;
};
};
【问题】
若类LinkedList新增加了一个公有的方法removeElement(int index),用于删除列表中第index个元素,则在用继承和组合两种实现栈类Stack的方式中,哪种方式下Stack对象可访问方法removeElement(int index)? (5) (A. 继承 B. 组合)
第4题
●试题八
阅读以下说明和Java代码,将解答写入答题纸的对应栏内。
【说明】
下面的程序是从命令行输入3个数传递到public static void main(String args[])方法中(如 java IsTriangle 3 4 5),并判断这3个数能否构成三角形的3条边,并显示相应的结果。请在程序的每条横线处填入适当的语句,使程序的功能完整。
注意:请勿改动main()主方法和其他已有的语句内容,仅在横线处填入适当的语句。
public class IsTriangle{
public static void main(String args[]){
int a[]=new (1) [args. (2) ];
for(int i=0;i<3; (3) )
{
a[i]= (4)
}
if((5) )
System.out.println(a[0]+ ","+a[1]+ ","+a[2]"能构成三角形的3条边");
else
System.out.println(a[0]+ ","+a[1]+ ","+a[2] "不能构成三角形的3条边");
}
}
第5题
试题一(15 分)
阅读下列说明,回答问题1 至问题3,将解答填入答题纸的对应栏内。
[说明]
基本路径法设计出的测试用例能够保证在测试中程序的每一条可执行语句至少执
行一次。以下代码由C++语言书写,请按要求回答问题。
void ReadPara(CString temp )
{
if (temp == ">=" )
m_oper.SetCurSel(0 );
else
{
if (temp == ">" )
m_oper.SetCurSel(1 );
else
{
if (temp == "==" )
m_oper.SetCurSel(2 );
else
{
if (temp == "<=" )
m_oper.SetCurSel(3 );
else
{
if (temp == "<" )
m_oper.SetCurSel(4 );
else
m_oper.SetCurSel(5 );
}
}
}
}
return;
}
[问题1](6 分)
请画出以上代码的控制流图。
[问题2](3 分)
请计算上述控制流图的环路复杂度 V(G)。
[问题3](6 分)
请使用基本路径测试法为变量 temp 设计测试用例,使之满足基本路径覆盖要求。
第6题
●试题八
阅读以下说明和Java代码,将解答写入答题纸的对应栏内。
【说明】
下面的程序中定义了两个方法求自然数1~100的和。具体如下:int sum1(int n);利用循环求1~n的和,int sum2(int n);利用递归方法求和1~n的和;在main()方法中调用这两个方法求1~100的和并显示。在程序的每条横线处填写一个适当的语句,使程序的功能完整。
public class Sum{
public static void main (1)
{
//1.调用sum1(int n),求1~100的和
//标准输出
(2) ("1~100的和:"+sum1(100));
//2.调用sum2(int n),求1~100的和
//标准输出
(2) ("1~100的和:"+sum2(100));
}
static int sum1(int n)
{
int result=0;
for(int i=1;i<=n;i++)
(3)
retrun result;
}
static int sum2(int n)
{
if (4)
return 1;
else
(5)
}
}
第7题
●试题七
阅读以下说明和C++代码,将解答写入答题纸的对应栏内。
【说明】
请编写一个函数int SeqSearch(int list[],int start,int n,int key),该函数从start开始,在大小为n的数组list中查找key值,返回最先找到的key值的位置,如果没有找到则返回-1。请修改程序中画线部分的错误并将不同情况下的输出结果补充完整。
【程序】
文件search.cpp的内容如下:
#include <iostream.h>
int SeqSearch(int list[],int start,int n,int key)
{
for(int i=start;i<=n;i++)// (1)
{
if(list[i]=key) // (2)
{
return i;
}
}
return -1;
}
void main()
{
int A[10];
int key,count=0,pos;
cout<<" Enter a list of 10 integers: ";
for(pos=0;pos<10;pos++)
{
cin>>A; // (3)
}
cout<<"Enter a key: ";
cin>>key;
pos=0;
while((pos=SeqSearch(A,pos,10,key))!=-1)
{
count++;
pos++;
}
cout<<key<<" occurs "<<count<<(count!=1?" times":" time")<<" in the list."<<endl;
}
第一种情况:输入2 3 12 6 8 45 8 33 7 输入key:8
输出: (4)
第二种情况:输入2 3 12 6 8 45 8 33 7 输入key:9
输出: (5)
第8题
试题五(共15分)
阅读下列说明和C++代码,将应填入(n)处的字句写在答题纸的对应栏内。
【说明】
现欲开发一个软件系统,要求能够同时支持多种不同的数据库,为此采用抽象工厂模式设计该系统。以SQL Server和Access两种数据库以及系统中的数据库表Department为例,其类图如图5-1所示。
【C++代码】
include <iostream>
using namespace std;
class Department{/*代码省略*/};
class IDepartment{
public:
(1) =0;
(2) =0;
};
class SqlserverDepartment:(3){
public:
void Insert(Department* department){
cout <<"Insert a record into Department in SQL Server!\n";
∥其余代码省略
}
Department GetDepartment(int id){
/*代码省略*/
}
};
class AccessDepartment: (4) {
public:
void Insert(Department* department){
cout <<"Insert a record into Department in ACCESS!\n";
∥其余代码省略
}
Department GetDepartment(int id){
/*代码省略*/
}
};
(5){
public:
(6)=0;
};
class SqlServerFactory:public IFactory{
public:
IDepartment*CreateDepartment(){ return new SqlserverDepartment(); }
∥其余代码省略
};
class AccessFactory:public IFactory{
public:
IDepartment* CreateDepartment(){ return new AccessDepartment();}
∥其余代码省略
};
第9题
试题五(共15分)
阅读以下说明和 C++代码,将应填入 (n) 处的语句或语句成分写在答题纸的对应栏内。
【说明】
某数据文件students.txt的内容为100名学生的学号和成绩,下面的程序将文件中的数据全部读入对象数组,按分数从高到低进行排序后选出排名前 30%的学生。
【C++代码】
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
class Student {
private:
string sNO; //学号
int credit; //分数
public:
Student(string a,int b) { sNO = a; credit = b;}
Student(){}
int getCredit();
void out();
};
(1) ::getCredit() {
return credit;
}
(2) ::out() {
cout << "SNO: " << sNO << ", Credit=" << credit << endl;
}
class SortStudent {
public:
void sort(Student *s, int n);
SortStudent(){}
};
void SortStudent::sort(Student *s,int n) {
for(int i = 0; i < n-1; i++) {
for(int j = i+1; j < n; j++) {
if(s[i]. (3) < s[j]. (4) ) {
Student temp = s[i]; s[i] = s[j]; s[j] = temp;
}
}
}
}
int main(int argc, char* argv[])
{
const int number = 100; //学生总数
ifstream students;
students.open("students.txt");
if(!students.is_open()) {
throw 0;
}
Student *testStudent = (5) [number];
int k = 0;
string s;
while (getline(students,s,'\n')) { //每次读取一个学生的学号和成绩
Student student(s.substr(0,s.find(',')), atoi(s.substr(s.find(',')+1).c_str()));
testStudent[k++] = student;
}
students.close();
(6) ;
ss.sort(testStudent,k);
cout <<"top 30%: "<<endl;
for(k = 0; k < number * 0.3; k++) {
testStudent[k].out();
}
delete []testStudent;
return 0;
}
为了保护您的账号安全,请在“赏学吧”公众号进行验证,点击“官网服务”-“账号验证”后输入验证码“”完成验证,验证成功后方可继续查看答案!