登录 用户中心() [退出] 后台管理 注册
   
您的位置: 首页 >> 程序员学前班[不再更新,只读] >> 主题: 第三章      流程控制语句(I)     [回主站]     [分站链接]
标题
第三章      流程控制语句(I)
clq
浏览(0) + 2005-02-26 15:50:49 发表 编辑

关键字:

前面所学过的语句,如,read、write语句及赋值语句在程序中都是按语句的排列顺序执行的。程序设计语言中的控制语句可用来改变程序中语句的顺序。一般都有两种控制方法:一种是根据条件改变语句执行路径;另一种是根据条件,对某些语句重复执行若干次。前者称为分支控制,后者称为循环控制。本章讨论PASCAL语言中三种很重要的控制语句:IF语句,WHILE语句和REPEAT语句。

3.1 IF语句
在程序设计中常遇到这样的问题:某些运算和操作的执行取决于某条件是否成立。例如
      y = a + b√x   若x ≧ 0
或          a + b√x 若x ≧ 0
            a - b√x 若x < 0
即某种运算是否执行或执行哪一种运算要根据变量X的取值而定。这里x ≧ 0和x ﹤ 0是语句执行时的判别条件,在PACSAL语言中可用布尔表达式来表达这样条件。上述公式用PASCAL语句可表示为
IF x >= 0 THEN y:= a + b * sqrt(x);
或者
IF x >= 0 THEN y:= a +b *sqrt(x)
ELSE y:= a – b * sqrt(abs(x));
这里给出了PASCAL语言中IF语句的两种形式。

  (一)IF语句的第一种形式为:

IF<布尔表达式>THEN<语句>

这种IF语句的意义是当布尔表达式的值为true时,就执行保留字THEN后面的语句;当布尔表达式的值为false时,不执行THEN后面的语句,而执行该IF语句的后继语句。其执行流程可用框图(图3-1)表示。

clq
2005-2-26 15:52:44 发表 编辑

[图片]
图3-1 IF…THEN语句执行流程

clq
2005-2-26 15:53:43 发表 编辑

举例说明:某学校开学初进行英语分班考试。成绩80分以上者分在A班,现要统计出A班人数。用PASCL语句可写成:
IF engmark>80 THEN class:=class+1;
其中,engmark为表示外语成绩的变量标识符,class为表示A班人数的变量标识符。在执行该IF语句前,变量engmar必须由输入语句或者赋值语句给以确定的值。关系表达式
engmark>80
表示判别条件,根据该表达式的值确定应执行什么操作。
在实际问题中,判别条件也可能比较复杂,是由几个条件组合而成。例如,分在A班的条件是外语成绩和数学成绩都在80分以上,如果用matmark作为表示数学的变量标识符,则可写出如下PASCAL语句
IF(engmark>80)AND(matmark>80)THEN class:=class+1;
其中AND为布尔运算符,它和在其两边的关系表达式一起构成一个布尔表达式,只有当这两个关系表达式的值都为true时,该布尔表达式的值才为true。如果分在A班的条件是外语成绩或都数学成绩在80分以上,则可写出如下PASCAL语句:
IF(engmark>80)OR(matmark>80)THEN class:=class+1;
其中布尔运算符OR表示‘或’运算。它和在其两边的关系表达式一起构成一个布尔表达式。当两个关系表达式的值中有一个为true时。该布尔表达式的值即为true。
下面举一个完整的程序例子来说明如何使用IF语句。
例3-1      计算机读入两个量,将其中的较大者放在变量max中,并打印出来。
程序中使用max和min作为两个变量的标识符。temp作为临时存放的中间变量。现列出程序如下:
PROGRAM getmax(input,output);
VAR
max , min,temp:integer;
BEGIN
read(max,min);
IF max<min THEN
BEGIN
temp:=max; max:=min; min:=temp;
END;
writeln(‘max =’,max);
END.
若输入数据为  19  43
若输出为   max = 43
在例3-1中,max,min,temp说明为整型量。执行程序时,首选读入两个值放入标识符为max和min的两个量中,然后由关系表达式进行判别:如果max小于min,则必须将两者的值交换,将较大值放入max中,但要完成这一交换操作必须使用一个中间存放单元temp,同时用三个赋值语句来实现。必须注意,我们不能写如下形式:
IF max<min THEN
temp:=max;
max:=min;
min:=temp;
因为按时前述IF语句的语法规则,对上述IF语句编译程序理解为在保留字THEN后面只执行一个语句,即
temp:=max;
其它两个语句被理解为IF语句的后继语句,只在关系表达式不成立时才执行,这显然是一种错误。为了避免出现混淆,在程序中必须用BEGIN和END将这三个语句括起来。编译程序处理时将BEGIN和END及其中的若干语句视为一个复合语句。在保留字THEN后面执行这一个复合语句。
复合语句以BEGIN开始,以END结束。BEGIN和END又称为语句括号。其中若干语句以分号分隔。复合语句这种结构是很重要的,以后还要陆续接触到这种结构。

