首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在我的代码中排序提升数组数据?

如何在我的代码中排序提升数组数据?
EN

Stack Overflow用户
提问于 2022-03-13 14:37:57
回答 1查看 35关注 0票数 0

你好,我是C编程中的新成员。我想知道如何对代码上的数据数组进行排序?我很难解释细节,所以我只给出了运行程序的例子。以下是代码:

代码语言:javascript
复制
int main()
{
    struct Barang
    {
        int Kode;
        int Jumlah;
        int HargaSatuan;
        float Total;
        char Nama[20];
    }Brg[10];

    int i,j,harga=0,banyak;
    float rata;
    printf("Berapa banyak barang? : ");
    scanf("%d",&banyak);
    for (i=0;i<banyak;i++)
    {
        printf("\nBarang Ke-%d\n",i+1);
        printf("Masukkan Kode : ");
        scanf("%d",&Brg[i].Kode);
        fflush(stdin);
        printf("Masukkan Nama Barang  : ");
        fgets(Brg[i].Nama,20,stdin);
        strtok(Brg[i].Nama, "\n" );
        printf("Masukkan Harga Satuan : ");
        scanf("%d",&Brg[i].HargaSatuan);
        printf("Ada Berapa Jumlah?    : ");
        scanf("%d",&Brg[i].Jumlah);
        //harga+=Brg[i].HargaSatuan;
    }
    printf("\n==============================\n");
    printf("Daftar Barang:\n");
    for (i=0;i<banyak;i++)
    {
        printf("\nBarang Ke-%d\n",i+1);
        printf("Kode         :  %d\n",Brg[i].Kode);
        printf("Nama Barang  : %s\n",Brg[i].Nama);
        printf("Harga Satuan : %d\n",Brg[i].HargaSatuan);
        printf("Jumlah       : %d\n",Brg[i].Jumlah);
        Brg[i].Total+=(float)(Brg[i].HargaSatuan*Brg[i].Jumlah);
        rata=(float)Brg[i].Total/Brg[i].Jumlah;
        printf("Total Harga Semua Barang : %.2f\n",Brg[i].Total);
        printf("Rata-Rata Harga Barang     : %.2f\n",rata);
    }
    printf("==============================\n");

 return 0;
}

下面是正在运行的程序输出:

代码语言:javascript
复制
Berapa banyak barang? : 3

Barang Ke-1
Masukkan Kode : 28
Masukkan Nama Barang  : Test A
Masukkan Harga Satuan : 2984
Ada Berapa Jumlah?    : 21

Barang Ke-2
Masukkan Kode : 12
Masukkan Nama Barang  : Test B
Masukkan Harga Satuan : 90
Ada Berapa Jumlah?    : 2

Barang Ke-3
Masukkan Kode : 2
Masukkan Nama Barang  : Test C
Masukkan Harga Satuan : 8901
Ada Berapa Jumlah?    : 2

==============================
Daftar Barang:

Barang Ke-1
Kode         :  28
Nama Barang  : Test A
Harga Satuan : 2984
Jumlah       : 21
Total Harga Semua Barang : 62664.00
Rata-Rata Harga Barang     : 2984.00

Barang Ke-2
Kode         :  12
Nama Barang  : Test B
Harga Satuan : 90
Jumlah       : 2
Total Harga Semua Barang : 180.00
Rata-Rata Harga Barang     : 90.00

Barang Ke-3
Kode         :  2
Nama Barang  : Test C
Harga Satuan : 8901
Jumlah       : 2
Total Harga Semua Barang : 17802.00
Rata-Rata Harga Barang     : 8901.00
==============================

Process returned 0 (0x0)   execution time : 37.663 s
Press any key to continue.

我想知道如何通过“Kode”号变量对数据进行排序(提升)?我想看上去像这样

代码语言:javascript
复制
Berapa banyak barang? : 3

Barang Ke-1
Masukkan Kode : 28
Masukkan Nama Barang  : Test A
Masukkan Harga Satuan : 2984
Ada Berapa Jumlah?    : 21

Barang Ke-2
Masukkan Kode : 12
Masukkan Nama Barang  : Test B
Masukkan Harga Satuan : 90
Ada Berapa Jumlah?    : 2

Barang Ke-3
Masukkan Kode : 2
Masukkan Nama Barang  : Test C
Masukkan Harga Satuan : 8901
Ada Berapa Jumlah?    : 2

==============================
Daftar Barang:

Barang Ke-1
Kode         :  2
Nama Barang  : Test C
Harga Satuan : 8901
Jumlah       : 2
Total Harga Semua Barang : 17802.00
Rata-Rata Harga Barang     : 8901.00

Barang Ke-2
Kode         :  12
Nama Barang  : Test B
Harga Satuan : 90
Jumlah       : 2
Total Harga Semua Barang : 180.00
Rata-Rata Harga Barang     : 90.00

Barang Ke-3
Kode         :  28
Nama Barang  : Test A
Harga Satuan : 2984
Jumlah       : 21
Total Harga Semua Barang : 62664.00
Rata-Rata Harga Barang     : 2984.00
==============================

Process returned 0 (0x0)   execution time : 37.663 s
Press any key to continue.

我已经考虑过如何实现这个输出一个小时,但我找不到答案。怎样才能得到我预期的产出?谢谢你。

EN

回答 1

Stack Overflow用户

发布于 2022-03-13 14:59:17

  1. 使用指向struct Barang的指针数组来存储每个记录的基址.

代码语言:javascript
复制
struct Barang* ABP = malloc (banyak * sizeof(struct Barang*));
for (int ri = 0; ri < banyak; ++ri) {
    ABP[ri] = Brg + ri;
}

  1. 使用标准库函数qsort()对记录进行排序。

代码语言:javascript
复制
qsort (ABP, banyak, sizeof(struct Barang*), cmp);

Kode.字段的

  1. 定义回调比较函数int cmp (void*, void*);我们定义它以ascending顺序排序记录

代码语言:javascript
复制
int cmp(const void *p, const void *q) {
    return ((*(struct Barang**)p)->Kode > (*(struct Barang**)q)->Kode);
}

  1. 使用排序结构指针数组访问记录.

代码语言:javascript
复制
for (int ri = 0; ri < banyak; ++ri) {
    printf("Kode         :  %d\n", ABP[ri]->Kode);
}

注意我们如何使用->取消引用运算符访问结构成员。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71457783

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档