填空题【说明】 以下程序实现了利用鼠标任意移动该圆形的位置,仔细阅读代码和相关注释,将程序补充完整。 【代码6】 import java.awt.*; import java.awt.event.*; public class CIUSAMPLE extends Frame implements MouseMotionListener, MouseListener static CIUSAMPLE frm=new CIUSAMPLE (); int x=70,y=60,posX=70,posY=60,dx,dy; public static void main ( String args[]) frm.setTitle ("Dragging a circle"); frm.setSize ( 200,150 ); (1) frm.addMouseMotionListener ( frm ); frm. setVisible ( true ); public void mousePressed ( MouseEvent e ) (2) dy=e.getY () -posY; public void mouseDragged ( MouseEvent e ) (3) y=e.getY () -dy; if ( dx>0 (4) public void paint ( Graphics g ) g.setColor ( Color. pink ); // 设置绘图颜色为粉红 g.fillOval ( x,y,50,50 ); //以基准点为图形的左上角绘出圆形 (5) posY=y; public void mouseMoved ( MouseEvent e ) public void mouseReleased ( MouseEvent e ) public void mouseEntered ( MouseEvent e ) public void mouseExited ( MouseEvent e ) public void mouseClicked ( MouseEvent e )
填空题[说明] 下面程序定义了一个类Point及其成员函数,然后从类Point派生出类Circle及其成员函数。 [C++程序] //POINT. H #ifndef POINT_H # define POINT_H class Point public: Point (float x=0,float y=0) ; void setPoint (float, float) ; float getX () const return x; float getY () const return y; protected: float :x,y; ; #endif //POINT.CPP #include <iostream.h> #include " point .h " Point :: Point (float a, float b) x=a; y=b void Point::setPoint(float a,float b) x=a; y=b //CIRCLE . H #ifndef CIRCLE_H #define CIRCLE_H #include "point.h" class Circle: (1) public : Circle (float r=0.0, float x=0, float y=0) ; void setRadius (float) ; float getRadius () const; float area() const; protected: float radius; ; //CIRCLE.CPP #include "iostream.h" #include "circle .h " Circle::Circle(float r,float a,float b) : (2) radius=r; void Circle::setRadius (float r) radius=r; float Circle::getRadius () const return radius; float Circle::area () const return 3 .14159*radius*radius ; //text.cpp #include <iostream.h> #include " point .h " #include " circle .h " main () Circle c(2.5,3.7,4.3) ; cout<< "X coordinate is "<<c.getX () <</n Radius is: "<<c.getRadius (); (3) ; //设置新的圆心 (2,2) 。 Point &pRef=c; cout<<"/n Circle printed as a point is:" <<"]"<< (4) <<"."<< (5) <<"]";
填空题阅读以下函数说明和C语言函数,将应填入{{U}} (n) {{/U}}处的字句写在对应栏内。 [说明1] 函数void fun(char*w,char x,int*n)用来在w数组中插入x,w数组中的数已按由小到大顺序存放,n指存储单元中存放数组中数据的个数,插入后数组中的数仍有序。 [C函数1] void fun(char*W,char x,int*n) { int i,P; p=0; w[*n]=x; while(x>w[p]){{U}} (1) {{/U}}; for(i=*n,i>p;i--)w[i]={{U}} (2) {{/U}}; w[p]=x; ++*n; } [说明2] 函数void revstr(char*s)将字符串s逆置。例如:字符串“abcde”,经过逆置后变为“edcba”。 [C函数2] void revstr(char*s) { char*p,c; if(s==NULL)return; p={{U}} (3) {{/U}}; /*p指向字符串s的最后一个有效字符*/ while(s<p){ /*交换并移动指针*/ C=*s; {{U}} (4) {{/U}}=*p; {{U}} (5) {{/U}}=c; } }
填空题已知类Stock和类JavaMain都定义在JavaMain.java文件中,类Stock的定义中有四处错误,分别在代码的第01、02、06、07行。请修改错误并给出修改后该行的完整代码,并写出改正错误后程序运行的输出结果。
填空题[说明]
若S和T是用结点大小为1的单链表存储的两个串,试设计一个算法找出S中第一个不在T中出现的字符。查找过程是这样的,取S中的一个字符(结点),然后和T中所有的字符一一比较,直到比完仍没有相同的字符时,查找过程结束,否则再取S中下一个字符,重新进行上述过程。
[函数]
typedef struct node {
char data;
struct node *next;
}LinkStrNode; //结点类型
typedef LinkStrNode *LinkString; //LinkString 为链串类型
LifikString S; //S 是链串的头指针
char SearchNoin ( LinkString S, LinkString T )
{//查找不在T中出现的字符
LinkStrNode *p, *q;
{{U}} (1) {{/U}};
q=T;
while ({{U}} (2) {{/U}})
{//取S中结点字符
while({{U}} (3) {{/U}})//进行字符比较
q=q->next;
if(q==NULL) return {{U}}(4) {{/U}};//找到并返回字符值
q=T;//指针恢复串T的开始结点
({{U}} (5) {{/U}});
}
printf("there's no such character.");
return NULL:
}
填空题【说明】下列流程图(如图4所示)用泰勒(Taylor)展开式sinx=x-x3/3!+x5/5!-x7/7!+…+(-1)n×x2n+1/(2n+1)!+…【流程图】计算并打印sinx的近似值。其中用ε(>0)表示误差要求。
填空题阅读以下函数说明和C语言函数,将应填入 (n) 处的字句写在对应栏内。 [说明] 某银行共发出M张储蓄卡,每张储蓄卡拥有唯一的卡号,每天每张储蓄卡至多支持储蓄卡持有者的N笔“存款”或“取款”业务。程序中用数组card[M][N+3]中的每一行存放一张储蓄卡的有关信息,其中: card[i][0]存放第i张卡的卡号; card[i][1]存放第i张卡的余额; card[i][2]存放第i张卡的当日业务实际发生笔数; card[i][3]~card[i][N+2]存放第i张卡的当日存取款金额,正值代表存款,负值代表取款。 当持卡者输入正确的卡号、存款或取款金额后,程序进行相应的处理;若输入不正确的数据,程序会提示持卡者重新输入;若输入的卡号为负数时,银行终止该卡的当日业务。 [C程序] #include<stdio.H> #define M 6 #define N 5 long card[M][N+3]=9801,2000,0,,9812,2000,2,,9753,3000,1,, 8750,500,0,,9604,2800,3,),(8901,5000,5,; int locate(long card[][N+3],int m,long no) int i; for(i=0;i<m;i++) if( (1) ==no) return i; (2) ; main() long cardNo,money; int k; while(1) printf("请输入卡号:/n"); scanf("%1d", if(cardNo<0) break; k=locate(card,M,cardNo); if(k==-1) printf("不存在%id号的储蓄卡/n",cardNo); continue; printf("请输入金额(正值代表存款,负值代表取款):/n"); scanf("%id", if(card[k][1]+money<0) printf("存款余额不足,不能完成本次的取款业务/n"); continue; if(card[k][2]==N) printf("已完成本卡的当日业务/n"); continue; /*处理一笔业务的数据*/ card[k] (3) =money; (4) ; (5) ;
填空题阅读以下说明和C++程序,将应填入{{U}} (n) {{/U}}处的字句写在对应栏内 [说明] 以下程序的功能是计算三角形、矩形和正方形的面积并输出。 程序由4个类组成:类Triangle,Rectangle和Square分别表示三角形、矩形和正方形;抽象类Figure提供了一个纯虚拟函数getArea(),作为计算上述三种图形面积的通用接口。 [C++程序] #include<iostream.h> #include<math.h> class Figure{ public: virtual double getArea()=0; //纯虚拟函数 }; class Rectangle:{{U}} (1) {{/U}}{ protected: double height; double width; public: Rectangle(){}; Rectangle(double height,double width){ This->height=height; This->width=width; } double getarea(){ return{{U}} (2) {{/U}}; } }; class Square:{{U}} (3) {{/U}} public: square(double width){ {{U}} (4) {{/U}}; } }; class triangle:{{U}} (5) {{/U}}{ double la; double lb; double lc; public: triangle(double la,double lb,double lc){ this->la=la;thiS->ib;this->lc; } double getArea(){ double s=(la+lb+lc)/2.0; return sqrt(s*(s-la)**(s-lb)*(s-lc)); } }; viod main(){ figure*figures[3]={ new triangle(2,3,3),new Rectangle(5,8),new Square(5)}; for(int i=0; i<3;i++){ cout<<"figures["<<i<<"]area="<<(figures)->getarea()<<endl; } } };
填空题[说明] 下面程序是一个小型公司工资管理的程序。该公司主要有4类人员:经理、兼职技术人员、销售员和销售经理。基类为employee,由它派生出technician类,manager类,salesman类,最后由manager类和salesman类派生出salesmanager类。月工资计算办法是:经理拿固定月薪8000;兼职技术人员按每小时100元领取月薪; 销售按当月销售额的4%提成; 销售经理既拿固定月工资也领取销售提成,固定月工资5000元,销售提成为所管辖部门当月销售总额的0.5%。 [C++程序] #include<iostream.h> #include<string.h> class employee protected: int no; char name [10] ; float salary; public : employee () cout<< "职工编号: " ; cin>>no ; cout<<"职工姓名:"; cin>>name ; salary= 0 ; void pay () void display () ; class technician:public employee private : float hourlyrate; int workhours; public : technician() hourlyrate=100; void pay () cout<<name本月工作时数: " ; cin>>workhours ; salary=hourlyrate*workhours; void display () cout<<"兼职技术人员"<<name<<"(编号为"<<no/ <<")"<<"本月工资:"<<salary<<endl; ; class salesman: (1) protected: float commrate; float sales; public: salesman() commrate=0.04; void pay() cout<<name<<"本月销售额:"; cin>>sales; salary= (2) ; void display() cout<<"销售额"name<<"(编号"<<no<</ <<")"<<"本月工资:"<<salary<<endl; ; class manager: (3) protected: float monthlypay; public: manager()monthlypay=8000; void pay()salary=monthlypay; void display() cout<<"经理"<<name<<"(编号为"<<no/ <<")"<<"本月工资:"<<salary<<endl; ; class salesmanager: (4) public: salesmanager() monthlypay=5000; commrate=0.005; void pay() cout<<name<<"所管部门月销售量:"; cin>>sales: salary= (5) ; void display() cout<<"销售经理"<<name<<"(编号为"<<no/ <<")"<<"本月工资:"<<salary<<endl; ;
填空题【说明】 以下程序的功能是计算正方体、球体和圆柱体的表面积和体积并输出。 程序由4个类组成:类cube、sphere和cylinder分别表示正方体、球体和圆柱体;抽象类 container为抽象类,提供了两个纯虚拟函数surface_area()和volum(),作为通用接口。 【C++程序】 #include<iostream.h> #define pi 3.1416 class container{ protected: double radius; public: container(double radius) container::radius=radius; virtual double surface_area()=0; virtual double velum()=0; ; class cube: (1) //定义正方体类 public: cube(double radius):container(radius); double surface_area () return 6 * radius * radius; double volum() return radius * radius * radius; ; class sphere: (2) //定义球体类 public: sphere(double radius): container(radius); double surface_area() return (3) ; double volum() return pi * radius * radius * radius * 4/3; ; class cylinder: (4) //定义圆柱体类 double height; public: cylinder(double radius,double height):container(radius) container::height=height; double surface_are a () return 2 * pi * radius * (height+radius); double volum () return (5) ; ; void main() container * p; cube obj1 (5); sphere obj2(5); cylinder obj3(5,5); p= cout<<“正方体表面积”(<<p->surface_area()<<end1; cont<<“正方体体积”<<p->volume()<<end1; p= cout<<“球体表面积”<<p->surface_area()<<end1; cout<<“球体体积”<<p->volume()<<end1; p= cout<<“球体表面积”<<p->surface_area()<<end1; cout<<“球体体积”<<p->volume()<<end1;
填空题【说明】
以下程序为求行列式X(5,5)的值S。
【Visual Basic代码】
Private Function col ( byval x ( 5,5 ) as integer ) as long
dim fesult as long
dim temp as long
dim I as integer
dim j as integer
dim k as imeger
result = 0
for I = to 5
{{U}}(1) {{/U}}
for j = 1 to 5
if I+j>6 then
k= ( 1+j ) mod 5
else
k=1
endif
temp=temp*x ( k,j )
{{U}} (2) {{/U}}
result={{U}} (3) {{/U}}
{{U}}(4) {{/U}}
{{U}}(5) {{/U}}
End function
填空题[函数8.1说明]
现考虑编写一个扑克游戏:只用一副无大小王的扑克,扑克的花色(suit)分为Spade、Heart、Diamond和Club,每门花色的牌共13张,面值(rank)分别为2、3、4、5、6、7、8、9、10、Jack、Queen、King和Ace,每张扑克牌应包含如下信息:惟一的ID号(1~52)、花色、面值、背面图案的编号等。每张扑克牌的操作有:判断两张扑克牌是相同花色吗?相同面值吗,判断一张扑克牌是给定的花色吗?是给定的面值吗?请补充扑克牌类Card类的声明和实现代码,要求选取适当形式的数据成员描述每张扑克牌的信息,同时以成员函数的形式实现指定的操作。
[C++程序]
const enum SUIT {SPADE=0,HEART,DIAMOND,CLUB};
const enum RANK{TWO=0 THREE,FOUR,FIVE,SIX,SEVEN,EIGHT,NINE,TEN,JACK,QUEEN,KING,ACE};
class Card。
{
public:
{{U}} (1) {{/U}}(int id):mID (id),mSuit((id 1)/13),mRank((id-1)%13) {}
bool IsSameSuit (const Card
int b;
public:
vector (int x=0,int y=0):a(x),b(y){}
double operator*({{U}} (4) {{/U}})
{
double c;
{{U}} (5) {{/U}};
return c;
}
void input (int x, int y)
{a=x;
b=y;
}
void output ()
{cout<<'('<<a<<',' <<b<<") "<<end1;
}
};
void main()
{
vector x(10,20),y; //定义x, y, z三个矢量类对象,并将x置初值(10,20)
doubled;//定义实数d以存放点乘结果
y. input (2,3); //给y赋值为(2,5)
d=x*y;//两矢量点乘
x. output (); //输出矢量x
y. output (); //输出矢量y
cout<<d<<end1; //输出点乘结果
}
填空题【说明】
下面程序的功能是找出所有三位数中,个、十、百位数字的立方和等于该数本身的三位数并显示。在程序的每条横线处填写一个适当的词或语句,使程序的功能完整。
public{{U}} (1) {{/U}}class cube_Root {
public static void{{U}} (2) {{/U}}main(String args[]) {
System. out. println ("个、十、百位数字的立方和等于该数本身的三位数有:");
for(int n=100;n<1000;n++)
{
int a,b,c;
{{U}} (3) {{/U}}
b=n/10%10;
{{U}} (4) {{/U}}
if({{U}} (5) {{/U}})
System.out.println(n);
}
}
}
填空题[函数说明3.1]假设两个队列共享一个循环向量空间(参见右图),其类型Queue2定义如下:typedefstructDateTypedata[MaxSize];intfront[2],rear[2];Queue2;对于i=0或1,front[i]和rear[i]分别为第i个队列的头指针和尾指针。函数EnQueue(Queue2*Q,inti,DateTypex)的功能是实现第i个队列的入队操作。[函数3.1]intEnQueue(Queue2*Q,inti,DateTypex)//若第i个队列不满,则元素x入队列,并返回1;否则返回0。if(i<0||i>1)return0:if(Q->rear[i]==Q->front[(1)])return0:Q->data[(2)]=x;Q->rear[i]=[(3)];return1:[函数说明3.2]函数BTreeEqual(BinTreeNode*T1,BinTreeNode*T2)的功能是用递归法判断两棵二叉树是否相等,若相等则返回1,否则返回0。函数中参数T1和T2分别为指向这两棵二叉树根结点的指针。当两棵树的结构完全相同并且对应结点的值也相同时才被认为相等。已知二叉树中的结点类型BinTreeNode定义为:structBinTreeNodechardata;BinTreeNode*left,*right;;其中data为结点值域,left和right分别为指向左、右子女结点的指针域。[函数3.2]intBTreeEqual(BinTreeNode*T1,BinTreeNode*T2)if(T1==NULL&&T2==NULL)return1;//若两棵树均为空则相等elseif((4))return0;//若一棵为空一棵不为空则不等elseif((5))return1;//若根结点值相等并且左、右子树//也相等则两棵树相等,否则不等elsereturn0:
填空题阅读以下函数说明和C语言函数,将应填入{{U}} (n) {{/U}}处的字句写在对应栏内。 [说明] 已知一棵二叉树用二叉链表存储,t指向根结点,p指向树中任一结点。下列算法为输出从t到P之间路径上的结点。 [C程序] #define Maxsize 1000 typedef struct node{ TelemType data; struct node*1child,*rchild; }BiNode,*BiTree; void Path(BiTree t,BiNode*P) { BiTree*stack[Maxsize],*stackl[Maxsize],*q; int tag[Maxsize],top=0,topl; q=t; /*通过先序遍历发现P*/ do(while(q!=NULL stack[top]=q; tag[top]=0; {{U}} (2) {{/U}}; } if(top>0) { if(stack[top]==P) break; /*找到P,栈底到栈顶为t到P*/ if(tag[top]==1)top--; else{q=stack[top]; q=q->rchild; tag[top]=1; } } } {{U}}(3) {{/U}}; top--; topl=0; while(top>0){ q=stack[top]; /*反向打印准备*/ topl++; {{U}} (4) {{/U}}; top--; } while({{U}} (5) {{/U}}){ /*打印栈的内容*/ q=stackl[topl]; printf(q->data); topl--; } }
填空题【说明】 以下代码实现了当用户退出界面时,判断TextEdit中的文字是否发生改变,弹出对话框判断,让用户选择是否保存文件或取消退出界面操作。阅读下面的代码,将其补充完整。 【代码7-1】 Begin VB.Form Forml //...窗体描述(略) Begin VB.TextBox TextEdit Height = 1830 Left = 180 Tablndex = 0 Text = "TextEdit" Top = 360 Width = 3885 End //...窗体描述(略) End 【代码7-2】 Dim txtchange As Boolean Dim myval As String Private Sub Form Load () TextEdit.Text: "CIU, 中国软考联盟!" txtchange = False End Sub 【代码7-3】 Private Sub TextEdit_Change () Static notchange As Boolean (1) notchange = Tree End Sub Private Sub Form_Unload ( Cancel As Integer ) Dim myval As String If (2) Then myval = MsgBox ( "保存文件的更改吗?", vbYesNoCancel, "提示信息" ) If (3) Then MsgBox "保存成功" End End If If (4) Then End If (5) Then Cancel = 1 End If End Sub
填空题[说明1]下面[C程序代码1]的设计意图是:计算1~100各数的平方。运行该段代码后,没有得到应有的运算结果。[C程序代码1]
填空题阅读以下函数说明和C语言函数,将应填入 (n) 处的字句写在对应栏内。 [说明] 该程序从正文文件test.txt中读入一批整数,并将它们按照递增的顺序存放在一个链表中。其中,函数struct Link*insertChain(struct Link*head,structLink*k)用来寻找结点k在链表head中的插入位置,并插入该结点。 [C程序] #include <stdio.h> #include <stdlib.h> struct Link int number; struct Link *next; struct Link *insertChain(struct Link *head,struct Link *k); VOid main() struct Link *ptr, *head; FILE *fd; int hum; if((fd=fopen("test.txt","r"))==NULL) print("Cannot open this file!/n"); return; head=NULL; while(fscanf(fd,"%d",hum)==1) ptr= (1) ; if(!ptr) return; ptr->number=hum; ptr->next=NULL; head=insertChain(head,ptr); (2) ; return; struct Link *insertChain(struct Link *head,struct Link *k) struct Link *ptr,*u; ptr=head; while(ptr && k && k->number>ptr->number) u=ptr; (3) if(ptr == head) head=k; else (4) ; (5) ; return head;
填空题[说明]某绘图系统存在Point、Line和Square3种图元,它们具有Shape接口,图元的类图关系如图8-5所示。现要将Circle图元加入此绘图系统以实现功能扩充。已知某第三方库已经提供了XCircle类,且完全满足系统新增的Circle图元所需的功能,但XCircle不是由Shape派生而来的,它提供的接口不被系统直接使用。[C++代码1]既使用了Xcircle,又遵循了Shape规定的接口,既避免了从头开发一个新的Circle类,又可以不修改绘图系统中已经定义的接口。[C++代码2]根据用户指定的参数生成特定的图元实例,并对其进行显示操作。该绘图系统定义的接口与XCircle提供的显示接口及其功能如表8-2所示。[C++程序代码1]classCircle:public(1)Private:(2)m_circle;public:voiddisplay()m_circle.(3);[C++程序代码2]classFactorypublic:(4)getShapeInstance(inttype)//生成特定类实例switch(type)case0:returnnewPoint;case1:returnnewRectangle;case2:returnnewLine;case3:returnnewCircle;default:returnNULL;;voidmainintargc,char*argv[])if(argc!=2)cout<<"errorparameters!"<<end1;return;inttype=atoi(argv[1]):Factoryfactory;Shape*s;s=factory.(5);if(s==NULL)cout<<"Errorgettheinstance!"<<end1;return;s->display();(6);return;
填空题阅读以下函数说明和C语言函数,回答问题。 [说明] 函数Node *difference(A,B)用于求两个集合之差C=A-B,即当且仅当e是A中的一个元素,但不是B中的元素时,e是C中的元素。集合用有序链表实现,用一个空链表表示一个空集合,表示非空集合的链表根据元素之间按递增排列。执行C=A-B之后,表示集合A和B的链表不变,若结果集合C非空,则表示其链表根据元素之值按递增排列。函数append()用于在链表中添加节点。 [C函数] typedef struct node int element; struct node *link; Node; Node *A,*B,*C; Node *append(last,e) Node *last; int e; last->link=(Node *)malloc(sizeof(Node)); last->link->element=e; return(last->link); Node *difference(A,B) Node *A,*B; Node *c,*last; C=last=(Node *)malloc(sizeof(Node)); while( (1) ) if(A->element<B->element) last=append(last,A->element); A=A->link: else if( (2) ) A:A->link; B:B->link; elSe (3) ; while( (4) ) last=append(last,A->element); A=A->link: (5) ; last=c; c=c->link; free(last); return(c);