结构体类型的定义及数组的运用

img

你想问什么?


#include<stdio.h>
struct student{
    int num;
    char name[8];
    double score[3];
};
struct arrayst{
    struct student stu;
    double nums;
};
void input(struct arrayst *a,int n){
    printf("NUM\tNAME\tSCORE1\tSCORE2\tSCORE3\n");
    for(int i=0;i<n;i++){
        scanf("%d    %s    %lf    %lf    %lf",&a[i].stu.num,a[i].stu.name,&a[i].stu.score[0],&a[i].stu.score[1],&a[i].stu.score[2]);
        a[i].nums =(a[i].stu.score[0]+a[i].stu.score[1]+a[i].stu.score[2])/3;
    }
} 
void output(struct arrayst *a,int n){
    printf("NUM\tNAME\tSCORE1\tSCORE2\tSCORE3\tAVERAGE\n");
    for(int i=0;i<n;i++){
        printf("%d\t%s\t%.0lf\t%.0lf\t%.0lf\t%.6g\t\n",a[i].stu.num,a[i].stu.name,a[i].stu.score[0],a[i].stu.score[1],a[i].stu.score[2],a[i].nums);
    }
}
void scoresort(struct arrayst *a,int n){
    struct arrayst temp;    
    for(int i=0;i<=n-1;i++){
        for(int j=i+1;j<n;j++){
            if(a[i].nums<a[j].nums){
                temp = a[i];
                a[i] = a[j];
                a[j] = temp;
            }
        }
    }    
}
int main(){
    struct arrayst a[100];
    int n;
    while(1){
        printf("Please input a number between 5-100:");
        scanf("%d",&n);
        if(n>=5&&n<=100)
        break;
    }
    input(a,n);
    printf("\nBefore Sort:\n");
    output(a,n);
    scoresort(a,n);
    printf("\nAfter Sort:\n");
    output(a,n);
    return 0; 
}

img

%g 有小数部分输出小数 无小数部分就不会输出 %.0ld 控制double型不输出小数部分 \t输出格式限定 控制对齐

主函数下次最好给一下 有帮助的话记得采纳一下