1.创建结构体,对象为学生,结构体信息有学号,分数,总分,排名
typedef struct{ int ID; float score[3]; float total ; int rank; }STU;
2.使用函数实现不同的功能
2.1.输入学生的信息:
void input_data(STU s[]) { int i = 0; for (i = 0; i < 10; i++)//这里假设有十个学生 { scanf("%d", &s[i].ID);//输入每个学生的ID for (int j = 0; j < 3; j++) { scanf("%f", &s[i].score[j]); //输入每个学生的语文,数学,英语三门科目的分数 } } }
void input_data(STU s[]) { int i = 0; for (i = 0; i < 10; i++)//这里假设有十个学生 { scanf("%d", &s[i].ID);//输入每个学生的ID for (int j = 0; j < 3; j++) { scanf("%f", &s[i].score[j]); //输入每个学生的语文,数学,英语三门科目的分数 } } }
2.2.函数:计算学生的总分
void calculate(STU s[]) { for(int i=0;i<10;i++) { s[i].total =0; //在这里将总成绩初始化为0,也可以在创建结构体时 将总成绩初始化为0 } for(int i=0;i<10;i++) { for(int j=0;j<3;j++) { s[i].total += s[i].score[j];//求和 } } }
将学生的各科成绩求和 如上:
2.3. 按总成绩从高到低进行排序
使用冒泡排序
void sort_total(STU s[]) { STU tmp;//结构体变量,需要什么类型的临时存储值,就创建什么类型的临时变量 int i=0; int j=0; for(i=0;i<10;i++) { for(j=0;j<10-i-1;j++) { if(s[j].total<s[j+1].total) { tmp =s[j]; s[j] = s[j+1]; s[j+1] = tmp; } } } }
2.4.对排好名次后的每个学生赋予名次
void add_rank(STU s[]) { for(int i=0;i<10;i++) { s[i].rank =i+1; //i+1 是由于数组从0开始,而常见的排名是从第一名到第n名 } }
2.5 将所有数据输出
void print_data(STU s[]) { /********** Begin **********/ int i=0; int j =0; printf("学号: 语文: 数学: 英语: 总分: 名次:\n"); for(i=0;i<10;i++) { printf("%-15d",s[i].xuehao); for(j=0;j<3;j++) { printf("%-15.1f",s[i].score[j]); } printf("%-15.1f%d",s[i].total,s[i].rank); printf("\n"); }
主函数如下:
int main() { STU s[10]; input_data(s); calculate(s); sort_total(s); add_rank(s); print_data(s); return 0; }