第5章 循环控制-5流程的转移控制-上传
- 格式:pptx
- 大小:1.00 MB
- 文档页数:33
第5章分支、循环程序设计本章要点: 转移指令的寻址方式及其执行过程,控制转移类指令的使用,分支和循环程序的设计和应用。
程序调试的方法,常见问题的程序设计方法。
一、单项选择题5.1.1条件转移是根据标志寄存器中的标志位来判断的,条件判断的标志位共有( B )位。
A. 4B. 5C. 6D. 95.1.2用一条条件转移指令一次可以实现( A )个分支。
A. 2B. 3C. 4D. N5.1.3 条件转移指令的转移范围是(A)。
A. -128~127B. 0~255C. 0~65535D. -32768~327675.1.4 设A为字变量,B为标号,下列指令中不正确的是(D)。
A. MOV AX,AB. JNZ BC. JMP [SI]D. JMP B[BX]5.1.5 下述指令中影响CF标志位的是(A)。
A. SHL AL,1B. MOV AL,1C. JC LD. JNC L5.1.6 下述指令中不影响CF标志位的是(A)。
A. INC SIB. SUB SI,0C. NEG ALD. TEST AL,15.1.7 在多重循环程序设计中,每次通过外层循环进入内层循环时,其内层循环的初始条件(B)。
A. 不必考虑B. 必须重新设置C. 必须清0D. 必须置15.1.8 当设计一个程序时,最重要的是(B)。
A. 程序的结构化B. 能使程序正常运行并实现功能C. 程序的执行速度快D. 程序占用的存储空间小*5.1.9 如果“JNC L”指令的操作码放在0040H,转移后在0020H处取下一指令的操作码,那么这条指令的位移量是(C)。
A. 1EHB. 20HC. 0DEHD. 0E0H*5.1.10 如果“JGE P”指令的操作码放在0050H,该指令的位移量是34H,执行完这条指令转移取下一条指令的偏移地址是(C)。
A. 82HB. 84HC. 86HD. 88H二、填空题5.2.1 当下面循环程序中的划线处填上一个什么数字时,执行的循环次数最多?MOV CX,____0______MOV AX,0L:INC AXLOOP L5.2.2 当两个数进行比较后,执行__JE L(JZ L)表示两数相等则转移到L。
第5章循环控制——流程的转移控制与用穷举法求解问题哈尔滨工业大学苏小红本节要讨论的主要问题⏹C语言中用于实现流程转移控制的语句有哪几种?⏹break语句和continue语句对循环过程的影响有什么不同?从韩信点兵谈起⏹韩信有一队兵,按从1至5排队报数,最末一个士兵报的数为1;按从1至6报数,最末一个士兵报的数为5;按从1至7报数,最末一个士兵报的数为4;最后再按从1至11报数,最末一个士兵报的数为10。
请问韩信至少有多少兵。
⏹穷举法⏹确定问题的输入和输出输入:无;输出:士兵至少x人⏹确定穷举对象:士兵数x⏹确定搜索范围:x从1开始试验⏹如何确定判定条件?韩信点兵⏹韩信有一队兵,按从1至5排队报数,最末一个士兵报的数为1;按从1至6报数,最末一个士兵报的数为5;按从1至7报数,最末一个士兵报的数为4;最后再按从1至11报数,最末一个士兵报的数为10。
请问韩信至少有多少兵。
⏹确定判定条件:按从1至5排队报数,最末一个士兵报的数为1 ?x被5整除,余数为1x被5、6、7、11整除,余数为1、5、4、101 2 3 4 51 2 3 4 5 1#include <stdio.h>int main(){}#include <stdio.h>int main(){}#include <stdio.h> int main(){int x;#include <stdio.h>int main(){int x;}#include <stdio.h> #include <stdlib.h> int main(){#include <stdio.h> int main() {int x = 0;韩信点兵continue与break的区别退出一层循环或switch,转到闭合循环之后的那一点中断此次循环,开始下一次循环#include <stdio.h> int main() {int i, n;for (i=1; i<=5; i++) {printf("Please enter n:"); scanf("%d", &n); if (n < 0) break;printf("n = %d\n", n); }printf("Program is over!\n"); return 0; }#include <stdio.h> int main() {int i, n;for (i=1; i<=5; i++) {printf("Please enter n:"); scanf("%d", &n); if (n < 0) continue;printf("n = %d\n", n); }printf("Program is over!\n"); return 0; }continue对循环的影响⏹大多数for循环可以转换为while循环⏹但并非全部,例如当循环体中有continue时Evil goto’s ? Maybe Not…两种适合使用goto语句的情况跳向共同的出口位置,进行退出前的处理工作跳出多重循环的一条捷径{…{…{…goto Error;}}}Error:用goto语句跳向共同的出口位置void Init(void)/*正常处理的代码*/ {#include <stdio.h>int main(){int x = 1;int find = 0; /*置找到标志变量为假*/ Array while (!find){{ Array printf("x = %d\n", x);find = 1; /*置找到标志变量为真*/ x++;}}return 0;}#include <stdio.h>int main(){int x = 1;do{x++;}while (!find);printf("x = %d\n", x);return 0;}第5章循环控制。