阅读以下关于某绘图系统的技术说明、部分UML类图及C++程序,将C++程序中(1)~(6)空缺处的语句填写完整。
【说明】
某绘图系统存在Point、Line和Square这三种图元,它们具有Shape接口,图元的类图关系如图5-10所示。
现要将Circle图元加入此绘图系统以实现功能扩充。已知某第三方库已经提供XCircle类,且完全满足系统新增的Circle图元所需的功能,但XCircle不是由Shape派生而来,它提供了的接口不被系统直接使用。【C++代码5-1】既使用了XCircle又遵循了Shape规定的接口,即避免了从头开发一个新的Circle类,又可以不修改绘图系统中已经定义的接口。【C++代码5-2】根据用户指定的参数生成特定的图元实例,并对它进行显示操作。
该绘图系统定义的接口与XCircle提供的显示接口及其功能如表5-13所示。
【C++代码5-1】
class Circle: public (1) {
Private;
(2) m_circle;
Public;
void display(){
m_circle. (3)
}
};
【C++代码5-2】
class Factory{
public;
(4) getShapeInstance(int type){ //生成特定类实例
Switch(type){
case 0: return new Point;
case 1: return new Rectangle;
case 2: return new Line;
case 3: return new Circle;
default: return NULL;
}
}
};
void main(int argc, char *argv[]){
if(argc !=2){
cout<<"error parameters!"<<endl;
return;
}
int type=atoi(argv[1]);
Factory factory;
Shape *s;
s=factory.(5);
if(s==NULL){
cout<<"Error get the instance!"<<endl;
return;
}
s->display();
(6);
Return;
}
第1题
阅读以下应用说明及Visual Basic程序代码,将应填入(n)处的字句写在对应栏内。
【说明8.1】
以下程序的功能是:生成20个200~300之间的随机整数,输出其中能被5整除的数并求出它们的和。
【程序代码8.1】
Private Sub Command1_Click()
For i=1 To 20
x=Int((1)*200+100)
If (2)=0 Then
Print x
S=S+ (3)
End If
Next i
Print"Sum=";S
End Sub
【说明8.2】
程序8.2运行后,单击窗体,则在窗体上显示的内容是:a=(4)和b=(5)。
【程序代码8.2】
Private Sub Form_Click()
Dim a As Integer,b As Integer
a=20:b=50
p1 a,b
p2 a,b
p3 a,b
Print"a=";a,"b=";b
End Sub
Sub p1(x As Integer, ByValy As Integer)
x=x+l0
y=y+20
End Sub
Sub p2(ByVal×As Integer, y As Integer)
x=x+l0
y=y+20
End Sub
Sub p3(ByVal×As Integer, ByVal y As Integer)
x=x+10
y=y+20
End Sub
第2题
阅读下列程序说明和Visual Basic代码,将应填入(n)处的字句写在对应栏内。
[说明]
本程序提供了查询景点票价信息的功能,查询包括两种方式:按景点名称查询以及白定义查询。程序界面如下图所示:
其中,选择景点名称的组合框(Comobox)名为Combo1,单旋钮“旺季”和“淡季”分别名为Op- tion1和Option2,用于输入票价上限的文本框名为Texi1,两种查询方式的“提交”按钮分别名为 Command1和Command2。已知Combol列表中第i个景点的旺季票价和淡季票价分别存放于数组元素P(i,0)和p(i,1)中。
[Visual Basic代码]
Dim p(20, 2) As Single '通用声明
Private Sub Form_Load( )
For i = 0 To 9 '对p赋值
p(i, 0)=........ :p(i, 1)=.......
Next
End Sub
Private Sub Commandl_Click( ) '查询方式一:按景点名称查询
Dim cboTcxt As String
eboText =(1)
Fori = 0 To (2) -1 '对Combo1中各列表项循环
If (3)= cboText Then
MsgBox "景点名称" & cboText & "旺季票价" & p(i, 0) & _
",淡季票价" & p(i, 1)
Exit Sub
End If
Next i
End Sub
Private Sub Command2_Click( ) 查询方式二:自定义查询
Dim price As Single, result As String, flag As Boolean
price =Val( (4) )
flag = False
result = ""
For i = 0 To (2) - 1'对Combo1中列表项循环,找出符合条件的景点
If(Optionl. Value And p(i, 0) < = price) Or((5)) Then
(6)
result=result & "景点名称" &(3)& ",旺季票价:"&_
p(i, 0) & ",淡季票价:" & p(i, 1) & vbCrLf
End If
Next i
If flag Then
MagBox result
Else: Msgaox "没有找到符合条件的景点信息!"
End If
End Sub
第3题
阅读以下函数说明和C语言函数,将应填入(n)处的字句写在对应栏内。
【说明】
函数fun1 (int bb[])的功能是:在3位整数(100~999)中寻找符合条件的整数并依次从小到大存入数组中;它既是完全平方数,两位数字又相同,例如144、676等。
【函数2.11】
fun1 (int bb[])
{
int i, j, k=0, g, s, b;
for (i=100; i<=999; i++)
{
g=i%10;
(1)
b=i/100;
if ((i== (int) sqrt (i) * (int) sqrt (i)) && (g==s‖s==b‖b==g))
(2)
}
return k;
}
【函数2.2说明】
函数void fun2()的功能是:数组a中有300个四位数,求出数组a千位数上的数减百位数上的数减十位数上的数减个位数上的数大于零的个数CNT,再把所有满足此条件的四位数依次存入数组bb中,然后对数组bb的四位数按小到大的顺序进行排序。例如:9123,9-1-2-3>0,则该数满足条件存入数组bb中,且个数CNT=CNT+1,9812,9-8-1-2<0,则该数不满足条件,忽略。
【函数2.2】
void fun2 ( )
{
int q,b,s,g,i,j;
for (i=0;i<300;i++)
{q=a[i]/1000;
b=a[i]/100%10;
s=a[i]/10%10;
g=a[i]%10;
if (q-b-s-g>0)
(3)
}
for ( i=0;i<cnt-1;i++ )
for ( j=i+1;j<cnt;j++ )
if ( bb[i]>bb[j] )
{ (4)
bb[i]=bb[j];
(5)
}
}
第4题
下面的程序各自独立,请问执行下面的四个TestMemory 函数各有什么样的结果?
①void GetMemory(char * p)
{
p = (char * )malloc(100);
}
void TestMemory (void)
{
char *str = NULL;
GetMemory (str);
strcpy(str, "hello world");
prinff(str);
}
② char * GetMemory (void)
{
char p[ ] = "hello world";
return p;
}
void TestMemory (void)
{
char * str = NULL;
str = GetMemory( );
printf(str);
}
③void GetMemory(char * * p, int num)
{
* p = (char * )malloc(num);
}
void TestMemory (void)
{
char * str = NULL;
GetMemory(&str, 100);
strcpy( str, "hello" );
printf(sir);
}
④void TestMemory (void)
{
char *str = (char * )malloe(100);
strepy (str, "hello" );
free ( str );
if(str ! = NULL)
{
strepy( str, "world" );
printf(str);
}
}
第5题
阅读以下应用程序说明和C程序,将C程序段中(1)—(7)空缺处的语句填写完整。
[说明]
打保龄球是用一个滚球去打出10个站立的柱,将柱击倒。一局分10轮,每轮可滚球一次或多次,以击倒的柱数为依据计分。一局得分为10轮得分之和,而每轮的得分不仅与本轮滚球情况有关,还可能与后续一两轮的滚球情况有关。即某轮某次滚球击倒的柱数不仅要计入本轮得分,还可能会计入前一两轮得分。具体的滚球击柱规则和计分方法如下:
1) 若某一轮的第一次滚球击倒全部10个柱,则本轮不再滚球(若是第10轮则还需另加两次滚球)。该轮得分为本次倒柱数(即10)与以后两次滚球所击倒柱数之和。
2) 若某一轮的第一次滚球未击倒10个柱,则可对剩下未倒的柱再滚球一次。如果这两次滚球击倒全部10个柱,则本轮不再滚球(若是第10轮则还需另加一次滚球),该轮得分为本次倒柱数10与以后一次滚球所击倒柱数之和。
3) 若某一轮的两次滚球未击倒全部10个柱,则本轮不再继续滚球,该轮得分为这两次滚球击倒的柱数之和。
总之,若一轮中一次滚球或两次滚球击倒10个柱,则本轮得分是本轮首次滚球开始的连续3次滚球击倒柱数之和(其中有一次或两次不是本轮滚球)。若一轮内二次滚球击倒柱数不足10个,则本轮得分即为这两次击倒柱数之和。表3-15是打保龄球计分的某个实例说明。
以下[C程序]是模拟打一局保龄球的过程,统计各轮得分和累计总分。程序交互地逐轮逐次输入一次滚球击倒的柱数,计算该轮得分和累计总分。为记录一轮内击倒10柱,但还暂不能计算该轮得分和累计总分的情况,程序引入变量ok,用来记录当前已完成完整计算的轮次。程序每输入一次滚球击倒柱数,就检查还未完成完整计算的轮次,并计算。
[C程序]
include<stdio.h>
define N 13
struct { int n; /* 一轮内滚球次球 */
int f; /* 第一次击倒柱数 */
int s; /* 第一次击倒柱数 */
int score; /* 本轮得分 */
int total; /* 至本轮累计总分 */
int m; /* 完成本轮得分计算,还需滚球次数 */
} a[N];
int k = 0; /* 已完成完整计算的轮次数 */
int ball(int i, int n, int max) /* 完成一次滚球,输入正确击倒柱数 */
{ int d, j, k;
static c=1;
while (1)
{ if(i <= 10)
printf(" 输入第%d轮的第%d次滚球击倒柱数。(<=%d)\n", i, n, max );
else
printf(" 输入附加的第%d次滚球击倒柱数。(<=%d)\n", C++, max);
scanf("%d , &d);
if (d >=0 && d <= max) break;
printf(" 不合理的击倒柱数,请重新输入。\n")
)
if (ok <(1) )
{ /* 对以前未完成计算的轮次分别计算得分与累计总分*/
for(j = ok+1;(2); j++)
{ a[j].score += d;
if (--a[j].m == 0)
{ a[j].total = ( (3) ) + a[j].score;
k =(4);
}
}
}
return d;
}
main ( )
{ int i, first, second, k; /* i表示轮次 */
for ( i = 1 ; ok < 10 ; i++)
a[i].score = a[i].f = first = ball(i,1,10);
if ( first == 10)
a[i].m = 2;
a[i].n = 1;
if (first < 10 && (i <= 10 || i == 11 && ok < 10 ))
{ /* 处理第2次滚球 */
(5)= second = ball i,2,10-first);
if (first + second == 10)
a[i].m = 1;
第6题
假设该商务交流中心当前各个房间的情况如表2-14所示。
当输入M=3,R=0时,该算法的输出是(1)。
当输入M=2,R=1时,该算法的输出是(2)。
第8题
阅读以下说明,Java代码将应填入(n)处的字句写在对应栏内。
【说明】
链表和栈对象的共同特征是:在数据上执行的操作与在每个对象中实体存储的基本类型无关。例如,一个栈存储实体后,只要保证最后存储的项最先用,最先存储的项最后用,则栈的操作可以从链表的操作中派生得到。程序6-1实现了链表的操作,程序6-2实现了栈操作。
import java.io.*;
class Node //定义结点
{ private String m_content;
private Node m_next;
Node(String str)
{ m_content=str;
m_next=null; }
Node(String str,Node next)
{ m_content=str;
m_next=next; }
String getData() //获取结点数据域
{ return m_content;}
void setNext(Node next] //设置下一个结点值
{ m_next=next; }
Node getNext() //返回下一个结点
{ return m_next; )
}
【程序6-1】
class List
{ Node Head;
List()
{ Head=null; }
void insert(String str) //将数据str的结点插入在整个链表前面
{ if(Head==null)
Head=new Node(str);
else
(1)
}
void append(String str) //将数据str的结点插入在整个链表尾部
{ Node tempnode=Head;
it(tempnode==null)
Heed=new Node(str);
else
{ white(tempnode.getNext()!=null)
(2)
(3) }
}
String get() //移出链表第一个结点,并返回该结点的数据域
{ Srting temp=new String();
if(Head==null)
{ System.out.println("Errow! from empty list!")
System.exit(0); }
else
{ temp=Head.getData();
(4) }
return temp;
}
}
【程序6-2】
class Stack extends List
{ void push(String str) //进栈
{ (5) }
String pop() //出栈
{ return get();}
}
第9题
阅读下列程序说明和C程序,把应填入其中(n)处的字句,写在对应栏内。
【程序说明】
对角线下元素全为0的矩阵称为上三角矩阵,设对于一个n×n的上三角矩阵a,为节约存贮,只将它的上三角元素按行主序连续存放在数组b中。下面的函数trans在不引入工作数组的情况下,实现将a改为按列主序连续存放在数组b中。
设n=5,
b=(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15)
经调用trans函数后,b变为
b=(1,2,6,3,7,10,4,8,11,13,5,9,12,14,15)
函数tans对数组元素的存贮位置作调整。调整过程中存在若干个循环传送链:
b(i1)→b(i2)→b(ij)→b(i1)1≤j<n
例如,考察调整后的数组元素b(2)(值为6),与该元素相关的位置调整将形成下面的循环传送链:
b(2)→b(3)→b(6)→……→b(12)→b(9)→b(5)→b(2)
关键是确定循环传送链的下标i1,i2,…,ij,以及在考察调整后的元素b(k)(k;3,4,…)时能判定b(k)是已被传送过的某传送链上的元素。
函数ctr(k,n)计算调整后的数组b的第k个元素b(k)在原数组b中的位置,该位置作为函数ctr(k,n)的返回值。函数ctr根据k确定它在矩阵中的行号i和列号j(注意行号和列号均从 0算起),然后按矩阵存放原则计算出它在b中的位置。
【程序】
trans(b,n)
int n,b[]
{
int m,k,r,cc,rr;
int w;
m=(n+1)*n/2-4;
k=2;
while(m>0)
{
r=ctr(k,n);
if(r==k)
m--;
else
{
cc=k;rr=r;
while (1)
{
cc=rr,rr=ctr(cc,n);
}
if (2)
{
cc=k;rr=r;w=b[k];
while (3)
{
b[cc]=b[rr];m--;
cc=rr,rr=ctf(cc,n);
}
b[cc]-w; (4);
}
}
k++;
}
}
ctr( k,n )
int k,n
{
int i,j;
i=k;j=0;
while (5)
i - =++j ;
return(i*n+j-i*(i+1)/2);
}
第10题
阅读以下说明和C语言函数,将应填入(n)处的字句写在对应栏内。
【说明】
将A,B,C,D,E,F这6个变量排成如图(a)所示的三角形,这6个变量分别取[1,6]中的整数,且均不相同。求使三角形三条边上的变量之和相等的全部解。图(b)就是一个解。
程序引入变量a,b,c,d,e,f,并让它们分别顺序取1~6的整数,在它们互不相同的条件下,测试由它们排列成的如图(a)所示的三角形三条边上的变量之和是否相等,如果相等即为一种符合要求的排列,就输出它们。
【程序】
void main()
{ int a, b, c, d, e, f;
for(a=1;a<=6;a++)
for(b=1;b<=6;b++) {
if((1)) continue;
for(c==1;c<=6;c++) {
if((2))continue;
for(d=1;d<=6;d++) {
if((3)) continue;
for(e=1;e<=6;e++) {
if((4)) continue;
f=21-(a+b+c+d+e);
if((5)){
printf("%6d",a);
printf("%4d%4d",b,f);
printf("%2d%4d%4d",c,d,e);
scanf("%*c"); /*按回车键,继续找解*/
}
}
}
}
}
}
为了保护您的账号安全,请在“上学吧”公众号进行验证,点击“官网服务”-“账号验证”后输入验证码“”完成验证,验证成功后方可继续查看答案!