Chinaunix首页 | 论坛 | 博客
  • 博客访问: 87908
  • 博文数量: 44
  • 博客积分: 2525
  • 博客等级: 少校
  • 技术积分: 316
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-25 17:01
文章分类

全部博文(44)

文章存档

2010年(44)

我的朋友

分类: C/C++

2010-04-26 21:46:31

第一章 简单程序

无论做任何事情,都要有一定的方式方法与处理步骤。计算机程序设计比日常生活中的事务处理更具有严谨性、规范性、可行性。为了使计算机有效地解决某些问 题,须将处理步骤编排好,用计算机语言组成“序列”,让计算机自动识别并执行这个用计算机语言组成的“序列”,完成预定的任务。将处理问题的步骤编排好, 用计算机语言组成序列,也就是常说的编写程序。在Pascal语言中,执行每条语句都是由计算机完成相应的操作。编写Pascal程序,是利用Pascal语句的功能来实现和达到预定的 处理要求。“千里之行,始于足下”,我们从简单程序学起,逐步了解和掌握怎样编写程序。

 

第一节  Pascal 程序结构和基本语句

在未系统学习Pascal语言之前,暂且绕过那些繁琐的语法规则细节,通过下面的简单例题,可以速成掌握Pascal程序的基本组成和基本语句的用 法,让初学者直接模仿学习编简单程序。

 

[1.1]编程在屏幕上显示“Hello World!”。

  Pascal程序:

Program ex11;

Begin

  Writeln(‘Hello World!’);

  ReadLn;

End.

       这个简单样例程序,希望大家的程序设计学习能有一个良好的开端。程序中的Writeln是一个输出语句,它能命令计 算机在屏幕上输出相应的内容,而紧跟Writeln语句后是一对圆括号,其中用单引号引起的部分将被原原本本地显示出来。

 

[1.2]已知一辆自行车的售价是300元,请编程计算a辆自行车的总价是多少?

解:若总售价用m来 表示,则这个问题可分为以下几步处理:

 = 1 \* GB3 ①从键盘输入自行车的数目a

 = 2 \* GB3 ②用公式  m=300*a  计算总售价;

 = 3 \* GB3 ③输出计算结果。

Pascal程序:

  Program Ex12;                               {程序首部}

  Var a,m : integer;                              {说明部分}

  Begin                                                     {语句部分}

    Write(‘a=’);

    ReadLn(a);                                          {输入自行车数目}

    M := 300*a;                                        {计算总售价}

    Writeln(‘M=’,m);                                 {输出总售价}

    ReadLn;                                              {等待输入回车键}

  End.

 

此题程序结构完整,从中可看出一个Pascal 程序由三部分组成:

(1)程序首部

由保留字Program开头,后面跟一个程序名(:Exl1);其格式为:

             Program  程序 名;

程序名由用户自己取,它的第一个字符必须是英文字母,其后的字符只能是字母或数字和下划线组成,程序名中不能出现运算符、标点符和空格。

(2)说明部分

程序中所用的常量、变量,或类型、及过程与自定义函数,需在使用之前预先说明,定义数据的属性(类型)。[1.2] 程序中 Var SRC: Real 是变量说明,此处说明SRC三个变量均为实数类型变量。只有被说明为 某一类型的变量,在程序中才能将与该变量同类型的数值赋给该变量。变量说明的格式为:  

             Var  变量表:类型;

(3)语句部分

指由保留字 Begin (开始) End. (结尾)之间的语句系列,是解决问题的具体处理步骤,也是程序的执行部分。

Pascal程序不管是哪部分,每句末尾都必须有分号(),但允许最接近 End 的那个语句末尾的分号省略;程序结束的End末尾必须有圆点(. ),是整个程序的结束标志。

程序中花括号“{  }”之间的部分为注释部分。

Pascal程序结构可归纳用如下来表示:

 

  Program  程序名;                  程序首部

       标号说明; (Label)

       常量说明; (Const)            说明部分

     类型说明; (Type)

      变量说明; (Var)

      过程或函数说明;                    

        Begin                      程序体 (主程序)

              语句系列;                    语句部分

        End.                                        

 

 

