●试题五
阅读下列程序说明和C代码,将应填入(n)处的字句写在答题纸的对应栏内。
【程序5说明】
著名的四色定理指出任何平面区域图均可用四种颜色着色,使相邻区域着不同的颜色。本程序对给定的区域图找出所有可能的不超过四种颜色的着色方案。
程序中用1~4表示四种颜色。要着色的N个区域用0~N-1编号,区域相邻关系用adj[][]矩阵表示,矩阵的i行j列的元素为1,表示区域i与区域j相邻;矩阵的i行j列的元素为0,表示区域i与区域j不相邻。数组color[]用来存储着色结果,color[i]的值为区域i所着颜色。
【程序5】
#include
#define N 10
void output(int color[])/*输出一种着色方案*/
{int i;
for(i=0;i printf("%4d",color[i]); printf("\n"); } int back(int*ip,int color[])/*回溯*/ {int c=4; while(c==4){ if(*ip<=0)return 0; --(*ip); c= (1) ; color[*ip]=-1; } return c; } /*检查区域i,对c种颜色的可用性*/ int color0k(int i,int c,int[][N],int color[]} {int j; for(j=0;j if( (2) ) 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( (3) )) return k; return 0; } int coloring(int adj[][N])/*寻找各种着色方案*/ {int color[N],i,c,cnt; for(i=0;i i=c=0;cnt=0; while (1) { if((c= (4) )==0){ c=back(&i,color); if(c==0)return cnt; }else{ (5) ;i++; if(i==N){ output(color); ++cnt; c=back(&i,color); }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)); }
●试题六
阅读下列程序说明和C++代码,将应填入(n)处的字句写在答卷的对应栏内。
【程序6说明】
本程序实现两个多项式的乘积运算。多项式的每一项由类Item描述,而多项式由类List描述。类List的成员函数有:
createList():创建按指数降序链接的多项式链表,以表示多项式。
reverseList():将多项式链表的表元链接顺序颠倒。
multiplyList(List L1,List L2):计算多项式L1和多项式L2的乘积多项式。
【程序6】
#include
class List;
class ltem{
friend class List;
private:
double quot;
int exp;
Item*next;
public:
Item(double_quot,int_exp)
{ (1) ;}
};
class List{
private:
Item*list;
public:
List(){list=NULL;}
void reverseList();
void multiplyList(List L1,List L2);
void createList();
};
void List::createList()
{Item*p,*u,*pre;
int exp;
double quot;
list=NULL;
while (1) {
cout<<"输入多项式中的一项(系数、指数):"< cin>>quot>>exp: if(exp<0)break;//指数小于零,结束输入 if(quot==0)continue; p=list; while( (2) ){//查找插入点 pre=p;p=p->next;} if(p!=NULL&&exp==p->exp){ p->quot+=quot;continue;} u= (3) ; if(p==list) list=u; else pre->next=u; u->next=p;} } void List::reverseList() {Item*p,*u; if(list==NULL)return; p=list->next;list->next=NULL; while(p!=NULL){ u=p->next;p->next=list; list=p;p=u;} } void List::multiplyList(List L1,List L2) {Item*pLl,*pL2,*u; int k,maxExp; double quot; maxExp= (4) ; L2.reverseList();list=NULL; for(k=maxExp;k>=0;k--){ pL1=L1.list; while(pL1!=NULL&&pL1->exp>k)pL1=pL1->next; pL2=L2.list; while(pL2!=NULL&& (5) pL2=pL2->next; quot=0.0; while(pL1!=NULL&&pL2!=NULL){ if(pL1->exp+pL2->exp==k){ (6) ; pL1=pL1->next;pL2=pL2->next; }else if(pL1->exp+pL2->exp>k)pL1=pL1->next; else pL2=pL2->next; } if(quot!=0.0){ u=new Item(quot,k); u->next=list;list=u;} } reverseList();L2.reverseList(): } void main() {ListL1,L2,L; cout<<"创建第一个多项式链表\n";L1.createList(); cout<<"创建第二个多项式链表\n";L2.createList(); L.multiplyList(L1,L2); }
●试题七
【说明】
下面是一个Applet程序,其功能是根据给出的小时,分钟和秒数计算相等的秒数,即将1分钟化为60秒,依此类推。要求建立一个时间类,时间参数均作为类的成员变量,并且给出换算时间的方法,也作为这个类的成员函数,可以供外部对象进行调用。同时还需要在输出窗口中显示换算结果,并且将结果写到out3_3.txt文件中,本题给出确定的时间为4小时23分47秒,要求换算成以秒做单位的时间。
程序运行结果如图11所示。
图11
import javA.io.*;
import javA.awt.*;
import javA.applet.*;
/*
*/
public class ex7_7 extends Applet{
public void paint(Graphics g){
int nSum;
class myTime7_7{
public int h;
public int m;
public int s;
public int out;
public int caculateSecond(){
(1) ;
return out;
}
}
myTime7_7 objTime7_7 = new myTime7_7();
objTime7_7.h = 4;
objTime7_7.m = 23;
objTime7_7.s = 47;
nSum = objTime7_7. (2) ;
g.drawString ("时:"+objTime7_7.h, 20, 30);
g.drawString ("分:"+objTime7_7.m, 20, 50);
g.drawString ("秒:"+objTime7_7.s, 20, 70);
g.drawString ( (3) );
try {
FileOutputStream fos7_7 = new FileOutputStream("out7_7.txt");
BufferedOutputStream bos7_7=new BufferedOutputStream(fos7_7,1024);
PrintStream ps7_7=new PrintStream(bos7_7,false);
System.setOut(ps7_7);
System.out.println( (4) );
ps7_7.close();
} catch(IOException ioe) {
(5) (ioe);
}
}
}
ex7_7.html
code="ex7_7.class" width=800 height=400 >