2.字符串可以和数组一样操作。如设a:='nabcdeg'; 则:a[1]:='e';a[3]:='f';writeln(a); 或:for i:=1 to length(a) do write(a[i]);都是合法的。
3.因为从键盘一次只能连续输入127个字符,所以较长字符串的输入一般都是采用文件输入的方式。
4.要严格区分数字字符、数字字符串与数字的不同,它们之间可以相互转化。如:'4'<>4;'1326'<>1326;再如:现设var a:char; i:integer;若有 a:='4';i:=ord(a)-48; 则writeln(i)这时输出i的值将会是数字4。
5.字符串大小的比较。 '123'='123'的值为TRUE,'12345'>'12325'的值为TRUE,'12345'>'1234'的值为TRUE, '456'<'123456'的值为FALSE。
例4-3 输入5个学生的姓名,然后反序输出每个学生的姓名,姓名位于一行,姓名之间以一个空格隔开。
【样例输入】
lihua zhaoping zhangsan zhouyu qianwen 【样例输出】
qianwen zhouyu zhangsan zhaoping lihua 【参考程序】 program aa;
var a:array[1..10] of string[8]; i,n,t:integer; ch:string[8]; st:string; begin n:=5;
read(st); //输入5个学生姓名组成的字符串 for i:=1 to n-1 do //先分离出来前n-1个姓名 begin
t:=pos(' ',st); //寻找第一个空格的位置赋值为t
a[i]:=copy(st,1,t-1); //分离出来前t-1字符作为第i个名字 delete(st,1,t); //删除前t个字符 end;
a[n]:=st; //将剩下的字符串作为最后一个名字
for i:=n downto 2 do write(a[i],' '); //输出结果 writeln(a[1]); end.
第三节 字符串应用举例
例4-4 从键盘上输入一串字符(可能含数字、小写字母),以#作为输入结束标志。 编程完成:
统计输入字符中每个小写字母出现的次数(没有出现的不输出)。 【样例输入】 2bcdaab33wycc# 【样例输出】 a 2 b 2 c 3 d 1 w 1 y 1
【参考程序】 program aa;
31 / 53
var
ch:char;
a:array['a'..'z'] of integer; begin
fillchar(a,sizeof(a),0); read(ch);
while ch<>'#' do begin
if (ch>='a') and (ch<='z') then a[ch]:=a[ch]+1; read(ch); end;
for ch:='a' to 'z' do
if a[ch]>0 then writeln(ch,' ',a[ch]); end.
例4-5 编写一个程序,统计从键盘输入的n(<200)个英文单词中以c(小写)开头的单词,并输出个数。
【样例输入】 4 an cat bee cow
【样例输出】 cat cow 2
【参考程序】 program aa; var
n,i,k:integer;
a:array[1..200] of string; begin
readln(n);
for i:=1 to n do readln(a[i]); for i:=1 to n do
if a[i,1]='c' then begin writeln(a[i]); inc(k); end; writeln(k); end.
例4-6 编程完成30000以内的正整数的+、-、*、/一种运算,只含一个运算符号。 【样例输入】 130*100
【样例输出】 13000
【参考程序】 program aa; var
ch:char; st:string;
a,b,c,n,i:longint; begin
32 / 53
readln(st);
for i:=1 to length(st) do
if st[i] in ['*','/','+','-'] then begin n:=i; ch:=st[i]; break; end; n:=pos(ch,st);
val(copy(st,1,n-1),a,c);
val(copy(st,n+1,length(st)-n+1),b,c); case ch of
'+':writeln(a+b); '-':writeln(a-b); '*':writeln(a*b); '/':writeln(a/b:0:2); end; end.
例4-7 统计一个英文句子中有多少英文单词。假设句子中字符数小于80个,单词间用至少一个空格隔开(可以有多个空格),句子头部可以有多个空格,句子以‘$’作为结束标志。
【样例输入】□□□THIS□□IS□A□□GOOD□□□BOOK!$ 【样例输出】5 【参考程序】 program aa; var
ch:char;
a:array[1..80] of char; n,i:integer; begin n:=0; read(ch);
while ch=' ' do read(ch); while ch<>'$' do begin inc(n);
while (ch<>' ') and (ch<>'$') do read(ch); while ch=' ' do read(ch); end;
writeln(n); end.
习题
4-1 输入一串(<80个),且最后以“#”结束的字符,判断它们是否构成回文。回文打印“YES”,不是回文打印“NO”。
【样例输入】 //一行 abcdcba#
【样例输出】 //一行 YES
4-2 输入一串(<80个并大于5个),且最后以“#”结束的字符,然后倒序输出后四个字符,不包括“#”字符。
【样例输入】 abcdefgh# 【样例输出】
33 / 53
hgfe
4-3 输入一串(<80个),且最后以“#”结束的字符,然后输出它们对应的ASCII码,“#”字符的ASCII码不输出。
【样例输入】 abcd#
【样例输出】 //数字之间隔一空格,最后一个数字后面无空格 97 98 99 100
4-4 输入4个学生的姓名,并按输入的顺序进行输出前3个学生的姓名,姓名位于一行,姓名之间以一个空格隔开,最后无空格。
【样例输入】 //一行,姓名之间隔一空格,最后无空格 lihua zhaoping zhangsan zhouyu
【样例输出】 //一行,姓名之间隔一空格,最后无空格 lihua zhaoping zhangsan
4-5 输入一个字符串ST1和ST,将ST1插入到ST字符串第二个字符的位置上。两个字符串中间隔一空格,ST字符串长度都大于5。
【样例输入】 //一行,两个字符串之间隔一空格 abcefg sdfjs879098
【样例输出】 //一行,插入后的字符串 sabcefgdfjs879098
4-6 输入两个数字字符串(长度大于10),将每个数字字符串前五个字符取出来转换为数字后,输出它们的和。
【样例输入】 //两个数字串之间隔一空格 3434556476567 7868769898769
【样例输出】 //一行,两个数的和 113032
4-7 输入一个实数,转换为字符串的过程中保留两位小数。
【分析】str(a:0:2,st)的意思是:将实型数a转换为字符串的过程中保留两位小数。 【样例输入】 987.7655688 【样例输出】 987.77
4-8 完成计算器功能:完成30000以内的正整数加法运算。 【样例输入】 130+100
【样例输出】 230
4-9 删数问题
键盘输入一个正整数N,去掉其中任意S个数字后剩下的数字按原左右次序将组成一个新的正整数。编程对给定的N和S,寻找一种方案使得剩下的数字组成的新数最小。(N不超过240位)
【输入】两行,第一行:正整数n,第二行:正整数S。 【输出】n去掉的s个数字后组成的新的最小的正整数m。 【样例输入】 123006 2
【样例输出】1006
34 / 53
第五章 函数与过程 第一节 自定义函数
函数分为标准函数和自定义函数,标准函数由Free Pascal系统内部提供的函数,供用户编程时调用,如求绝对值函数abs(x),平方根函数sqrt(x)等,但它毕竟数量有限,用户可以根据自己需要,自行定义函数。
一、自定义函数的定义格式
Free Pascal自定义函数用function语句开始,每个自定义函数均由函数的首部和函数体组成。
定义格式如下:
Function 函数名(形参表):函数类型; //函数首部 说明部分; Begin //函数体 语句块;
函数名:=表达式; //函数运算结果通过函数名带出函数体 End; 二、说明
1.函数首部以保留字Function开头,其后的函数名必须与保留字之间有一个以上的空格。
2.函数名是对用户定义的一个函数标识,用于存放调用后的函数值,函数名与标识符的构成规则相同,并且它不能和其他标识符重名。
3.圆括号中的形参表是用逗号隔开的一个或多个形参名,形参名由用户自己决定,所有形参都必须同时说明类型,不同类型的说明之间用分号隔开。
例如:
Function B01(x,y:Real; m,n:integer):real;
形参即函数的自变量,其初值来源于函数的调用,只有在程序执行过程中调用了函数,形参才有可能得到具体的值并参与运算,求得函数值,可见形参表相当于变量说明,但应特别注意:此处只能使用类型标识符,而不能直接使用类型。
若函数没有自变量,则形参表可以缺省,称为无参函数。此时函数的定义形式为: Function 函数名:函数类型; //函数首部
4.函数的类型也就是函数值的类型,它由函数首部来说明,所求得的函数值通过函数名传送回调用程序,由此可见函数的作用一般是为了求得一个值。
5.函数体由说明与执行两部分组成。它的说明部分用来对函数体内所用的类型、常量、变量等进行说明,这些量只在本函数内有效,与函数体外的同名量无关,它的执行部分以BEGIN开始,以END结束(其后紧跟一个分号),中间为语句块,至少要有一条赋值语句,即:函数名:=表达式;
该操作把表达式的值赋给函数名,然后把这个值通过函数名带回调用它的程序中去。 注意:自定义函数只是定义了一个求值的模块,只有当一个语句中使用了这个函数时,这个模块才被调用执行。
6.函数的调用形式:变量:=函数名(实在参数表); 例5-1 求a!+b!+c!的值。(a,b,c<=10) 【样例输入】 6 7 3
【样例输出】 5766
【参考程序】
var a,b,c,s:integer;
35 / 53