算法训练 P1102
Posted 新生代黑马
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法训练 P1102相关的知识,希望对你有一定的参考价值。
题目描述
定义一个学生结构体类型student,包括4个字段,姓名、性别、年龄和成绩。然后在主函数中定义一个结构体数组(长度不超过1000),并输入每个元素的值,程序使用冒泡排序法将学生按照成绩从小到大的顺序排序,然后输出排序的结果。
输入格式
第一行是一个整数N(N<1000),表示元素个数;接下来N行每行描述一个元素,姓名、性别都是长度不超过20的字符串,年龄和成绩都是整型。
输出格式
按成绩从小到大输出所有元素,若多个学生成绩相同则成绩相同的同学之间保留原来的输入顺序。
输入描述
3 Alice female 18 98 Bob male 19 90 Miller male 17 92
输出描述
Bob male 19 90 Miller male 17 92 Alice female 18 98
测试代码
1 #include <stdio.h> 2 #include <string.h> 3 4 struct student 5 { 6 char name[20]; 7 char sex[20]; 8 int age; 9 int score; 10 }; 11 12 void input(struct student *stu, int n) 13 { 14 int i; 15 for (i = 0; i < n; i++) 16 { 17 scanf("%s%s%d%d", stu[i].name, stu[i].sex, &stu[i].age, &stu[i].score); 18 } 19 } 20 21 void bubbleSort(struct student *stu, int n) 22 { 23 int i, j, a, s; 24 char na[20], se[20]; 25 for (i = 0; i < n - 1; i++) 26 { 27 for (j = 0; j < n - 1 - i; j++) 28 { 29 if ((stu + j)->score > (stu + j + 1)->score) 30 { 31 strcpy(na, (stu + j)->name); 32 strcpy((stu + j)->name, (stu + j + 1)->name); 33 strcpy((stu + j + 1)->name, na); 34 35 strcpy(se, (stu + j)->sex); 36 strcpy((stu + j)->sex, (stu + j + 1)->sex); 37 strcpy((stu + j + 1)->sex, se); 38 39 a = (stu + j)->age; 40 (stu + j)->age = (stu + j + 1)->age; 41 (stu + j + 1)->age = a; 42 43 s = (stu + j)->score; 44 (stu + j)->score = (stu + j + 1)->score; 45 (stu + j + 1)->score = s; 46 } 47 } 48 } 49 } 50 51 void output(struct student *stu, int n) 52 { 53 int i; 54 for (i = 0; i < n; i++) 55 { 56 printf("%s %s %d %d\n", (stu + i)->name, (stu + i)->sex, (stu + i)->age, (stu + i)->score); 57 } 58 } 59 60 int main() 61 { 62 struct student stu[1000]; 63 int n, i; 64 double sum = 0; 65 scanf("%d", &n); 66 input(stu, n); 67 bubbleSort(stu, n); 68 output(stu, n); 69 return 0; 70 }
以上是关于算法训练 P1102的主要内容,如果未能解决你的问题,请参考以下文章