首页 07数组与字符串

07数组与字符串

举报
开通vip

07数组与字符串一维数组 1、定义: var      a:array [1..10] of integer;     其中:a是这一批数据的名称,称为数组名;array、of是定义数组的保留字;中括号中的数字是数据编号的下限和上限,同时也说明了数据的个数(上限-下限);最后一个是数据的基类型,如integer,char,real,boolean。 2、数组元素的输入: 数组名代表的并不是一个变量,而是一批变量,因而,不能直接整个数组读入,而是要逐个数组元素读入,通常用循环结构来完成这一功能。下面是几个常用输入数组元素的例子: f...

07数组与字符串
一维数组 1、定义: var      a:array [1..10] of integer;     其中:a是这一批数据的名称,称为数组名;array、of是定义数组的保留字;中括号中的数字是数据编号的下限和上限,同时也说明了数据的个数(上限-下限);最后一个是数据的基类型,如integer,char,real,boolean。 2、数组元素的输入: 数组名代 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 的并不是一个变量,而是一批变量,因而,不能直接整个数组读入,而是要逐个数组元素读入,通常用循环结构来完成这一功能。下面是几个常用输入数组元素的例子: for i:=1 to 10 do read(a[i]);      {————从键盘读入数组元素的值;最常用的 方法 快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载 } for i:=1 to 10 do a[i]:=i;     {————数组元素a[1]到a[10]的值分别为1到10;数据赋初值} for i:=1 to 10 do a[i]:=0;     {————数组元素清0;最常用的数据初始化的方法} for i:=1 to 10 do a[i]:=random(100);     {————随机产生10个100以内的数,赋给各数组元素} 3、数组元素的输出:     和数组元素的输入相同,数组元素的输出也不能由一个write语句直接完成。同样要逐个数组元素输出。通常也用循环结构来完成这一功能: for i:=1 to 10 do write(a[i],' ');{————数组元素之间用空格分隔} writeln;  4、数组的应用:     例1:从键盘输入10个数,将这10个数逆序输出,并求这10个数的和,输出这个和。 program p1; var     a:array [1..10] of integer;     i,s:integer; begin      for i:=1 to 10 do read(a[i]);      for i:=10 downto 1 do write(a[i],' ');      writeln;     s:=0;     for i:=1 to 10 do s:=s+a[i];     writeln('s=',s); end.  例2:用筛法求100以内的素数(质数)。 分析 定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析 :素数是除了1和它本身以外没有其它约数的数。用筛法求素数的方法是:用质数筛去合数:从第一个素数2开始,把它的倍数去掉;这样2以后的第一个非0数就一定也是素数,把它的倍数也删了……重复这个删数过程,直到在所找到的素数后再也找不到一个非0数。把所有非0数输出。 program p2; var     a:array [1..100] of integer;     i,j,k:integer; begin      for i:=1 to 100 do a[i]:=i;      a[1]:=0;i:=2;      while i<=100 do      begin          k:=i;          while k<=100 do          begin              k:=k+i;              a[k]:=0;          end;          {————上面将所有a[i]的倍数清0}          i:=i+1;          while a[i]=0 do i:=i+1;          {————查找接下来的第一个非0数}      end;      for i:=1 to 100 do if a[i]<>0 then write(a[i],' '); end. 二维数组 一维数组在编程中多用于描述线性的关系:如一组数;一组成绩;一组解答等。数组元素只有一个下标,表明该元素在数组中的位置。二维数组在编程中多数用于描述二维的关系:如地图、棋盘、城市街道、迷宫等等。而二维数组元素有两个下标:第一个下标表示该元素在第几行,第二个下标表示在第几列。 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; {————最常用的输出方法:按矩阵形式输出二维数组的值} 例1:竞赛小组共有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个同学的三次竞赛成绩}      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. 例2:设有一程序:    program ex5_3;    const n=3;    type matrix=array[1..n,1..n]of integer;    var a:matrix;     i,j:1..n;    begin     for i:=1 to n do     begin      for j:=1 to n do       read(a[i,j]);      readln;     end;    for i:=1 to n do    begin     for j:=1 to n do      write(a[j,i]:5);     writeln;    end;    end.    且运行程序时的输入为:    2□1□3←┘    3□3□1←┘    1□2□1←┘    则程序的输出应是:    2□3□1    1□3□2    3□1□1 例3:输入一串字符,字符个数不超过100,且以"."结束。 判断它们是否构成回文。    分析:所谓回文指从左到右和从右到左读一串字符的值是一样的,如12321,ABCBA,AA等。先读入要判断的一串字符(放入数组letter中),并记住这串字符的长度,然后首尾字符比较,并不断向中间靠拢,就可以判断出是否为回文。    源程序如下:    program ex5_5;    var        letter  : array[1..100]of char;      i,j   : 0..100;      ch   : char;    begin     {读入一个字符串以'.'号结束}     write('Input a string:');     i:=0;read(ch);     while ch<>'.' do     begin      i:=i+1;letter[i]:=ch;      read(ch)     end;     {判断它是否是回文}     j:=1;     while (j=i then writeln('Yes.')     else writeln('No.');    end. 例4:奇数阶魔阵    魔阵是用自然数1,2,3…,n2填n阶方阵的各个元素位置,使方阵的每行的元素之和、每列元素之和及主对角线元素之和均相等。奇数阶魔阵的一个算法是将自然数数列从方阵的中间一行最后一个位置排起,每次总是向右下角排(即Aij的下一个是Ai+1,j+1)。但若遇以下四种情形,则应修正排数法。    (1) 列排完(即j=n+1时),则转排第一列;    (2) 行排完(即i=n+1时),则转排第一行;    (3) 对An,n的下一个总是An,n-1;    (4) 若Aij已排进一个自然数,则排Ai-1,j-2。    例如3阶方阵,则按上述算法可排成:            4 3 8            9 5 1            2 7 6   有了以上的算法,解题主要思路可用伪代码描述如下:    1 in div 2+1,yn /*排数的初始位置*/    2 a[i,j]:=1;    3 for k:=2 to n*n do    4 计算下一个排数位置(i,j);    5 if a[i,j]<>0 then    6 i:=i-1;    7 j:=j-2;    8 a[i,j]k;    9 endfor    对于计算下一个排数位置,按上述的四种情形进行,但我们应先处理第三处情况。算法描述如下:    1 if (i=n)and(j=n) then    2 j:=j-1; /*下一个位置为(n,n-1)*/;    3 else    4 i:=i mod n +1;    5 j:=j mod n +1;    6 endif;    源程序如下:    program ex5_7;    var     a : array[1..99,1..99]of integer;     i,j,k,n : integer;    begin     fillchar(a,sizeof(a),0);     write('n=');readln(n);     i:=n div 2+1;j:=n;     a[i,j]:=1;     for k:=2 to n*n do      begin       if (i=n)and(j=n) then        j:=j-1       else        begin         i:=i mod n +1;         j:=j mod n +1;        end;       if a[i,j]<>0 then        begin         i:=i-1;         j:=j-2;        end;       a[i,j]:=k;      end;     for i:=1 to n do      begin       for j:=1 to n do        write(a[i,j]:5);       writeln;      end;    end. 字符串 1.    字符串用于存放整批的字符数据。通常编程中使用字符串存放字符化了的数字数据。如高精度运算时存放操作数和运算结果。字符串可以看作是特殊的字符串数组来处理。当然,它也有自已的特点。下面是字符串定义的格式: var s:string; s1:string[15]; 字符串定义时,如不指定长度,则按该类型的最大长度(255个字符)分配空间,使用时最大可用长度为255个;如果在中括号中给出一个具体的值(1—255之间),则按这个值的大小分配空间。使用时,最大的可用长度即为该值。 2.字符串的输入、输出: 字符串类型既可按数组方式输入、输出,也可直接输入、输出:readln(s);writeln(s);多个字符串输入时以回车作为数据间的分隔符;每个readln语句只能读入一个字符串。 3.有关字符串的操作: 操作 类型 作用 返回值 例子 length(s) 函数 求字符串s的长度 整型 s:='123456789'; l:=length(s);{l的值为9} copy(s,w,k) 函数 复制s中从w开始的k位 字符串 s:='123456789'; s1:=copy(s,3,5);{s1的值是'34567'} val(s,k,code) 过程 将字符串s转为数值,存在k中;code是错误代码   var s:string;k,code:integer; begin s:='1234'; val(s,k,code); write(k);{k=1234} str(i,s) 过程 将数值i转为字符串s   i:=1234; str(i,s); write(s);{s='1234'} Delete(s,w,k) 过程 在s中删除从第w位开始的k个字符   s := 'Honest Abe Lincoln'; Delete(s,8,4); Writeln(s); { 'Honest Lincoln' } Insert(s1, S, w) 过程 将s1插到s中第w位   S := 'Honest Lincoln'; Insert('Abe ', S, 8); { 'Honest Abe Lincoln' } Pos(c, S) 函数 求字符c在s中的位置 整型 S := ' 123.5'; i :=Pos(' ', S);{i的值为1} + 运算符 将两个字符串连接起来   s1:='1234'; s2:='5678'; s:=s1+s2;{'12345678'} 例1: 找出所有的四位回文数:(回文数就是一个数从左往右读与从右往左读都是同一个数) var s:string[4]; n:integer; begin for n:=1000 to 9999 do begin str(n,s); if (s[1]=s[4]) and (s[2]=s[3]) then write(n:6); end; end. 或者用如下程序: var n:integer; s,t:string; begin for n:=10 to 99 do begin str(n,s); t:=s+s[2]+s[1]; write(s:6); end; end. 上述两个程序,哪个快,哪个慢? 思考与练习: 1、随机产生20个100以内的数,输出;按从小到大的顺序排序,输出。 2、求一个5 X 5数阵中的马鞍数,输出它的位置。所谓马鞍数,是指在行上最小而在列上最大的数。如下: 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 则1行1列上的数就是马鞍数。 3、做一个加法器。完成30000以内的加法,两个加数间用“+”连接,可以连加,回车表示式子输入完成;“#”表示结束运算,退出加法器。 4、有一组数,其排列形式如下:11,19,9,12,5,20,1,18,4,16,6,10,15,2,17,3,14,7,13,8,且尾部8和头部11首尾相连,构成环形的一组数,编程找出相邻的4个数,其相加之和最大,并给出它们的起始位置。 5、验证数学黑洞:所有四位数,除了数字全相同的外,其它的,经过不多于七次的下列操作,一定可以得到6174;并且,一旦得到6174之后,就掉进黑洞,再也得不到其它的数(6174:7641-1467 = 6174),将这个四位数的数字按从大到小和从小到大重组成两个数,大数减去小数。 例:输入3214 (1)4321 - 1234 = 3087 (2)8730 - 378 = 8352 (3)8532 - 2358 = 6174 6、猴子选大王:有M个猴子围成一圈,每个有一个编号,编号从1到M。打算从中选出一个大王。经过协商,决定选大王的规则如下:从第一个开始,每隔N个,数到的猴子出圈,最后剩下来的就是大王。要求:从键盘输入M,N,编程计算哪一个编号的猴子成为大王。 7、有M个人围成一圈,每人有一个编号,从编号为1的人开始,每隔N个出圈,按出圈次序排成一列,其编号刚好按顺序从1到M。要求:从键盘输入M,N,编程计算并输出这M个人原来在圈中的位置。 8、前N个自然数排成一串: X1,X2,X3.....Xn,先取出x1,将x2,x3移到数串尾,再取出x4,将x4,x6移到数串尾,....... 类推直至取完.取出的序列恰好是:1,2,3......n,要求输入N,求原来的数串的排列方式. 9、猴子捉兔子:围绕着山顶有10个洞,狐狸要吃兔子,兔子说:“可以,但必须找到我,我就藏身于这十个洞中,你从10号洞出发,先到1号洞找,第二次隔1个洞找,第三次隔2个洞找,以后如此类推,次数不限。”但狐狸从早到晚进进出出了1000次,仍没有找到兔子。问兔子究竟藏在哪个洞里? 10、读入一串字符,以句号结束,然后让其倒序输出。   如输入:I am a student. 输出:tneduts a ma I 11、读入一串数字,以句号结束,请统计其中‘0’到‘9’的各个数字的个数。   如输入:91254782354987012345978.  输出:0:1 1:2 2:3 3:2 4:3 5:3 7:3 8:3 9:3 12、输入一段文章(255个字符以内),求文章中单词的个数(相同单词只记一次,The和the认为是同一个单词,只记一次)。 13、看程序写结果 1)var ch:string;    i:byte; begin   readln(ch);   for i:=1 to ord(ch[0]) do    write(ch[i]:2);   writeln end. 输入:My name is Tom. 输出: 2)var i:integer; begin   for i:=1 to 13 do write(chr(63+2*i):4);   writeln;   for i:=1 to 13 do write(chr(92-2*i):4);   writeln end. 输出: 3)var a:char; begin   readln(a);   writeln('a:',a);   writeln('succ(a):',succ(a));   writeln('pred(a):',pred(a));   writeln('ord(a):',ord(a));   writeln('chr(ord(a)):',chr(ord(a)));   writeln('chr(ord(a)+2):',chr(ord(a)+2)); end. 输入:e 输出: 4)var s:integer; ch:char;    count:array['a'..'z'] of integer; begin   for ch:='a' to 'z' do count[ch]:=0;    read(ch);   while ch<>'!' do   begin    if (ch>='a')and(ch<='z') then     count[ch]:=count[ch]+1;    read(ch)   end;   s:=0;   for ch:='b' to 'z' do s:=s+count[ch];   writeln(s) end. 输入:We are proud OF OUR COUNTRY!  输出:   5)var a:array[1..100] of string[20];    s:string;temp:string[20];    i,j,k,n:integer; begin   readln(n);readln(s);i:=1;j:=0;k:=0;   while i<=length(s) do    if s[i] in ['0'..'9'] then    begin     j:=1;     while s[i] in ['0'..'9'] do     begin      temp[j]:=s[i];      inc(j);inc(i){inc(i)相当于i:=i+1}     end;     temp[0]:=chr(j-1);     k:=k+1;     a[k]:=temp    end   else   while s[i]=' ' do inc(i);   for i:=1 to n-1 do    for j:=i+1 to n do     if (a[i]+a[j])<(a[j]+a[i]) then      begin       temp:=a[i];a[i]:=a[j];       a[j]:=temp     end;   for i:=1 to n do write(a[i]);   writeln end. 输入:4 81 792 39 79 输出:
本文档为【07数组与字符串】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_707035
暂无简介~
格式:doc
大小:67KB
软件:Word
页数:11
分类:互联网
上传时间:2014-02-21
浏览量:27