阅读以下应用程序说明和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( )

阅读以下应用程序说明和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 12

int 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( );

}

else

extend( );

else

change( );

ok = check(pos);

} while (pos >=0);

}

main( )


相关考题:

( 11 )下列程序的功能是找出被 5 、 7 除,余数为 1 的最小的 5 个正整数。请在程序空白处填入适当的语句,使程序可以完成指定的功能。Private Sub Form_Click()Dim Ncount %, n%n = n + 1If 【 11 】 ThenDebug.Print nNcount =Ncount + 1End IfLoop Until Ncont = 5End Sub

●试题七阅读以下说明和Java代码,将解答写入答题纸的对应栏内。【说明】下面程序的功能是找出所有三位数中,个、十、百位数字的立方和等于该数本身的三位数并显示。在程序的每条横线处填写一个适当的词或语句,使程序的功能完整。public (1) class cube_Root{public static void (2) main(String args[]){System.out.println("个、十、百位数字的立方和等于该数本身的三位数有:");for(int n=100;n1000;n++){int a,b,c;(3)b=n/10%10;(4)if( (5) )System.out.println(n);}}}

阅读以下说明和Java代码,将解答写入对应栏内。【说明】下面的程序中定义了两个方法求自然数1~100的和。具体如下:int suml(int n);利用循环求1~n的和,int sum2(int n);利用递归方法求和1~n的和;在main()方法中调用这两个方法求1~100的和并显示。在程序的每条横线处填写一个适当的语句,使程序的功能完整。public class Sum {public static void main (1){//1. 调用sum1(int n),求1~100的和//标准输出(2) ("1~100的和:" +sum1(100));//2. 调用sum2(int n),求1~100的和//标准输出(2) ("1~100的和:"+sum2(100));}static iht sum1( int n){int result=0;for(int i=1;i<=n;i++)(3)retrun result;}static int sum2(int n){if (4)return 1else(5)}}

阅读下列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);}

阅读以下程序说明和C++程序,将程序段中(1)~(7)空缺处的语句填写完整。[说明]使用MFC的CSocket类在两个或者多个应用程序之间建立通信。服务器应用程序先创建一个特殊的 Socket,用于监听客户应用程序的连接请求,然后再创建新的Socket来完成连接。从客户和服务器两端读取该连接,直到一个需要处理的报文到来为止。以下C++程序将封装这些功能,这样所有应用程序需要完成的只是创建一个Socket连接,然后处理到来的报文。这将包括一个新的服务器Socket类、新客户端Socket类和新的报文队列类。创建新的服务器Socket类程序的框架如下。第1个函数ListenEx()用于通知Socket开始监听客户应用程序。第2个函数OnAccept()在接收到连接请求时被调用。在其中创建新的Socket,并立刻设置它开始从客户应用程序读取报文,这些是通过调用第3个函数RecvThread()来完成的,该函数位于它自己的线程中。[C++程序][ListenEX()函数]

阅读下列程序说明和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语言函数,将解答填入对应栏内。【说明】下面待修改的C程序完成的功能是:对于给定的一个长正整数,从其个位数开始,每隔一位取一个数字(即取其个位、百位、万位等数字),形成一个新的整数并输出。例如,将该程序修改正确后,运行时若输入“14251382”,则输出的整数为“4532”。下面给出的C程序代码中有五个错误,请指出所有的错误。【C程序代码】01 include <stdio.h>0203 int main()04 {05 long n, num;06 int i;0708 do {09 printf("请输入一个正整数:");10 scanf("%ld", n);11 }while(n <= 0);12 k = 1;13 for (i = 1; n >= 0; i++) {14 if (i % 2 = 1) {15 num= num+ (n % 10) * k;16 k = k * 10;17 }18 n = n / 10;19 }20 printf("新数据为: %d \n",num);21 return 0;22 }

以下程序求两个整数M,N的最大公约数:SUBROUTINE ZDGUS(M,N)K=_DOIO J = 2,KIF(MOD(N,J). EQ. 0. AND. MOD(M,J). EQ. 0)L=J 10 CONTINUEWRITEC*,‘(2X,15),)LRETURNEND为了使程序完整,在_处应填入的是:A.MB.NC. MIN(M,N)D. M/N

以下程序求两个整数M,N 的最大公约数: SUBROUTINE ZDGUS(M,N) K=__________ DO 10 J=2,K IF(MOD(N,J).EQ.0.AND.MOD(M,J).EQ.0)L=J10 CONTINUE WRITE(*,’(2X,15)’)L RETURN END为了使程序完整,在_____处应填入的是:(A)M (B)N(C)MIN(M,N) (D)M/N