(二)IF语句的第二种形式为:

  IF<布尔表达式>THEN<语句1>
          ELSE<语句2>

其意义为:当IF后的布尔表达式的值为true时,执行THEN后面的语句1;否则,即当布尔表达式匠值为false时,执行ELSE后面的语句2,其执行流程如图3-2所示。

clq
2005-2-26 15:55:13 发表 编辑

[图片]
图3-2 IF…THEN…ELSE语句执行流程

clq
2005-2-26 15:56:25 发表 编辑

例如,在上述外语分班的例子中,若外语成绩80分以上者分在A班,80分以下者分在B班。统计A班和B班的人数,可写出如下语句:
IF engmark>80 THEN classa:=classa +1 ELSE classb:=classb+1;

例3-2 编写一个程序求一元二次方程
    ax2+bx+c=0
的根。其中a不等于0。
从代数中已知,一般情况下该方程的根为
   x=(-b/2a)+√b2-4ac /2a
其中b2-4ac称为二次方程式的根判别式。若b2-4ac≧0,则方程有两个实根;若b2-4ac<0,则方程有两个复根。我们可以将方程的解分成-b/2a以及√b2-4ac /2a两部分,分别用标识符term1和term2表示。程序编写如下:
PROGAM quad(input,output);
VAR
a,b,c,disc,twoa,tem1,term2:real;
comp:toolean;
BEGIN
read(a,b,c);
writeln(‘quadratic with coefficients’);
writeln(a,b,c);
disc:=b*b-4*a*c
twoa:=2*a;
term1:=-b/twoa;
term2:=sqrt(abs(disc))/twoa;
comp:=disc<0;
IF comp THEN
  BEGIN
    writeln(‘complex roots’);
    wirteln(‘teal part=’,term1,’imag part =’,term2);
END ELSE
BEGIN
writeln(‘teal rools’);
writeln(‘rootl=’,term1+term2,’root2=’,term1-term2);
END
END.  
程序中语句执行部分首选读入方程的三个系数a,b,c再将它们打印出来。然后分别形成二次方程根的判别式disc以及twoa,term1,term2和comp等变量。在输出结果时用IF语句,根据布尔量comp的值判别出方程具有复根或者实根,分别打印输出。这里用到了IF…THEN…ELSE的语句形式。在THEN和ELSE的后面用BEGIN和END括起来的复合语句。

(三)IF语句的多重嵌套

在实际问题中,常要用到多重条件的嵌套。例如,我们要在三个不相等的数a,b,c中找出最大数,可写出如下语句:
IF a>b THEN
    IF a>c THEN write(a) ELSE write(c)
    ELSE
这表示在a>b条件成立,即布尔表达式a>b的值为true的前提下,如果a>c的条件也成立,则a就是最大数;如果a>b而a<c时,c就是最大数。这里第一个保留字THEN后面又是一个IF语句。至此,我们还只是处理了a>b的情况,如果a>b条件不成立,则在最后一个ELSE的后面写出如下语句
IF b>c THEN write(b) ELSE write(c)
将以上语句合在一起,即为
 IF a>b THEN IF a>c THEN write(a) ELSE write(c)
