老师正在教笑笑pascal语言中的记录类型:
有时候我会遇到这种数据,它由性质和不相同的成分姐成,例如:
学号 字符串类型
姓名 字符串类型
年龄 整型
性别 字符型
成绩 实型
如果用5个变量来存储,就推动了一个整体性,Pascal给我们提供了一种记录的结构类型。在一个记录中,可以包含不同类型的并且互相相关的一些数据。
记录的定义:(如上面的数据定义如下)
type node=record
num:string;{学号}
name:string;{姓名}
age:integer;{年龄}
sex:string[6];{性别}
score:real;{成绩}
end;
var student:array[1..100] of node;{定义student数组的毎个元索为node这种记录类型,该记录类型包含5个域}
记录的引用:
对记录中每个域的引用如输入第i个学生的学号,有两种方法:(1)可以写出记录变
量名和域名,pascal语言表示为 readln(student[i].num);(2)使用开域语句 with...do, pascal语言表示为 with student[i] do
Readln(num)
笑笑立马就掌握了这种数据结构,为了在你面前炫耀,她出了一个记录类型的题目考考
你,给出n(1<= n<200)个同学m(1<=m<=5)科的考试成绩,按总分找出前十名是哪些同学。规定:总分相同名次相同,且占用后面的名次,例如:第2名有两个同学,那么将没有第3名,后面的同学将从第4名算起。
input
第一行为n和m,下面n行为毎个同学的成绩描述:每行有m+1个数,其中第一个数为学号(小于等于200),后面为各科成绩, 成绩为0~100之间的实数,中间用一个空格隔开。
Output
一行,成绩名次在前10的同学学号,不足10名全部输出。当第10名有多个同学时,输出有可能超过10名同学的学号。同名次按学号由小到大输出。 输出的各个学号之间用一个空格隔开。
Sample Input
17 2
1 7 13
2 18 54
3 47 91
4 65 86
5 44 48
6 92 88
7 80 36
8 76 68
9 54 21
10 65 11
11 61 69
12 78 32
13 0 81
14 93 32
15 42 97
16 28 9
17 65 55
Sample Output
6 4 8 15 3 11 24 17 7 12
programe test_2015_5;
type cj=array[l..5] of real;
rec=record
real;
num: integer: //学号
s:cj: //考试科目成绩
ml: integer; //名次
sum: real; //总分
end:
var array [1..200] of rec; i, j, n, m, k:integer ;t:rec;
begin
readln(n, m);
for i:=l to n do
with a[i] do
begin
read(num) ; sum:=0;
for j: = l to m do begin read(s[j]) ;sum:= inc(sum,s[j]) ; end;
ml:=0:
readln;
end;
for i:=l to n-1 do
for j:=l to n-i do
if (a[j]. sum<a[j+l]. sum)or
( a[j].sum=a[j+1].sum ) and ( a[j].num>a[j+l].num)
then begin t:=a[j]; a[j]:=a[j+1] ;a[j+l]:=t; end;
a[1].m1:=1;k:=1;
for i:=2 to n do
if a[i].sum=a[i-l].sum then a[i].ml:=k
else begin inc(k);a[i].ml:=k; end;
for i:=l to n do
if a[i].m1<=10 then write(a[i].num, ’ ’)
else break;
end.