打印
[疑难问答]

表达式及符合语句

[复制链接]
1061|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
backlugin|  楼主 | 2024-8-13 02:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1. 表达式语句
在表达式的后边加一个分号“;”就构成了表达式语句 ,如: a=++b*9;
x=8;y=7;
++k;
可以一行放一个表达式形成表达式语句,也可以一行放多个表达式形成表达式语句,这时每个表达式后面都必须带“;”号,另外,还可以仅由—个分号“;”占一行形成一个表达式语句,这种语句称为空语句。
空语句在程序设计中通常用于两种情况:

在程序中为有关语句提供标号,用以标记程序执行的位置。例如采用下面的语句可以构成一个循环。
repeat:;
:
goto repeat;
在用 while 语句构成的循环语句后面加一个分号,形成一个不执行其它操作的空循环体。这种结构通常用于对某位进行判断,当不满足条件则等待,满足条件则执行。
2. 复合语句
复合语句是由若干条语句组合而成的一种语句,在 C51 中,用一个大括号 “{ }”将若干条语句括在一起就形成了一个复合语句,复合语句最后不需要以分号“;”结束,但它内部的各条语句仍需以分号“;”结束。复合语句的一般形式为:
{
局部变量定义;语句 l;
语句 2;
}
复合语句在执行时,其中的各条单语句按顺序依次执行,整个复合语句在语法上等价于一条单语句,因此在 C51 中可以将复合语句视为一条单语句。通常复合语句出现在函数中,实际上,函数的执行部分(即函数体)就是一个复合语句;复合语句中的单语句一般是可执行语句,此外还可以是变量的定义语句(说明变量的数据类型)。在复合语句内部语句所定义的变量,称为该复合语句中的局部变量,它仅在当前这个复合语句中有效。利用复合语句将多条单语句组合在—起,以及在复合语句中进行局部变量定义是 C51 语言的一个重要特征。

五、基本结构和相关语句
1. 基本结构
顺序结构
顺序结构是最基本、最简单的结构,在这种结构中,程序由低地址到高地址依次执行,如图给出顺序结构流程图,程序先执行 A 操作,然后再执行 B 操作。
选择结构
选择结构可使程序根据不同的情况,选择执行不同的分支,在选择结构中,程序先都对一个条件进行判断。当条件成立,即条件语句为“真”时,执行一个分支,当条件不成立时,即条件语句为“假”时,执行另一个分支。如图:当条件 S 成立时,执行分支 A,当条件 P 不成立时,执行分支 B。
在 C51 中,实现选择结构的语句为 if/else,if/else if 语句。另外在 C51中还支持多分支结构,多分支结构既可以通过 if 和 else if 语句嵌套实现,可用 swith/case 语句实现。
循环结构
在程序处理过程中,有时需要某一段程序重复执行多次,这时就需要循环结构来实现,循环结构就是能够使程序段重复执行的结构。循环结构又分为两种:当(while)型循环结构和直到(do…while)型循环结构。
当型循环结构
当型循环结构如图:当条件 P 成立(为“真”)时,重复执行语句 A,当条件不成立(为“假”)时才停止重复,执行后面的程序。
直到型循环结构
直到型循环结构,先执行语句 A,再判断条件 P,当条件成立(为“真”)时,再重复执行语句 A,直到条件不成立(为“假”)时才停止重复,执行后面的程序。构成循环结构的语句主要有:while、do while、for、goto。
1. if 语句
if 语句是 C51 中的一个基本条件选择语句,它通常有三种格式:

1. if (表达式) {语句;}
2. if (表达式) {语句 1;} else {语句 2;}
3. if (表达式 1) {语句 1;}
else        if (表达式 2) (语句 2;)
else        if (表达式 3) (语句 3;)
……
else        if (表达式 n-1) (语句 n-1;)
else        {语句 n}

【例】 if 语句的用法。

(1)if        (x!=y)        printf(“x=%d,y=%d\n”,x,y);
执行上面语句时,如果 x 不等于 y,则输出 x 的值和 y 的值。
(2)if        (x>y)        max=x;
else        max=y;
执行上面语句时,如 x 大于 y 成立,则把 x 送给最大值变量 max,如 x 大于 y 不成立,则把 y 送给最大值变量 max。使 max 变量得到 x、y 中的大数。
(3)if        (score>=90)        printf(“Your result is an A\n”);
else if (score>=80) printf(“Your result is an B\n”);
else if (score>=70) printf(“Your result is an C\n”);
else if (score>=60) printf(“Your result is an D\n”);
else printf(“Your result is an E\n”);
执行上面语句后,能够根据分数 score 分别打出 A、B、C、D、E 五个等级。

2. switch/case 语句
if 语句通过嵌套可以实现多分支结构,但结构复杂。switch 是 C51 中提供的专门处理多分支结构的多分支选择语句。它的格式如下:

switch (表达式)
{
case        常量表达式 1:{语句 1;}break;
case        常量表达式 2:{语句 2;}break;
……
case        常量表达式 n:{语句 n;}break;
default:{语句 n+1;}
}
说明如下:
(1)switch 后面括号内的表达式,可以是整型或字符型表达式。
(2)当该表达式的值与某一“case”后面的常量表达式的值相等时,就执行该“case”后面的语句,然后遇到 break 语句退出 switch 语句。若表达式的值与所有 case 后的常量表达式的值都不相同,则执行 default 后面的语句,然后退出 switch 结构。
(3)每一个 case 常量表达式的值必须不同否则会出现自相矛盾的现象。
(4)case 语句和 default 语句的出现次序对执行过程没有影响。
(5)每个 case 语句后面可以有“break”,也可以没有。有 break 语句,执行到 break 则退出 switch 结构,若没有,则会顺次执行后面的语句,直到遇到 break 或结束。
(6)每一个 case 语句后面可以带一个语句,也可以带多个语句,还可以不带。语句可以用花括号括起,也可以不括。
(7)多个 case 可以共用一组执行语句。
【例】 switch/case 语句的用法。

