定义学生信息结构体和结构体数组,包括学号、两门百分制成绩和姓名;键盘输入
学生不多于 30 人的信息,以输入成绩为负数或大于 100 作为输入结束;按照学号和平均成绩排序,并输出学生信息
1 //输入学生分数信息,学号排序和平均分排序后输出 2 3 #include <stdio.h> 4 5 struct student{ 6 long num; 7 char name[20]; 8 float score[2]; 9 float aver; 10 }stu[],temp; 11 12 int main(void){ 13 int i,j,k,n; 14 printf("Enter score1 score2 num name\n"); 15 for(i=0;;i++){ //当输入的分数1小于0或大于100时结束输入 16 scanf("%f %f %ld %s",&stu[i].score[0],&stu[i].score[1],&stu[i].num,stu[i].name); 17 if(stu[i].score[0]<0 || stu[i].score[0]>100) break; 18 stu[i].aver=(stu[i].score[0] + stu[i].score[1]) / 2.0; 19 20 } 21 22 for(j=1;j<i-1;j++){ //学号冒泡法排序 23 24 for(k=0;k<i-j;k++){ 25 if(stu[k].num > stu[k+1].num){ 26 temp=stu[k]; 27 stu[k]=stu[k+1]; 28 stu[k+1]=temp; 29 } 30 } 31 } 32 printf("after num\n"); //输出 33 printf("num\tname\t\t\tscore1\tscore\taver\n"); 34 for(n=0;n<i;n++) 35 printf("%ld\t%s\t%.1f\t\t%.1f\t\t%.1f\n",stu[n].num, stu[n].name, stu[n].score[0], stu[n].score[1],stu[n].aver); 36 37 38 for(j=1;j<i-1;j++){ //平均分冒泡法排序 39 40 for(k=0;k<i-j;k++){ 41 if(stu[k].aver > stu[k+1].aver){ 42 temp=stu[k]; 43 stu[k]=stu[k+1]; 44 stu[k+1]=temp; 45 } 46 } 47 } 48 printf("after aver\n"); 49 printf("num\tname\t\tscore1\tscore\taver\n"); 50 51 for(n=i-1;n>=0;n--) 52 printf("%ld\t%s\t%.1f\t\t%.1f\t\t%.1f\n",stu[n].num, stu[n].name, stu[n].score[0], stu[n].score[1],stu[n].aver); 53 return 0; 54 }