ELSE IF b>c THEN writ.( ) ELSE write(c);
这说明在IF语句中,保留字THEN和ELSE后面的语句又可以是另一个IF语句,在PASCAL语言中,以下几种多重IF语句都是合法的:
(1)      IF b1THEN s1 ELSE IF b2 THEN s2;      
(2)      IF b1THEN s1 ELSE IF b2 THEN s2 ELSE s3;
(3 )   IF b1THEN IF b2 THEN s1
(4)   IF b1THEN IF b2 THEN s1 ELSE s2
(5)      IF b1THEN IF b2 THEN s1 ELSE s2 ELSE s3;
各语句中b1,b2为布尔表达,s1,s2,s3为PASCAL语句,它既可以是简单语句,也可以是复合语句。
仔细分析上述第4种多重IF语句,发现有可能出现语法上的二义性,即其中ELSE可以看成和语句中的第一个THEN相配对,也可看成为和第二个THEN相配对。为避免这种二义性,PASCAL语言将上述第4种形式按下面的结构来执行。
IF b1THEN
BEGIN
  IF b2THEN s1
      ELSE s2
END
也就是说,ELSE总是与最邻近的THEN相配对的。如果在实际问题中需要将ELSE和第一个THEN配对,在程序中就应使用语句括号BEGIN和END,以免造成混淆。即
IF b1 THEN
BEGIN
  IF b2 THEN s1
END
ELSE s2;

例3-3  将三个实数值读入计算机,并将大小居中的值打印出来。
程序中使用多重IF语句,a,b,c为读入的三个实数。
PROGRAM middle(input,output);
VAR
A,b,c:real;
BEGIN
Read(a,b,c);
IF a>b THEN
    IF b>c THEN writelr(b)
          ELSE IF a>c THEN writeln(c)
                  ELSE writeln(a)
    ELSE
    IF a>c THEN writeln(a)
          ELSE IF b>c THEN writeln(c);
                  ELSE writeln(b);
END.

3.2  REPEAT 语句

在程序设计中常遇到要重复进行某些运算的问题,对这类问题可以用循环控制语句来解决。PASCAL语言中有两种类型的循环控制语句:一种是条件循环语句,另一种是计数循环语句。本节讨论的REPEAT语句就是一种条件循环语句。
REPEAT语句一般形式为
  REPEAT
  <语句串>
  UNTIL<布尔表达式>
其中语句串是一系列由分号隔开的语句。REPEAT语句的意义是重复执行语句串,直到布尔表达式的值为true时为止,然后执行它的后继语句。见图3-3。

clq
2005-2-26 15:58:31 发表 编辑

[图片]
图3-3 REPEAT 语句流程图

clq
2005-2-26 15:59:11 发表 编辑

例如要打印出1到100之间2的乘幂的值,可写出如下PASCAL语句(用标识符power表示2的乘幂)
power:=1;
REPEAT
writeln(power);
power:=power*2
UNTIL power>=1000;
在该程序段中,第一个赋值语句是给变量power赋初值。保留字REPEAT和UNTIL之间是语句串,该语句串中有两个语句,第一个语句打印变量power的值,另一个赋值语句的作用是按2的乘幂规律改变power的值。保留字UNTIL后的布尔表达式为判别条件。当该表达式的值 为false时,重复执行语句串,当该表达式的值为true时,循环终止。
又如用计算机处理英文文本时,要将英文句子读入计算机,这里所遇到的是一些字符型变量,包括英文字母、数字、标点符号等,句子的结束以‘.’为标志。可写出如下语句
REPEAT
read(ch);
write(ch);
UNTIL ch=’.’
由上述举例可知:REPEAT语句中先执行语句串,然后再进行条件判别。所以在这种循环控制中至少要执行一次语句串。该语句串又称为循环体。影响UNTIL后面布尔表达式取值的量称为循环控制变量。
在程序中使用REPEAT语句是时,应注意以下几点:
(1)使用赋值语句或输入语句给循环控制变量赋以初值,该初值必须正确。
(3)      在循环体中必须包含能改变循环控制变量取值的语句,这一改变会影响到布尔表达式的取值。布尔表达式最终要保证取值true.否则,要出现死循环。
例3-4 计算一调和级数前n项之和
  1+1/2+1/3+…+1/n