对学生成绩划分为 A~D,对应不同的百分制分数,要求根据不同的等级打印出它的对应百分数。可以通过下面的 switch/case 语句实现。
…… switch(grade)
{
case    ‘A’;printf(”90~100\n”);break;
case        ‘B’;printf(”80~90\n”);break;
case        ‘C’;printf(”70~80\n”);break;
case        ‘D’;printf(”60~70\n”);break;
case        ‘E’;printf(”<60\n”);break;
default;printf(”error”\n)
}

3. while 语句
while 语句在 C51 中用于实现当型循环结构,它的格式如下:

while(表达式)
{语句;}        /*循环体*/

while 语句后面的表达式是能否循环的条件,后面的语句是循环体。当表达式为非 0(真)时,就重复执行循环体内的语句;当表达式为 0(假),则中止 while 循环,程序将执行循环结构之外的下一条语句。它的特点是:先判断条件,后执行循环体。在循环体中对条件进行改变,然后再判断条件,如条件成立,则再执行循环体,如条件不成立,则退出循环。如条件第一次就不成立,则循环体一次也不执行。

4. do…while 语句
Do…while 语句在 C51 中用于实现直到型循环结构,它的格式如下:

do
{语句;}        /*循环体*/ while(表达式);

它的特点是:先执行循环体中的语句,后判断表达式。如表达式成立(真),则再执行循环体,然后又判断,直到有表达式不成立(假)时,退出循环,执行
do while 结构的下一条语句。do while 语句在执行时,循环体内的语句至少会被执行一次。

5. for 语句
for(表达式 1;表达式 2;表达式 3)
{语句;}        /*循环体*/

for 语句后面带三个表达式,它的执行过程如下:
(1) 先求解表达式 1 的值。
(2) 求解表达式 2 的值,如表达式 2 的值为真,则执行循环休中的语句,然后执行下一步(3)的操作,如表达式 2 的值为假,则结束 for 循环,转到最后一步。
(3) 若表达式 2 的值为真,则执行完循环体中的语句后,求解表达式 3,然后转到第四步。
(4) 转到(2)继续执行。
(5) 退出 for 循环,执行下面的一条语句。
在 for 循环中,一般表达式 1 为初值表达式,用于给循环变量赋初值;表达式 2 为条件表达式,对循环变量进行判断;表达式 3 为循环变量更新表达式,用于对循环变量的值进行更新,使循环变量能不满足条件而退出循环。

6. 循环的嵌套
在一个循环的循环体中允许又包含一个完整的循环结构,这种结构称为循环的嵌套。外面的循环称为外循环,里面的循环称为内循环,如果在内循环的循环体内又包含循环结构,就构成了多重循环。在 C51 中,允许三种循环结构相互嵌套。
【例】用嵌套结构构造一个延时程序。

void        delay(unsigned        int        x)
{
unsigned        char j; while(x--)
{for (j=0;j<125;j++);}
}

这里,用内循环构造一个基准的延时,调用时通过参数设置外循环的次数,这样就可以形成各种延时关系。

7. break 和 continue 语句
break 和 continue 语句通常用于循环结构中,用来跳出循环结构。但是二者又有所不同,下面分别介绍。

break 语句
前面已介绍过用 break 语句可以跳出 switch 结构,使程序继续执行 switch结构后面的一个语句。使用 break 语句还可以从循环体中跳出循环,提前结束循环而接着执行循环结构下面的语句。它不能用在除了循环语句和 switch 语句之外的任何其它语句中。
【例】下面一段程序用于计算圆的面积,当计算到面积大于 100 时,由 break语句跳出循环。
for (r=1;r<=10;r++)
{
area=pi*r*r;
if (area>100) break; printf(“%f\n”,area);
}

continue 语句
continue 语句用在循环结构中,用于结束本次循环,跳过循环体中 continue下面尚未执行的语句,直接进行下一次是否执行循环的判定。
continue 语句和 break 语句的区别在于:continue 语句只是结束本次循环而不是终止整个循环;break 语句则是结束循环,不再进行条件判断。
【例】 输出 100~200 间不能被 3 整除的数。
for (i=100;i<=200;i++)
{
if        (i%3= =0)        continue; printf(“%d        ”;i);
}

在程序中,当 i 能被 3 整除时,执行 continue 语句,结束本次循环,跳过 printf 函数,只有能被 3 整除时才执行 printf 函数。

8. return 语句
return 语句一般放在函数的最后位置,用于终止函数的执行,并控制程序返回调用该函数时所处的位置。返回时还可以通过 return 语句带回返回值。return语句格式有两种:
(1) return;
(2) return (表达式);
如果 return 语句后面带有表达式,则要计算表达式的值,并将表达式的值作为函数的返回值。若不带表达式,则函数返回时将返回一个不确定的值。通常我们用 return 语句把调用函数取得的值返回给主调用函数。


使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

2786

帖子

1

粉丝