题目:有n个学生的信息(包括学号、姓名、成绩),要求按照成绩的高低顺序输出各学生的成绩。
要实现下面的功能:
话不多说!直接代码见真知!
第一步:定义和声明
//声明结构体类型 struct student { char name[20]; int num; float score; };
//输入 printf("请输入学生数:"); scanf("%d",&n);
//定义结构体数组,存放键盘输入的数据 struct student stu[n]; //定义结构体变量middle,用作交换时的中间变量 struct student middle;
第二步:输入数据
for(i=0;i<n;i++) { printf("请输入学生姓名:"); scanf("%s",&stu[i].name); printf("请输入学生学号:"); scanf("%d",&stu[i].num); printf("请输入学生成绩:"); scanf("%f",&stu[i].score); printf("\n"); }
第三步:以学生成绩来比较进行排名
//利用交换排序法进行排序 for(i=0;i<n-1;i++) { for(j=i+1;j<n;j++) { //利用成绩进行比较 if(stu[i].score<stu[j].score) { //利用中间变量进行交换 middle=stu[i]; stu[i]=stu[j]; stu[j]=middle; } } }
第四步:输出
printf("成绩排名为:\n"); for(i=0;i<n;i++) { //读取结构体中各个部分 printf("\t\t%s\t%d\t%0.1f\n",stu[i].name,stu[i].num,stu[i].score); }
完整代码:
#include<stdio.h> struct student { char name[20]; int num; float score; }; int main() { int n,i,j; printf("请输入学生数:"); scanf("%d",&n); struct student stu[n]; struct student middle; printf("\n"); for(i=0;i<n;i++) { printf("请输入学生姓名:"); scanf("%s",&stu[i].name); printf("请输入学生学号:"); scanf("%d",&stu[i].num); printf("请输入学生成绩:"); scanf("%f",&stu[i].score); printf("\n"); } for(i=0;i<n-1;i++) { for(j=i+1;j<n;j++) { if(stu[i].score<stu[j].score) { middle=stu[i]; stu[i]=stu[j]; stu[j]=middle; } } } printf("成绩排名为:\n"); for(i=0;i<n;i++) { printf("\t\t%s\t%d\t%0.1f\n",stu[i].name,stu[i].num,stu[i].score); } return 0; }