PROGRAM sumofseries(input,outpu);
VAR
n:integer;
sum:real;
BEGIN
sum:=0;
read(n);
write(‘for’,n,’items sum=’)
REPEAT
sum:=sum+1/n;
n:=n-1;
UNTIL n=0;
write(sum)
END.
程序中n为循环控制变量,由read(n)语句n的初值。在循环体中赋值语句n:=n-1改变循环控制变量的值。每执行一次循环体,n的值减去1,直到n=0时为止。这时已求得级数前n项之和,从循环中转出以后,执行一输出语句,打印出sum的值。
REPEAT循环控制语句更常用于那些人们不能预先确定循环次数的情况。例如将例3-4中的问题改为求调和级数需要多少项才能满足不等式
   1+1/2+1/3+…+1/n>val,其中val为某一固定值。
可写出如下PASCAL程序。
PROGRAM findn(input,output);
VAR
count:integer;
sum,val:real;
BEGIN
count:=0;
sum:=0;
read(val);
REPEAT
  count:=count+1;
  sum:=sum+1/count;
UNTIL sum>val;
write(count);
END.

例3-5 用牛顿迭代法求解方程
    f(x)=3x3-4x2-5x+13=0
迭代公式为:
    xk+1=xk-f(xk)/f’(xk)
其中f’(x)为函数f(x)的导数。当
    dx=-f(xk)/f’(xk)
的绝对值小于某一很小的数e时,xk+1就作为方程的解。
为提高计算机的运行效率,将方程左部必定成如下形式:
    (((3x-4)*x-5)*x+13)
程序中取e=10-6
PROGRAM soi(input,output);
CONST
epsilon=1E-6;
VAR
x,d:ral:
BEGIN
read(x);
REPEAT
d:=- (((3x-4)*x-5)*x+13)-((9*x-8)*x-5);
x:=x+d;
write(‘x=’,x:20:10,’d=’,d:20:10);
UNTIL (‘The root is ’,x:15:8);
END.
方程的解为x=-1.54891000 。


3.3 WHILE 语句

另一种条件循环语句是WHILE语句。WHILE语句的一般形式为:
  WHILE<布尔表达式>DO<语句>
其意义为当布尔表达式的值为true时,重复执行DO后面的语句。该语句可以是简单语句或复合语句(图3-4)。图中,S代表<语句>。

clq
2005-2-26 16:00:27 发表 编辑

[图片]
图3-4 WHILE语句流程图

clq
2005-2-26 16:02:02 发表 编辑

上一节打印1到1000之间2的乘幂的值,也可用下列WHILE语句来实现:
  power:=1
  WHILE power<1000 Do
BEGIN
    Write(power);
    Power:=power*2
  END;
这段程序中赋值语句 power:=1给变量power赋初值,它就是该循环语句中的控制变量。WHILE后的布尔表达式进行条件判别,确定是否要执行DO后面的语句。这语句即为循环体。每执行一次循环体,power的值就改变一次。一直到布尔表达式power<1000的值为false,循环为止。
可以看出,与REPEAT 语句的不同之处是WHILE语句一开始就判别布尔表达式的值;而REPEAT语句是在执行一次循环体以后才判别布尔表达式的值。所以,在REPEAT语句中至少要执行一次循环体,而WHILE语句中的循环体可能一次也不执行。此外,REPEAT语句中布尔表达式的值为false时执行循环体,而在WHILE语句中布尔表达式的值为true时执行循环体。
从上述土简单的程序段中还可以看出,执行WHILE循环 语句的主要步骤是:
(1)初始化:给循环控制变量赋以初值。
(2)测试条件:如果布尔表达式的值为true,就执行DO后面的循环体;如果值是false,就跳过循环体去执行跟在循环体后面的语句。
(3)执行循环体:在循环体中必须包括改变循环控制变量的值的语句。
(4)      返回第(2)步重复执行。
WHILE循环语句是程序设计中经常使用的语句。下面举几个例子来说明。

  例3-6 计算从0到某一数之间所有奇数的和。
