回 帖 发 新 帖 刷新版面

主题:请高手指点

我是初学者,请大虾帮帮忙怎么做:
校女子100米短跑决赛成绩如下表,请编程打印前八名运动员的名次、运动员号和成绩。(从第一名至第八名按名次排列)
 
运动员号    017    168    088    105    058    123    142    055    113    136    020    032    089    010
成绩(秒)    12.3    12.6    13.0    11.8    12.1    13.1    12.0    11.9    11.6    12.4    12.9    13.2    12.2    11.4


我的错在哪里,请指教:为什么运动员号码的输出有错?
program agj;
var a:array[1..14] of integer;
    b:array[1..14] of real;
    i,j:integer;
    t:real;
    s:integer;
begin
 for i:=1 to 14 do
  read(a[i]);
 for i:=1 to 14 do
  read(b[i]);
 for i:=13 downto 1 do
  for j:=1 to i do
   if b[j]>b[j+1] then
    begin
     t:=b[j];
     b[j]:=b[j+1];
     b[j+1]:=t;
     s:=a[j];
     a[j]:=a[j+1];
     a[j+1]:=s;
     end;
 for i:=1 to 8 do
  write(a[i]:4,'   ');
 writeln;
 for i:=1 to 8 do
  write(b[i]:4:1,'  ');
 writeln;
 readln;
end.

回复列表 (共3个回复)

沙发

{这是我改的,很简单,你排序出错了 }
program agj;
var a:array[1..14] of integer;
    b:array[1..14] of real;
    i,j:integer;
    t:real;
    s:integer;
begin
 for i:=1 to 14 do
  read(a[i]);
 for i:=1 to 14 do
  read(b[i]);
 for i:=1 to 14 do
  for j:=1 to 14 do
   if b[i]>b[j] then
    begin
     t:=b[i];
     b[i]:=b[j];
     b[j]:=t;
    end;
 for i:=1 to 8 do
  write(a[i]:4,'   ');
 writeln;
 for i:=1 to 8 do
  write(b[i]:4:1,'  ');
 writeln;
 readln;
end.

板凳

谢谢回复,但不知你调试过没有?输出的运动员号和成绩会匹配吗?我试过a:array[1..14] of integer;定义成整型后输出结果是正确的,只是号码不能保证输出三位数。我的疑问是为什么不能定义成字符串数组?能帮我解答吗?

3 楼

2楼好象也不对
[quote]
for i:=1 to 14 do
  for j:=1 to 14 do
[/quote]
应该写成
for i:=1 to 13 do
  for j:=1 to i-1 do
或者把原文中的大于号改成小于号

另外,字符串数组可以申请,但由于你的字符串只有3位建议写成这样:
:array [1..14] of string[3];最后的[3]限定长度,
占用字节树为该数字+1(+1是存长度)

我来回复

您尚未登录,请登录后再回复。点此登录或注册