背景:                 
[本书目录] [图书首页] [本书讨论区]  
链接地址:http://www.17xie.com/read-6157.html    注册17xie 一起来写书 实现您的出书梦想!

6.5.2  SELECT CASE语句

本语句用于执行从属于一个表达式的多个分支语句块中的一个。

1.语句格式

SELECT CASE〈测试表达式〉

CASE〈情况1

S1(语句块1

CASE〈情况2  可以有多个CASE〈情况〉

S2(语句块2           及相应的语句块

CASE ELSE

Sn(语句块n

END SELECT

说明:

1)〈测试表达式〉:可以是数值表达式或字符串表达式;

2)〈情况1〉、〈情况2〉…,可以是以下格式中的任意一种:

①〈表达式〉[,〈表达式〉]…

②〈表达式〉TO〈表达式〉

IS〈关系运算符〉〈表达式〉

以上的〈表达式〉可以是数值类型的或字符串类型的,但它们要与〈测试表达式〉的类型一致。

2.功能

1SELECT CASE〈测试表达式〉是该选择结构的第一个语句,它要说明被测试的对象,用表达式表示,比如例5.9中,纳税人的收入多少是被测试的对象,收入多少不同,纳税就有六个等级,因此,就构成六个〈情况〉。

2CASE〈情况1〉语句,就是反映测试对象的各种可能情况,当测试表达式的值,满足CASE〈情况1〉的条件时,就执行相应的语句块S1,执行完后,跳到END SELECT的下一语句继续执行。不满足时,依次判断下一个。

在所有CASE〈情况〉语句,如有两个及两个以上的〈情况〉条件都满足,则只执行最先满足〈情况〉条件的分支。

1CASE ELSE当所有CASE〈情况〉的条件都不满足时,执行后面的语句块,执行完后退出END SELECT结构,往下继续执行。

2END SELECT语句,是多路选择结构的结束标帜,不产生任何操作,但它提供一个出口以便继续执行行其后的语句,每个多路选择结构有一个SELECT CASE语句,必须有一个END SELECT语句与之配对。

3.应用举例

[6-10]  某幼儿园儿童按年龄编班,2~3岁的为小班,4岁的为中班,5~6岁的为大班,输入某儿童的年龄,计算机给出应编进哪个班级。

算法:

把入园儿童的年龄设为OLD,以该变量为测试表达式,按2~35~6三种情况来应用SELECT CASE语句写程序。

源程序:

EXAMPLE 10

INPUT How old are yor?”;OLD

SELECT CASE OLD

CASE 23

PTINT  "Enter lower class"

CASE 4

PRINT  "Enter Middle class"

CASE 5 TO 6

PRINT  "Enter higher class"

CASE ELSE

PRINT  "Can not enter!"

END SELECT

END

[6-11]  求函数Y的值:

源程序:

'EXAMPLE 11

INPUT  "X="X

SELECT CASE X

CASE IS0

YEXPX+EXP-X

CASE 0

Y1.25

CASE IS0

YLOGX/LOG10

CASE ELSE

PRINT  "It is wrong!"

END SELECT

PRINT  "Y="Y

END

6.6  无条件转移语句(GOTO

6.6.1  语句格式

GOTO〈行号丨标号〉

BASIC中,只能指定一个有效的〈行号〉

Quick BASIC中,还可以指定一个有效的〈标号〉

例:

GOTO 50(该行号应是本程序单元内存在的)

GOTO startstart是一个标号,它应是本程序单元内存在的)

6.6.2  使用说明

用无条件转移语句GOTO,可由编程人员强行指定程序的执行转移到程序中的相应位置去,这个用起来简单方便,但用得不好,容易破坏程序结构,引起混乱,不便阅读,因此,建议尽量少用,能用其他方法代替的,就不用GOTO语句,但是它和条件语句配合使用,构成一个循环结构,还是可以的。

6.6.3  应用例

[6-12]  计算某班科考试成绩的平均分

算法:

1)用READ语句读入学生的考试成绩,将考试分数放在DATA语句中。

2)建立一个终止标志,方法是在Data语句中,写完所有的分数之后,加一个“-1”,它和分数有根本区别,因为分数不可能为负数。设立终止标志的作用是控制读数操作的结束,以改变程序的流程。

3)当读入一个数据之后,都要检查是不是-1,如果是-1,就表示已没有数据可读了,因此程序不再进行累加;如果不是-1,就表示读入的是分数,应该进行累加处理。

4)用GOTO和条件语句构成循环,进行累加。

5)全部累加完后,再求平均,打印结果。

源程序:

REM EXAMPLE 12

SUM0N0

start; READ SCORE

IF SCORE-1 THEN 80

SUMSUM+SCORE

NN+1

GOTO start

MEANINTSUM/NJ+0.5

PRINT   "MEAN="MEAN

DATA 897694516586-1

END

这种反复执行一段程序的过程就称为循环,下一章,将进一步讨论循环结构。