所求数的上限以limit表示,奇数和用sum表示,odds 表示从0到limit之间的奇数。可写出程序如下:
PROGAM sumodd(input,output);
VAR
  Odds,limit,sum:integer;
BEGIN
  Read(limit);
  Sum:=0; odds:=1;
  WHILE odds<=limit Do
    BEGIN
    Sum:=sum+odds;
    Odds:=odds+2;
    END:{WHILE}
  Writeln(‘The sum of odd numbers through’,limit,’is’,sum.)
END.
如果输入数据为248,则会打印结果:
The sum of odd numbers through 248 is 15376

  例3-7 每隔150打印出00-1800之间的正弦值和余弦值。
本例题中使用PASCAL标准函数sin(x)和cos(x),其中x是以弧度计的。所以必须将读入的角度值化成弧度。
    10=π/180弧度
  θ0=θ*π/180弧度
程序编写如下:
  PROGRAM sincos(input,output);
  CONST
    Pi=3.14159;
  VAR
    Angle:integer;
    Radiant:real;
  BEGIN
    Writeln(‘angle(in degree)’,’sin(angle)’:15,’cos(angle)’:22);
    Angle:=0;
    WHILE angle<=180 Do
        BEGIN
        Radian:=angle*pi/180;
        Writeln(angle:8,/’ ’:10,sin*(radian),’ ’,cos(radian));
        END
  END.

执行这一程序的结果如下:
angle(in degreee)     sin(angle)     cso(angle)
    0         0.0000000E+00   1.0000000E+00
    15         2.5881880E-01   9.6592590E-01
    30         4.9999960E-01   8.6602590E-01
    45         7.0710640E-01   7.0710710E-01
    60         8.6602490E-01   5.0000070E-01
    75         9.6592550E-01   2.5881990E-01
    90         1.0000000E+00   9.3626760E-07
  105         9.6592630E-01   -2.5881770E-01
  120         8.6602630E-01   -4.9999860E-01
  135         7.0710310E-01   -7.0710570E-01
  150         5.0000150E-01   -8.6602450E-01
  165         2.5882100E-01   -9.6592540E-01
  180         2.4342960E-06   -1.0000000E+00

3.4  程序举例
  在程序中使用循环语句时,如何控制循环结束可有几种方法。在前几节的例题中已介绍过的方法有:
(1)在迭代运算中以运算结果的精度来控制循环结束的条件(如例3-5)
(2)已知循环控制变量的初值和终值,以其终值作为循环结束条件。
本节再另一种方法:
(3)伪卡测试法:输入数据时,在有用数据的末端添加一个实际问题中不可能出现的数据,该数据称为伪数据,因为以住人们使用计算机时,多使用卡片输入的方法,所以又称伪卡。一旦测试到这一伪卡,循环就终止。

例3-8 输入若干实数x,打印出函数值trunc(x),round(x),abs(x),sqr(x),sqrt(abs(x)).
在程序中设置一判别标志,当x=0.0时就停止输出打印。
PROGRAM func(input,output);
CONST
Sent:=0.0
VAR
X:real;
BEGIN
Read(x);
Writeln(‘x’:10,’trunc(x)’:10,’round(x)’:10,’abs(x)’:10,’sqr(x)’:10,’sqrt(abs(x))’:15);
WHILE x<>senti DO
BEGIN
Writeln(x:10:2,trunc(x):10,round(x):10,abs(x):10:2,sqr(x):10:2,sqrt(abs(x)):10:2);
Read(x)
END
END.

