题目描述:
定义一个包含球员信息(所在球队、球员名称、场均得分)的顺序表,读入相应的球员数据来完成球员信息表的创建,然后统计球员信息表中的球员数量,同时逐行输出每位球员的信息。
题目输入:
输入n+1行,其中前n行是n位球员的信息(所在球队、球员名称、场均得分),每位球员信息占一行,所在球队、球员名称、场均得分用空格分隔,场均得分之后没有空格。最后第n+1行是输入结束标志:0 0 0(空格分隔的三个0)。其中所在球队、球员名称为字符串类型,场均得分为浮点数类型。
题目输出:
总计n+1行,第1行是所创建的球员信息表中的球员数量,后n行是n位球员的信息(所在球队、球员名称、场均得分),每位球员信息占一行,所在球队、球员名称、场均得分用空格分隔。其中场均得分输出保留一位小数。
输入样例:
GSW StephenCurry 26.7
GSW KlayThompson 17.3
WAS JordanPoole 17.1
LAL LeBronJames 24.7
NYK DonteDiVincenzo 11.3
DAL KyrieIrving 25.3
MIA JimmyButler 21.3
LAC PaulGeorge 23.9
0 0 0
输出样例:
8
GSW StephenCurry 26.70
GSW KlayThompson 17.30
WAS JordanPoole 17.10
LAL LeBronJames 24.70
NYK DonteDiVincenzo 11.30
DAL KyrieIrving 25.30
MIA JimmyButler 21.30
LAC PaulGeorge 23.90
代码:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <float.h>
#include <stdbool.h>
#define MAXSIZE 10000
typedef struct Player {
char team[20];
char name[50];
double goals;
} Player;
typedef struct {
Player* elem;
int num;
} SqList;
void InitList(SqList* L) {
L->elem = (Player*)malloc(MAXSIZE * sizeof(Player));//申请动态内存空间
if (!L->elem) exit(1); // 如果内存分配失败,则退出程序
L->num = 0;
}
void Input(SqList* L) {
char a[20], b[50];
double c;
while (true) {
scanf("%s %s %lf", a, b, &c);
if (strcmp(a, "0") == 0 && strcmp(b, "0") == 0 && c == 0.0) break;
L->elem[L->num].team[0] = '\0'; // 初始化字符串
strcpy(L->elem[L->num].team, a);
strcpy(L->elem[L->num].name, b);
L->elem[L->num].goals = c;
L->num++;
}
}
void Output(SqList* L) {
int i;
for (i = 0; i < L->num; i++) {
printf("%s %s %.2f\n", L->elem[i].team, L->elem[i].name, L->elem[i].goals);
}
}
int main() {
SqList L;
InitList(&L);
Input(&L);
printf("%d\n", L.num);
Output(&L);
free(L.elem); // 释放分配的内存
return 0;
}