SCJP程序员认证考试

单选题int i= 1, j= 10 ;   do (   if (i++> --j) continue;  ) while (i<5);   After execution, what are the values for I and j? ()Ai = 6 and j= 5Bi = 5 and j= 5Ci = 6 and j= 4Di = 5 and j= 6Ei = 6 and j= 6

题目
单选题
int i= 1, j= 10 ;   do (   if (i++> --j) continue;  ) while (i<5);   After execution, what are the values for I and j? ()
A

 i = 6 and j= 5

B

 i = 5 and j= 5

C

 i = 6 and j= 4

D

 i = 5 and j= 6

E

 i = 6 and j= 6

参考答案和解析
正确答案: D
解析: 暂无解析
如果没有搜索结果,请直接 联系老师 获取答案。
相似问题和答案

第1题:

给定下面的代码: int i=1,j=10; do { if(i++>--j) continue; }while(i<5) 执行完之后,i与j的值分别是多少? ( )

A.i=6,j=5

B.i=5,j=5

C.i=6,j=4

D.i=5,j=6


正确答案:D
解析:该题考查对自增自减运算符的理解。假如op是操作数,自增自减运算符有下面几种形式。++op、op++,表示对操作数op加1,其中,++op表示先对op加1然后再取其值,而。op++表示先取其值,然后再对op进行加1。 --op、op--,表示对操作数op进行减1操作,其中,--op表示先对op减1然后再取其值,而op--表示先取其值,然后再对op进行减1。在本题中,当进行到i=5时退出循环,此时j为6。故本题答案是D。

第2题:

