顺便问下这个要怎么实现呢,就是这个输出结果有些不保留小数,有些自动算出来带几位小数就几位,我对应代码是这个https://img-mid.csdnhttps://img-mid.csdnimg.cn/release/static/image/mid/ask/346030426786117.pngimg.cn/release/static/image/mid/ask/221090426786178.png
将s1,s2,s3转为float类型, 因为如果s1,s2,s3和n都是int类型,相除的结果也会是整数,小数会自动去除。
测试代码如下:
参考链接:
#include <iostream>
#include <stdlib.h>
using namespace std;
struct Student{
char sid[10];
char name[20];
int one;
int two;
int three;
};
void average(struct Student stu[], int n){
// 这里总分使用float类型,避免下面计算平均分时,除法运算都是整数,而省略了小数
float s1=0,s2=0,s3=0;
float s1_aver,s2_aver,s3_aver;
for(int i=0;i<n;i++){
s1+=stu[i].one;
s2+=stu[i].two;
s3+=stu[i].three;
}
// https://blog.csdn.net/gratdan/article/details/96478338
s1_aver = s1/n;
s2_aver = s2/n;
s3_aver = s3/n;
// https://blog.csdn.net/weixin_45930241/article/details/108587822
// https://www.jianshu.com/p/1215e739dbb1
cout<<s1_aver<<' '<<s2_aver<<' '<<s3_aver<<endl;
}
// 寻找总分最高的学生
void findMaxStu(struct Student stu[], int n){
int max=0;
int index=-1;
for(int i=0;i<n;i++){
int sum = stu[i].one+stu[i].two+stu[i].three;
if(max<sum){
max=sum;
index=i;
}
}
if(index!=-1){
cout<<stu[index].sid<<' '<<stu[index].name<<' '<<stu[index].one<<' '<<stu[index].two<<' '<<stu[index].three;
}
}
int main(void){
int n;
cin>>n;
Student * ps = (Student *)malloc(sizeof(Student)*n);
for(int i=0;i<n;i++){
cin>>ps[i].sid>>ps[i].name>>ps[i].one>>ps[i].two>>ps[i].three;
}
average(ps,n);
findMaxStu(ps,n);
return 0;
}