程序执行时,不断从终端或数据卡片读入数据,打印出与每一个x相对应的各个函数值。当读入数据为0.0时,即x=0.0(在程序中以常量senti表示)时就终止执行。现读入数据为
-6.8   64.00   8.12 59.92
输出结果如下:
x     TRUNC(x)   ROUND(x)   ABS(x)        SQR(x)   SQRT(ABS(x))
-6.80       -6         -7       6.80       46.24     2.61
64.00       64         64       64.00     4096.00     8.00
8.12       8         8       8.12       65.93     2.85
59.92       59         60       59.92       350.0       7.74

还有一种控制循环结束的方法是使用标准函数eof。因为无论从终端键盘或者由卡片输入,数据都是以文件形式进行传送的。如前所述input文件是对应于终端键盘的标准文件。所以,可以用eof函数判断文件是否结束。在程序中可使用语句
WHILE NOT eof( ) DO
      <语句>
来控制循环的结束与否。详细举例请见第八章。

例3-9   编写一个译码程序将一句子译成数字代码。译码规则是以数字1代替字母A,数字2代替字母B,…26代替字母Z,如遇安全可靠则打印一个星号*。英文句子以‘*’结束。
由编码规则可知,其字母的数字编码都在1到26之间,且可用下列计算:
  code:=ord(letter)-ord(‘A’)+1;
其中,letter为字符型变量,其取值为26个英文字母中任意一个字母。Code为对应的数字编码。程序如下:
PROGRAM encd(input,output);
CONST
Blank=’ ’
Termi=’ ’
Star=’ * ’
VAR
Letter:char;
Code:integer;
BEGIN
Read(letter);
WHILE letter<>termi DO
BEGIN
IF letter=blank THEN write(star:2)
          ELSE
          BEGIN
          Code:=ord(leteer)-ord(‘A’)+1;
          Write(code:3)
          END;
Read(letter);
END;
Write(termi)
END.
若输入英文句子为,HE IS A STUDENT则输出编码为:
8 5 * 9 19 * 1 * 19 20 21 4 5 14 20

再举一程序设计的实例。在这一实例中,我们将使用自顶而下(Top-Down)的设计方法。即先对所处理任务进行全面分析,将它分解成若干个子问题。再用逐步求精的方法编写出解决各个子问题的程序段。

例3-10 为进行交通流量的统计调查,在路边设置了一个车辆探测器。探测信号用线路连接到计算机。当有车辆通过时,探测器传送一个数字给计算机。探测器中有一计时器,每一秒钟发出一个数字信号2传送给计算机。该计时器从开始探测时计时,探测结束时探测器传送一个数字信号0给计算机,编写一程序读入这一毓信号并输出下列结果:
(1)进行了多长时间的统计调查
(2)记录到的车辆数
(3)在车辆之间最长的时间间隔是多少。
这些结果一直要到所有探测信号都讲话计算机后,才能算出。
在程序中要使用若干变量:
*      车辆数以标识符nums表示
*      时间以seconds表示
*      时间间隔以inter表示
*      最长时间间隔以longest表示
*      探测器信号以sig表示。
解决这一问题的算法描述如下:
*      对所有变量赋以初值,准备处理探测信号
*      重复对读入探测器信号进行处理,当读入结束信号时,就结束该重复过程;
*      输出结果。
用类似于PASCAL语句的形式表示上述算法,可写成
BEGIN
赋初值,准备处理探测器信号;
WHILE不是结束信号DO
  对探测信号进行处理
输出结果
END
其中,赋初值准备处理探测信号这一步比较简单,可使用赋值语句或输入语句来解决,如:
nums:=0;
seconds:=0;
inter:=0;
longest:=0;
readln(sig);
在WHILE…DO循环体中,对探测信号进行处理时要分别不同情况,写出如下语句:
BEGIN
 IF是车辆信号THEN
  处理车辆信号 
 ELSE
 IF是计时信号THEN
  处理计时信号
 读入下一个信号
