阅读下列程序说明和C代码,将应填入(n)处的字句写在对应栏内[说明]本程序在3×3方格中填入1到10以内9个互不相等的整数,使所有相邻两个方格内的两个整数之和为质数。程序的输出是全部满足条件的方格。方格的序号如下图所示。程序采用试探法,从序号为0的方格开始,依次为当前方格寻找一个合理的可填整数,并在当前位置正确填入后,为下一方格寻找可填入的合理整数;如不能为当前方格寻找一个合理的可填整数,就要后退到前一方格,调整前一方格的填入整数;当序号为8的方格也填入合理的整数后,就找到了一个解。为检查当前方格所填整数的合理性,程序引入数组CheckMatrix,存放需要进行合理性检查的相邻方格的序号。事实上,CheckMatrix中只要求第i个方格中的数向前兼容,即填写第4个方格时,只检查在它之前、与之相邻的第1,3个方格是否满足和为素数的条件。[程序]include <stdio.h>int pos,a[9],b[11]; /*用于存储方格所填入的整数*/void write(int a[]) /*方格输出函数*/{ ……}int isPrime(int m) /*素数判断函数,若m为素数则返回1,否则返回0*/{ ……}int selectNum(int start) /*找到start到10之间尚未使用过的最小的数,若没有则返回0*/{ int j;for(j=start;j<=10;j++) if(b[j]) return j;return0;}int check() /*检查填入pos位置的整数是否合理*/{ int i,jint checkMatrix[][3]={{-1},{0,-1},{1,-1},{0,-1},{1,3,-1},{2,4,-1},{3,- 1},{4,6,-1},{5,7,-1}};for(i=0;(j=(1))>=0;i++)if(! isPrime((2)))return 0;return 1;}void extend() /*为下一方格找一个尚未使用过的整数*/{ (3)=selectNum(1);b[a[pos]]=0;}void change() /*为当前方格找下一个尚未使用过的整数,若找不到则回溯*/{ int j;while(pos>=0(j=selectNum(a[pos]+1))= =0) b[a[pos- -]]=1;if(pos<0)return;(4);a[pos] =j;b[j]=0; }void find(){ int k=1;pos=0;a[pos]=1;b[a[pos]]=0;do{if(ok)if( (5) ){write(a);change();}else extend();else change();k=check(pos);}while(pos>=0);}void main(){ int i;for(i=1;i<=10;i++)b[i]=1;find();}

阅读下列程序说明和C代码,将应填入(n)处的字句写在对应栏内[说明]

本程序在3×3方格中填入1到10以内9个互不相等的整数,使所有相邻两个方格内的两个整数之和为质数。程序的输出是全部满足条件的方格。

方格的序号如下图所示。程序采用试探法,从序号为0的方格开始,依次为当前方格寻找一个合理的可填整数,并在当前位置正确填入后,为下一方格寻找可填入的合理整数;如不能为当前方格寻找一个合理的可填整数,就要后退到前一方格,调整前一方格的填入整数;当序号为8的方格也填入合理的整数后,就找到了一个解。

为检查当前方格所填整数的合理性,程序引入数组CheckMatrix,存放需要进行合理性检查的相邻方格的序号。事实上,CheckMatrix中只要求第i个方格中的数向前兼容,即填写第4个方格时,只检查在它之前、与之相邻的第1,3个方格是否满足和为素数的条件。

[程序]

include <stdio.h>

int pos,a[9],b[11]; /*用于存储方格所填入的整数*/

void write(int a[]) /*方格输出函数*/

{ ……}

int isPrime(int m) /*素数判断函数,若m为素数则返回1,否则返回0*/

{ ……}

int selectNum(int start) /*找到start到10之间尚未使用过的最小的数,若没有则返回0*/

{ int j;

for(j=start;j<=10;j++) if(b[j]) return j;

return0;

}

int check() /*检查填入pos位置的整数是否合理*/

{ int i,j

int checkMatrix[][3]={{-1},{0,-1},{1,-1},{0,-1},{1,3,-1},{2,4,-1},{3,- 1},{4,6,-1},{5,7,-1}};

for(i=0;(j=(1))>=0;i++)

if(! isPrime((2)))return 0;

return 1;

}

void extend() /*为下一方格找一个尚未使用过的整数*/

{ (3)=selectNum(1);

b[a[pos]]=0;

}

void change() /*为当前方格找下一个尚未使用过的整数,若找不到则回溯*/

{ int j;

while(pos>=0&&(j=selectNum(a[pos]+1))= =0) b[a[pos- -]]=1;

if(pos<0)return;

(4);a[pos] =j;b[j]=0; }

void find()

{ int k=1;

pos=0;a[pos]=1;b[a[pos]]=0;

do{

if(ok)

if( (5) ){

write(a);change();

}

else extend();

else change();

k=check(pos);

}while(pos>=0);

}

void main()

{ int i;

for(i=1;i<=10;i++)b[i]=1;

find();

}


相关考题:

