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

MAXC

END IF

IF C>MIN THEN

ELSE

MINC

END IF

PRINT  "MAX="MAX"MIN="MIN

END

程序说明:

IF中的S1S2可以同时存在,这是它的基本形式,但它可以缺省S1,或缺省S2,这就是它的特殊形式,如图6-6所示。该程序中包含了3IF块:第1个是完整的IF块;第2个缺省S2ELSE可省去不写;第3个缺省S1ELSE语句不能省。

注意:每个块IF必须以END IF结束,它不能省,而且END IF必须与IF THEN配对。

6.4  选择结构的嵌套

6.4.1  IF语句的嵌套

在行IF语句“THEN”后面的语句中或“ELSE”后面的语句中允许再包含行IF语句,这就叫嵌套,例如:

IF〈条件〉THEN IF〈条件〉THEN〈语句〉ELSE〈语句〉ELSE〈语句〉

―――――内层―――――

――――――――外层―――――――

THEN后嵌套了一个行IF语句,称它为内层。

[6-5]  平面直角坐标系中,不同的象限内点的坐标的符号有以下4种情况:

A象限  X>0Y>0

B象限  X<0Y>0

C象限  X<0Y<0

D象限  X>0Y<0

任意输入一对坐标值,找出它所在的象限。

算法:

1.输入一对坐标值XY

2.将4种可能的情况组成为嵌套的行IF语句。

N-S图如图6-7

源程序:

REM EXAMPLE 5

INPUT XY

IF X>0 THEN IF Y>0 THEN PRINT "in A"

ELSE PRINT  "in D"ELSE IF Y>0 THEN PRINT "in B"

ELSE PRINT  "in C"

END

6-7  IF嵌套

说明

IF的嵌套关系不容易看清楚,因此建议读者;

1)嵌套不宜太深,尽可能不使用这种嵌套方法;

2)嵌套的行IF语句不能省略ELSE部分。

3)识别行IF语句嵌套的层次的方法是:首先扫描关键字ELSE,从左至右将第一个ELSE与它左面的最邻近的THENIF配对,再依次往右找第二个ELSE,与它后面最邻近的THENIF配对(已配过的THENIF除外)。

6.4.2  IF的嵌套

在块IF结构中的两个块S1S2,每块中均可再包括块IF结构。

[6-6]  将例5改用块IF的嵌套

'EXAMPLE 6

INPUT X,Y

IF X>0 THEN

IF Y>0 THEN

PRINT "in A"

ELSE

PRINT "in D"

END IF

ELSE

IF Y>0  THEN

PRINT "in B"

ELSE

PRINT "in C"

END IF

END IF

END

6.4.3  应用举例

[6-7]  把任意3个数按由大到小排列打印,用嵌套的块IF写程序。

N-S图如图6-8所示。

6-8  N-S

源程序:

EXAMPLE 7

INPUT ABC

IF A>B  THEN

ELSE

SWAP AB

END IF

IF B>C THEN

ELSE

SWAP BC

IF A>B THEN

ELSE

SWAP AB

END IF

END IF

PRINT ABC

END

[6-8]  编写求一元二次方程式Ax2+Bx+C=0的通解的程序。

算法:

本题要求通解就要对3个系数的任意取值进行判断,在各种情况下都能给出正确的结果。

顶层设计:判断A是否为零,如图6-9a)。

1)如果A0,则方程变为解一元一次方程Bx+C=0

2)如果A0,根据判别式disc=b2-4ac计算方程的根。

6-9  顶层设计

第二层设计:

1A0解一元一次方程,如图6-9b)所示。

6-10  第二层设计

判断b是否为零,如果b不为零则x=-c/b.

如果b为零,进一步判断c是否为零。

如果c=0,则变得没有用处,显然,任何x值都是该方程的解;

如果c0,则不可能求解。

2A0,如图6-9c)所示。

6-11  A0N-S

disc>0      有两相异实根

disc=0      有一个实根

disc<0      有两相异虚根

N-S图如图6-9d

6-12 

源程序:

'EXAMPLE 8

Solve the Quadratic Equation

INPUT  "A,B,C"ABC

IF  A0 THEN

IF B0 THEN

IF C0 THEN

PRINT  "It is trivial"

ELSE

PRINT  "It is impossible"

END IF

ELSE

PRINT  "Has one solution"

PRINT  "X="-C/B

END IF

ELSE

DISCB*B-4*A*C

R-B/2*A

PSQRABSDISC))/2*A

IF DISC>=0 THEN

IF DISC>0 THEN

PRINT  "Has two real roots"

PRINT  X1"R+P

PRINT  X2"R-P

ELSE

PRINT  "Has one real roots"

PRINT  "X="R

END IF

ELSE

PRINT  "Has two complex roots:"

PRINT  "X1="R"+"P"i"

PRINT  "X2"R"-"P"i"

END IF

END IF

END

6.5  多路选择结构

6.5.1  多分支的块IF

在块IF的结构中,增加一个ELSE IF语句,就扩充成多分分支的块IF结构。

1.语句格式

IF〈条件1THEN

ELSE IF〈条件2  THEN

}S2(块2

 ELSE IF〈条件3   THEN       可以包括多个ELSEIF语句

}S3(块3       和相应的语句块

  ELSE IF〈条件nTHEN

}Sn(块n

ELSE

}Sn+1ELSE块)

END IF

2.功能

当条件1的逻辑值为真时,就执行语句块1(即S1),执行完后就退出S1,转到END IF语句的下一个语句继续执行;

如果条件1的逻辑值为假时,就跳过S1,执行ELSE IF〈条件2THEN语句,当条件2的逻辑值为真时,就执行S2,执行完后,退出S2,转到END IF语句的下一个语句:

如果条件2的逻辑值为假时,就又跳过S2,执行下一个ELSE IF语句。依此类推,有多少个ELSE IF语句,就有多少个分支,选择其一执行相应的语句块,然后退出该语句块。

如果所有条件都不满足,则程序执行就跳到ELSE,执行ELSE后的语句,然后退出该语句块。

3.举例

[6-9]  计算个人所得税,假设按以下规定征收:以月收入计征。

 

 

6-  个人征税率

(元)

      

500以下

免征

500~1000以下

5%(扣除免征部分)

1000~5000以下

10%(扣除免征部分)

5000~10000以下

20%(扣除免征部分)

10000~20000以下

30%(扣除免征部分)

20000以下

45%(扣除免征部分)

算法:

6种不同的收税标准构成6个条件的多路选择,用多分支的块IF就可写出程序。

N-S图,如图6-10

6-13  N-S

源程序:

'EXAMPLE 9

'INCOME TAX COMPUTATION

INPUT   "Get the income"INCOME

IF INCOME<500 THEN

PRINT  "Tax Free"

ELSE IF INCOME<1000 THEN

Tax=(INCOME-500) * 0.05

ELSE IF INCOME<5000 THME

Tax=(INCOME-500) * 0.10

ELSE IF INCOME<1000 THEN

Tax=(INCOME-500) * 0.20

ELSE IF INCOME<20000THEN

Tax=(INCOME-500) * 0.30

ELSE

Tax=(INCOME-500) * 0.45

END IF

PRINT   "TAX="TAX

END


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

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

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