11.若i、j已定义为int类型,则以下程序段中的内循环体的执行次数是( ) for( i=5; i; i--) for(j= 0; j<4;j++){……} ①20 ② 24 ③ 25 ④ 30 【解】问题所给的程序段的外循环是一个阶循环语句,它的初始化部分置变量i的初值为5,循环条件简写成i,即i!=0,每次循环后变量i的值减1。所以外循环共控制5次循环。内循环也是一个for循环语句,它的初始化部分置变量j的初值为0,循环条件是j<4,每次循环后变量j的值增1。所以内循环共控制4次循环。这样,如内循环的体内未曾对变量i和j有修改,在内、外循环一起控制下,内循环的体共被重复执行20次。正确解答是①。 12.假定a和b为int型变量,则执行以下语句后b的值为( ) a=1; b=10; do b-=a; a++; }while<(b--<0); ①9 ②-2 ③-1 ④8 【解】在这个程序段中,循环开始前变量a的值为1,b的值为10,每次循环从变量b减去a,并让a增1,并在循环条件判定时,又让b减去1。第一次循环后,变量b的值变成9,变量a的值变为2,循环判断时,因b的值大于0,循环条件不成立,结束循环。但在循环判断时,让b减去了1,所以循环结束时,变量b的值为8。正确的解答是④。 13.设x和y为int型变量,则执行下面的循环后,y的值为( ) for(y=l, x=l; y<=50; y++){ if(x>=10) break; if(x%2==1){ x+=5; continue;} X -= 3; } ①2 ②4 ③6 ④8 【解】 for循环语句的初始化部分置变量x和y的初值为1,循环条件是(y<=50),每次循环后变量y的值增1,控制循环最多执行50次。循环体有三个语句:首先在发现变量X的值大于等于10时,结束循环;接着是当变量X除2的余数为1(即变量X是奇数)时,让变量X值增5,让X变成偶数,并直接进入下一轮循环;如变量X是偶数,则从变量X减去3,让变量X变成奇数。由上述分析知,每两次循环使变量X的值增加2.第一次循环后,变量X的值变成6。第二次循环后,变量X的值变成3。第三次循环后,变量X的位变成8。第四次循环后,变量X的值变成5。第五次循环后,变量X的值变成 10。第六次循环时,因变量X的位大于等于 10,直接跳出循环,这次循环是非正常结束,对变量y的修正只执行了5次。所以循环结束后,变量y的值增至6。正确的解答是③。 14.在C语言中,下列说法中正确的是( ) ①不能使用“do语句while(条件)”的循环 ②“do语句While(条件)”的循环中必须使用“break”语句退出循环 ③“do语句while(条件)”的循环中,当条件非0时将结束循环 ④“do语句while(条件)”的循环中,当条件为0时将结束循环 【解】 do-while语句的一般形式是: do语句 while(表达式); 其语义是重复执行其成分语句,直至表示条件的表达式值为0时结束。do-while语句是正常使用的一种循环结构之一。do-while语句的循环结束条件由while后的表达式值为0所控制,并不一定要有break语句跳出循环来结束循环。do-while语句在条件值非0时,将继续循环,而不是结束循环。条件值为0时,才结束循环。所以正确的选择是④。 15.若有以下程序段,W和k都是整型变量,则不能与该程序段等价的循环语句是( ) W= k; LB: if(w==0) gotO LE; w - -; printf("*"); goto LB; LE: ①for(w=k;w!=0;W--)printf("*"); ② w= k; While(W--!=0) Prinif(”* ”); ③ w= k; do{w--; prinif(“*”); } while( W!= 0); ④ for(w=k;W;--W) printf("*"); 【解】问题所给出的程序段用goto语句构造一个循环控制结构,该循环结构的初值是让变量W的值为k的值,循环结束条件是W的情等于0,循环体是让变量W的值减1,并输出一个字符* 。上述循环控制过程用for循环可描述如下: for=(w=k;W!=0; W--) printh("*"); 或写成: for(w=k ;w;--w) printf("*"); 若用while语句,可描述如下: W=k; while(w--!=0)printf("*"); w++;/*在w等于0时,也执行了一次 w--,这里是对w最后减1的补尝*/ 或更直观地写成: W=k; while(w!=0){ w--;Printf("*");} 若用do-while语句,可描述如下: W=k; if(W) do{ w--; prinif("*"); } while(w); 若写成: W=k; do{ W--; printf("*"); } while(w!=0); 是不正确的,因为原代码当k的值为0时,不输出字符*,而上面的改写,当k的值为0时,将输出许许多多的字符*。所以解答应是③。 |