问下各位怎么实现这个效果呢

顺便问下这个要怎么实现呢,就是这个输出结果有些不保留小数,有些自动算出来带几位小数就几位,我对应代码是这个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类型,相除的结果也会是整数,小数会自动去除。

测试代码如下:

参考链接:


C语言中%g的使用_桃花er的博客-CSDN博客 简单的描述C语言中格式符%g的用法。%g是一个很好用的格式符,在很多时候可以方便我们。在输出的时候我们使用%g会有什么样的奇特用法呢,比如我们想要输出一个12.3,但是如果你选择使用%f作为格式符,就会输出12.300000。但是很多时候我们只想要打印出12.3,这个时候可以选择%g进行格式化,输出结果就会变成12.3。它将后面无用的0全部舍去了,可以在很多时候满足题目的要求。举个例子12.3+12.7如果使用%f输出,你将会得到25.000000,而有的时候你并不想要小数点_%g https://blog.csdn.net/weixin_45930241/article/details/108587822

[坑] cout默认为%g输出 - 简书 C++中cout默认是使用%g格式输出浮点数的也就是输出float或double时,cout< https://www.jianshu.com/p/1215e739dbb1


#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;
    
}

img

img

img