把处理问题的步骤编成能从上到下顺序执行的程序,是简单程序的基本特征。再来分析下面两道例题的Pascal程序结构和继续学习基本语句。

 

[例1.3]编程计算半径为R的圆的面积和周长。

解:这是一个简单问题,按数学方法可分以下几步进行处理:

    从 键盘输入半径的值R          {  要求告诉圆的半径R }

    用 公式  S=πR2  计算圆面积;

    用 公式  C=2π 计算圆周长;

    输 出计算结果。

Pascal程序:

  Program  Ex13                           {程序首部 }

  Var  RSC: Real          {说明部分 }

  Begin                                             {语句部分 }

    Write ('R=?')

    Readln(R)                 {输入半径 }

    S:=Pi*R*R                {圆面积公式S=πR2

    C:=2*Pi*R                {圆周长公式C=2πR

    Writeln('S='S)            {输出结果 }

    Writeln('C='C)                      

    Readln                     {等待输入回车 键}                  

  End.

程序中PiPascal提供的标准函数,它返回圆周率 的近似值:3.1415926…

(:=)是赋值符号,赋值语句的格式为:

         变量:=表达式;

赋值语句的作用是将:=右边表达式的值记录到左边的变量中。

Writeln是输出语句,输出语句有三种格式:

        Write (输出项1,输出项2)    {执行输出后光标不换行}

       Writeln (输出项1,输出项2) {执行输出后光标换到下一行}

       Writeln                       {仅输出 空白且光标换到下一行}

Writeln语句后面的圆括号以内部分均为输出项,可以是多项,各项间用逗号分隔; 对单引号里的内容按照引号内的原样(字符)输出显示。如果输出项是表达式,则只输出表达式的值,而不是表达式本身。

 

[1.4] 输出两个自然数相除的商和余数。

:设被除数、除数、商和余数,分别为ABCD,均为变量,且都是整数类型。题中未给出具体的自然数AB,可采用键盘输入方式。

   给 出提示,从键盘输入a, b 

   显示两数相除的数学形式;

   求 出a除以b的商c

   求 出a除以b的余数d

   紧接等式后面输出显示商和余数。

Pascal程序:

  Program Ex14

    Var a,b,c,d : integer

    Begin

      Write('INPUT AB')       {给出提示信息}

      Readln(ab)                {输入ab

      Writeln                     {输出一空行}

      Write(a'/'b'=')          {输出等式之后不换行}

      c:=a div b                   {整除运算,取商的整数部分}

      d:=a mod b                  {相除求余运算,取商的余数部分}

      Writeln(C''d)           {输出后自动换行 }

      Readln                        {等待输 入回车键 }

    End.

执行本程序中第一个Write语句,输出其引号以内的一串提示信息,是给紧接着的输入语句提供明确的提示(要求),有“一目了然,人机对话”之效果。

Readln是一个特殊的输入语句,要求输入一个回车(换行)才能往下执行。

Readln是输入语句,它的一般格式为:

              Read     (变量1,变量2) 

              Readln   (变量1,变量2) 

              Readln

前两种格式均要从键盘给变量输入数据,输入时,所键入的数据之间以空格为分隔,以回车为输入结束。若多输入了数据(即数据个数超过变量个数)Read语句读完数据之后,能让后续的读语句 接着读取多下来的数据;而Readln 语句对本行多输入的数据不能让后续语句接着读取多下来的数据。为了防止多输入的数据影响下一个输入语句读取数据,建议尽量使用Readln语句输入数据。第三种格式不需输 入数据,只需按入一个回车键。

 

[1.5]自然数的立方可以表示为两个整数的平方之差,比如43=10262,请输出自然数1996的这种表示形式。(这里的43用自乘三次的形式4*4*4表示;102也用自乘二次的形式10*10表示)

:此题没有现成的计算公式能直接利用,但可以自行推出处理方法或构建适当的运算公式,按着构想的处理方 案编排出各步骤。

设这个自然数为N, 两个平方数分别为XY 将问题表示为求 N3=X2Y2

先找出X的值,仔细观察题中的示例,用数学方法归纳可得出X=N*(N+1)/2;(构成本题可用的计 算公式)

再仔细观察,发现Y值比X小一个N值,即 Y=XN

输出等式 N3=X2Y2 N*N*N=X*XY*Y

Pascal程序:

  Program  Ex15

    Const  N=1996       {常量说明 }

    Var    XY: Longint  {变量说明,此题计算中的数值较大,用长整型 }

      Begin

        X:=N*(N+1) div 2  { div 是整除运算 }

        Y:=X-N

        Writeln(N,'*',N,'*', N,'=', X,'*', X,'',Y,'*',Y)   { 输出结果 }

        Readln

      End.

 本程序中N是常量,XY是变量,为长整数类型(Longint) 程序中的div 是整除运算,其结果只取商的整数部分;

 

[1.6] 求一元二次方程x2+3x+2=0的两个实数根。

:方程的系数是常量,分别用abc表示,可运用数学上现成的求根公式求方程的根,采取如下方法:

  先 求出d=b2-4ac;(求根公式中需用开方运算的那部分)

  再 用求根公式算出x1x2的值。(x1x2 = ? )

  输 出x1x2.

  Pascal程序:

    program Ex16

    Const a=1                        {常量说明 }

         b=3

         c=2                         abc表示方程系数}

    Var  d  : integer                   d为整型变量}

         X1X2: Real                  X1X2为实型变量}

     Begin

       d:=b*b-4*a*c

       x1:=(-b+sqrt(d))/(2*a)              {求方程的根}

       x2:=(-b-sqrt(d))/(2*a)

       Writeln('X1='X1'':6'X2='X2){输出结果}

       Readln                             {等待输入一个回车键}

     End.

 本程序中的abc均为常量;变量d是整数类型,而变量x1x2则是实数类型,因为运算式中的Sqrt(d)开平方运算和(/)除法运算使结果为实数。Sqrt( ) 是开平方函数,是Pascal系统的一个标准函数。

 

