001顺序结构讲义
- 格式:doc
- 大小:80.00 KB
- 文档页数:4
顺序结构讲义一、顺序结构程序设计至少由三部分组成。
1、输入部分:确定已知变量的值;2、处理部分:按顺序进行求解;3、输出部分:给出结果。
结构化程序设计语言提供了输入(read、readln)、赋值(:=)和输出(write、writeln)语句实现算法中三部分内容最基本的描述。
二、顺序问题解决方案:顺序结构算法设计——使用输入、赋值、输出语句实现算法程序设计——执行程序得到正确结果。
三、变量与常量。
(一)变量。
1、定义:在程序运行过程中,其值可以改变的量称为变量。
2、要素:变量名、变量类型、变量值。
3、标识符:变量名也称变量标识符。
Pascal语言对标识符有如下规定:(1)定义:标识符是以字母开头的字母、数字序列,可以用来标识常量、变量、程序、函数和过程等;(2)标识符分为标准标识符(Pascal 已定义的,具有特殊含义的)和用户自定义标识符(定义时不能与标准标识符相同,最好用英语单词或汉语拼音)。
4、数据:是程序处理的对象,数据的一个非常重要的特征就是它的类型。
数据类型不仅确定了该类型数据项的表示形式和取值范围,而且还确定了对它所进行的各种运算。
5、Pascal常用的标准数据类型:(1)实型(real):2.9×10-39~1.7×1038;(2)整型(integer):-32768~32767;长整型(longint):-231~231-1;(3)字符型(char):单个字符用一对单引号括起来的数据;字符串(string):一个或一串用一对单引号括起来的数据;(4)布尔型(boolean):值只有true和false。
6、变量定义格式:V ar <变量标识符>[,<变量标识符>]:<类型>(二)常量。
1、定义:在程序运行过程中,其值不能改变的量称为常量。
2、定义格式:const <常量标识符>=<常量>{注意区别}。
3、常量说明部分既定义了常量名及其值,还隐含定义了常量类型。
四、赋值语句。
1、格式:变量名:=表达式(函数名:=表达式);2、功能:计算表达式的值,并赋值给变量。
3、几点说明:(1)赋值语句严格遵从式子左边为变量名,右边为表达式的格式,其意义是先计算表达式的值,然后赋值给变量。
(2)“:=”称为赋值号,与数学中的“=”意义不同,赋值语句兼有计算和赋值双重功能。
(3)任何一个变量必须首先赋初值,然后才能使用,否则变量的值将不确定。
(4)赋值号“:=”右边表达式值的类型必须与左边的变量类型相同或相兼容。
五、Pascal常用函数库。
Pascal把常用的一些运算定义为系统标准函数,只要在程序中写出某一函数名以及此函数所需的参数,系统就会自动运算得到结果。
在使用标准函数时,需要注意如下几点。
(1)正确书写标准函数名和提供正确的调用参数。
(2)每一个标准函数对自变量的数据类型都有一定的要求(例如要求使用整形,不能使用实型)。
(3)函数值的类型也是一定的。
六、表达式。
1、定义:是由符合Pascal语法规定的运算符、圆括号和运算对象组成的式子,运算对象包括常量、变量、函数、集合等。
根据表达式计算值的类型,表达式又可分为算数表达式、逻辑表达式、字符表达式和集合表达式。
2、算数运算符:加(+)、减(-)、乘(*)、实数除(/)、整数除(div)和取模(mod)等6种。
说明:(1)对于+、-、*三种运算,若参加运算的两操作数均为整型,则结果亦为整型;若两操作数中任何一个为实型,则运算结果为实型。
(2)实数除(/)无论参加运算的数是整型还是实型,其结果均为实型。
(3)整数除(div)求两整数相除的商的整数部分,要求参加运算的操作数为整型。
(4)取模(mod)求两整数相除的余数,要求参加运算的操作数为整型。
(5)优先级:圆括号——函数——*、/、div、mod——+、-3、逻辑运算符:逻辑非(not)、逻辑与(and)、逻辑或(or)、逻辑异或(xor)等4种。
七、输出语句。
Pascal的输出语句有两种形式:write(<输出项表>);writeln(<输出项表>);或writeln;说明:(1)<输出项表>是一串用逗号分隔的常量、变量、函数名、表达式或字符串。
如果是变量、函数名、表达式,则将其计算结果输出;如果是常量,则直接输出其值;如果是字符串(字符串书写要用单引号括起来),输出单引号内的字符串。
(2)write和writeln的区别:write语句是输出项输出后,不换行,光标停留在最后一项后,如果再遇到write语句,则紧跟其后输出;writeln语句按项输出后,自动换行,光标则停留在下一行的开始位置,如果再遇到write语句,则另起一行输出。
(3)writeln语句允许不含有输出项,表示换行。
(4)输出格式:writeln(x)或writeln(x:n)或writeln(x:n:m)n表示输出域宽,有域宽按右对齐方式输出,m表示四舍五入后的小数位数,m=0则原数据四舍五入后不输出小数部分和小数点。
八、输入语句。
Pascal输入功能由读语句(read和readln)来完成。
一般格式为:read(<变量名表>);readln(<变量名表>);或readln;说明:(1)变量名表由一个或几个逗号隔开的变量标识符组成,它们必须在程序说明部分预先说明,可以是整型、实型和字符型,布尔型不可以直接读入。
(2)在程序运行后执行输入语句时,将从标准输入文件input(键盘、外部文件)中依次读入若干数据,并将输入的数据依次赋给<变量名表>中相应的变量。
在没有指明情况下,读入语句默认从键盘读入数据。
(3)输入语句输入的数据类型必须和变量一一对应,即类型一致或相容。
如果输入的是一串整数或实数,数据间用空格或回车分隔;若输入的是一串字符(对应变量类型为char),则不用分隔。
(4)从语法角度讲,输入数据的个数不得少于<变量名表>中变量个数;从问题的正确性角度讲,输入数据的个数与<变量名表>中变量个数要相一致。
(5)readln语句中可以不包含变量名表。
当标准输入为键盘时,readln语句常用于暂停程序的运行,并滞留显示结果屏,直到输入一个回车继续程序运行,方便查看程序运行结果。
(6)readln语句和read语句不同之处在于读入数据到各变量之后,readln自动换行,从下一行开始再读入数据,一个read语句执行完后,数据行中未读数据可以被下一个读入语句读入,而一个readln语句执行完后,数据行中未读数据就没有用了。
为了避免可能出现的错误,需要注意以下几点:(1)如果没有特殊需要,在一个程序中尽量避免混合使用read语句和readln语句。
(2)一个数据行最好对应一个输入语句,数据行的数据个数与输入语句的变量个数及类型相一致。
(3)编程时在read或readln语句前适当结合write语句进行提示输入。
九、顺序结构程序设计实例(一)数字分离。
问题描述:小明刚学会1位数字的加法运算,小明妈妈想考核小明的运算能力,于是每次给一个四位整数,让小明求各位数字之和。
小明妈妈让你帮她写一个程序,能随机产生一个四位整数,同时给出各位数字之和。
这样她能一边做自己的事,一边考核小明。
输入:随机产生一个四位整数。
输出:产生的整数和各位数字和。
问题分析:(1)random(9000)产生(0,9000)间的随机整数;(2)number:=1000+ random(9000);(3)在调用随机函数之前,应使用randomize过程进行初始化,生成一个随机序列。
(4)利用div 和mod拆分数位:a:= number mod 10;b:= number div 10 mod 10;c:= number div 100 mod 10;d:= number div 1000;注:产生区间[A,B]间的随机整数,表达式为:A+ random(B-A+1)参考程序:program×××;var number,a,b,c,d,s:integer;beginrandomize;number:=1000+ random(9000);a:= number mod 10;b:= number div 10 mod 10;c:= number div 100 mod 10;d:= number div 1000;s:= a+b+c+d;writeln(number);writeln(’s=’,s);readln;end.(二)某国家安全局获得了一份珍贵的材料,上面记载了一个即将进行的恐怖活动的一切。
不过,国家安全局人员却没法直接得到实施的时间!材料上的时间使用的是linux时间戳,即是从1970年1月1日0时0分0秒开始到该时刻总共过了多少秒。
现希望你帮助完成此事,给你该时间戳,你要写个程序计算出恐怖活动在哪一天实施。
(这里为了简单起见,规定一年12个月,每个月固定为30天。
)输入:一个整数n(0≤n≤2147483647),表示从1970年1月1日0时0分0秒开始到该时刻过了n秒。
输出:一行三个整数y、m、d,表示恐怖活动在y年m月d日实施。
问题分析:(1)根据n的取值范围,n的数据类型应为longint。
(2)根据问题设定可以算出一年为31104000秒,一个月为2592000秒,一天为86400秒,将n秒整除年的秒数转换成年y,将转换后的余数整除月的秒数转换成月m,再将转换成月的余数整除天的秒数转换成天d。
参考程序:program×××;constyears=31104000;months=2592000;days=86400;varn,ys:longint;y,m,d:integer;beginwrite(‘n=’);readln(n);y:= n div years;ys:= n mod years;m:= ys div months + 1;d:= ys mod months div days + 1;writeln(1970+y,m:3,d:3);readln;end.练习题1、写出下列程序的运行结果。
program aboutchar;varch1,ch2,ch3:char;i:0..127;beginread(ch1);ch2:=pred(ch1);ch3:=succ(ch1);i:=ord(ch1);writeln(’ORD’:5,’CHAR’:5,’PRED’:5,’SUCC’:5);writeln(i:5,ch1:5,ch2:5,ch2:5);readln;readln;end.运行后输入:E2、补充完善程序:对于区间[a,b],随机产生a,b值(0﹤a﹤1000,1000﹤b﹤10000000),求区间的中间值t,输出a,b,t值后,交换a,t值,输出a,b,t值。