C语言结构体排序

题目记不到了,我传一个留个源码:

#include <stdio.h>
#include <string.h>
struct student{
    char s[1000];
    int n;
};
    struct student a[10000];
void quicksort(int left,int right){
    int i,j,k;
    struct student temp;
    if(left>=right)
    return;
    i=left;
    j=right;
    k=a[left].n;
    while(j>i){
        while(a[j].n>=k&&j>i){
        if(a[j].n==k){
        if(strcmp(a[j].s,a[left].s)<=0)
        j--;else
        break;}
        else
        j--    ;
        }
        while(a[i].n<=k&&i<j){
        if(a[i].n==k){
        if(strcmp(a[i].s,a[left].s)>=0)
        i++;else
        break;}
        else
        i++;}
        temp=a[j];
        a[j]=a[i];
        a[i]=temp;
    }
        temp=a[j];
        a[j]=a[left];
        a[left]=temp;
        quicksort(left,i-1);
        quicksort(i+1,right);
}
int main(){
    int num;
    char o[1000];
    scanf("%d",&num);
    getchar();
    for(int i=1;i<=num;i++){
        gets(a[i].s);
        char *u=a[i].s;
        while(*u<'0'||*u>'9')
        u++;
        *(u-1)='\0';
        a[i].n=0;
        while(*u!='\0'){
            a[i].n=(*u-'0')+a[i].n*10;
            u++;
        }}
        quicksort(1,num);
        for(int i=num;i>=1;i--)
        {
            puts(a[i].s);
            printf("%d\n\n",a[i].n);
        }
    return 0;
}
//第二题:结构数组

#include <stdio.h>
#include <stdlib.h>
#include<string.h>
#include<math.h>
struct student
{
    char name[20];
    char number[30];
    int score[5];
    double average;
    int total;
};
int main(void)
{
    struct student stu[100];
    int count;
    int n;
    scanf("%d", &n); getchar();
    for (count = 0; count < n; count++)
    {
        int sum=0;
        gets(stu[count].name); 
        gets(stu[count].number); 
        for (int i = 0; i < 5; i++)
        {
            scanf("%d", &stu[count].score[i]); getchar();
            sum += stu[count].score[i];
            stu[count].total = sum;
        }
        stu[count].average = (double)sum / 5;
    }
    for (count = 0; count < n; count++)
    {
        printf("Name:%s\n",stu[count].name);
        printf("ID:%s\n",stu[count].number);
        printf("Score:");
        for (int i = 0; i < 5; i++)
        {
            printf("%d ", stu[count].score[i]);
        }
        printf("\n");
        printf("average:%.2lf total:%d\n",stu[count].average,stu[count].total);
        printf("\n");
    }
    system("pause");
    return 0;
}

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值