第35题  设有下面程序

c_choice35-01

则程序的运行结果是­

­      A    0,12,1,16,2,16,3,16

­      B   0,12,1,16,2,16

­      C    1,12,2,16,3,16

­      D    1,12,2,16,3,20

答案  C

解析    考查breakcontinue语句的用法。

变量声明

­        int  k,  x = 5;

定义整型变量k和x并为x赋初值5,然后执行for语句

­        for (k = 0; k <= 2; k++) {
­                if (x > 12)
­                        break;
­                if (x % 2) {
­                        x += 3;
­                        continue;
­                }
­                x += 4;
­                printf(″%d,%d,″, k, x);
­        }

循环体是复合语句,即花括号语句,由4条语句并列组成:两条if语句、赋值语句x += 4;和printf语句。从(k = 0; k <= 2; k++)看出,循环体重复执行3次,分别对应k取值0、1、2,当k递增至3时,循环因k <= 2不成立而终止,故循环结束后k值为3。循环开始前,变量x初值为5。

第1轮循环:k为0、x为5,因x > 12不成立,故break语句不执行。因x % 2不等于0,故执行x += 3;使x加3变成8、紧跟执行continue语句,立即转向计算k++使k加1变成1、而后判别k <= 2,因k <= 2成立,故进入第2轮循环。

第2轮循环:k为1、x为8,因x > 12不成立,故break语句不执行。因x % 2等于0,故不会执行x += 3;和continue语句,而是执行后继语句x += 4;使x加4变成12,紧跟执行printf(″%d,%d,″, k, x);输出k和x的当前值,即输出1,12,然后转向计算k++使k加1变成2、而后判别k <= 2,因k <= 2仍成立,故进入第3轮循环。

第3轮循环:k为2、x为12,因x > 12不成立,故break语句不执行。因x % 2等于0,故不会执行x += 3;和continue语句,而是执行后继语句x += 4;使x加4变成16,紧跟执行printf(″%d,%d,″, k, x);输出k和x的当前值,即输出2,16,然后转向计算k++使k加1变成3、而后判别k <= 2,因k <= 2不再成立,故循环结束,这时k为3、x为16。

循环结束后,接着执行第2条printf语句

­        printf(″%d,%d\n″, k, x);

输出3,16。三次输出连在一起就是1,12,2,16,3,16

知识点

① 在for循环体内,若执行break语句,则立即退出for循环、迫使循环终止

② 在for循环体内,若执行continue语句,则立即转向计算for语句的第3表达式,而后计算第2表达式、开启新一轮循环。在本题中,先转向k++、再判别k <= 2。可以形象地说,continue语句致使for循环″短路″,即跳过循环体的剩余语句,进入下轮循环

③ 运算符%执行两整数相除,得余数。在本题中,if语句的条件x % 2等价于x%2 != 0,若x % 2不等于0,则表明x是奇数。在练习题1中,if语句的条件为a%2 == 0,若a % 2等于0,则表明a是偶数。

练习题1  设有下面程序

c_choice35-02

则程序的运行结果是­

­      A    1,13,2,17,3,17,4,17

­      B   1,13,2,17,3,17

­      C    2,13,3,17,4,21

­      D    2,13,3,17,4,17

答案  D

解析 

循环开始前,变量a初值为6。

第1轮循环:i为1、a为6,因a > 13不成立,故break语句不执行。因a % 2等于0,故执行a += 3;使a加3变成9、紧跟执行continue语句,立即转向计算i++使i加1变成2、而后判别i <= 3,因i <= 3成立,故进入第2轮循环。

第2轮循环:i为2、a为9,因a > 13不成立,故break语句不执行。因a % 2不等于0,故不会执行a += 3;和continue语句,而是执行后继语句a += 4;使a加4变成13,紧跟执行printf(″%d,%d,″, i, a);输出i和a的当前值,即输出2,13,然后转向计算i++使i加1变成3、而后判别i <= 3,因i <= 3仍成立,故进入第3轮循环。

第3轮循环:i为3、a为13,因a > 13不成立,故break语句不执行。因a % 2不等于0,故不会执行a += 3;和continue语句,而是执行后继语句a += 4;使a加4变成17,紧跟执行printf(″%d,%d,″, i, a);输出i和a的当前值,即输出3,17,然后转向计算i++使i加1变成4、而后判别i <= 3,因i <= 3不再成立,故循环结束,这时i为4、a为17。

循环结束后,接着执行第2条printf语句

­        printf(″%d,%d\n″, i, a);

输出4,17。三次输出连在一起就是2,13,3,17,4,17

赞赏

返回