Sắp xếp mảng Struct trong C



Bài tập C: Sắp xếp mảng Struct

Yêu cầu bài tập C là sử dụng Struct để nhập thông tin các thành phố khác nhau. Mỗi thành phố (state) có: tên thành phố (name), tổng thu nhập (income), dân số (population), tỉ lệ biết đọc viết (literacyRate). Sau đó hiển thị thành phố có tổng thu nhập cao nhất, có tỉ lệ biết đọc viết cao nhất.

Để giải bài tập này chúng ta cần sắp xếp mảng các Struct trong C. Dưới đây là chương trình C minh họa.

Chương trình C

Dưới đây là chương trình C để giải bài tập sắp xếp mảng các Struct trong C:

#include
#define M 50struct state {
   char name[50];
   long int population;
   float literacyRate;
   float income;
} st[M]; /* khai bao mang cac struct */int main() {
   int i, n, ml, mi, maximumLiteracyRate, maximumIncome;
   float rate;
   ml = mi = -1;
   maximumLiteracyRate = maximumIncome = 0;   printf("Nhap so thanh pho:");
   scanf("%d", &n);   for (i = 0; i < n; i++) {
      printf("\nNhap chi tiet thanh pho thu %d: ", i);      printf("\nNhap ten thanh pho: ");
      scanf("%s", &st[i].name);      printf("\nNhap tong so dan: ");
      scanf("%ld", &st[i].population);      printf("\nNhap ti le biet doc viet: ");
      scanf("%f", &rate);
      st[i].literacyRate = rate;      printf("\nNhap tong thu nhap: ");
      scanf("%f", &st[i].income);
   }   for (i = 0; i < n; i++) {
      if (st[i].literacyRate >= maximumLiteracyRate) {
         maximumLiteracyRate = st[i].literacyRate;
         ml++;
      }
      if (st[i].income > maximumIncome) {
         maximumIncome = st[i].income;
         mi++;
      }
   }   printf("\nThanh pho co ti le biet doc viet cao nhat: %s", st[ml].name);
   printf("\nThanh pho co tong thu nhap cao nhat: %s", st[mi].name);   return (0);
}

Biên dịch chương trình C trên sẽ cho kết quả:

Sắp xếp mảng struct trong C

Giải thích chương trình C trên

Đầu tiên, bạn sử dụng vòng lặp để nhập thông tin cho từng thành phố:

 for (i = 0; i < n; i++) {
      printf("\nNhap chi tiet thanh pho thu %d: ", i);      printf("\nNhap ten thanh pho: ");
      scanf("%s", &st[i].name);      printf("\nNhap tong so dan: ");
      scanf("%ld", &st[i].population);      printf("\nNhap ti le biet doc viet: ");
      scanf("%f", &rate);
      st[i].literacyRate = rate;      printf("\nNhap tong thu nhap: ");
      scanf("%f", &st[i].income);
   }

Sau đó sử dụng vòng lặp kết hợp với lệnh IF trong C để tìm các giá trị lớn nhất.

if (st[i].literacyRate >= maximumLiteracyRate) {
   maximumLiteracyRate = st[i].literacyRate;
   ml++;
}if (st[i].income > maximumIncome) {
   maximumIncome = st[i].income;
   mi++;
}

bai-tap-struct-trong-c.jsp