有以下程序:includeusing namespace std;int main(){ inty=18,i=0,j,a[8]; do{ a[i]=

有以下程序: #include <iostream> using namespace std; int main() { int y=18,i=0,j,a[8]; do{ a[i]=y%2; i++; y=y/2; }while(y>=1); for(j=i-1;i>=0;j--) cout<<a[j]; cout<

A.1000

B.10010

C.110

D.10100


正确答案:B
解析:本题考核一维数组元素的引用和一维数组的输出。程序中的do-while循环语句的执行过程如下:第1次循环时,i=0、y=18,把“y%2”的值0存入a[0],执行i++后,i的值变为1,再执行y=y/2;,使y的值变为9。同理,第2次循环后,a[1]的值为1,第3次循环后,a[2]的值变为0,第4次循环后,a[3]的值变为0,第5次循环后,a[4]的值为1,然后退出do-while循环体。for循环是输出从a[4]到a[0]的值,结果为:10010。

第3题:

●试题四

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

【说明】

函数QuickSort是在一维数组A[n]上进行快速排序的递归算法。

【函数】

void QuickSort(int A[],int s,int t)

{int i=s,j=t+1,temp;

int x=A[s];

do{

do i++;while (1) ;

do j--;while(A[j]>x);

if(i<j){temp=A[i]; (2) ; (3) ;}

}while(i<j);

A[a]=A[j];A[j]=x;

if(s<i-1) (4) ;

if(j+1<t) (5) ;

}


正确答案:

●试题四

【答案】(1)Ai<x(2)Ai=Aj(3)Aj=temp(4)QuickSort(Asj-1)

(5)QuickSort(Aj+1t)

【解析】快速排序的思想是:任取待排序序列中的某个元素作为基准(一般取第一个元素),通过一趟排序,将待排元素分为左右两个子序列,左子序列元素的排序码均小于或等于基准元素的排序码,右子序列的排序码则大于基准元素的排序码,然后分别对两个子序列继续进行排序,直至整个序列有序。快速排序是对冒泡排序的一种改进方法,算法中元素的比较和交换是从两端向中间进行的,排序码较大的元素一次就能够交换到后面单元,排序码较小的记录一次就能够交换到前面单元,记录每次移动的距离较远,因而总的比较和移动次数较少。

 

第4题:

已知C源程序如下: include include void reverse(char S[]){ int C,i,J; f

已知C源程序如下:

include<stdio. h>

include<string. h>

void reverse(char S[]){

int C,i,J;

for(i=0,j=strlen(s)-1;i<j;i++,j++){

c=s[i];

s[i]=s[j];

s[j]=c;

}

}

void getHex(int number,char s[]){

int I;

i=0;

while(number>0){

if(number%16<10)

s[i++]=number%16+'0';

else

switch(number%16){

case 10:s[i++]='A';break;

case 11:s[i++]='B';break;

case 12:s[i++]='C';break;

case 13:s[i++]='D';break;

case 14:s[i++]='E';break;

case 15:s[i++]='F';break;

default:printf("Error");break;

}

number/=16;

}

s[i]:'\o';

reverse(s);

}

int main(){

unsigned int number;

int i=0:

char s[50];

printf("%s","please input number;\n");

scanf("%d",&number):

getHex(number,s);

i=0;

while(s[i])

printf("%c",s[i++]);

return 0;

}

画出程序中所有函数的控制流程图。


正确答案:流程图
流程图

第5题:

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

【说明】

函数QuickSort是在一维数组A[n]上进行快速排序的递归算法。

【函数】

void QuickSort( int A[ ],int s,int t)

{ int i=s,j=t+1,temp;

int x=A[s];

do{

do i ++ ;while (1);

do j -- ;while(A[j]>x);

if(i<j){temp=A[i];(2);(3);}

}while(i<j);

A[a] =A[j];A[j] =x;

if(s<i-1) (4);

if(j+1<t) (5);

}


正确答案:(1)A[i]x (2)A[i]=A[j] 3)A[j]=temp (4)QuickSort(Asj-1) (5)QuickSort(Aj+1t);
(1)A[i]x (2)A[i]=A[j] 3)A[j]=temp (4)QuickSort(A,s,j-1) (5)QuickSort(A,j+1,t); 解析:快速排序的思想是:任取待排序序列中的某个元素作为基准(一般取第一个元素),通过一趟排序,将待排元素分为左右两个子序列,左子序列元素的排序码均小于或等于基准元素的排序码,右子序列的排序码则大于基准元素的排序码,然后分别对两个子序列继续进行排序,直至整个序列有序。快速排序是对冒泡排序的一种改进方法,算法中元素的比较和交换是从两端向中间进行的,排序码较大的元素一次就能够交换到后面单元,排序码较小的记录一次就能够交换到前面单元,记录每次移动的距离较远,因而总的比较和移动次数较少。

第6题:

在执行完此程序段后,i,j值为 int i=1,j=10; do{ if(++i>j--)continue; }while(i<5);

A.i=6 and j=5

B.i=5 and j=5

C.i=6 and j=4

D.i=5 and j=6


正确答案:D
解析:本题考查考生对自增自减运算符的理解。++op和op++,表示对操作数op加1,其中++op表示先对op加1然后再取值,而op++表示先取值,然后再对op进行加1。--op和op--也是一样。当进行到i=5时退出循环,此时j为6。

第7题:

本程序用冒泡法对数组a[]的元素从大到小排序,请在程序空白处填空。 void bubble(int a[],int n) {int i,j,max,temp; max=n-1; do{j=0; for(i=0;i<max;i++) if(a[i]<a[i+1]) {temp=a[i];a[i]=a[i+1];a[i+1]=temp; j=i; } max=j; }while(( )); }


正确答案:max>0
max>0 解析:本题是典型的冒泡排序题,每一次for循环将从数组a中找出剩下数中的最大的值放在这些数的最前端,若数组a中有n个数,则完成数组排序共需n-1次循环。令max=n-1,每次循环后i值增1,imax条件不足,即n-1次循环后,此时i=j=max=0,循环结束。

第8题:

有以下程序inclUdevoidfun(int*s,intn1,intn2){inti,j,t;i=n1;j=n2;while(i

有以下程序 #inclUde <stdio.h> void fun(int *s,int n1,int n2) { int i,j,t; i=n1; j=n2; while(i<j) {t=s[i];s[i]=s[j];s[j]=t;i++;j--;} } main() { int a[10]={1,2,3,4,5,6,7,8,9,0},k; fun(a,0,3); fun(a,4

A.0987654321

B.4321098765

C.5678901234

D.0987651234


正确答案:C
解析: 函数fun(int*s,int n1,int n2)的功能是对数组s中的元素进行首尾互相调换。所以在主函数中,当fun(a,0,3)执行完后,数组a[12]={4,3,2,1,5,6,7,8,9,0};再执行fun(a,4,9),数组a[12]={4,3,2,1,0,9,8,7,6,5};再执行fun(a,0,9)后,数组a[12]={5,6,7,8,9,0,1,2,3,4}。

第9题:

执行下面的程序段后i和j的结果为 int i=1,j=10; do { if(i++>--j)continue; } while(i<5);

A.i=6,j=5

B.i=5,j=5

C.i=6,j=4

D.i=5,j=6


正确答案:D
解析:本题考查考生对自增自减运算符的理解。++op和op++,表示对操作数op加1,其中++op表示先对op加1然后再取值,而op++表示先取值,然后再对op进行加1。-op和op--也是一样,当进行到i=5时退出循环,此时j为6。因此,本题正确答案为选项D。

第10题:

下列循环语句中有语法错误的是

A.int i;for(i=1;i<10;i++) cout<<‘*’;

B.int i,j;for(i=1,j=0;i<10;i++,j++)cout<<‘*’;

C.int i=0;for(;i<10;i++)cout<<‘*’;

D.for(1) cout<<‘*’;


正确答案:D
解析:D项语法错误。for语句语法格式为:
  for(<表达式1>;<表达式2>;<表达式3>)
  <语句>
  D选项for语句中漏掉了两个分号。

更多相关问题