●试题七阅读以下应用说明及Visual Basic程序代码,将应填入(n)处的字句写在答题纸的对应栏内。【说明】已知窗体上有两个名为cmdGene和cmdSort的命令按钮。单击cmdGene按钮时,随机产生10个[1,100]范围内的整数并将它们放在数组intA中;单击cmdSort按钮时,用选择法排序这10个数并输出。【程序代码】Dim intA(1 To 10)As IntegerPrivate Sub cmdGene_Click()Dim intI As IntegerRandomizeFor intI=1 To 10intA(intI)= (1)Next intIEnd SubPrivate Sub cmdSort_Click()Dim intI,intJ,intMin,intTemp As IntegerFor intI=1 To 9intMin=intA(intI)For intJ= (2) To 10If intA(intJ)intMin ThenTemp=intA(intJ)intA(intJ)= (3)intMin=intTempEnd IfNext intJ(4)(5)For intI=1 To 10Print Str(intA(intI))+" ";Next intINext IntIPrintEnd Sub

阅读下列程序说明和C代码,把应填入其中n处的字句写在答卷的对应栏内。【说明】程序利用选择排序算法对数组a中的N个整数按照从小到大的顺序排列,并将排序结果显示出来。【程序】define N 10main(){void (1);int i,a[N];for(i=0;i<10,i++) /*输入*/scanf(“%d”,a[i]);(2);for(i=0;i<N,i++) /*输出*/printf(“%3d”,a[i]);}void selectSon(int x[],int n){int i,j,k,t;for(int i=0; (3);i++){k=i;for(j=i+1;j<n;j++)if (4) k=j;if (5){t=x[i];x[i]=x[k];x[k] =t;}}}

阅读下列C程序和程序说明,将应填入(n)处的字句写在对应栏内。【说明】本程序在3×3方格中填入1~N(N≥10)内的某9个互不相同的整数,使所有相邻两个方格内的两个整数之和为质数。试求出满足这个要求的所有填法。3×3方格中的每个方格按行按列(先行后列)序号排列为:0,1,2,3,4,5,6,7,8。程序采用试探法,即从序号为0的方格开始,为当前方格寻找一个合理的可填整数,并在当前位置正确填入后,为下一方格寻找可填入的合理整数。如不能为当前方格找到一个合理的可填整数,就要回退到前一方格,调整前一方格的填入整数;直至序号为8的方格也填入合理的整数后,就找到了一个解,将该解输出。再调整序号为8的方格所填整数,继续去找下一个解。为了检查当前方格的填入整数的合理性,程序引入二维数组check Matrix,存放需要进行合理性检查的相邻方格的序号。include <stdio. h>define N 12int b[N+1];int pos;int a[9];/* 用于存储诸方格所填入的整数*/int AllNum=0;/* 统计有多少种填法*/int checkMatrix[][3]={ {-1},{0,-1},{1,-1},{0,-1},{1,3,-1},{2,4,-1},{3,-1},{4,6,-1},{5,7,-1}};void write(int a[]){ int i, j;for(i=0; i<3; i++){ for(j=0; j<3; j++)printf("%3d", a[3*i+j]);printf("\n");}}int isPrime(int m){ int i;if(m==2)return 1;if(m==1 ‖ m%2==0)return 0;for(i=3; i*i<m;){ if(m%i==0)return 0;i+=2;}return 1;}int selectNum(int start){ int j;for(j=start; j<=N; j++)if(b[j])return j;return 0;}int check()/*检查填入pos位置的整数是否合理*/{ int i,j;for(i=0; (j=(1))>=0; i++)if(!isPrime(a[pos]+a[j]))(2);(3);}extend ()/* 为下一方格找一个尚未使用过的整数*/{ a[(4)]=selectNum(1);b[a[pos]]=0;}void change ()/*为当前方格找下一个尚未使用过的整数(找不到回溯)*/{ int j;while(pos >=0 (j=selectNum((5)))==0)b[a[pos--]]=1;if(pos<0)return;b[a[pos]]=1; a[pos]=j; b[j]=0;}int find (){ int k=1;pos=0; a[pos]=1; b[a[pos]]=0;do{if(ok)if(pos==8){ write(a);change();AllNum++;/* 统计有多少种填法*/}else extend();else change();k=check();}while(pos>=0);}void main(){ int i;for(i=1; i<=N; i++) b[i]=1;find();prinrf("共有%d种不同填法!/n", AllNum);}

阅读以下说明及Visual Basic程序代码,将应填入(n)处的字句写在对应栏内。【说明】以下程序为求行列式X(5,5)的值S。【Visual Basic代码】Private Function col ( byval x ( 5,5 ) as integer ) as longdim fesult as longdim temp as longdim I as integerdim j as integerdim k as imegerresult = 0for I = to 5(1)for j = 1 to 5if I+j>6 thenk= ( 1+j ) mod 5elsek=1endiftemp=temp*x ( k,j )(2)result=(3)(4)(5)End function

