第四章 C51流程控制语句

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第四章
C51流程控制语句
6
4.1.3 循环结构及其流程图
循环结构两大要素: 无限循环 循环条件 p 死循环 结束循环的条件表达式 循环体 A 循环执行的语句或语句组
名词解释 名词解释
空循环 设置循环条件要特别注意确定: 循环变量的初值 循环变量的终值 循环变量的变化规律
第四章 C51流程控制语句
第四章 C51流程控制语句
5
4.1.3 循环结构及其流程图
在C51语言中可用以下语句构成循环:




if … goto while do … while for
其中if … goto是通过编程技巧(if语句和goto语句组 合)构成循环功能。而且goto语句将影响程序流程的 模块化,使程序可读性变差,所以结构化程序设计主 张限制goto语句的使用。 其他三种语句是C51语言提供的循环结构专用语句。
第四章
【例】 求∑i =1+2+3+4…+99+100 (i=1~100)
C51流程控制语句
21
main( ) 4.3.4 其他循环控制结构 {

break 结束循环
在switch中退出switch结构;
第四章
C51流程控制语句
20
4.3.3 for语句循环结构

一般形式 for (表达式1;条件表达式;表达式3) 循环语句(组);




用于构成计数型当型循环:先 判断后执行/条件为真继续循环, main() 直到条件为假时结束循环。 表达式1: 整个循环中只执行1次, { 常用来对循环变量设置初值 int i , s=0; 条件表达式(表达式2): 其值 为真(非0)时继续执行循环语 for (i=1;i<=100;i++) 句(组),否则结束循环 s=s+i; 表达式3: 常用于循环变量值的 更新(循环体的一部分每次循环 } 语句组执行完后执行一次) s=?
说明
1、每个case常量表达式的值 必须互不相同,否则会出现互 相矛盾的结果。 2、允许多个case共用一个执 行语句。
求程序运行结果。 结果:a=0x02,b=0x01 如果x=2? 结果:a=0x01,b=0x01 如果x=3? 结果:a=0x01,b=0x01
第四章 C51流程控制语句
18
4.3 循环语句
4.3.1 While语句
【例】从键盘输入一个整数12456,分析以下程序运行结果。
main() { int data num; char data c; num=12456; while ((num/=10)>0) { c=num%10; printf(“%d”,c) }; } 结果: 6542 将各位数字反序显示出来
if (x=2) printf(“y>0”);
第四章
if (1<=x<=10) y=x-1;
C51流程控制语句
12
4.2 选择语句
4.2.2 switch/case语句
switch 语句的一般形式: switch(e) { c1~cn case c1:语句组1; 常量(整数、字符、 常量表达式如3+4,不 case c2:语句组2; 含变量或函数) …… case cn:语句组n; default:语句组n+1; /*可缺省*/ } default – 不是c1~cn的情况 (位置不一定在最后)。
break!
这才差不 多!
第四章
C51流程控制语句
பைடு நூலகம்
16
4.2 选择语句
讨论
解决方法——break语句: main() { char data s; scanf(“%c”,&s); switch(s) { case ‘A’ : printf(“85~100\n”);break; case ‘B’ : printf(“70~84\n”);break; case ‘C’ : printf(“60~69\n”);break; case ‘D’ : printf(“<60\n”);break; default : printf(“错误输入\n”); } }
第四章 C51流程控制语句
1
4.1.1 顺序结构及其流程图
顺序结构
A块、B块顺序执行(每块代表一个或一组操作)
第四章
C51流程控制语句
2
4.1.2 选择结构及其流程图
选择结构 条件p成立时执行a块(否 则执行b块) if 选择结构 条件为真时 执行某个指定的操作,条 件为假时跳过该操作(单 路选择) if…else选择结构 条件 为真时执行某个指定的操 作,为假时执行另一个指 定的操作(双路选择) switch选择结构 根据表 达式的值执行众多不同操 作中的某个指定的操作 (多路选择)
第四章
C51流程控制语句
17
4.2 选择语句
main() { char data x=1,y=0,a=0,b=0; switch(x) { case 1 : switch(y) { case 0 : a++;break; case 1 : b++;break; } case 2 : a++;b++;break; case 3 : a++;b++; } } a=? b=?
/*取得num的个位数*/ /*直到num/10为0*/ /*输出num的个位数*/
第四章
C51流程控制语句
19
4.3.2 do…while语句循环结构
【例】从键盘输入一个整数12456,分析以下程序运行结果。 main() { 结果: int data num,c; 65421 char data c; 将各位数字反序显示出来 num=12456; do { c=num%10; /*取得num的个位数*/ printf(“%d”,c); } while((num/=10)>0); /*输出num的个位数*/ } /*直到num/10为0*/

第四章
C51流程控制语句
3
4.1.3 循环结构及其流程图
循环结构 分当型和直到型两类。 当型 先判断,只要条 件为真就反复执行A块, 为假则结束循环。 直到型 先执行A块,再 判断条件是否为真,为 真则继续执行循环体, 为假则结束循环。 C51语言提供了三种循 环结构,即while循环结 构,do…while循环结 构和for循环结构。
第四章
C51流程控制语句
15
4.2 选择语句
解决方法——break语句: main() 运行结果: { 60~69 char data s; scanf(“%c”,&s); switch(s) { case ‘A’ : printf(“85~100\n”);break; case ‘B’ : printf(“70~84\n”);break; case ‘C’ : printf(“60~69\n”);break; case ‘D’ : printf(“<60\n”);break; default : printf(“错误输入\n”); } }
第四章 C51流程控制语句
10
4.2 选择语句
【例一】以下程序的作用是什么? main( ) /*将小写字母转换为大写字母*/ { unsigned char data c; c=0x97; if (c>=’a’ && c<=’z’) c=c-32; else c=c; } c=?
第四章 C51流程控制语句

第四章
C51流程控制语句
4
4.1.3 循环结构及其流程图
循环是在循环条件为真时计算机反复执行的一组 指令(循环体)。
循环控制通常有两种方式: ◆计数控制 事先能够准确知道循环次数时用之 用专门的循环变量来计算循环的次数,循环变量的 值在每次执行完循环体各语句后递增,达到预定循环 次数时则终止循环,继续执行循环结构后的语句。 ◆标记控制 事先不知道准确的循环次数时用之 由专门的标记变量控制循环是否继续进行。当标记 变量的值达到指定的标记值时,循环终止,继续执行 循环结构后的语句。
第四章 C51流程控制语句
9
4.2 选择语句
4.2.1 选择语句if
三种形式: if(表达式)语句; if(表达式)语句1; else 语句2; if(表达式1)语句1; else if(表达式2)语句2; …… else if(表达式n)语句n; else 语句n+1; ◆e1?e2:e3 是if … else 语句在特定情况下的变体。
第四章
结果: 60~69 <60 错误输入
输入“c”,求输出结果。
C51流程控制语句
14
4.2 选择语句
main() { char data s; 运行结果: 60~69 <60 错误输入
scanf(“%c”,&s);
不好意思我的成绩 , 我属于C级! 应该是 60~69! 什么!“<60”? “错误输入”? 怎么会这样?!
7
4.1.3 循环结构及其流程图
当 型
一般形式 while (条件表达式) 循环体; 用于构成当型循环:先判断 后执行/条件为真继续循环, 直到条件为假时结束循环。 【注意】条件表达式或循环体 内应有改变条件使循环结束 的语句,否则可能陷入“死 循环”。

【例三】 main() { int data n=0,sum=0; while (sum<=10000) { sum+=n; ++n; } } n=?
switch(s)语句中 s实际上并非真正的条件选择, 而只是一种跳转指示(与if语 句不同),表示下面应该跳转 到什么位置继续执行。 各case实际上只是一个跳转处 的标记。当程序跳转到某个 case处时,并非只执行此 case行的程序组,而是从此处 开始一直向下执行各条语句, 直到整个switch开关体结束 (“}”)。 如果要使每个case处相当于一 种if(s)else的效果,必须在 其语句组最后加上break语句。
11
4.2 选择语句
【例二】以下程序的执行结果是什么? main( ) { 哦,原来是因 char data x=2,y=-1,z=2; 为else 总是与 靠近它的if配 if (x<y) 套… if (y<0) z=0; else z+=1; } z=? /*结果是2*/ 常见错误: if (x>0) ; y=3x+2;
switch(s) { case ‘A’ : printf(“85~100\n”); case ‘B’ : printf(“70~84\n”); case ‘C’ : printf(“60~69\n”); case ‘D’ : printf(“<60\n”); default : printf(“错误输入\n”); } }
第四章
C51流程控制语句
13
4.2 选择语句
main() { char data s;
?!
scanf(“%c”,&s);
switch(s) { case ‘A’ : printf(“85~100\n”); case ‘B’ : printf(“70~84\n”); case ‘C’ : printf(“60~69\n”); case ‘D’ : printf(“<60\n”); default : printf(“错误输入\n”); } }
第四章
C51流程控制语句
通常情况下,程序中的语句是以所编写的顺序一句接一句地 执行,这种执行方法称为“顺序执行”。许多C语句能够让 程序员指定不按编写顺序执行下一条执行语句,这种执行 方法称为“控制转移”。 Bohm和Jacopini的研究证实,所有的程序都能够只用三种控 制结构编写,即 ◆顺序结构 ◆选择结构(selection structure) ◆循环结构(repetition structure) 顺序结构是C51的基本结构,除非指示转移,否则计算机自 动以语句编写的顺序一句一句地执行C语句。 任何C51都是由七种控制结构(顺序结构、三种选择结构和三 种循环结构)构成的。
第四章
C51流程控制语句
8
4.1.3 循环结构及其流程图



【例四】 一般形式 main() { do { int data n=0,sum=0; 循环语句(组) do } while (条件表达式); { 用于构成直到型循环:先执 sum+=n; 行后判断/条件为真继续循环, ++n; 直到条件为假时结束循环。 } while (sum<=10000) ; } 【注意】条件表达式或循环 n=? 体内同样应有改变条件使循 环结束的语句,否则可能陷 直 到 入“死循环”。 直到sum超过 型 10000为止
相关文档
最新文档