90 87 76 67 320 90 78 67 45 280 86 87 98 76 347 67 86 90 91 334 【参考程序】 program aa;
var i,j:integer; a:array[1..5,1..5] of integer; begin
for i:=1 to 5 do //输入学生的原始成绩 for j:=1 to 4 do read(a[i,j]);
for i:=1 to 5 do //计算每个学生的总分,放入该行的第5个数据元素中 begin
a[i,5]:=0;
for j:=1 to 4 do
a[i,5]:=a[i,5]+a[i,j]; end;
for i:=1 to 5 do //输出结果 begin
for j:=1 to 4 do write(a[i,j], ' '); writeln(a[i,5]); end; end.
习题
3-1 按照顺序读入以下8个数据(每个数据<=100),然后以正序方式输出。数字间隔一空格,最后无空格。
【样例输入】3 47 -81 23 66 35 18 -23 【样例输出】3 47 -81 23 66 35 18 -23 3-2 按照顺序读入以下8个数据(每个数据<=100),然后以正序方式输出奇数位上的数。
【样例输入】3 47 -81 23 66 35 18 -23 【样例输出】3 -81 66 18 3-3 读入十个整数,将它们反序打印,并输出它的总和。 【样例输入】1 2 3 4 5 6 7 8 9 0
【样例输出】 //数字间隔一空格,最后无空格,第一行是10个整数,第二行是它的总和
0 9 8 7 6 5 4 3 2 1 45
3-4 读入6个数,打印出其中的最大数和最小数,两个数之间隔一空格。 【样例输入】89 77 234 221 900 23 【样例输出】900 23 3-5 读入两个整数N和M,然后再读入N(N<=10)个递增整数,查找M是否在该数列中。如在,打印其位置,否则打印-1。注意:用折半查找法数组元素必须是递增有序的。
【样例输入】 //第一行是N和M,第二行是N个数 9 56
1 2 56 456 567 678 789 798 810 【样例输出】 //一行,查找结果 3
3-6 读入8个数据,将其最后两个数据依次移到数据前面,原来的数据依次后移,打印移动后的数据。
【样例输入】1 2 3 4 5 6 7 8 9 0 【样例输出】9 0 1 2 3 4 5 6 7 8
26 / 53
3-7 先读入一个整数X,再读入8个由小到大排列的整数,然后将数X插入到第3个位置,打印插入后数列。
【样例输入】 //两行,第一行是要插入的数X,第二行是8个数 56
10 20 30 36 45 58 69 79
【样例输出】 //一行,插入后的数列 10 20 56 30 36 45 58 69 79
3-8 先读入M和K,然后再读入10个数据,将M插入到该数列中的第K个位置中,打印操作后的数列。
【样例输入】 //两行,第一行是M和K,第二行是输入的10个数据 39 5
1 2 3 4 5 6 7 8 9 0
【样例输出】 //一行,插入后的数列 1 2 3 4 39 5 6 7 8 9 0 3-9 砝码称重
1克、2克、50克的砝码各10个,问用这些砝码一共能称出多少种重量。 3-10 用筛选法求n(N<=10000000)以内的素数个数。 3-11 灯的开关状态
有N个灯放成一排,从1到N依次顺序编号,开始时全部打开。有N个人也从1到N依次编号,1号人将灯全部关闭,2号人将凡是编号为2的倍数的灯打开,3号人将凡是编号为3的倍数的灯作相反处理(该灯如为打开的,则将它关闭,如关闭的,则将它打开)。以后的人都和3号人一样,将凡是自己编号倍数的灯作相反处理。
编程实现:第N个人操作后,按顺序输出灯的状态。(1-表示灯打开,0-表示灯关闭) 【输入】n(n<=100),灯的个数,
【输出】灯的状态,01序列,中间无空格。 【样例输入】2 【样例输出】01
3-12 校门外的树(NOIP2005) 【问题描述】
某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米。我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置;数轴上的每个整数点,即0,1,2,??,L,都种有一棵树。
由于马路上有一些区域要用来建地铁,这些区域用它们在数轴上的起始点和终止点表示。已知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分。现在要把这些区域中的树(包括区域端点处的两棵树)移走。你的任务是计算将这些树都移走后,马路上还有多少棵树。
【输入】
第一行有两个整数L(1 <= L <= 10000)和 M(1 <= M <= 100),L代表马路的长度,M代表区域的数目,L和M之间用一个空格隔开。接下来的M行每行包含两个不同的整数,用一个空格隔开,表示一个区域的起始点和终止点的坐标。
【输出】
一行,这一行只包含一个整数,表示马路上剩余的树的数目。 【样例输入】 500 3 150 300 100 200 470 471
【样例输出】 298
3-13 输入3名学生5门功课的考试成绩,输出各人各科成绩及总分,成绩均为实型数,保留一位小数。
27 / 53
【样例输入】 //每行5个数据,数据间隔一空格 23.5 45 67 89 90 90 87 76 67 65 90 78 67 45 23
【样例输出】 //共三行,每行6个数据,前五个是各科成绩,第6个是总成绩,数据间隔一空格,最后无空格。
23.5 45.0 67.0 89.0 90.0 314.5 90.0 87.0 76.0 67.0 65.0 385.0 90.0 78.0 67.0 45.0 23.0 303.0 3-14 杨辉三角
输出杨辉三角的前N行(N<=10)。 【样例输入】 4
【样例输出】 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1
28 / 53
第四章 字符与字符串操作 第一节 字符和字符数组
一、字符类型(char)
字符类型是由一个字符组成的字符常量或字符变量,字符类型变量用char定义,它和整型、实型变量一样,在前面章节中我们也曾使用过字符常量和字符变量。
字符类型是一个有序类型,字符的大小顺序按其ASCⅡ代码的大小而定,所以函数succ、pred、ord 都适用于字符类型。
例如:前驱函数:pred('B')='A',后继函数:succ('a')= 'b',序号函数:ord('A')=65
二、字符数组
当数组元素的类型为字符型时,此数组即为字符数组。如: Type
Chty=array[1..20] of char; Var
Ch:chty;
例4-1 输入一串且最后以“#”结束的字符(<200),判断它们是否构成回文。回文打印“Y”,不是回文打印“N”。
【样例输入】 abcdcba# 【样例输出】 Y
【参考程序】 program aa; var
a:array[1..200] of char; i,f,n:integer; ch:char; begin
read(ch); n:=0;
while ch<>'#' do begin
n:=n+1; //统计读入字符的个数
a[n]:=ch; //将读入的字符赋给a数组 read(ch); end; f:=0;
for i:=1 to n do //判断是否是回文
if a[i]<>a[n-i+1] then begin f:=1; break; end; //一旦出现首尾字符不相等,这个字符串就不是回文
if f=0 then writeln('Y') else writeln('N'); //输出结果 end.
第二节 字符串变量
Free Pascal字符串类型保留字:string。定义格式为:string<[n]>
29 / 53
String括号内的n表示该字符串变量的最大长度,n的值需在1~255之间,若省略n默认为255,在给字符串变量进行赋值操作或输出操作时,字符串的长度可以变化,可长可短,而不象数组那样必须按规定的长度输入数据或输出数据,更大长度的字符串用ansistring来定义,它用法与string一样。
常见的字符串函数
函 数 意 义 使用方法 concat(s1,?,sn)连接n个字符串成为一个字符串,返回值st:=concat(s1,s2,s3); 函数 是字符串,若连接后的字符串长度大于(st:=s1+s2+s3); (相当于”+”号) 255,则出错 str(i,s) 过程 将一个整数或实数i转换成字符串S str(i,s);
copy(s,i,len)函数 在字符串s中从i位置开始取len个字符,st:=copy(s,i,n);
若i超过串长,则返回一个空串,若i超出1..255范围则出错
Length(s) 函数 求字符串s的长度 a:=length(s); pos(st1,st2) 函数 求st1字符串在st2字符串中的开始位置,a:=Pos(st1,st2);
若没有,则返回值为0
delete(s,i,len)过在字符串s中从i位置开始删除len个字delete(s,i ,len); 程 符,若i>s串长度,则不删除任何字符;
若i超出1..255范围则出错;若i+len>s长度,则仅删除串内长度
insert(st1,st,i)将st1插入到st字符串第i个位置,若insert(st1,st,i); 过程 i<=1,则将字符串插入到st字符串的最前
面,若i>st串的长度,则插入到st字符串的最后面
val(st,r,c)过程 将字符串st转换成与r同类型的数值,并val(st,r,c);
将值赋予r,如果字符串中存在非数值型字符,则用c返回非数值型字符的位置,否则c的值为0
一、字符串变量的赋值
字符串变量的赋值方法基本同一般变量,所不同的是赋值号右边的值需加一对单引号,如下面的例题便可以说明。
例4-2 判断下面程序的运行结果 program aa;
var st1,st2,st3:string[15]; begin
st1:='China';
st2:='I am a Chinese'; st3:='America'; writeln(st1); writeln(st2);
writeln(st1+' and '+st3); end.
【输出结果】 China
I am a Chinese China and America 二、字符串的操作
1.字符串的输入和输出
字符串是以回车作为结束标志,所以输入时必须用readln,如readln(s);且每个readln语句只能读入一个字符串,如readln(s1,s2)是无法正确读入的,输出时直接输出就行,并且可以一次输出多个字符,如writeln(s1,' ',s2)是可以正确输出的。
30 / 53