C51基本结构程序设计
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
其语义是:依次判断表达式的值,当出现某个值为真时, 则执行其对应的语句。然后跳到整个if语句之外继续执行 程序。 如果所有的表达式均为假,则执行语句n 。然后继 续执行后续程序。
例2-2-3 要求判别键盘输入字符的类别。
#include"stdio.h" void main() { char c; printf("input a character: "); c=getchar(); if(c<32) printf("This is a control character\n"); else if(c>='0'&&c<='9') printf("This is a digit\n"); else if(c>='A'&&c<='Z') printf("This is a capital letter\n"); else if(c>='a'&&c<='z') printf("This is a small letter\n"); else printf("This is an other character\n"); }
使用while语句应注意以下几点
1)while语句中的表达式一般是关系表达或逻 辑表达式,只要表达式的值为真(非0)即可 继续循环。 2) 2)循环体如包括有一个以上的语句,则必须 用{}括起来, 组成复合语句。 3)应注意循环条件的选择以避免死循环。
程序设计中,常常要求某一段程序重复执行 多次,这时可采用循环结构程序。这种结构 可大大简化程序,但程序执行的时间并不会 减少。
循环程序的结构
图2-3-1(a)是典型的当型循环结构,控制语 句在循环体之前,所以在结束条件已具备的 情况下,循环体程序可以一次也不执行,C51 提供了while和for语句实现这种循环结构。 图2-3-1(b)其控制部分在循环体之后,因此, 即使在执行循环体程序之前结束条件已经具 备,循环体程序至少还要执行一次 ,因此 称为直到型循环结构,C51提供了do-while 语句实现这种循环结构。
break 语句
C51语言还提供了一种break语句,专用于 跳出switch语句,break 语句只有关键字 break,没有参数。 例 修改例2-2-4题的程序,在每个case语句 2-2-4 case 之后增加break 语句,使每一次执行之后均 可跳出switch语句,从而避免输出不应有的 结果。
while(表达式 语句 表达式) 语句; 表达式
其中表达式是循环条件,语句为循环体。 while语句的语义是:计算表达式的值, 当值为真(非0)时, 执行循环体语句。其执行 过程可用图2-3-1(a)表示。
例2-3-1 统计从键盘输入一行字符的个数。
#include <stdio.h> void main() { int n=0; printf("input a string:\n"); while(getchar()!='\n') n++; printf("%d",n); }
4.使用if语句应注意以下问题
1) 在三种形式的if语句中,在if关键字之后均为表达 式。 该表达式通常是逻辑表达式或关系表达式, 但也可以是其它表达式,如赋值表达式等,甚至 也可以是一个变量。例如: if(a=5) 语句;if(b) 语句; 都是允许的。只要表达式的值为非0,即 为“真”。如在if(a=5)…;中,表达式的值永远 if(a=5)… 为非0,所以其后的语句总是要执行的,当然这种 情况在程序中不一定会出现,但在语法上是合法 的。 2) 在if语句中,条件判断表达式必须用括号括起来, 在语句之后必须加分号。 3) 在if语句的三种形式中,所有的语句应为单个语 句,如果要想在满足条件时执行一组(多个)语句, 则必须把这一组语句用{} 括起来组成一个复合语 句。但要注意的是在“}”之后不能再加分号。
在使用switch语句时还应注意以下几点: 1)在case后的各常量表达式的值不能相同,否 则会出现错误。 2)在case后,允许有多个语句,可以不用{}括 起来。 3)各case和default子句的先后顺序可以变动, 而不会影响程序执行结果。 4)default子句可以省略不用。
2.3 循环结构
Switch结构中的break语句
#include"stdio.h" void main() { int a; printf("input integer number: "); scanf(“%d”,&a); switch (a) { case 1:printf("Monday\n");break; case 2:printf("Tuesday\n");break; case 3:printf("Wednesday\n");break; case 4:printf("Thursday\n");break; case 5:printf("Friday\n");break; case 6:printf("Saturday\n");break; case 7:printf("Sunday\n");break; default:printf("error\n"); } }
switch(表达式) { case常量表达式1: 语句1; case常量表达式2: 语句2; … case常量表达式n: 语句n; default : 语句n+1; }
其语义是:计算表达式的值。 并逐个与其后的常 量表达式值相比较,当表达式的值与某个常量表 达式的值相等时, 即执行其后的语句,然后不再 进行判断,继续执行后面所有case后的语句。 如 表达式的值与所有case后的常量表达式均不相同 时,则执行default后的语句。其执行流程图如图 2-2-1(C)所示。
单片机接口技术(C51版)
第二章 C51基本结构程序设计 基本结构程序设计
教学目标
1. 掌握if语句来实现选择结构,能利用if语句编 写相应的分枝结构的程序。在嵌套if语句中,一定 要搞清楚else与哪个if结合的问题。 2.掌握switch语句来实现多向分枝选择结构,能 利用switch语句编写相应的分枝结构的程序。 3. 掌握循环语句的即初始化、循环体、循环控制 及结束四个部分,并能进行循环语句的程序设计。 分别掌握for 语句、while语句以及do-while语句的 使用语法及方法,能利用这三种循环结构进行循 环程序设计,理解这三种语句的异同。 4.理解并掌握continue、break语句在循环结构和 选择结构中的作用。对于goto语句,理解该语句 优缺点。
概述
C51语言是结构化编程语言。结构化语言的基本元 素是模块,它是程序的一部分.只有一个出口和 一个入口.不允许有偶然的中途插入或以模块的 其它路径退出。 结构化编程语言在没有妥善保护或恢复堆栈和其 它相关的寄存器之前,不应随便跳入或跳出一个 模块。因此使用这种结构化语言进行编程,当要 退出中断时,堆栈不会因为程序使用了任何可以 接受的命令而崩溃。 结构化程序由若干模块组 成,每个模块中包含着若干个基本结构,而每个 基本结构中可以有若干条语句。 归纳起来,C51程序有顺序结构、选择结构、循环 结构共三种结构。
分支程序有三种基本形式
N N
条件满足?
Y
A
条件满足?
Y
A B
(a)
(b)
K=? K=0
A0
K=1
A1
……
k=n …
An
(c)
图2-2-1 分支程序结构流程图
2.2.1 if语句
C51语言的if语句有三种基本形式。 1.第一种形式为基本形式if(表达式) 语句 其语义是:如果表达式的值为真,则执行其 后的语句, 否则不执行该语句,其过程可 表示为图2-2-1(a)。
例如:
if(表达式1) if(表达式2) 语句1; else 语句2;
其中的else究竟是与哪一个if配对呢? 为了避免这种二义性,C51语言规定,else 总是与它前面最近的if配对。
2.2.2 switch-case语句
C51语言还提供了另一种用于多分支选择的 switch语句, 其一般形式为:
循环程序一般包括如下四个部分: 1)初始化:置循环初值,即设置循环开始的状态, 比如设置地址指针,设定工作寄存器,设定循环 次数等。 2)循环体:这是要重复执行的程序段,是循环结构 的基本部分。 3)循环控制:循环控制包括修改指针、修改控制变 量和判断循环是否结束还是继续,修改指针和变 量是为下一次循环判断作准备,当符合结束条件 时,结束循环;否则,继续循环。 4)结束:存放结果或作其他处理。
3.第三种形式为if-else-if形式
前二种形式的if语句一般都用于两个分支的情况。 当有多 个分支选择时,可采用if-else-if语句,其一般形式为:
if(表达式1) 语句1; else if(表达式2) 语句2; else if(表达式3) if( 3) 语句3; … else if(表达式m) 语句m; else 语句n;
2.第二种形式为if-else形式
if(表达式)
语句1; else 语句2;
其语义是:如果表达式的值为真,则执行语 句1,否则执行语句2 。其过程可表示为图 2-2-1(b)。
例2-2-2 输入两个整数,输出其中的大数。改用ifelse语句判别a,b的大小,若a大,则输出a,否则 输出b。
void main() { int a, b; printf("input two numbers: "); scanf("%d%d",&a,&b); if(a>b) printf("max=%d\n",a); else printf("max=%d\n",b); }
2.1 顺序结构
顺序结构是一种最基本.最简单的编程结构。 在这种结构中,程序由低地址向高地址顺序 执行指令代码。如图2-1-1所示,程序先执 行A操作,再执行B操作,两者是顺序执行 的关系。
开始 A B 结束
图2-1-1 顺序结构流程图
2.2 选择结构
在选择结构中,程序首先对一个条件语句进 行测试。当条件为“真”(True)时,执行一 个方向上的程序流程;当条件为 “假”(False)时,执行另一个方向上的程序 流程。
例2-2-1 输入两个整数,输出其中的大数。
void main() { int a,b,max; printf("\n input two numbers: "); scanf("%d%d",&a,&b); max=a; if (max<b) max=b; printf("max=%d",max); }
两种常用的控制循环方法
在循环程序中,有两种常用的控制循环次 数的方法。 一种是循环次数已知,这时把循环次数作 为循环计算器的初值,当计数器的值加满 或减为0时,即结束循环;否则,继续循 环。 另一种是循环次数未知,这时可根据给定 的问题条件来判断是否继续。
1.
2.
2.3.1 while语句
while语句的一般形式为:
例如:
if(a>b) { a++; b++; } else { a=0; b=10; }
5 if语句的嵌套
当if语句中的执行语句又是if语句时,则构成了if 语句嵌套的情形。其一般形式可表示如下:
if(表达式) if语句; 或者为 if(表达式) if语句; else if语句;
在嵌套内的if语句可能又是if-else型的,这将会出 现多个if和多个else重叠的情况,这时Biblioteka Baidu特别注意 if和else的配对问题。
例2-2-4要求输入一个数字,输出一个相应的英文单词。
#include"stdio.h" void main() { int a; printf("input integer number: "); scanf(“%d”,&a); switch (a) { case 1:printf("Monday\n"); case 2:printf("Tuesday\n"); case 3:printf("Wednesday\n"); case 4:printf("Thursday\n"); case 5:printf("Friday\n"); case 6:printf("Saturday\n"); case 7:printf("Sunday\n"); default:printf("error\n"); } }