工学

单选题有下列程序段:X=1 n=0 Do While x<20 x=x*3 n=n+1 Enddo ?x,n 该程序段的执行结果为()。A 15和1B 27和3C 195和3D 600和4

题目
单选题
有下列程序段:X=1 n=0 Do While x<20 x=x*3 n=n+1 Enddo ?x,n 该程序段的执行结果为()。
A

15和1

B

27和3

C

195和3

D

600和4

如果没有搜索结果,请直接 联系老师 获取答案。
如果没有搜索结果,请直接 联系老师 获取答案。
相似问题和答案

第1题:

下列程序段执行以后,内存变量y的值是( )。 CLEAR x=12345 y=0 DO WHILE x>O y=y+x%10 x=int(x/10) ENDDO ?y

A.54321

B.12345

C.51

D.15


正确答案:D
解析:程序的功能是从后往前依次读取各位上的数值,并对它们求和,所以最终的结果为15。

第2题:

在VB程序中,以下程序段执行后,x的值为( )x=0Do While x<=2x=x+1LoopA.2B.3C.4D.5

在VB程序中,以下程序段执行后,x的值为( )

x=0

Do While x<=2

x=x+1

Loop

A.2

B.3

C.4

D.5


正确答案:B

第3题:

阅读下列程序说明和C++代码,将应填入(n)处。

【说明】

“背包问题”的基本描述是:有一个背包,能盛放的物品总重量为S,设有N件物品,其重量分别为w1;w2,……,wn,希望从N件物品中选择若干件物品,所选物品的重量之和恰能放入该背包,即所选物品的重量之和等于S。

如下程序均能求得“背包问题”的一组解,其中程序4.1是“背包问题”的递归解法,而程序4.2是“背包问题”的非递归解法。

【程序4.1】

include<stdio.h>

define N 7

define S 15

int w[N+1]={0,1,4,3,4,5,2,7};

int knap(int s,int n)

{ if(s==0)return 1;

if(s<0||(s>0& &n<1))return 0;

if((1)))|

printf("%4d",w[n]);return 1;

} return (2);

}

main(){

if(knap(S,N))printf("OK!\n");

else printf("NO!\n");

}

【程序4.2】

include<stdio.h>

define N 7

define S 15

typedef struct{

int s;

int n:

int job;

} KNAPTP;

int w[N+1]={0,1,4,3,4,5,2,7};

int knap(int s,int n);

main(){

if(knap(S,N))printf("OK!\n");

else printf("NO!\n");}

int knap(int s,int n)

{ KNAPTP stack[100],x;

int top,k,rep;

x.s=s;x.n=n;

x.job=0;

top=|;Stack[top]=x;

k=0;

while((3)){

x=Stack[top];

rep=1;

while(!k && rep){

if(x.s==0)k=1;/*已求得一组解*/

else if(x.s<0||x.n <=0)rep=0;

else{x.s=(4);x.job=1;

(5)=x;

}

}

if(!k){

rep=1;

while(top>=1&&rep){

x=stack[top--];

if(x.job==1){

x.s+=W[x.n+1];

x.job=2;

Stack[++top]=x;

(6);

}

}

}

}

if(k){/*输出一组解*/

while(top>=1){

x=staCk[top--];

if(x.job==1)

printf("%d\t",w[x.n+1]);

}

}

return k;

}


正确答案:(1)knap(s-w[n]n-1)(2)knap(sn-1)(3)top>=1 && ! k 或 top>0 && k==0(4)x.s-w[x.n--](5)stack[++top](6)rep=0
(1)knap(s-w[n],n-1)(2)knap(s,n-1)(3)top>=1 && ! k 或 top>0 && k==0(4)x.s-w[x.n--](5)stack[++top](6)rep=0 解析:试题提供了两种解决问题的方法,程序5.1是用递归的方法来解决背包问题,程序5.2使用非递归的方法来解决背包问题。每次选择一个物品放入背包,那么剩余的物品和背包剩余的重量,又构成一个“背包问题”。程序从数组下标最大的物品开始考查,因此(1)处应该填“knap(s-w[n],n-1)”,即将数组中第N个物品放入背包,如果它能够放入到背包中,则该物品是构成解的元素之一;否则,将该物品从背包中取出,该物品不构成解的元素,在以后的考查中,它可以被排除,因此(2)处应该填“knap(s,n-1)”。在改程序中用栈来保存已经考查过的物品,结构KNAPTP表示经过考查的物品,s表示考查过该物品后背包所能够盛放的物品的重量;n表示该物品在数组W中的下标;job表示物品当前的状态:当job等于1,表示物品n可以放入背包; job等于2表示物品n不能被放入到背包,那么在以后的选取中将不再考虑该物品。初始时job等于0,表示背包中没有任何放入任何物品。 K为有解的标志。Rep为一个标志变量,rep等于0,表示结束当前的动作;rep等于1表示继续进行当前的动作。当栈顶物品不能放入背包时,将rep设置为0,表示下一步不从数组w中取物品。其初值为1。开始时,将数组中下标最大的物品放入栈中,然后开始考查该物品。该物品满足放入背包的条件,第(4)(5)空将完成将物品放入背包的操作,因此(4)空填“x.s-w[x.n--]”,修改背包的可容纳物品的重量; (5)处填"stack[++top]",将下一个要考查的物品放入栈中。若该物品不满足放入背包的条件,则将该物品从背包中取出,因此将rep置为 0,结束循环while(! k&&rep)。将物品从背包中取出,即释放该物品在背包中所占的重量,并标记为不能放入到背包(job=2),再将其放入到栈中;然后继续考查数组w中的下一个物品,因此需要结束循环while (top>=1 &&rep),将rep置为0,所以第(6)处应该填“rep=0”。在第三处要求给出循环结束的条件,即可以继续选取物品的条件,在此处填“top>=1&&!k”。

