问答题阅读以下说明和C函数,填补C函数中的空缺(1)~(5),将解答写在答题纸的对应栏内。[说明]函数SetDiff(LA,LB)的功能是将LA与LB中的共有元素从LA中删除,使得LA中仅保留与LB不同的元素,而LB不变,LA和LB为含头结点的单链表的头指针。例如,单链表LA、LB的示例如图4-1中的(a)、(b)所示,删除与LB共有的元素后的LA如图4-1中的(c)所示。函数SetDiff(LinkListLA,LinkListLB)的处理思路如下:(1)从LA的第一个元素结点开始,令LA的第一个元素为当前元素。(2)在LB中进行J顷序查找,查找与LA的当前元素相同考,方法是令LA的当前元素先与LB的第一个元素进行比较,若相等,则结束在LB中的查找过程,否则继续与LB的下一个元素比较,重复以上过程,直到LB中的某一个元素与LA的当前元素相等(表明查找成功),或者到达LB的表尾(表明查找失败)为止。(3)结束在LB表的一次查找后,若在LB中发现了与LA的当前元素相同者,则删除LA的当前元素,否则保留LA的当前元素。(4)取LA的下一个元素为当前元素,重复(2)、(3),直到LA的表尾。
问答题【应用说明】某应用的登录界面如下:登录界面中的文本框txtUserID和txtPassword分别用于接受用户输入的用户名和口令,命令按钮为“确定(cmdOk)”和“取消(cmdCancel)”。ADO数据控件Adodc1与数据库EmployeeData连接。在EmployeeData中,表“Users”的字段“UserID”和“Pswd”分别记录了所有的合法用户名和口令。在登录界面中,输入正确的用户名和口令并单击“确定”按钮后,就会打开应用程序的主窗口fxmApp。用户名或密码输入错误时,给出提示信息并返回登录界面。【VisualBasic程序代码】PrivateSubcmdOKClick()Adodcl.ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;DataSource=D:/data/EmployeeData.mdb;PersistSecurityInfo=False"Adodcl.RecordSource="select*{{U}}(1){{/U}}"Adodcl.RefreshDousrname={{U}}(2){{/U}}pwd=Adodc1.Recordset("Pswd")Adodc1.Recordset.MoveNextLoopUntil(usrname={{U}}(3){{/U}})Or(Adodc1.Recordset.EOF)Ifusrname<>txtUserID.TextThenMsgBox"无效的用户ID,请重新输入!",,"提示信息"ElseIf{{U}}(4){{/U}}ThenMsgBox"欢迎进入系统主界面!",,"提示信息"Unloadme{{U}}(5){{/U}}ElseMsgBox"无效的用户密码,请重新输入!",,"提示信息"EndIfEndIfEndSub
问答题【说明】假设数组A中的各元素A(1),A(2),…,A(M)已经按从小到大排序(M≥1);数组B中的各元素B(1),B(2),…,B(N)也已经按从小到大排序(N≥1)。执行下面的流程图后,可以将数组A与数组B中所有的元素全都存入数组C中,且按从小到大排序(注意:序列中相同的数全部保留并不计排列顺序)。例如,设数组A中有元素:2,5,6,7,9;数组B中有元素2,3,4,7:则数组C中将有元素:2,2,3,4,5,6,7,7,9。【流程图】
问答题阅读以下说明和C函数,填充函数中的空缺,将解答填入答题纸的对应栏内。
【说明】
函数GetDateld(DATE date)的功能是计算并返回指定合法日期date是其所在年份的第几天。例如,date表示2008年1月25日时,函数的返回值为25,date表示2008年3月3日时,函数返回值为63。
函数Kday_Date(int theyear,int k)的功能是计算并返回指定合法年份theyear(theyear≥1900)的第k天(1≤k≤365)所对应的日期。例如,2008年的第60天是2008年2月29日,2009年的第60天是2009年3月
1日。
函数isLeapYear(int y)的功能是判断Y代表的年份是否为闰年,是则返回1,否则返回0。
DATE类型定义如下:
typedef struct{
int year,month,day;
}DATE;
【C函数1】
int GetDateId(DATE date)
{
Const int days_month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int i,date_id=date.day;
for(i=0;i=1&&k=1900);/*不满足断言时程序终止*/
date.year=____(4)____;
if(isLeapYear(date.year))days_month[2]++;
for(i=1;;){
k=k—days_month[i++];
if(k<=0){date.day=k+____(5)____;date.month=i一1;break;}
}
return date;
}
问答题【说明】
著名的四色定理指出任何平面区域图均可用4种颜色着色,使相邻区域着不同的颜色。以下C程序对给定的区域图找出所有可能的不超过4种颜色的着色方案。该程序中用1~4分别表示4种颜色。要着色的N个区域用0~-1编号,区域相邻关系用adj[][]矩阵表示,矩阵的i行j列的元素为1,表示区域i与区域了相邻;矩阵的i行j列的元素为0,表示区域i与区域j不相邻。数组color[]用来存储着色结果,color[i]的值为区域i,所着颜色。
【C程序】
#include <stdio.h>
#define N 10
void output(int color[]) { /*输出一种着色方案*/
int i ;
for ( i = 0 ; i < N ; i++ )
printf( "%4d" , color[i] ) ;
printf ("/n") ;
}
int back(int *ip ,int color[] ) { /*回溯*/
intc = 4 ;
while ( c == 4 ) {
if ( *ip <= 0 )
return 0 ;
-- (*ip) ;
c ={{U}} (1) {{/U}};
color[*ip] =-1 ;
}
return c ;
}
/*检查区域i,对c种颜色的可用性*/
int colorOk(int i , intc , int [] [N] ,int color[ ] ) {
int j ;
for (j = 0 ; j < i ; j++ )
if ({{U}} (2) {{/U}})
return 0 ;
return 1 ;
}
/*为区域i选一种可着色的颜色*/
int select (int i ,int c ,int adj [] [N] ,int color[ ] ){
int k ;
for(k = c ; k <= 4 ; k++ )
if( colorOK({{U}} (3) {{/U}}))
return k ;
return 0 ;
}
int coloring(int adj [] [N]) { /*寻找各种着色方案*/
int color[N] , i , c , cnt ;
for(i = 0 ; i < N ; i++)
color[i] =-1 ;
i = c = 0 ;
cnt = 0 ;
while(1) {
if((c ={{U}} (4) {{/U}}) == 0 {
c = back(
if( c == 0 )
return cnt;
}
else {
{{U}} (5) {{/U}};
i++ ;
if i == N) {
output(color);
++cnt ;
c = back(
}
else c = 0 ;
}
}
}
void main()(
int adj[N] [N] =
{ {0,1,0,1,1,1,1,1,1,1},
{1,0,1,1,0,1,1,1,1,0},
{0,1,0,1,0,1,1,0,1,1},
{1,1,1,0,1,1,0,0,1,1},
{1,0,0,1,0,1,0,0,0,0},
{1,1,1,1,1,0,1,0,0,1},
{1,1,1,0,0,1,0,0,1,0},
{1,1,0,0,0,0,0,0,1,1},
{1,1,1,1,0,0,1,1,0,1},
{1,0,1,1,0,1,0,1,1,0},
} ;
printf("共有%d组解./n",coloring(adj));
}
问答题【说明】
源程序文件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
int b;
public:
vector({{U}} (1) {{/U}}): {{U}}(2) {{/U}}
{
}
void input(int x, int y)
{ {{U}}(3) {{/U}}
}
void output( )
{
cout<<'('<<a<<','<<b<<")" <<endl;
}
friend double Multiply(vector
};
double Multiply(vector
{{U}} (4) {{/U}}
return c;
}
void main( )
{
vector x(10,20),y;
double d;
y. input(2,3)
d=Multiply(x,y);
cout<<d<<endl;
}
程序输出结果是:{{U}} (5) {{/U}}。
问答题【说明】
本程序根据输入的月份数,输出它是哪个季节。
【代码】
import java.io.*;
public class season
{
public static void main(String[] args)
{
String strln="";
{{U}} (1) {{/U}}in=new InputStreamReader(System.in);
BufferedReader buffln=new BufferedReader(in);
System.out.print("Please enter a month(1-12):");
try
{
strln=buffln.readLine();//从命令行读入数据
}catch({{U}} (2) {{/U}})
{
System.out.println(e.toStdng());
}
int month={{U}} (3) {{/U}}(strln);//将字符串转换成整数型
int season=0;
if(month<12 //计算季节的公式
{{U}} (4) {{/U}}(season)
{
case 1:
System.out.println("the season is Springl");
break;
case 2:
System.out.println("the season is Summer!");
case 3:
System.out.println("the season is Fall!");
case 4:
System.out.println("the season is Winter!");
break;
{{U}} (5) {{/U}};
System.out.println("this is not correct month!");
}
}
}
问答题【说明】主窗口有一个按钮、一个文本框和一个复选框,初始时窗口大小不能调整,选中复选框后窗口大小可以调整,如果撤销复选框的选择,则窗口的大小又不能调整,如下图所示。【Java代码】importjava.awt.*;importjava.awt.event.*;classMyFrameextendsFrameimplementsItemListener,ActionListener{Checkboxbox;TextAreatext;Buttonbutton;MyFrame({{U}}(1){{/U}}){super(s);box=newCheckbox("设置窗口是否可调整大小");text=newTextArea(12,12);button={{U}}(2){{/U}}("关闭窗口");button.addActionListener(this);box.addltemListener(this);setBounds(100,100,200,300);setVisible(true);add(text,BorderLayout.CENTER);add(box,BorderLayout.SOUTH);add(button,BorderLayout.NORTH);setResizable({{U}}(3){{/U}});validate();}publicvoiditemStateChanged(ItemEvente){if(box.getState()==true){setResizable(true);}else{setResizable(false);}}publicvoidactionPerformed(ActionEvente){{{U}}(4){{/U}};}}classsimple{publicstaticvoidmain(Stringargs[]){{{U}}(5){{/U}}("simple");}}
问答题
问答题【说明】 将一正整数序列K1,K2,…,K9重新排列成一个新的序列,新序列中,比K1小的数都在K1的前面(左面),比K1大的数都在K1的后面(右面),最后调用writeDat()函数的新序列输出到文件out.dat中。 在程序中已给出了10个序列,每个序列有9个正整数,并存入数组a[10][9]中,分别求出这10个新序列。 例:序列6,8,9,1,2,5,4,7,3 经重排后成为3,4,5,2,1,6,8,9,7 【函数】 #include < stdio. h > #include < conio. h > void jsValue( int a [10] [9] ) int i,j,k,n,temp; int b[9]; for(i=0;i<10;i++) temp=a[i] [0]; k=8;n=0; for(j=8;j=0;j--) if(temp < a[i] [j]) (1) =a[i][j]; if(temp >a[i] [j]) (2) =a[i][j]; if(temp =a[i] [j]) (3) = temp; for(j=0;j<9;j++) a[i][j] =b[j]; void main( ) int a[10] [9] = 6,8,9,1,2,5,4,7,3,3,5,8,9,1,2,6,4,7, 8,2,1,9,3,5,4,6,7, 3,5,1,2,9,8,6,7,4, 4,7,8,9,1,2,5,3,6, 4,7,3,5,1,2,6,8,9, 9,1,3,5,8,6,2,4,7, 2,6,1,9,8,3,5,7,4, 5,3,7,9,1,8,2,6,4, 7,1,3,2,5,8,9,4,6 ; int i,j; (4) ; for(i=0;i<10;i++) for(j=0;j<9;j++) printf("%d",a[i] [j] ); if( (5) )printf(","); printf(" /n" ); getch( );
问答题[说明] 循环队列的类型定义如下(其中队列元素的数据类型为datatype):typedef struct datatype data[MAXSIZE]; /*数据的存储区*/ int front,rear; /*队首、队尾指针*/ int num; /*队列中元素的个数*/c _ SeQueue; /*循环队*/ 下面函数及其功能说明如下: (1) c_SeQueue* Init_SeQueue():新建队列; (2) int ln_SeQueue( c_SeQueue *q, datatype x):将元素x插入队列q,若成功返回1否则返回0; (3) int Out_SeQueue (c_SeQueue *q, datatype *x):取出队列q队首位置的元素,若成功返回1否则返回0。[函数]c_SeQueue* Init_SeQueue() q=malloc(sizeof(c_SeQueue)); q->front=q->rear=MAXSIZE-1; (1) ; return q;int In_SeQueue( c_SeQueue *q, datatype x) if(q->num= =MAXSIZE) return 0; /*队满不能入队*/ else q->rear= (2) ; q->data[q->rear]=x; (3) ; return 1; /*入队完成*/ int Out_SeQueue( c_SeQueue *q, datatype *x) if (q->num= =0) return 0; /*队空不能出队*/ else *x= (4) ; /*读出队首元素*/ q->front= (5) ; q->num- -; return 1; /*出队完成*/
问答题[说明]为实现图书的国际统一编码,便于实现计算机化的图书管理,每本正式出版的图书都印有国际标准书号。标准书号由“ISBN”、10个数字(0-9)组成,其格式如下。ISBN组号-出版者号-书名号-校验码其中,校验码是根据前面9个数字计算得到的,用于计算机自动校验。假设标准书号的10个数字依次是a(1),a(2),…,a(10),则校验码a(10)的设置应使S=1O*a(1)+9*a(2)+8*a(3)+…+1*a(10)能被11整除。如果校验码a(10)应设置成10,则规定以“X”表示之。例如,《软件设计师考试考前冲刺预测卷及考点解析》的标准书号为:ISBN7-121-05027-5。第1段上的数字“7”是国际ISBN中心分配给中国ISBN中心管理的组号;第2段上的“121”表示电子工业出版社。标准书号的校验过程如图3-16所示,计算校验码的过程如图3-17所示。其中,Mod(S,11)表示S除以11得到的余数。图3-16标准书号的校验过程图3-17计算校验码的过程1.[问题1]请根据标准书号校验码的说明,将图3-16和图3-17程序流程图中(1)-(4)空缺处的内容填补完整。
问答题[C++代码]
问答题试题五(共15分)阅读下列说明、C++代码和运行结果填补代码中的空缺(1)~(6),将解答填入答题纸的对应栏内。[说明]很多依托扑克牌进行的游戏都要先洗牌。下面的C++程序运行时先生成一副扑克牌,洗牌后再按顺序打印每张牌的点数和花色。[C++代码]
问答题[说明] 函数DelA - InsB ( LinkedList La, LinkedList Lb, int key 1,int key 2,int len)的功能是,将线性表A中关键码为key 1的节点开始的len个节点,按原顺序移至线性表B中关键码为key 2的节点之前。若移动成功,则返回0;否则返回-1。 线性表的存储结构为带头节点的单链表,La为表A的头指针,Lb为表B的头指针。单链表节点的类型定义如下。 typedef struct node int key; struct node*next; *LinkedList; [C程序] int DelA_InsB (LinkedLiSt La, LinkedList Lb, int key1,int key2,int len LinkedList p, q, S, prep, pres; int k; if (!La ->next || !Lb ->next || len<=0) return-l; p = La->next; prep = La; while (p p = p->next; if (!p) return -1; /* 表A中不存在键值为key1的节点 */ q = p; k = 1; while (q k++; if (!q) return -1; /* 表A中不存在要被删除的len个节点 */ S = Lb ->next; (3) ; while (s s = e->next; if (!s) return -1; /* 表B中不存在键值为key2的节点 */ (4) q->next; /* 将表A中的len个节点删除 */ q->next= (5) pres->next = p; /* 将len个节点移至表B */ return 0;
问答题【说明】
下面的程序构造一棵以二叉链表为存储结构的二叉树。
【函数】
BitTree *createbt(BitTree *bt)
{
BitTree *q;
struct node *s[30];
int j,i;
char x;
printf("i,x=");
scant("%d,%c",
while(i!=0 //生成一个结点
{{U}}(1) {{/U}};
q->lchild=NULL;
q->rchild=NULL;
{{U}}(2) {{/U}};
if ({{U}} (3) {{/U}})
{
j=i/2; // j为i的双亲结点
if(i%2==0)
{{U}}(4) {{/U}}; //i为j的左孩子
else
{{U}}(5) {{/U}}; //i为j的右孩子
}
printf("i,x=");
scanf("%d,%c",
}
return s[i];
}
问答题
问答题(以下试题六至试题八任选一题) 阅读下列说明和C++代码,请回答问题1至问题3。
【说明】 已知下列程序运行时的输出应为: 1:1
1:1 1:1【C++程序】 01 #include
<iostream> 02 using namespace std; 03
class Stock{ 04 protect: 05
{{U}} (1) {{/U}}{}; 06
Stock(iht n, int pr=1){ 07
shares = n; share_val=pr; 08
}; 09 void~Stock(){};
10 public: 11 //成员函数
12 void output(){ 13
{{U}}(2) {{/U}} << shares << ":" << share val
<< endl; 14 } 15
private: 16 //成员变量 17
int shares; 18 int
share_val; 19 }; 20 21
void main(){ 22 Stock a(1);
a.output(); 23
Stock b;
b.output(); 24 Stock c = Stock();
c.output(); 25 }
问答题【说明】某绘图系统定义了一个抽象类Ishape,现有3个类Cpoint,CLine和Ccircle,它们都具有IShape界面。相应的类图关系如图5-11所示。已知某第三方库已经提供了XCircle类,且完全满足CCircle图元显示时所需的功能。【VisualBasic代码6-1】是抽象类IShape类模块内容。【VisualBasic代码6-2】实现了类CCircle的IShape界面,并使用了XCircle提供的显示功能。XCircle提供的显示功能方法接口为displayIt。【VisualBasic代码6-1】PublieColorAsLongSubdraw()'方法体不包括可执行语句EndSubSubmove(stepxAsSingle,stepyAsSingle)'方法体不包括可执行语句EndSub【VisualBasic代码6-2】{{U}}(1){{/U}}PrivatecolorAsLong…'其他定义省略PrivateridgedAs{{U}}(2){{/U}}PrivateSubClass_Initialize()Setbridged={{U}}(3){{/U}}EndSubPrivateProperty{{U}}(4){{/U}}()AsLongIShape_Color=colorEndPropertyPrivateProperty{{U}}(5){{/U}}(ByValnewColorAsLong)Color=newColorEndPropertyPrivateSubIShape_draw()使用XCircle提供的显示功能{{U}}(6){{/U}}EndSubPrivateSubIShape_move(stepxAsSingle,stepyAsSingle)…'省略描述EndSub
问答题阅读以下说明和流程图,填补流程图中的空缺,将解答填入答题纸的对应栏内。[说明]下面流程图的功能是:在给定的两个字符串中查找最长的公共子串,输出该公共子串的长度L及其在各字符串中的起始位置(L=0时不存在公共字串)。例如,字符串“Thelightisnotbrighttonight”与“Tonightthelightisnotbright”的最长公共子串为“helightisnotbright”,长度为22,起始位置分别为2和10。设A[1:M]表示由M个字符A[1],A[2],…,A[M]依次组成的字符串;B[1:N]表示由N个字符B[1],B[2],…,B[N]依次组成的字符串,M≥N≥1。本流程图采用的算法是:从最大可能的公共子串长度值开始逐步递减,在A、B字符串中查找是否存在长度为L的公共子串,即在A、B字符串中分别顺序取出长度为L的子串后,调用过程判断两个长度为L的指定字符串是否完全相同(该过程的流程略)。[流程图]