END;
对计时信号的处理比较简单,只要将时间seconds和间隔inter分别加1,即
BEGIN
Seconds:=seconds+1;
Inter:=inter+1;
END;
对车辆信号的处理,要使车辆数加1,同时要对最长时间间隔进行判别和登记,即
BEGIN
Nums:=nums+1;
IF inter>longest THEN
Longest:=inter;
Inter:=0;
END;
再列出几个判别条件:
*      车辆信号的判别条件
sig=1
* 计时信号的判别条件
sig=2
*      不是结束信号的判别条件
sig<>0
读入下一个信号,可用语句
readln(sig)
输出结果可使用write语句,(见程序中的输出语句)。
综合以上各程序段,可写出如下完整程序:
PROGRAM traffica(input,output);
VAR
Nums,seconds,inter,longest,sig:integer;
BEGIN {prepare to processs signals}
Nums:=0; seconds:=0; inter:=0; longest:=0
Readln(sig);
WHILE sig<>0 Do
BEGIN
IF sig=1THEN BEGIN
  Nums:=nums+1;
    IF inter>longest THEN longest:=inter;
    Inter:=0;
  END
  ELSE IF sig=2 THEN
          BEGIN
          Seconds:=seconds+1;
          Inter:=inter+1
          END;
Readln(sig);
END;
Writeln(nums,’vehicles passed in’,seconds,’seconds;’);
Writeln(The longest interval was’,longest,’seconds.’);
END.

clq
2005-2-26 16:03:25 发表 编辑

习 题 三         
1.编制程序计算
   
  y=   x2 + 1 当 x<= 2.5
    x2 – 1 当 x> 2.5

     π
    -2 当 x< 0
y=   0 当 x=0
π  
2      当 x>0

2.对一批货物征收税金,价格1万元以上的货物征税5%,对5000元以上10000元以下的货物征税3%,对5000元以下1000元以上的货物征税2%,1000元以下免税。编写一程序读入其价格,计算并输出税金。

3.编制程序计算简支梁上任一截面上的弯矩。计算公式为


     P      

           a      b

     l



        pb x   x<= a
     1
          M =   Pa (1-x) x >a
     1


4.给定一正整数N=9,编一程序计算阶乘N1并打印出结果。

5.用台劳级数求e的近似值,直到最后一项小于10-7。
            1   1   1
e=1+ 1! + 2! + 3! +……

6.一班级有30名学生,考数学、物理、外语三门课,输入数据为每个学生的学号及各门功课的考试成绩。编写一程序:打印每个学生的学号、每门功课成绩、平均成绩并统计平均成绩不及格的人数。

7.用牛顿迭代法求方程
         2x3 – 4x2 –3x –6 = 0
在x=2.5附近的实根,直到满足条件
           |xk+1 – xk|<=ε=10-5
8.用迭代法求x=√a ,计算公式是
xa+1 = 1/2(xa + a/xa)
要满足条件   | xa+1 - xa | <ε=10-5

9.一个有100个数组成的,它的头两个数为0,1。第三个数是前两个数之和,第四个数为第二、第三两个数之和,以后每个数皆为前两个数之和,编写程序将这个数列打印出来。

clq
2005-2-26 16:11:04 发表 编辑

[clq注释:习 题 三中的习题已经非常复杂了,与工作中要解决的问题的逻辑难度已经是一样的了。其中有很多复杂的图我没法弄上来,只能等以后了]

总数:10 页次:1/1 首页 尾页  
总数:10 页次:1/1 首页 尾页  


所在合集/目录



发表评论:
文本/html模式切换 插入图片 文本/html模式切换


附件:



NEWBT官方QQ群1: 276678893
可求档连环画,漫画;询问文本处理大师等软件使用技巧;求档softhub软件下载及使用技巧.
但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
验证问题说明申请入群原因即可.

Copyright © 2005-2020 clq, All Rights Reserved
版权所有
桂ICP备15002303号-1