习题1.1   模仿例题编程

1. 加法计算器:编程由键盘输入两个整数ab,计算出它们的和并输出到屏幕上。

2. 某梯形的上底、下底和高分别为8129,求该梯形的面积。

3. 求边长为5.6  的正立方体表面积。

4. 已知图园柱体的高为12,底面园的半径为7,求园柱体表面积。

5. 计算某次考试语文、数学、英语和计算机等四科的总成绩与平均成绩。

(请用输入语句从键盘输入各科成绩分)

#####################################################################

第一章、pascal介绍
一、pascal的基本语法单位

1、基本符号
A——Z;a——z;0——9;+,-,*,/,=,<>,<=,>=,<,>,(,),[,], {,},:=,,,;,.,:,..,',^
注意:pascal语言除了能使用以上规定的基本符号外,不得使用任何其它符号。

2、保留字
AND,ARRAY,BEGIN,CASE,CONST,DIV,DO,DIWNTO,ELSE,END,FILE,FOR,FUNTION,GOTO,IF,LABEL,MOD,NIL,OF,OR,PACKED,PROCEDURE,PROGRAM,RECORD,REPEAT,SET,THEN,TO,TYPE,UNTIL,VAR,WHILE,WITH。
注意:所起的文件名不能与保留字相同。

3、标识符
以字母打头的字母数字串,长度小于等于8。
标准标识符(共三十九个):
标准常量:
false,true,maxint
标准类型:
integer,real,char,boolean,text
标准文件:
input,output
标准函数:
abs,arctan,chr,cos,eof,eoln,exp,ln,odd,ord,ored,round,sin,sqr,
sqrt,succ,trunc
标准过程:
get,new,pack,page,put,read,readln,reset,rewrite,unpack,write, writeln

二、 程序结构
1、由三大部分组成:程序首部,说明部分,语句部分。
PROGRAM 程序名(input,output);
{……} 解释
CONST
pi=3.14159;
VAR
r,l,s:real;
BEGIN
write('input r:');
read(r);
l:=2*pi*r;
write('l=',l,'s=',s);
END;
2、大量使用标点符号,保留字后不加标点符号(END除外)。

第二章、顺序结构程序设计