第4题:

下面程序的执行结果是【】。include void main(){int n=0,x=0;do{n++;if(n%3==2&&

下面程序的执行结果是【 】。

include <iostream. h>

void main()

{

int n=0,x=0;

do

{

n++;

if(n%3==2&&n%5==3&&n%7==2)

x=1;

}while(x!=1);

cout<<"n=" <<n<<end1;

}


正确答案:n=23
n=23

第5题:

执行以下程序段的输出结果是( )。 int m=0x12,n=0x12; m=m-n; printf("%X\n",m);

A.0X0

B.0X12

C.0x0

D.0


正确答案:D
解析:格式字符X或x是以十六进制无符号形式输出整型数(注:输出时不显示前导0x或0X)。

第6题:

在VB程序中,以下程序段执行后,x的值为( )x=0Do While x<50x=(x+2)*(x+3)LoopA.0B.72C.50D

在VB程序中,以下程序段执行后,x的值为( )

x=0

Do While x<50

x=(x+2)*(x+3)

Loop

A.0

B.72

C.50

D.168


正确答案:B

第7题:

假定有如下事件过程: Privte Sub Form_Click0 Dim x As Integer,n As Integer x=1 n=0 Do While x<28 x=x*3 n=n+1 Loop Print x,n End Sub 程序运行后,单击窗体,输出结果是( )。

A.81 4

B.56 3

C.28 1

D.243 5


正确答案:A

第8题:

有以下程序 int fun(int n) {if(n==1)return 1; else rerurn(n+fun(n+1)); } main() {int x; scanf("%d",&x);x=fun(x);printf("%d\n",x); } 执行程序时,给变量x输入10,程序的输出结果是

A.55

B.54

C.65

D.45


正确答案:A
解析: 本程序考查的是函数的递归调用,在调用一个函数的过程中又出现直接或间接地调用该函数本身,称为函数的递归调用,执行结果为1+2+3+4+5+6+7+8+ 9+10=55。

第9题:

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

【说明】

“背包问题”的基本描述是:有一个背包,能盛放的物品总重量为S,设有N件物品,其重量分别为w1,w2,…,wn。希望从N件物品中选择若干件物品,所选物品的重量之和恰能放入该背包,即所选物品的重量之和等于S。

如下程序均能求得“背包问题”的一组解,其中程序1是“背包问题”的递归解法,而程序2是“背包问题”的非递归解法。

【程序1】

include<stdio.h>

define N 7

define S 15

int w[N+1]={0,1,4,3,4,5,2,7};

int knap(int s, int n)

{

if(s==0) return 1;

if(s<0 || (s>0 && n<1))return 0;

if((1)){/*考虑物品n被选择的情况*/

printf("%4d",w[n]);

return 1;

}

return (2);/*考虑不选择物品n的情况*/

}

main()

{

if(knap(S,N))printf("OK!\n");

else printf("N0!\n");

}

【程序2】

include<stdio.h>

define N 7

define S 15

typedef struct{

int s;

int n;

int job;

}KNAPTP;

int w[N+1]={0,1,4,3,4,5,2,7};

int knap(int s, int n);

main()

{

if(knap(S,N)) printf("0K!\n");

else printf("N0!\n");

}

int knap(int s, int n)

{

KNAPTP stack[100],x;

int top, k, rep;

x.s=s;x.n=n;

x.job=0;

top=1; stack[top]=x;

k=0;

while( (3) ){

x=stack[top];

rep=1;

while(!k && rep){

if(x.s==0) k=1;/*已求得一组解*/

else if(x.s<0 || x.n<=0) rep=0;

else{

x.s=(4);

x.job=1;

(5)=x;

}

}/*while*/

if(!k){

rep=1;

while(top>=1 && rep){

x=stack[top--];

if(x.job==1){

x.s +=w[x.n+1];

x.job=2;

stack[++top]=x;

(6);

}/*if*/

}/*while*/

}/*if*/

/*while*/

if(k){&nbs


正确答案:(1) knap(s-w[n]n-1) (2) knap(sn-1) (3) top>=1 && !k 或 top>0 && k==0 (4) x.s-w[x.n--] (5) stack[++top] (6) rep=0
(1) knap(s-w[n],n-1) (2) knap(s,n-1) (3) top>=1 && !k 或 top>0 && k==0 (4) x.s-w[x.n--] (5) stack[++top] (6) rep=0 解析:本题考查“背包”问题,这是一个非常经典的问题,一般采用递归法实现。
典型做法是逐个考查每一件物品,对于第i件物品的选择考虑有两种可能。
.考虑物品i被选择,这种可能仅当包含它不会超过方案总重量限制时才是可行的。选中后继续递归考虑其余物品的选择。
.考虑物品i不被选择,这种可能仅当不包含物品i也有可能找到价值更大的方案时才是可行的。
程序1是递归算法实现。对每个物品i,考查选择放入和不放入背包两种情况。函数knap(int s,int n)中,形参s是考查完物品i后背包还能装载的重量,n是考查完物品i后下一个待考查的物品。每次选择一个物品放入背包,那么剩余的物品和背包剩余重量又构成一个“背包问题”。根据注释,空(1)是考查物品n放入背包的情况,既然放入背包,则背包剩余可装重量为 s-w[n],继续考查物品n-1。这点可从主函数的调用形式“knap(S,N)”分析出。故空(1)应填“knap(s-w[n],n-1)”。空(2)是考查物品n不放入背包的情况,既然不放入背包,则背包可装重量仍为s,继续考查物品n-1。故空(2)应填“knap(s,n-1)”。
程序2是非递归算法实现,相对较难。算法思想仍是对每个物品i分别考查选择放入和不放入两种情况,借助栈实现,即数组stack。其实就是手动完成递归算法中由系统自动完成的压栈、出栈操作。
据注释“k=1时则求得一组解”可知k为是否求得解的标志:k=0表示没有解,继续求解。经分析,结构变量KNAPTP表示经过考查的物品:分量s表示考查过该物品后,背包所能盛放的物品的重量,分量n表示待考查的下一个物品在数组w中的下标,分量job表示物品当前的状态,job等于1表示物品n可以放入背包,job等于2表示物品不能放入背包,在以后的选取中将不再考虑该物品,初始时job等于0表示背包中没有放入任何物品。rep是一个标志变量,等于。表示结束当前的动作,等于1表示继续进行当前的动作;当栈顶物品不能装入背包时,将rep置为0,表示下一步不再从数组w中取物品。rep初值为1。x为工作节点。
while( (3) )循环体内的语句可以肯定是考查各个物品n的选择情况。对物品n,先考查将物品放入背包的情况。显然,如果物品n满足放入背包的条件,则空(4)和空(5)完成将物品放入背包的操作,其中空(4)应该是将工作节点x的分量s值减去所考查物品的重量。且n要减1,修改背包可容纳物品的重量和设置下一个待考查物品。而空(5)则需要将修改后的工作节点x送到栈顶,将下一个待考查的物品入栈。故空(4)应填“x.s-w[x.n--]”,空(5)应填“stack[++top]”。
if(!k)后的程序段是处理所考查的物品不满足放入背包的条件时的情况(rep=0,while(!k && rep)循环结束),则将该物品从背包中取出,修改其job值为2,用以标记该物品不能放入背包。修改完后跳出while(top>=1 && rep)循环,因此需要将rep置为0,用以结束循环。故空(6)应填“rep=0”。

第10题:

有如下程序 public class Sun { public static void main(String args[ ]) { int x=0; int n=0; while(x<50) { x=(x+2)*(x+3); n=n+1; } System.out.println(n+"和"+x); } } 上述程序的运行结果是( )。

A.1和0

B.2和72

C.3和50

D.4和168


正确答案:B
解析:本题考查对while循环语句的理解。本例中使用while语句宋计算结果x,第1次循环,x=6,n=1;第2次循环,x=72,n=2。故本题答案是B。

更多相关问题