阅读以下应用程序说明和C程序,将C程序段中(1)-(7)空缺处的语句填写完整。[说明]以下[C程序]所完成的功能是在3X3方格中填入数字1~N(N≥10)内的某9个互不相同的整数,使所有相邻两个方格内的两个整数之和为质数。系统输出满足该要求的所有填法。系统的部分输出结果如图3-18所示。图3-18 系统的部分输出结果3×3方格从第1行左上角方格开始的序号分别为0、1、2,第2行左边方格开始的序号分别为3、4、 5,第3行左下角方格开始的序号分别为6、7、8。以下[C程序]采用试探法,即从序号为0的方格(左上角)开始,为当前方格寻找一个合理的可填整数,并在当前位置正确填入后,为下一方格寻找可填入的合理整数。如不能为当前方格寻找一个合理的可填整数,就要后退到前一方格,调整前一方格的整数。直至序号为8的方格(右下角)也填入合理的整数时,就找到了一个解,将该解输出,并调整序号为8的方格所填的整数,继续去找下一个解。为了检查当前方格的填入整数的合理性,C程序引入二维数组checkMatrix,用于存放需要进行合理性检查的相邻方格的序号。[C程序]include <stdio.h>define N 12int a [9]; /* 用于存储方格所填入的整数 */int b[N+1];int pos;checkMatrix[][3] = {{-1},{0,-1},{1,-1},{0,-1},{1,3,-1},{2,4,-1},{3,-1} {4,6,-1}, 5,7,-1}};void write(int a[]){ int i, j;for ( i = 0; i < 3; i++)for ( j = 0; j < 3; j++)printf("%3d",a[3*i+j]);printf("\n");}}int isPrime(int m){ int i;if (m == 2)return 1;if (m == 1 || m % 2 == 0)return 0;for (i = 3; i * i <= m; ){ if (m % i == O)return 0;i+ =2;}return 1;}int selectNum(int start){ int j;for (j = start; j <= N; j++)if (b[j])return j;return 0;}int check ( ) /* 检查填入pos位置的整数是否合理 */{ int i, j;for (i = 0; (j =(1)) >= 0; i++)if (!isPrime(a[pos] + a[j]))(2);(3);}extend () /* 为下一方格找一个尚未使用过的整数 * /{ a[(4)] = selectNum(1);b[a[pos]] = 0;}void change() /* 为当前方格找下一个尚未使用过的整数(找不到回溯) */{ int j;while (pos >= 0 (j = selectNum((5) ) == 0(6);if (pos < 0)return;b[a[pos]] = 1;a[pos] = j;b[j] = 0;}find ( ){ int k = 1;pos = 0; a[pos] = 1; b[a[pos]] = 0;de {if (ok)if ( (7) ) {write (a);change( );}elseextend( );elsechange( );ok = check(pos);} while (pos >=0);}main( )

阅读以下应用说明及Visual Basic程序代码,将应填入(n)处的字句写在对应栏内。【说明】已知窗体上有两个名为cmdGene和cmdSort的命令按钮。单击cmdCene按钮时,随机产生10个[1,100]范围内的整数并将它们放在数组intA中;单击cmdSort按钮时,用选择法排序这10个数并输出。【程序代码】Dim intA(1 To 10)As integerPrivate Sub cmdGene_Click( )Dim intl As IntegerRandomizeFor intl = 1 To 10intA(intl) =(1)Next intlEnd SubPrivate Sub cmdSort_Click( )Dim intl, intJ,intMin, intTemp As IntegerFor intl = 1 To 9intMin = intA(intl)For intJ=(2) To 10If intA(intJ) < intMin ThenTemp = intA(intJ)intA(intJ)=(3)intMin = intTempEnd IfNext intJ(4)(5)For intl = 1 To 10Print Str(intA(intl))+" ";Next intlNext lntlPrintEnd Sub

阅读以下说明、Java代码,将应填入(n)处的字句写在对应栏内。【说明】本程序输出10000之内的所有完全数。完全数是指等于其所有因子和(包括1,但不包括这个数本身)的数。例如:6=1×2×3,6=1+2+3,则6是一个完全数。【程序】public class PerfectNum{Public static void main(String args[]){int count=1;for(int i=1; i<10000; i++){int y=0;for(int j=1; j<i; j++)if((1))y=(2)if((3)){System.out.print( (4) +String.valueOf('\t'));(5)If(count%3==0)System.out.printin();}}}

●试题二阅读下列函数说明和C代码,将应填入(n)处的字句写在答题纸的对应栏内。【说明】该程序运行后,输出下面的数字金字塔【程序】includestdio.hmain (){char max,next;int i;for(max=′1′;max=′9′;max++){for(i=1;i=20- (1) ;++i)printf(" ");for(next= (2) ;next= (3) ;next++)printf("%c",next);for(next= (4) ;next= (5) ;next--)printf("%c",next);printf("\n");}}

试题三(共 15 分)阅读以下说明和 C 程序,将应填入 (n) 处的字句写在答题纸的对应栏内。