You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
141 lines
2.8 KiB
141 lines
2.8 KiB
#include<stdio.h>
|
|
#include<string.h>
|
|
struct Info
|
|
{
|
|
char num[6], name[7];
|
|
int cls;
|
|
float math, phy, eng, sum, ave;
|
|
}arr[7]={{10001,11,"Zhang",99.5,88.5,89.5,0,0},
|
|
{10002,12,"Yang",77.9,56.5,87.5,0,0},
|
|
{10003,11,"Ling",92.5,99.0,60.5,0,0},
|
|
{10004,11,"Cai",89.6,56.9,90.5,0,0},
|
|
{10005,14,"Fu",55.6,67.9,98.9,0,0},
|
|
{10006,12,"Mao",22.1,45.9,99.2,0,0},
|
|
{10007,13,"Zhan",35.6,67.9,88.0,0,0}};
|
|
struct Info ins, mod;
|
|
void Input(int i)
|
|
{
|
|
scanf("%s", arr[i].num);
|
|
scanf("%d", &arr[i].cls);
|
|
scanf("%s", arr[i].name);
|
|
scanf("%f%f%f", &arr[i].math, &arr[i].phy, &arr[i].eng);
|
|
arr[i].sum = arr[i].math + arr[i].phy + arr[i].eng;
|
|
arr[i].ave = arr[i].sum / 3.0;
|
|
}
|
|
void Output(int i)
|
|
{
|
|
/*if (i == 0 || arr[i].cls != arr[i - 1].cls)
|
|
printf("%d ", arr[i].cls)
|
|
else
|
|
printf(" ");*/
|
|
printf("%s ", arr[i].num);
|
|
printf("%d ", arr[i].cls);
|
|
printf("%s ", arr[i].name);
|
|
printf("%.1f %.1f %.1f", arr[i].math, arr[i].phy, arr[i].eng);
|
|
printf("\n");
|
|
}
|
|
void Rank(struct Info arr[],int s)
|
|
{
|
|
for (int i = 0; i < s; i++)
|
|
for (int j = s - 1; j > i; j--)
|
|
{
|
|
if (arr[j].cls < arr[j - 1].cls)
|
|
{
|
|
struct Info temp = arr[j];
|
|
arr[j] = arr[j - 1];
|
|
arr[j - 1] = temp;
|
|
}
|
|
}
|
|
for (int i = 0; i < s; i++)
|
|
for (int j = s - 1; j > 0; j--)
|
|
{
|
|
if (arr[j].cls == arr[j - 1].cls && arr[j].sum > arr[j - 1].sum)
|
|
{
|
|
struct Info temp = arr[j];
|
|
arr[j] = arr[j - 1];
|
|
arr[j - 1] = temp;
|
|
}
|
|
}
|
|
}
|
|
void Scls(int s)
|
|
{
|
|
int cl, ch;
|
|
scanf("%d-%d", &cl, &ch);
|
|
for (int i = 0; i < s; i++)
|
|
if (arr[i].cls >= cl && arr[i].cls <= ch)
|
|
Output(i);
|
|
}
|
|
void Snum(int s)
|
|
{
|
|
char str[12];
|
|
gets(str);
|
|
char nl[6], nh[6];
|
|
strncpy(nl, str, 5);
|
|
for (int i = 6; i < 11; i++)
|
|
nh[i - 6] = str[i];
|
|
for (int i = 0; i < s; i++)
|
|
if (strcmp(arr[i].num, nl) >= 0 && strcmp(arr[i].num, nh) <= 0)
|
|
Output(i);
|
|
}
|
|
void Sname(int s)
|
|
{
|
|
char n[6];
|
|
gets(n);
|
|
for (int i = 0; i < s; i++)
|
|
{
|
|
int f = 0;
|
|
for (int j = 0; n[j] != '*'; j++)
|
|
if (n[j] != arr[i].name[j])
|
|
{
|
|
f = 1;
|
|
break;
|
|
}
|
|
if (f == 0)
|
|
Output(i);
|
|
}
|
|
}
|
|
void Ssum(int s)
|
|
{
|
|
float scr;
|
|
scanf("%f", &scr);
|
|
for (int i = 0; i < s; i++)
|
|
if (arr[i].sum >= scr)
|
|
Output(i);
|
|
}
|
|
void Scn(int s)
|
|
{
|
|
int clas;
|
|
scanf("%d.", &clas);
|
|
char str[12];
|
|
gets(str);
|
|
char nl[6], nh[6];
|
|
strncpy(nl, str, 5);
|
|
for (int i = 6; i < 11; i++)
|
|
nh[i - 6] = str[i];
|
|
for (int i = 0; i < s; i++)
|
|
if (arr[i].cls == clas && strcmp(arr[i].num, nl) >= 0 && strcmp(arr[i].num, nh) <= 0)
|
|
Output(i);
|
|
}
|
|
void Seek(int s)
|
|
{
|
|
int c;
|
|
scanf("%d ", &c);
|
|
switch (c)
|
|
{
|
|
case 1:Scls(s); break;
|
|
case 2:Snum(s); break;
|
|
case 3:Sname(s); break;
|
|
case 4:Ssum(s); break;
|
|
case 5:Scn(s); break;
|
|
};
|
|
}
|
|
int main()
|
|
{
|
|
int s = 0, * p = &s;
|
|
for (; s < 7; s++)
|
|
Input(s);
|
|
Rank(arr, s);
|
|
Seek(s);
|
|
|
|
}
|