一、标准数据类型
1、实型(real)
小数表示法、指数表示法
2、整型(integer)
正、负整数和零
maxint=32767
pred:前导;succ:后继
[例]:pred(3)=2;succ(3)=4;
pred(true)=false;
succ(false)=true
3、字符型(char)
是指在两个单引号中的一个字符。
ord:取序数
[例]:ord('A')=65
4、布尔型(boolean)
false;true
用于布尔型的运算:NOT、AND、OR
ord(true)=1;ord(false)=0

二、常量和变量的定义
常量的定义:CONST
pi=3.14159;
blank=' ';
变量的定义:VAR
r,l,s:read;
cl:char;

三、 表达式及赋值语句
[例]:b2-4ac 写成:sqt(b)-4*a*c
赋值:<变量>:=<表达式>

四、输入输出语句
1、输入语句:read(<变量表>);readln(<变量表>)
注:表达式里面变量与变量之间用逗号隔开;
readln表示下一个语句将从下一行开始操作;
输入时,整型或实型用空格或回车隔开,字符型之间无需分隔,一个接一
个输入。
2、输出语句:write(<输出表>);writeln(<输出表>)
注:对real或integer限定场宽:write('a=',a:2:0) {a为real型}

第三章、选择结构程序设计

一、 if 语句
格式:IF<条件>
THEN<语句1>
ESLE<语句2>
注:1、ELSE与最近的并且未被配对的ELSE配对;
2、复合,如果THEN或ELSE带有多个语句,则要用BEGIN——END括起来。

二、CASE语句
格式:CASE <表达式> OF
<值表1>:<语句1>
<值表2>:<语句2>
……
<值表n>:<语句n>
[ELSE<语句>]
END
注:1、 值表的三种表达方式:“1:”;“2,4,6:”;“10..100:”
2、CHAR,INTEGER,BOOLEAN有序

第 四章、循环结构程序设计

一、FOR语句
格式:1、FOR <循环变量>:=<初值> TO <终值> DO <语句>;
2、FOR<循环变量>:=<终值> DOWNTO <初值> DO <语句>。
[例1]:输入10个数,求最大值、最小值、和、及平均值。

PROGRAM ten(input,output);
VAR
a,s,max,min,avg:real;
i:integer;
BEGIN
write('please input:');
read(a);
s:=a;
max:=a;
min:=a;
FOR i:=2 TO 10 DO
BEGIN
read(a);
s:=s+a;
IF a>max THEN
max:=a
ELSE
IF a END;
avg:=s/i;
writeln(……);
END.

[例2]:求s=1!+2!+3!+……+10!
program sum_fac(input,output);
var
i,j,s,m:integer;
begin
s:=0:
for j:=1 to 10 do
begin
m:=1;
for j:=1 to i do
m:=m*j;
s:=s+m;
end;
write(……);
end;

二、while语句
格式:WHILE <条件> DO
<循环体>
[例1]:输入一串字符串,求第一个“,”前的大小写字母个数和其它字符个数。
program string(input,output);
var
ch:char;
c,s,o:integer;
begin
write(……);
read(ch);
c:=0;
s:=0;
o:=0;
while ch<>',' do
begin
if (ch>='A')and(ch<='Z') then
c:=c+1
else if (ch>='a')and(ch<='z') then
s:=s+1
else
o:=o+1;
read(ch);
end;
write(……);
end.

三、REPEAT语句
格式:REPEAT
<循环体>
UNTIL

[例]:以字符(char)的形式读入一实数,以实形(real)输出该 数。