6.7  多分支转移语句(ON GOTO

6.7.1  语句格式

ON〈算术表达式〉GOTO〈行号1〉,〈行号2〉,…

说明

〈算术表达式〉:其值必须在1~255之间,若值为小数则按四舍五入取为整数;如果其值为负或大于255,将出现错误信息。

〈行号1〉,〈行号2〉,…分别代表每一分支的入口行号。

6.7.2  功能

首先计算算术表达式的值,得到一个在1~255的整数。这个整数就是要转移到某分支行号的位置。

例:

X4时,由于位置上没有行号,程序将转移到下一个BASIC语句去。

6.7.3  使用说明

ON  GOTO就象一个多路开关,按顺序选通某一通路。如图6-11所示。

6-11  多分支语句

4.举例

[13]  在(060)区间有一连续函数,当给出任一个X值时求Y值,函数为:

Y30           0X10

   40-X         10X20

   20           20X30

   50-X         30X40

   10           40X50

60-X        50X60

算法:

用多分支的ON GOTO语句处理;

源程序:

REM EXAMPLE 13

INPUT X

ON X/10+1 GOTO 60708090100110

PRINT   "X<0 OR X>60"

GOTO 130

Y=30:GOTO 120

Y=40-X:GOTO 120

Y=20:GOTO 120

Y=50-X:GOTO 120

Y=10:GOTO 120

Y=60-X

PRINT  "X="X"Y="Y

END

6.8  本章小结

1.选择结构的功能是控制程序执行的流程。当流程发生分支时,根据一定的逻辑条件选择其中之一作为执行流程。基本的流程分支可分为两分支和多分支两类。

2.为了实现基本的两分支流程,BASIC提供了行IF语句,Quick BASIC扩展成为块IF

1)行IF语句的格式是:

IF〈条件〉HTEN〈语句丨行号〉[ELSE〈语句丨行号〉]

它包括3个部分:(1)条件部分;

               2THEN语句部分;

               3ELSE语句部分。

当条件为“真”,执行THEN语句部分

当条件为“假”,执行ELSE语句部分

2)块IF3个语句两个组成,其格式是:

IF〈条件〉HTEN

S1

ELSE

S2

END IF

3.使用行IF语句时的注意事项

1)在〈语句丨行号〉参数中,尽量不要使用〈行号〉这样可以避免发生结构上的混乱。

2)行IF语句的ELSE部分是可选的,可以省去这一部分,这是,只对条件为真时进行处理,条件为假时,不执行该语句,程序执行转到它的下一个语句。

3)行IF语句的长度不要超过255字符,最好写得简短些,不宜写得太长。

4)允许行IF内嵌套,但不宜太深。

4.块IF是功能最强、结构最清楚的选择结构,因而也是一个最基本的重要结构。使用时应注意以下几点。

1IF条件语句和END IF语句必须配对;

2ELSE语句是可选的,当语句块S2省略时,可以省略该语句;

3)它的两个语句块S1S2可以同时出现,也可以省略其中任意一个;

4)不允许用GOTO语句从块外转到IF块内来;

5)允许块IF内再嵌套IF语句。

5.在条件语句中,条件是用关系表达式或逻辑表达式来表示的。条件较简单的可以只用关系表达式,条件较复杂的(如复合条件)可以用逻辑表达式,最常用的逻辑运算有NOTANDOR

6.为了实现多分支的流程,Quick  BASIC提供了一个专门处理多种情况的SELECT CASE语句和扩充的块IF,在BASIC中则有ON GOTO语句。

实际上利用行IF语句和块IF的嵌套也能实现多分支的流程。

7.无条件转向语句GOTO,在不破坏程序的结构化原则下可以使用,如它和行IF语句配合构成循环结构。但不提倡到处都用GOTO转移语句。

 

1.如果X1Y2Z3计算下列表达式的逻辑值。

1X0·1                      2X0 AND YZ

3ZX+Z                               4SINX)=COSX*Y

54*Y/Z<>X                         6X*Y*ZY3

7X+Y+Z0  OR  1-COSZ)>0

8Z*2X AND  Z+2Y  OR  Z/2X AND Z-2Y

2.把下列每个条件写成BASIC的逻辑表达式(或关系表达式)

10X10                             2X小于等于Y

3XY都不大于100          4X不在ab之间

5X不等于Y                          6X不大于Z或不小于Y

7N大于100N0            8XYZ

3.输入x,编制程序计算y的值。

4.输入abc三个数,要求将绝对值最大者打印出来。

5.输入x,计算y的值。

6.假设邮局规定为

1)凡不超过20kg的邮包,按0.85/kg计算邮费;凡超过者,按0.15/kg增收;

2)每个邮包收手续费0.50元;

3)需作快件投递者,增收平常邮费的20%

7.编写程序,从键盘输入3个不同的数,按从大到小的顺序输出。

8.编一程序,从键盘上输入两个操作数和一个运算符,,由计算机输出运算结果(运算符为:+、-、*/)。

9.某学校评选一等奖学金的条件有以下两种:

1)每门课程成绩在85分以上。

2)所考6门课程成绩总分在520分以上。

请输入某学生6门课程的成绩cj1cj2cj3cj4cj5cj6,问他能否获得一等奖学金。


字数:6248    最后更新:1年以前 [08-24 10:19]我爱钱 修改
本页编辑者:我爱钱  
[前一页]:第六章  [后一页]:第七章 循环结构
[在本页中加入书签] [收藏本书] [推荐本书]
  17xie论坛 > 本书讨论区 > 本页评论   (共0条)
发表评论

用户名称 匿名发表
评论内容
验证码

关于我们 | 版权声明 | 免责声明 | 诚聘英才 | 联系我们 | 合作伙伴 | 友情链接 | 广告合作 | 提交意见
Copyright © 2007 17xie.com 互联网协同写书平台 京ICP备08002671号