问答题[问题2]如果以下3*3矩阵沿顺时针方向旋转90°后所形成的矩阵就是原来的矩阵:其中,位于*处的元素需要考生填写请完整地写出该矩阵。
问答题【说明】 以下【C++程序】用于实现两个多项式的乘积运算。多项式的每一项由类Item描述,而多项式由类List描述。类List的成员函数主要有: createList():创建按指数降序链接的多项式链表,以表示多项式: reverseList():将多项式链表的表元链接顺序颠倒: multiplyList(ListL1,ListL2)计算多项式L1和多项式L2的乘积多项式。【C++程序】#include <iostream.h>class List;class Item 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 << "输入多项式中的一项(系数、指数) :" << endl; cin >> quot >> exp: if ( exp<0 ) break ; //指数小于零,结束输入 if ( quot=0 ) continue; p = list; while ( (2) ) //查找插入点 pre = p; p = p->next; if ( p != NULL 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 *pL1,*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 pL2 = L2.1ist; while (pL2 NULL quot = 0.0; while (pL1 != NULL 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() List L1,L2,L; cout << "创建第一个多项式链表/n"; L1.createList(); cout << "创建第二个多项式链表/n"; L2.createList(); L.multiplyList (L1,L2);
问答题[流程图][说明]把指定区间上的所有整数分解质因数,每一整数表示为质因数按从小到大顺序排列的乘积形式。如果被分解的数本身是素数,则予以注明。例如,90=2×3×3×5,91=素数。下面的流程图描述了分解质因数的过程。对每一个被分解的整数j,赋值给b(以保持判别运算过程中j不变),用K(从2开始递增1取值)试商,若不能整除,打印输出“*k”,b除以k的商赋给b(b=b/k)后继续用k试商(注意,可能有多个k因数),直至不能整除,k增1继续。将流程图中的(1)~(5)处补充完整。
问答题[问题2]
若按下式计算奇校验位,则上述流程图中的(1)处应填 (5) 。
B0 = B1⊕B2⊕...⊕B7⊕1
问答题【说明】下面的程序的功能是利用实现Runnable接口的方法来创建线程,并利用它来执行响应的一些操作。最后使得m的执行结果:100,如图3。注意:请勿改动main()主方法和其他已有的语句内容,仅在下划线处填入适当的语句。classClassName(1)Runnableintn;(2)tryThread.sleep(2000);n=100;catch((3)e)publicstaticvoidmain(String[]args)tryClassNamea=newClassName();(4)threadl.(5)();threadl,join();intm=a.n;System.out.println("m="+m);catch((3)e)
问答题1说明】 本程序可以打印出如下图形(菱形): * *** ***** ******* ***** *** * 【函数2.1】 main() int i,j,k; for(i=0;i<=3;i++) for(j=0;j<=2-i;j++) printf(" "); for( (1) ) printf("*"); printf("/n"); for(i=0;i<=2;i++) for( (2) ) printf(" "); for(k=0;k<=4-2*i;k++) printf("*"); printf("/n"); 【函数2.2说明】 通过本程序,可以从键盘输入一个字符串,将小写字母全部转换成大写字母,然后输出到一个磁盘文件“CsaiWgm”中保存,输入的字符串以“!”结束。 【函数2.2】 #include "stdio.h" main() FILE *fp; char str[100],filename[10]; int i=0; if((fp=fopen("CsaiWgm","w"))==NULL) printf("cannot open the file/n"); exit(0); printf("please input a string:/n"); gets(str); while( (3) ) if(str[i]>='a' fputc(str[i],fp); (5) ; fclose(fp); fp=fopen("CsaiWgm","r"); fgets(str,stden(str)+1,fp); printf("%s/n",str); fclose(fp);
问答题[说明]下面的流程图描述了计算自然数1到N(N≥1)之和的过程。[流程图][问题1]将流程图中的(1)~(3)处补充完整。[问题2]为使流程图能计算并输出1*3+2*4+…+N*(N+2)的值,A框内应填写{{U}}(4){{/U}};为使流程图能计算并输出不大于N的全体奇数之和,B框内应填写{{U}}(5){{/U}}。
问答题【说明】 本程序从正文文件text.in中读入一篇英文短文,统计该短文中不同单词及出现次数,并按词典编辑顺序将单词及出现次数输出到正文文件word.out中。 程序用一棵有序二叉树存储这些单词及其出现的次数,边读入边建立,然后中序遍历该二叉树,将遍历经过的二叉树上的结点内容输出。 【函数】 # include <stdio.h> # include <malloc.h> # include <ctype.h> # include <string.h> # define INF "text.in" # define OUTF "word.our' typedef struct treenode char *word; int count; struct treenode *left, *right; BNODE; int getword(FILE *fpt, char *word) char c; c=fgetc(tpt); if (c==EOF) return 0; while(!(tolower(c)>= 'a' if (c==EOF) return 0; /* 跳过单词间的所有非字母字符 */ while(tolower(c)>= 'a' c=fgetc(fpt); *word='/0'; return 1; void binary_tree(BNODE **t, char *word) BNODE *ptr, *p; int compres; p=NULL; (1) ; while (ptr) /* 寻找插入位置 */ compres=strcmp(word, ptr->word);/* 保存当前比较结果 */ if (!compres) (2) ; return; else p=ptr; ptr=compres>0 ? ptr->right: ptr->left; ptr=(BNODE *)malloc(sizeof(BNODE)); ptr->left=ptr->right=NULL; ptr->word=(char *)malloc(strlen(word)+1); strcpy(ptr->word, word); (3) ; if (p==NULL) *t=ptr; else if (compres>0) p->right=ptr; else p->left=ptr; void midorder(FILE *fpt, BNODE *t) if (t==NULL) return; midorder(fpt, (4) ); fprintf(fpt, "%s %d/n", t->word, t->count); midorder(fpt, t->right); void main() FILE *fpt; char word[40]; BNODE *root=NULL; if ((fpt=fopen(INF, "r"))==NULL) printf("Can't open file %s/n", INF); return; while(getword(fpt, word)==1) binary_tree( (5) ); fclose(fpt); fpt=fopen(OUTF, "w"); if (fpt==NULL) printf("Can't open fife %s/n", OUTF); return; midorder(fpt, root); fclose(fpt);
问答题[说明]某VisualBasic应用程序用于监测某种锅炉设备内液面高度(0~50cm),其运行窗口界面如图4-16所示。图4-16某锅炉设备液面高度显示界面在图4-16中,设计了一个高度计(矩形形状shpMeter)及其中指示当前液面高度的水银柱(矩形形状shpT),文字标签标记了液面高度的刻度;另有一个图片框picCurve,用于动态描述检测到的液面高度曲线(用户见到的曲线与水银柱等高变化);[开始](CmdStart)按钮用于启动液面高度检测,命令按钮“暂停”(CmdStop)用于暂停液面高度检测。液面高度计形状控件shpMeter是固定的,其属性FillsStyle默认为透明。矩形形状shpT(水银柱)的Visible属性初始设置为不可见,属性Filltype设置为Solid(实心),FillColor设置为红色;图片框picCurve的属性AutoRedraw设置为True;程序设计过程中,创建了一个定时器TimT,属性Enabled初始设置为False(不可用),属性Interval(定时间隔)的值应设置为(1)。为模拟锅炉设备液面高度的检测,程序中利用了(0,1)之间均匀分布的伪随机数获得[0,50]之间的随机液面高度WH。为便于在图片框picCurve中绘制曲线,程序中对该图片框建立了如下坐标系统:图片框的左上角定义为原点(0,0),水平向右方向为X轴,垂直向上方向为Y轴,右下角坐标为(50.200)。为了便于观察记录的液面高度值,图片框中从上到下创建了7条水平虚线Ls(i),i=0,1…6,并在程序中按等间隔排列进行位置设置。应用程序中每隔3秒算出曲线点(x,y),其中x=O,1,2……,再用直线段连接各相邻曲线点形成液面高度曲线。[VisualBasic程序代码]Dim(2)ASInteger'试题全局变量PrivateSubCmdStart_Click()TimT.Enabled=(3)ShpT.Visible=TrueEndSubPrivateSubCmdStop_Click()TimT.Enabled=FalseEndSubPrivateSubForm_Load()Dimi,SAsIntegerPicCurve.Scale(0,0)-(50,200)'设置图片框坐标系:左上角-右下角S=25'H等于图片框高度的1/8Fori=0To6'设置7条水平线Ls(i)的位置Ls(i).X1=0'Ls(i)起点横坐标Ls(i).Y1=(4)'Ls(i)起点纵坐标Ls(i).X2=50'Ls(i)终点横坐标Ls(i).Y2=Ls(i).Y1'Ls(i)终点纵坐标Ls(i).BorderColor=&H00FCFCFC'设置水平线颜色(5)x=0'设置曲线坐标初值EndSubPrivateSubtimT_Timer()DimWH,HAsInteger'WH为实时液面高度,H为图片框中液面高度点显示高度WH=Int(Rnd*51)'随机模拟产生锅炉内液面高度(0~50cm)H=ShpMeter.Height*(6)'算出水银柱的高度ShpT.Top=(7)'设置水银柱顶部位置ShpT.Height=H'设置水银柱的高度'绘制液面高度曲线y=(8)'算出曲上当前点的纵坐标Ifx=51Then'当超出图片框时PicCurve.Cls'清框图片框内以前画的曲线(9)ElseIfx>0Then'除左边点外PicCurve.Line(x-1,Lasty)-(x,y),vbRed'由前1点到当前点画红色线段EndIfx=x+1'准备下一点坐标Lasty=y'保存当前坐标供下次使用EndSub1.[问题1]请根据[说明]和图4-16所示的显示结果,将[说明]中(1)空缺处的内容和[VisualBasic程序]中(2)~(9)空缺处的程序语句填写完整。
问答题【说明】
本程序从正文文件text.in中读入一篇英文短文,统计该短文中不同单词及出现次数,并按词典编辑顺序将单词及出现次数输出到正文文件word.out中。
程序用一棵有序二叉树存储这些单词及其出现的次数,边读入边建立,然后中序遍历该二叉树,将遍历经过的二叉树上的结点内容输出。
【函数】
# include <stdio.h>
# include <malloc.h>
# include <ctype.h>
# include <string.h>
# define INF "text.in"
# define OUTF "word.our'
typedef struct treenode {
char *word;
int count;
struct treenode *left, *right;
} BNODE;
int getword(FILE *fpt, char *word)
{ char c;
c=fgetc(tpt);
if (c==EOF)
return 0;
while(!(tolower(c)>= 'a'
if (c==EOF)
return 0;
} /* 跳过单词间的所有非字母字符 */
while(tolower(c)>= 'a'
c=fgetc(fpt);
}
*word='/0';
return 1;
}
void binary_tree(BNODE **t, char *word)
{ BNODE *ptr, *p; int compres;
p=NULL;
{{U}}(1) {{/U}};
while (ptr) /* 寻找插入位置 */
{ compres=strcmp(word, ptr->word);/* 保存当前比较结果 */
if (!compres)
{{{U}} (2) {{/U}}; return;}
else
{ p=ptr;
ptr=compres>0 ? ptr->right: ptr->left;
}
}
ptr=(BNODE *)malloc(sizeof(BNODE));
ptr->left=ptr->right=NULL;
ptr->word=(char *)malloc(strlen(word)+1);
strcpy(ptr->word, word);
{{U}} (3) {{/U}};
if (p==NULL)
*t=ptr;
else if (compres>0)
p->right=ptr;
else
p->left=ptr;
}
void midorder(FILE *fpt, BNODE *t)
{ if (t==NULL)
return;
midorder(fpt,{{U}} (4) {{/U}});
fprintf(fpt, "%s %d/n", t->word, t->count);
midorder(fpt, t->right);
}
void main()
{ FILE *fpt; char word[40];
BNODE *root=NULL;
if ((fpt=fopen(INF, "r"))==NULL)
{ printf("Can't open file %s/n", INF);
return;
}
while(getword(fpt, word)==1)
binary_tree({{U}} (5) {{/U}});
fclose(fpt);
fpt=fopen(OUTF, "w");
if (fpt==NULL)
{ printf("Can't open fife %s/n", OUTF);
return;
}
midorder(fpt, root);
fclose(fpt);
}
问答题阅读以下技术说明、流程图和C程序,根据要求回答问题1和问题2。【说明】如图6-13所示的程序流程图描述了对8位二进制整数求补的算法。该算法的计算过程如下:从二进制数的低位(最右位)开始,依次向高位逐位查看,直到首次遇到“1”时,停止查看。然后,对该“1”位左面的更高位(如果存在的话),逐位求反,所得的结果就是对原二进制数求补的结果。例如:对二进制整数10010110求补的结果时01101010。设8位二进制整数中的各位,从低位到高位,依次存放在整型数组BIT的BIT[1]~BIT[8]中。例如,二进制整数10010110存放在数组BIT后,则有BIT[1]=0,BIT[2]=1,…,BIT[7]=0,BIT[8]=1。若流程图中存在空操作,则用NOP表示。以下待修改的【C程序】完成的功能是:对于给定的1个长正整数,从其个位数开始,每隔一位取1个数字(即取其个位、百位和万位等数字),形成1个新的整数并输出。例如,将该程序修改正确后,运行时若输入“9753186420”,则输出的整数为“73840”。【C程序】行号C代码01#include<stdio.h>02intmain()03{longn,num;04inti;05do{06printf("请输入一个正整数:");07scanf("%1d",n);08}while(n<=0);09k=1;10for(i=1;n>=0;i++){11if(i%2=1){12num=num+(n%10)*k;13k=k*10;14}15n=n/10;16}17printf("新数据为:%d/n",num);18return0;19}
问答题【说明】 Fibonacci数列A={1,1,2,2,5,8,…)有如下性质: a0=a1=1 ai=ai-1+ai-2,i>1 对于给定的n,另外有一个由n个元素组成的数列xn,该数列中各元素的值为: xi=ai/ai+1,i=0,1,…,n 现要求对xn中的元素按升序进行排序,然后以分数形式输出排序后的xn。例如n=5时,排序前的xn={1/1,1/2,2/3,3/5,5/8},排序后的xn={1/2,3/5,5/8,2/3,1/1}。程序中函数make()首先生成排序前的xn,然后调用函数sort()进行排序,最后输出所求结果。 【程序】 #include <stdio.h> #include <stdlib.h> #include <malloc.h> struct fact { long m,n; }; void sort(int n,struct fact *p) { int a; long s,t,u,v; struct fact *q,*end; for(end=p+(n-1),a=1;a;end--) for(a=0,q=p;q<end;p++) { s=q->m; t=q->n; u=(q+1)->m; v=(q+1)->n; if({{U}} (1) {{/U}}) { q->m=u; {{U}} (2) {{/U}} {{U}} (3) {{/U}} (q+1)->n=t; a=1; } } } void make(int n) { int i; long a,b,c; struct fact *x,*y; x=(struct fact *)malloc(sizeof(struct fact)*n); x->m=1: x->n=1; for(a=1,b=1,i=2;i<=n;i++) { {{U}} (4) {{/U}} a=b; b=c; (x+(i-1))->m=a; (x+(i-1))->n=b; } {{U}} (5) {{/U}} printf("x%d={%1d/%1d",n,x->m,x->n); for(y=x+1;y<x+n;y++) printf(",%1d/%1d",y->m,y->n); printf("}/n"); free(x); } void main() { int n; printf("input n:"); scanf("%d", make(n); }
问答题[说明] 本程序接收输入的学生信息,包括学号、姓名,成绩,原样输出信息并计算学生的平均成绩。其中学生粪Stud除了包括no(学号)、name(姓名)和grade(成绩)数据成员外,有两个静态变量sum和num,分别存放总分和人数,另有一个构造函数、一个普通成员函数disp()和一个静态成员函数 avg()用于计算平均分。[C++程序]#include <stdio.h>#include <string.h>class Stud int no; char name [10]; int deg; (1) int sum; static int num; public: Stud(int n,char na[],int d) no=n; deg=d; strcpy(name,na); (2) ; (3) ; static double avg() return (4) ; void disp() printf("% -5d% -8s%3d/n",no,name,deg);;int Stud:: sum = 0;int Stud:: num=0;void main() Stud s1(1,"Li",81), s2(2,"Zhao",84.5),s3(3,"Zhang",87); printf("/nNo. Name Grade/n"); s1.disp(); s2.disp(); s3.disp(); printf("Avg=%g/n/n", (5) );
问答题【说明】 在下面程序横线处填上适当的字句,3个(2)空填的是一样的。使其输出结果为: x=5 x=6 y=7 x=8 z=9 【程序】 #include<iostream.h> class X1 int x; (1) ; X1(int xx=0)x=xx; (2) void Output() cout<<"x="<<x<<end; ; (3) Y1:public X1 int y; public: Y1(int xx=0,int yy=0);X1(xx)y=yy; (2) void Output() (4) Output(); cout<<"y="<<y<<endl; ; class Z1:public X1 int z: (5) ; Z1(int xx=0,int zz=0):X1(xx)(z=zz; (2) void Output() X1∷Output(); cout<<"z="<<z<<endl; ; void main() X1 a(5);Y1 b(6,7);Z1 c(8,9); X1*p[3]= For(int i=0;i<3;i++) p[i]->Output();cout<<endl;
问答题[说明]某种传感器的输出值Ratio依赖于环境温度temp(-40℃≤temp≤50℃)。对一组环境温度值(ITEMS个),已经测量得到了相应的Ratio值(如表4-10表格所示)。表4-10粗略地描述了曲线Ratio(temp)。{{B}}表4-10曲线Ration(temp)的列表值{{/B}}环境温度temp传感器的输出值Ratio-40℃0.20-20℃0.60-10℃0.800℃1.0010℃1.1730℃1.5050℃1.80校正系数K是Ratio的倒数,因此也依赖于环境温度temp。在数据处理中,需要用更多的列表值细致地描述曲线K(temp),如表4-11所示。 {{B}}表4-11 曲线K(temp)的列表值{{/B}}环境温度temp校正系数K-40℃5.00-39℃4.55-38℃4.17-37℃3.85…………-20℃1.67-19℃1.61……^-10℃1.25-9℃1.22…………-19℃0.56在表4-11中,各温度值所对应的K值是对表4-10进行线性插值再求倒数得到的,具体的计算方法如下。1)根据temp值,在表4-10中用二分法查找;2)若找到相应的温度值,则按相应的Ratio值求倒数得到K值;3)若没找到相应的温度值,则可确定temp所在的温度区间[Tp1,Tp2],同时获得了相应的Ratio1和Ratio2,再按如下公式计算K值:在程序中,当temp高于50℃或低于-40℃C时,设定K=0。[C程序]#includetypedefstruct{intTemp;/*环境温度*/doubleRatio;/*传感器的输出值*/}CURVE;#defineITEMS7doubleGetK(intTemp,CURVE*p,intn){/*用二分法在n个元素的有序表p中查找与Temp对应的传感器输出值*/intlow,high,m;doubleStep;low=0;high=n-1;if((Temp<p->Temp)||(Temp>(p+high)->Temp))return0.0;/*超出温度范围时返回0.0*/while(low<=high){m={{U}}(1){{/U}};if(Temp==(p+m)->Temp)return{{U}}(2){{/U}};if(Temp<(p+m)>Temp)high=m-1;elselow={{U}}(3){{/U}};}p+=high;Step=({{U}}(4){{/U}})/((p+1)->Temp-p->Temp);return1.0/(p->Ratio+Step*({{U}}(5){{/U}});}voidmain(){intDegree;doublek;CURVECurve[ITEMS]={{-40,0.2},{-20,0.60.},{-10,0.8},{0,1.0},{10,1.17},{30,1.50},{50,1.8}};printf("环境温度校正系数/n");for(Degree=-40;Degree<=50;Degree++){k=GetK(Degree,Curve,ITEMS);printf("%3d%4.2f/n",Degree,k);}}
问答题【说明】
本程序的功能是根据矩形左上角和右下角顶点坐标生成一个矩形对象,然后输出该矩形4个顶点的坐标,计算并输出该矩形的面积。
【C++代码】
#include<iostream>
using namespace std;
class MyPoint( //表示平面坐标系中的点的类
double x;
double y;
public:
MyPoint (double x,double y){this->x=x;this->y=y;}
double getX()const{{{U}} (1) {{/U}};}
double getY()const{ return y;}
void show()const{ cout<<'('<<x<<','<<y<<')';}
};
class MyRectangle{ //表示矩形的类
MyPoint upleft; //矩形的左上角顶点
MyPoint down right; //矩形的右下角顶点
public:
MyRectangle(MyPoint upleft,MyPoint downright);
MyPoint getUpLeft()const{return up_left;} //返回左上角坐标
MyPoint getDownRight()const{return down_right;} //返回右下角坐标
MyPoint getUpRight()const; //返回右上角坐标
MyPoint getDownLeft()const; //返回左下角坐标
double area()const; //返回矩形的面积
};
MyRectangle:: MyRectangle({{U}} (2) {{/U}}):
up left(p1),down_right(p2){}
MyPoint MyRectangle::getUpRight()const
{
return MyPoint(down_right.getX(),up_left.getY());
}
MyPoint MyRectangle::getDownLeft()const
{
return MyPeint({{U}} (3) {{/U}});
}
double{{U}} (4) {{/U}}::area()const
{
return (getUpLeft(),getX()-getDownRight().getX())*
(getDownRight().getY()-getUpLeft().getY());
}
int main( )
{
MyRectangle r(MyPoint(0,2),MyPoint(2,0));
r.getUpLeft(),show();
r.getUpRight().show();
r.getDown Right().show();
{{U}} (5) {{/U}};
cout<<r.area()<<end1;
return 0;
}
问答题[说明]本程序提供了查询景点票价信息的功能,查询包括两种方式:按景点名称查询以及白定义查询。程序界面如下图所示:其中,选择景点名称的组合框(Comobox)名为Combo1,单旋钮“旺季”和“淡季”分别名为Op-tion1和Option2,用于输入票价上限的文本框名为Texi1,两种查询方式的“提交”按钮分别名为Command1和Command2。已知Combol列表中第i个景点的旺季票价和淡季票价分别存放于数组元素P(i,0)和p(i,1)中。[VisualBasic代码]Dimp(20,2)AsSingle'通用声明PrivateSubForm_Load()Fori=0To9'对p赋值p(i,0)=........:p(i,1)=.......NextEndSubPrivateSubCommandl_Click()'查询方式一:按景点名称查询DimcboTcxtAsStringeboText=(1)Fori=0To(2)-1'对Combo1中各列表项循环If(3)=cboTextThenMsgBox"景点名称"&cboText&"旺季票价"&p(i,0)&_",淡季票价"&p(i,1)ExitSubEndIfNextiEndSubPrivateSubCommand2_Click()查询方式二:自定义查询DimpriceAsSingle,resultAsString,flagAsBooleanprice=Val((4))flag=Falseresult=""Fori=0To(2)-1'对Combo1中列表项循环,找出符合条件的景点If(Optionl.ValueAndp(i,0)<=price)Or((5))Then(6)result=result&"景点名称"&(3)&",旺季票价:"&_p(i,0)&",淡季票价:"&p(i,1)&vbCrLfEndIfNextiIfflagThenMagBoxresultElse:Msgaox"没有找到符合条件的景点信息!"EndIfEndSub
问答题【说明】设有3n+2个球互连,将自然数1~3n+2分别为这些球编号,使相连的两球编号之差的绝对值正好是数列1,2,…,3n+1中的各数,如下图所示:其中填自然数的思想如下;(1)先自左向右,第1列中间1个填数,然后第2列上、下2个填数,每次2列;但若n为偶数,最后1次只排第1列中间一个数。(2)自右向左,先右第1列中间填数;若n是奇数,再右第2列中间填数。然后依次右第1列上、下2个填数,再右第2列中间1个填数,直到左第2列为止。【程序】#include<stdio.h>#definesize10inta[3][size];voidmain(){inti,k,m,n;printf("imputthen:");scanf("%d",k=1;for(i=0;i<=n/2;i++){a[1][2*i]=k;k++;if((i==n/2)k++;{{U}}(2){{/U}}k++;}}if(n%2==1){{{U}}(3){{/U}}k++;m=n;}else{{U}}(4){{/U}}for(i=0;i<n/2;i++){a[1][m-2*i]=k;k++;{{U}}(5){{/U}}k++;a[2][m-2*i-1]=k;k++;}a[1][1]=k;printf("/n");printf("");for(i=1;i<=n;i++)printf("%6d",a[0][i]);printf("/n/n");for(i=0;i<=n+1;i++)printf("%6d",a[1][i]);printf("/n/n");printf("");for(i=1;i<=n;i++)printf("%6d",a[2][i]);printf("/n");}
问答题[说明]
函数Printprime(int UpBound)的功能是输出1到UpBound以内的全体素数。
[函数2.1]
void PrintPrime(int UpBound)
printf("2," );
for(i=3; i<UpBound; i+ =2) {
int k = sqrt(i);
for(j=3; j<= k;{{U}} (1) {{/U}}) /*检查i是否有3到k以入的奇因数*/
if({{U}} (2) {{/U}}) break;
fi({{U}} (3) {{/U}}) printf("%d", i);
[函数2.2说明]
递归函数invert(int a[],int k),int k)的功能是将数组a中的前k个元素逆置。
[函数2.2]
void invert(int a[ ], int k)
{ int t;
if ({{U}} (4) {{/U}}) {
invert({{U}} (5) {{/U}});
t=a[0];
a[0] =a[k-1];
a[k-l]=t;
}
}
问答题阅读以下说明和C函数,填补代码中的空缺,将解答填入答题纸的对应栏内。[说明]函数Combine(LinkListLa,LinkListLb)的功能是:将元素呈递减排列的两个含头结点单链表合并为元素值呈递增(或非递减)方式排列的单链表,并返回合并所得单链表的头指针。例如,元素递减排列的单链表La和Lb如图1所示,合并所得的单链表如图2所示。图1合并前的两个链表示意图图2合并后所得链表示意图设链表结点类型定义如下:typedefStructNode{intdata;structNode*next;}Node,*LinkList;[C函数]LinkListCombine(LinkListLa,LinkListLb){//La和Lb为含头结点且元素呈递减排列的单链表的头指针//函数返回值是将La和Lb合并所得单链表的头指针//且合并所得链表的元素值呈递增(或非递减)方式排列______Lc,tp,pa,pb;//Lc为结果链表的头指针,其他为临时指针if(!La)returnNULL;pa=La->next;//pa指向La链表的第一个元素结点if(!Lb)returnNULL;pb=Lb->next;//pb指向Lb链表的第一个元素结点Lc=La;//取La链表的头结点为合并所得链表的头结点Lc->next=NULL;while(______){//pa和pb所指结点均存在(即两个链表都没有到达表尾)//令tp指向pa和pb所指结点中的较大者if(pa->data>pb->data){tp=pa;pa=pa->next;}else{tp=pb;pb=pb->next;}______=Lc->next;//tp所指结点插入Lc链表的头结点之后Lc->next=______;}tp=(pa)?pa:pb;//设置tp为剩余结点所形成链表的头指针//将剩余的结点合并入结果链表中,pa作为临时指针使用while(tp){pa=tp->next;tp->next=Lc->next;Lc->next=tp;______;}returnLc;}