第五章、函数与过程程序设计
一、函数(包括标准函数和自定义函数)
1、函数的定义
格式:FUNCTION 函数名(<形参表>):返回值类型;
VAR
<变量说明>
BEGIN
<函数体>
END
[注]:1、形参表每个参数都写明其类型;
2、有且只有一个返回值,并且要将返回值赋值给函数名。
[例]:求五边形的面积
function area(a,b,c:real):real;
var
p:real;
begin
p:=(a+b+c)/2;
area:=sqrt(p*(p-a)*(p-b)*(p-c);
end;
2、函数的调用
1)、函数的调用必然出现在表达式中(等号的右边),不能以单独地在语句出现
2)、调用时,将每个实参传递给对应的形参
program ml_area(input,output);
var
l1,l2,l3,l4,l5,l6,l7,s:real;
function area(a,b,c:real):real;
var
p:real;
begin
p:=(a+b+c)/2;
area:=sqrt(p*(p-a)*(p-b)*(p-c);
end;
begin
write('input');
readln(l1,l2,l3,l4,l5,l6,l7);
s:=area(l1,l2,l6)+area(l2,l6,l7)+……;
writeln('s=',s:10:3);
end.

二、过程
格式:PROCEDURE<过程 名>(<形式参数表>)
VAR
<说明部分>
BEGIN
<过程体>
END;

[例1]某过程的形 参表为(var a,b:real;c,d:integer;var e:char);
主程序中有如下变量说明:x,y:real; m:integer; next:char;
则以下实参表中合法的有:(1、2、3)
1、(x,y,m+3,70,next)
2、(y,x,m,m,next)
3、(y,x,35,m DIV 10,next)
4、(m,x,30,10,next)
5、(x,y,m,10)
6、(35,0,y,m,10,next)
7、(x,y,m,m/10,next)
8、(A,B,30,10,next)

[例2]求程序输出的结果。
program ex(input,output);
var
x,y,z:integer;
procedure s(x:integer; var y:integer);
var
z:integer
begin
x:=5; y:=6; z:=7;
end;
begin
x:=1; y:=2; z:=3;
s(x,y);
writeln(x,y,z);
end.
输出 结果:1 6 3

[例3]:求五个数中的最大值。
program max_in_5(input,output);
var
n1,n2,n3,n4,n5:integer;
procedure lagest_in_three(a,b,c:integer;var e:integer)
begin
e:=a;
if b>e then
e:=b;
if c>e then
e:=c;
end;
begin
write('……');
readln(n1,n2,n3,n4,n5);
lagest(n1,n2,n3,n1);
lagest(n1,n4,n5,n1);
write(n1);
end.

三、嵌套
[例]:计算、
program Cmn(input,output);
function fax(x:integer):integer:
var
i:integer;
begin
fac:=1;
for i:=1 to x do
fac:=fac*i;
end;
function c(a,b:integer):real;
begin
c:=fac(a)/fac(b)*fac(a-b)
end;
begin
writeln('c(9,3)=',c(9,3));
writeln('c(8,5=',c(8,5));
end.

四、 递归
函数或过程调用它本身,称为递归。
[例1]、用递归计算n! {=m!/n!(m-n)!}
program fac_n(input,output);
var
n:integer;
function fac(n:integer):integer;
begin
if n=1 then fac:=1
else fac:=n*fac(n-1);
end;
[例2]、用递归计算

1)、function power(a,b:integer):integer;
begin
if b=1 then power:=a
else power:=a*power(a,b-1);
end;
2)、 procedure power(a,b:integer;var c:integer);
begin
if b=1 then c:=a
else power(a,b-1,c);
c:=a*c;
end;

[例3]、输入一串字符串(以‘.’结束)按逆顺输出
program revers(input,output);
procedure rever;
var
c:char;
begin
read(c);
if c<>'.' then rever;
write(c);
end;
begin
rever;
end.

五、标识符的作用域
1、全 局变量和局部变量
1)、全局变量:在主程序中被说明,作用域:整个程序;
2)、局部变量:在子程序中被说明,作用域:主程序及其下级的程序。
2、子程序(function、precedure)的作用域
一个子程序可以调用它的下一级了程序,或可以调用在它之前定义的同级子程序。
[例]写出程序运行的结果。
program range(input,output);
var
x,y:integer;
procedure p1;
var
x,z:integer;
begin
x:=10; y:=y+1; z:=10;
writeln(x,y,z);
end;
begin
x:=1; y:=1;
writeln(x,y);
p1;
writeln(x,y,z);
end.

结果为:
(x y z)
1 1
10 2 10
1 2 (error)

3、在子程序中被改变值的变量可以回传的两种方法:
a、变量参数 procedure(var 变量名);
b、在上一级程序定义了的,且在下一级程序未被重新定义的。
[注]如果主程序的变量 在子程序被重新定义,在子程序中主程序的变量被稳藏,在主程序中子程序的变量无效


阅读(614) | 评论(0) | 转发(0) |
0

上一篇:智力测试2 [转]

下一篇:字符串移动

给主人留下些什么吧!~~