parent
8f1e61eb6d
commit
4f8a1440cc
@ -0,0 +1,112 @@
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
struct Data
|
||||
{
|
||||
int ID;
|
||||
int Class;
|
||||
float score1;
|
||||
float score2;
|
||||
float score3;
|
||||
char name[101];
|
||||
} stu[1001];
|
||||
int stl = 0;
|
||||
struct Data* stuflag = 0;
|
||||
|
||||
float total(struct Data* a) {
|
||||
return a->score1 + a->score2 + a->score3;
|
||||
}
|
||||
|
||||
void swap(struct Data* a, struct Data* b) {
|
||||
struct Data t = *a;
|
||||
*a = *b;
|
||||
*b = t;
|
||||
|
||||
if (a == stuflag) stuflag = b;
|
||||
else
|
||||
if (b == stuflag) stuflag = a;
|
||||
}
|
||||
|
||||
void Sort() {
|
||||
int i, j;
|
||||
for(i = 0; i < stl-1; i++) {
|
||||
for (j = 0; j < stl-i-1; j++) {
|
||||
if (stu[j].Class < stu[j+1].Class) continue;
|
||||
if (stu[j].Class > stu[j+1].Class ||
|
||||
total(&stu[j]) < total(&stu[j+1])) swap(&stu[j], &stu[j+1]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void input1() {
|
||||
scanf("%d", &stu[stl].ID);
|
||||
scanf("%f", &stu[stl].score1);
|
||||
scanf("%f", &stu[stl].score2);
|
||||
scanf("%f", &stu[stl].score3);
|
||||
stl++;
|
||||
}
|
||||
|
||||
|
||||
void Input() {
|
||||
printf("Please input info of three students:\n");
|
||||
input1();input1();input1();
|
||||
if (total(&stu[stl-3]) < total(&stu[stl-2])) swap(&stu[stl-3], &stu[stl-2]);
|
||||
if (total(&stu[stl-2]) < total(&stu[stl-1])) swap(&stu[stl-2], &stu[stl-1]);
|
||||
if (total(&stu[stl-3]) < total(&stu[stl-2])) swap(&stu[stl-3], &stu[stl-2]);
|
||||
printf("%d,%.1f,%.1f\n", stu[stl-3].ID, total(&stu[stl-3]), total(&stu[stl-3])/3.0f);
|
||||
printf("%d,%.1f,%.1f\n", stu[stl-2].ID, total(&stu[stl-2]), total(&stu[stl-2])/3.0f);
|
||||
printf("%d,%.1f,%.1f\n", stu[stl-1].ID, total(&stu[stl-1]), total(&stu[stl-1])/3.0f);
|
||||
}
|
||||
|
||||
void print1(struct Data* a) {
|
||||
printf("%d %d %s %2.1f %2.1f %2.1f", a->ID, a->Class, a->name,
|
||||
a->score1, a->score2, a->score3);
|
||||
if (a == stuflag) printf(" inserted");
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
void Remove(struct Data* r) {
|
||||
for(; r+1 < stu+stl; r++) {
|
||||
*r = *(r+1);
|
||||
}
|
||||
stl--;
|
||||
}
|
||||
|
||||
void Delete() {
|
||||
stu[0] = (struct Data){10001, 11, 99.5, 88.5, 89.5, "Zhang"};
|
||||
stu[1] = (struct Data){10002, 12, 77.9, 56.5, 87.5, "Yang"};
|
||||
stu[2] = (struct Data){10003, 11, 92.5, 89.0, 60.5, "Liang"};
|
||||
stl = 3;
|
||||
|
||||
int ID = -1; char name[101];
|
||||
scanf("%s", name);
|
||||
getchar();
|
||||
int NumFlag = 1, i;
|
||||
for(i = 0; name[i]!='\0'; i++)
|
||||
if (name[i] < '0' || name[i] > '9') {
|
||||
NumFlag = 0; break;
|
||||
}
|
||||
if (NumFlag) {
|
||||
sscanf(name, "%d", &ID);
|
||||
name[0] = '\0';
|
||||
}
|
||||
|
||||
printf("Are you sure(yes/no)?\n");
|
||||
char t;
|
||||
scanf("%c", &t);
|
||||
if (t == 'y') {
|
||||
for(i=0; i<stl; i++) {
|
||||
if(stu[i].ID == ID || name[0]!='\0' && strcmp(stu[i].name, name) == 0) {
|
||||
Remove(stu + i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
for (i=0; i<stl; i++) {
|
||||
print1(stu + i);
|
||||
}
|
||||
}
|
||||
|
||||
int main() {
|
||||
Delete();
|
||||
}
|
Loading…
Reference in new issue