当前位置:首页 > PASCAL教材
【例6-6】对于数组A,输入一个测试数据X,如果X存在于数组A,则把X元素删除;否则将X插入对应位置,要求数组仍然有序(假设数组递增)。
【例6-7】从键盘输入若干个数,由小到大排序输出。 6.2 二维数组
一维数组在编程中多用于描述线性的关系:如一组数;一组成绩;一组解答等。数组元素只有一个下标,表明该元素在数组中的位置。二维数组在编程中多数用于描述二维的关系:如地图、棋盘、城市街道、迷宫等等。而二维数组元素有两个下标:第一个下标表示该元素在第几行,第二个下标表示在第几列。
1.二维数组的定义:
Var a:array[1..10,1..5] of integer;
其中:a是数组名,由程序员自定;array和of是定义数组的保留字;(这两点和一维数组定义的格式一样)中括号中的两个范围表示二维数组共有多少行、多少列(第一个范围表示行数,第二个范围表示列数);最后一个表示数组元素的类型,规定和一维数组一样。如上例,定义了一个二维数组a,共有10行5列。
2.使用二维数组:
(1)数组元素的指称:数组名[行号,列号]。如第三行第四个元素:a[3,4]。 对某一行进行处理。如累加第4行的数据。则固定行号为4。 如:for i:=1 to 5 do s:=s+a[4,i];
对某一列进行处理。如累加第4列的数据。则固定列号为4。 如:for i:=1 to 10 do s:=s+a[i,4]; (2)二维数组的输入输出要用双重循环来控制: for i:=1 to 10 do {控制行数} begin
for j:=1 to 5 do read(a[i,j]) {第一行读入5个元素} readln; {读入一个换行符}
end; {最常用的方法:从键盘读入数据初始化二维数组} for i:=1 to 10 do
for j:=1 to 5 do a[i,j]:=0; {最常用的方法:将二维数组清0}
for i:=1 to 10 do begin for j:=1 to 5 do write(a[i,j]:4); writeln;end; {最常用的输出方法:按矩阵形式输出二维数组的值}
【例6-8】竞赛小组共有20位同学,这学期每位同学共参与了三项比赛,请统计每位同学的平均分。分析:定义一个20行3列的二维数组来存放这些成绩。定义一个20个元素的一维数组来存放平均分。 program p1;
var a:array [1..20,1..3] of integer;
b:array [1..20] of real; i,j:integer; begin
for i:=1 to 20 do
begin for j:=1 to 3 do read(a[i,j]);readln;end; {键盘读入20个同学的三次成绩}
21
for i:=1 to 20 do b[i]:=0; {平均分数组清0} for i:=1 to 20 do
begin for j:=1 to 3 do b[i]:=b[i]+a[i,j]; {计算总分}
b[i]:=b[i]/3;{计算平均分} end;
for i:=1 to 20 do write(b[i]:5:1); {输出平均分} writeln; end.
6.3 字符串
1.字符串用于存放整批的字符数据。通常编程中使用字符串存放字符化了的数字数据。如高精度运算时存放操作数和运算结果。字符串可以看作是特殊的字符串数组来处理。当然,它也有自已的特点。下面是字符串定义的格式:
var s:string; s1:string[15];
字符串定义时,如不指定长度,则按该类型的最大长度(255个字符)分配空间,使用时最大可用长度为255个;如果在中括号中给出一个具体的值(1—255之间),则按这个值的大小分配空间。使用时,最大的可用长度即为该值。
2.字符串的输入、输出:字符串类型既可按数组方式输入、输出,也可直接输入、输出:readln(s);writeln(s);多个字符串输入时以回车作为数据间的分隔符;每个readln语句只能读入一个字符串。
3.有关字符串的操作: 操作 类型 作用 返回值 求字符串s的长length(s) 函数 整型 度 复制s中从w开copy(s,w,k) 函数 字符串 始的k位 将字符串s转为Val(s,k,code) 过程 数值,存在k中;code是错误代码 例子 s:='123456789'; l:=length(s);{l的值为9} s:='123456789'; s1:=copy(s,3,5);{s1的值是'34567'} Var s:string;k,code:integer; begin s:='1234'; val(s,k,code); write(k);{k=1234} i:=1234; str(i,s); write(s);{s='1234'} s := 'Honest Abe Lincoln'; Delete(s,8,4); riteln(s); { 'Honest Lincoln' } S := 'Honest Lincoln'; Insert('Abe ', S, 8); { 'Honest Abe Lincoln' } S := ' 123.5'; i :=Pos(' ', S);{i的值为1} s1:='1234'; s2:='5678'; s:=s1+s2;{'12345678'} str(i,s) 将数值i转为字过程 符串s 在s中删除从第Delete(s,w,k) 过程 w位开始的k个字符 Insert(s1, S, 将s1插到s中第过程 w) w位 Pos(c, S) +
求字符c在s中函数 的位置 运算将两个字符串连符 接起来 整型 22
思考与练习
1.随机产生20个100以内的数输出;再按从小到大的顺序排序,输出。(分别用冒泡、选择排序两种方法)
2.求一个5 X 5数阵中的马鞍数,输出它的位置。所谓马鞍数,是指在行上最小而在列上最大的数。如下图中:则1行1列上的数就是马鞍数。
5 6 7 8 9 4 5 6 7 8 3 4 5 2 1 2 3 4 9 0 1 2 5 4 8
3.做一个加法器。完成30000以内的加法,两个加数间用“+”连接,可以连加,回车表示式子输入完成;“#”表示结束运算,退出加法器。
4.输入10个单词,将它们按字典排序以后输出。(课本P159页) 5.输入一串字符或数字,判断是否为回文。
6.输入一串字符,以“?”结束,分别统计其中每个数字0,1,2??9出现的次数。 7.输入20个数,从大到小排序后输出,并给出每个数原来的次序。 8.杨辉三角形。
9.约瑟夫问题。(猴子选大王)。 10.螺旋矩阵。 11.魔阶方阵。 12.蛇形矩阵。
13.进制转换。(十进制、二进制、八进制、十六进制互换) 14.数学黑洞6174。
15.高精度计算(加、乘、除法)。
第七章 函数和过程
7.1 过程 1.过程的定义
procedure 过程名(形式参数:参数说明);{也可以不带参数} var
begin ...end;
2.过程的调用:过程名(实在参数表); 【例7-1】求n个自然数的最大公约数; program gcd1;
const maxn=100; var n,i,gcd:integer;
a:array[1..maxn] of integer; procedure enter; begin
write('n=(<100)');readln(n); for i:=1 to n do
23
repeat
write('a[',i,']=');readln(a[i]); until a[i]>0; end;
procedure find_gcd(x,y:integer);{定义过程} var r:integer; begin
r:=x mod y;
while r<>0 do begin x:=y;y:=r;r:=x mod y; end gcd:=y; end;
procedure print;
begin writeln('GCD=' ,gcd);end; begin
enter; gcd:=a[1];
for i:=2 to n do find_gcd(gcd,a[i]); print; end.
7.2 函数 1.函数的定义
function 函数名(形参表):函数类型; {函数首部} var {局部变量说明部分} begin {函数体} ... {函数语句}... 函数名:=表达式 end;
2.函数的调用:
函数在语法上相当于一个表达式,所以,调用时,函数不能独立成为一个语句;它可以出现在任何表达式可以出现的地方。
例如赋值语句的右边:
X:=函数名(实在参数表); {X的类型与函数类型必须一致}
又,如果函数类型是boolean,则还可以出现在条件语句中,充当条件表达式: if 函数名(实在参数表) then ??
【例7-2】编一程序,求从10名同学中选出3名代表,有几种不同的选法。 (公式:C(m,n)=m!/n!*(m-n)!从m中选n) program zohe1;
var m,n:integer; c:longint;
function factor(x:integer):longint;{定义} var i:integer; p:longint; begin
p:=1; for i:=1 to x do p:=p*i; factor:=p;{这个语句必须} end; begin
write('m,n='); readln(m,n);
24
共分享92篇相关文档