一、题目
输入格式要求同实验3,不必检查学号的重复和成绩的合理性。
输出格式(各项以英文逗号','隔开):
学号1,总成绩1
学号2,总成绩2
学号3,总成绩3
要求:总成绩保留1位小数,并且按总成绩从大到小依次输出。
示例:
输入:
20010,90,89.5,100
20011,88.5,78,92.5
20012,99,89.5,90
输出:
20010,279.5
20012,278.5
20011,259.0
二、代码
#include <stdio.h>
int main(){
struct score{
int xuehao;
float gaoshu,wuli,yingyu;
float sum;
}stu1,stu2,stu3;
struct score stu[3] = {stu1,stu2,stu3};
int i=0,j=0,k=0;
for(i=0;i<3;i++){
scanf("%d,%f,%f,%f",&stu[i].xuehao,&stu[i].gaoshu,&stu[i].wuli,&stu[i].yingyu);
stu[i].sum=stu[i].gaoshu+stu[i].wuli+stu[i].yingyu;
}
for(j=0;j<3;j++){
for(k=0;k<2;k++){
if(stu[k].sum<stu[k+1].sum){
struct score temp=stu[k];
stu[k]=stu[k+1];
stu[k+1]=temp;
}
}
}
for(i=0;i<3;i++){
printf("%d,%.1f\n",stu[i].xuehao,stu[i].sum);
}
return 0;
}
三、tips
本来想用数组的方式搞定,但是发现不行,于是看了雨落俊泉的代码决定学习使用struct结构体
struct结构体
struct即结构体,亦被直接称为“结构”。实际编程时,经常需要用相关的不同类型的数据来描述一个数据对象。例如,描述学生的综合信息时,需要使用学生的学号、姓名、性别、成绩以及家庭住址等不同类型的数据。但是,用相关的不同类型的数据来描述一个数据对象会使编程极为不便。因此,C语言提供了一种称为结构体(struct)的数据类型,以描述需要不同类型数据的数据对象。
定义:
1.只有结构体定义
struct stuff{
char job[20];
int age;
float height;
};
2.附加该结构体类型的“结构体变量”的初始化的结构体定义
//直接带变量名wendao
struct stuff{
char job[20];
int age;
float height;
}wendao; //注意,}后面没有;
对于结构体内部变量的访问,我们可以根据
stu[i].age
注意补上初始化
struct score stu[3] = {stu1,stu2,stu3};
2.double类型
要经常使用double而不是float,今天第一次尝试但是忘记在前面改成%d,就苦恼了好一会
3.冒泡排序
for(j=0;j<3;j++){
for(k=0;k<2;k++){ //len-1
if(stu[k].sum<stu[k+1].sum){
struct score temp=stu[k]; //第三种定义struct的方法
stu[k]=stu[k+1];
stu[k+1]=temp;
}
}
}