初一的学生跪求高手们解一道PASCAL的问题,要具体过程,答案自己有,只是不懂!~

来源:百度知道 编辑:UC知道 时间:2024/06/30 04:04:10
要具体过程,非常具体,每一步为什么要这样算等等.答案自己有.假如和答案对不上,可没悬赏分哦!~
program Program2;
var
a,t:string; i,j:integer;
begin
a:=`morning`; j:= 1;
for i:=2 to 7 do
if (a[j]<a[i])then j:= i;
j:= j-1;
for i:=1 to j do
write (a[i]);
end.
输出:

for i:=2 to 7 do
if (a[j]<a[i])then j:= i;
当i=2时,a[1](即a[j])=m,a[2](即a[i])=o,m在o前面,它对应的ASCII码比o小,所以m<o(字符的大小就是这样比较的),则j:=2,
以此类推,a[2](o)<a[3](r),符合条件a[j]<a[i],所以j:=3;
a[3](r)>a[4](n),不符合条件a[j]<a[i],所以j仍然是3;
a[4](n)>a[5](i),不符合条件a[j]<a[i],所以j仍等于3;
a[4](n)=a[6](n),不符合条件a[j]<a[i],所以j还是3;
a[4](n)>a[7](g),不符合条件a[j]<a[i],所以j还是3;
j:=j-1,即j变成2,下面的循环表示输出字符串中第1至j个字符,即开头的两个字符,也就是“mo”。

program Program2;
var
a,t:string; i,j:integer;
begin
a:=`morning`;{初始化a}
j:= l;{我见过原题,应j:=1,非L,否则无法编译}
for i:=2 to 7 do {枚举第2~7个字符}
if (a[j]<a[i])then j:= i; {第i个字符的ASCII码<第j个的大(本题中即字典序靠后),则j指向i}
{{{即找出ASCII码最大(本题中即字典序靠后)的字符(有多个时选第1个出现的)为第几个}
j:= j-1; {j减1}
for i:=1 to j do
write (a[i]); {输出ASCII码最大的字符之前的所有字符}
end.
输出:
mo
注:你可以把"a:='morning'"改为"a:='afternoon"等试一试,看看输出什么?