基于proteus的51单片机仿真实例二十七、C语言的语句演示实例
来源:互联网 发布:spss数据统计分析 编辑:程序博客网 时间:2024/05/21 19:43
1、表达式语句
C语言提供了十分丰富的程序控制语句。表达式语句是最基本的一种语句。在表达式的后面加一个分号“;”就构成了表达式语句。例如:A=10;
表达式语句也可以仅有一个分号“;”组成,这种语句称为空语句。空语句是表达式语句的一个特例。空语句在程序设计中是很有用的一种语句,但程序在语法上需要有一个语句,但在语义上并不要求有具体动作时,便可以采用空语句,空语句通常有两种用法:
1)在程序中为有关语句提供标号,例如:
flag:;
...
if(num==2) goto flag;
2)在用while语句构成的循环语句后面加一个分号,形成一个空循环语句,这种空语句在等待某个事件发生时很有用。例如:
{
。。。
while(!num);
...
}
这段程序中“while(!num);”用来等待num这个数值为真时跳出空循环。
2、复合语句
复合语句是由若干条语句组成的一种语句。它是用一个大括号“{}”将若干条语句组合在一起而形成的一种功能块。复合语句不需要以分号“;”结束,但它内部的各条语句仍需要以分号“;”结束。复合语句的一般形式为:
{
局部变量定义
语句1;
语句2;
...
语句n;
}
复合语句在执行时,其内部的各条语句依次顺序执行。整个复合语句在语法上等价于一个单语句,因此在C语言程序中可以将复合语句视为一个单语句。复合语句允许嵌套,即在复合语句内部还可以包含别的复合语句。实际上,C语言中的函数体就是一个复合语句。在复合语句内部所定义的变量,称为该复合语句中的局部变量,它尽在当前这个复合语句中有效,该复合语句执行结束后,该变量也就失效了。
3、本实例演示复合语句的执行效果。首先在主程序中定义了一个变量num,然后把该变量的值送p0口显示,然后程序进入一个复合语句,在复合语句中同样定义了一个变量num,仍然将该变量的值送到PO口显示。复合语句执行结束后,再次把变量的值送到P0口显示。观察P0口的显示有什么变化
4、在keil c51中新建工程ex16,编写如下程序代码,编译并生成ex16.hex文件。
//实例16:复合语句试验,重点观察变量的作用域
#include <reg51.h> //包含头文件
void delay(void) //延时函数
{
unsigned char i,j;
for(i = 0; i < 252;i++)
for(j = 0;j < 252;j++);
}
void main(void)
{
unsigned char num; // 变量定义
num = 0xaa; // 变量赋初值
P0 = num; // 变量的值送P0口显示
delay(); // 延时一段时间
delay();
delay();
//
{ // 复合语句
unsigned char num; //复合语句中定义该复合语句中的局部变量
num = 0x55; //变量赋初值
P0 = num; // 送P0显示
delay();
delay();
delay();
} //复合语句结束
P0 = num; //P0显示变量值
while(1) //
{
}
}
{
unsigned char i,j;
for(i = 0; i < 252;i++)
for(j = 0;j < 252;j++);
}
void main(void)
{
unsigned char num; // 变量定义
num = 0xaa; // 变量赋初值
P0 = num; // 变量的值送P0口显示
delay(); // 延时一段时间
delay();
delay();
//
{ // 复合语句
unsigned char num; //复合语句中定义该复合语句中的局部变量
num = 0x55; //变量赋初值
P0 = num; // 送P0显示
delay();
delay();
delay();
} //复合语句结束
P0 = num; //P0显示变量值
while(1) //
{
}
}
5、在proteus中新建仿真文件ex16.dsn。电路原理图如下所示:
6、将ex16.hex文件载入at89c51,启动仿真,观察运行效果。
可以看到,P0口的8个LED先是D10,D12,D14,D16被点亮,然后D9,D11,D13,D15被点亮,最后D10,D12,D14,D16被点亮。
这是什么原因?
在主函数开始,定义了变量num,并给它赋予了一个初值,这个变量值在整个主函数体内都是有效地,所以程序一开始,先将该值送到P0口显示,随后,程序进入了复合语句,在复合语句中又定义了一个变量num,并将该变量赋值后送到P0口显示,在这里复合语句中的变量与主函数中的变量名称相同,但此时复合语句中的局部变量的优先级要高于主函数中的变量,所以此时送到P0口的值是该复合语句中的局部变量的值。接下来复合语句执行结束后,程序又进入主函数体,此时复合语句中的局部变量失效,因此此时送到P0口的是主函数体中的变量的值。
下面两图分别是程序执行复合语句以外的运行结果、程序执行复合语句中的内容的执行结果
0 0
- 基于proteus的51单片机仿真实例二十七、C语言的语句演示实例
- 基于proteus的51单片机仿真实例二十八、C语言的if条件语句演示实例
- 基于proteus的51单片机仿真实例三十三、C语言的goto无条件转移语句演示实例
- 基于proteus的51单片机仿真实例四十二、C语言的二维数组演示实例
- 基于proteus的51单片机仿真实例四十三、C语言的字符串数组演示实例
- 基于proteus的51单片机仿真实例四十四、C语言的结构体演示实例
- 基于proteus的51单片机仿真实例四十五、C语言的共用体演示实例
- 基于proteus的51单片机仿真实例四十六、C语言的枚举类型演示实例
- 基于proteus的51单片机仿真实例四十七、C语言的指针演示实例
- 基于proteus的51单片机仿真实例四十八、C语言的指针数组演示实例
- 基于proteus的51单片机仿真实例四十九、C语言数组的指针演示实例
- 基于proteus的51单片机仿真实例二十一、C语言的自增和自减运算演示实例
- 基于proteus的51单片机仿真实例二十九、C语言的switch-case多分支选择语句
- 基于proteus的51单片机仿真实例二、关于proteus
- 基于proteus的51单片机仿真实例三十、C语言的for循环语句
- 基于proteus的51单片机仿真实例三十一、C语言的while循环语句
- 基于proteus的51单片机仿真实例三十二、C语言的do-while循环语句
- 基于proteus的51单片机仿真实例三十四、C语言的break语句
- OS_CPU_A.ASM
- 上下文不存在HttpContext
- 【图像处理】滤波
- 智能一代云平台(二十一):生产环境Nginx报 502 Bad Gateway 问题复现及解决方案
- Unix时间戳转php日期
- 基于proteus的51单片机仿真实例二十七、C语言的语句演示实例
- 采样方法(一)
- 如何玩转谷歌浏览器
- 基于proteus的51单片机仿真实例二十八、C语言的if条件语句演示实例
- 金币 改进
- 基于proteus的51单片机仿真实例二十九、C语言的switch-case多分支选择语句
- 程序员不需要知道太多的数学
- Qt之基础窗口部件
- 1091 线段的重叠