你好,我是C编程中的新成员。我想知道如何对代码上的数据数组进行排序?我很难解释细节,所以我只给出了运行程序的例子。以下是代码:
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;
}下面是正在运行的程序输出:
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”号变量对数据进行排序(提升)?我想看上去像这样
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.我已经考虑过如何实现这个输出一个小时,但我找不到答案。怎样才能得到我预期的产出?谢谢你。
发布于 2022-03-13 14:59:17
struct Barang的指针数组来存储每个记录的基址.struct Barang* ABP = malloc (banyak * sizeof(struct Barang*));
for (int ri = 0; ri < banyak; ++ri) {
ABP[ri] = Brg + ri;
}qsort()对记录进行排序。qsort (ABP, banyak, sizeof(struct Barang*), cmp);Kode.字段的
int cmp (void*, void*);我们定义它以ascending顺序排序记录int cmp(const void *p, const void *q) {
return ((*(struct Barang**)p)->Kode > (*(struct Barang**)q)->Kode);
}for (int ri = 0; ri < banyak; ++ri) {
printf("Kode : %d\n", ABP[ri]->Kode);
}注意我们如何使用->取消引用运算符访问结构成员。
https://stackoverflow.com/questions/71457783
复制相似问题