C program to store Student records as Structures and Sort them by Name

In this problem, we are given a student's record which contains student_id, student_name, and student_percentage. Our task is to create a C program to store student records as structures and sort them by name using string comparison.

Syntax

struct Student {
    int student_id;
    char student_name[50];
    int student_percentage;
};

int qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void*));

Example Input and Output

Input − student record −

{ student_id = 1, student_name = Nupur, student_percentage = 98}
{ student_id = 2, student_name = Akash, student_percentage = 75}
{ student_id = 3, student_name = Yash, student_percentage = 62}
{ student_id = 4, student_name = Jyoti, student_percentage = 87}
{ student_id = 5, student_name = Ramlal, student_percentage = 80}

Output − student record sorted by name −

{ student_id = 2, student_name = Akash, student_percentage = 75}
{ student_id = 4, student_name = Jyoti, student_percentage = 87}
{ student_id = 1, student_name = Nupur, student_percentage = 98}
{ student_id = 5, student_name = Ramlal, student_percentage = 80}
{ student_id = 3, student_name = Yash, student_percentage = 62}

Example

The program to store Student records as Structures and Sort them by Name −

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct Student {
    int student_id;
    char student_name[50];
    int student_percentage;
};

int comparator(const void* s1, const void* s2) {
    return strcmp(((struct Student*)s1)->student_name, ((struct Student*)s2)->student_name);
}

int main() {
    int n = 5;
    struct Student arr[n];
    
    /* Initialize student records */
    arr[0].student_id = 1;
    strcpy(arr[0].student_name, "Nupur");
    arr[0].student_percentage = 98;
    
    arr[1].student_id = 2;
    strcpy(arr[1].student_name, "Akash");
    arr[1].student_percentage = 75;
    
    arr[2].student_id = 3;
    strcpy(arr[2].student_name, "Yash");
    arr[2].student_percentage = 62;
    
    arr[3].student_id = 4;
    strcpy(arr[3].student_name, "Jyoti");
    arr[3].student_percentage = 87;
    
    arr[4].student_id = 5;
    strcpy(arr[4].student_name, "Ramlal");
    arr[4].student_percentage = 80;
    
    printf("Unsorted Student Records:<br>");
    for (int i = 0; i < n; i++) {
        printf("Id = %d, Name = %s, Percentage = %d<br>", 
               arr[i].student_id, arr[i].student_name, arr[i].student_percentage);
    }
    
    /* Sort the array using qsort */
    qsort(arr, n, sizeof(struct Student), comparator);
    
    printf("\nStudent Records sorted by Name:<br>");
    for (int i = 0; i < n; i++) {
        printf("Id = %d, Name = %s, Percentage = %d<br>", 
               arr[i].student_id, arr[i].student_name, arr[i].student_percentage);
    }
    
    return 0;
}
Unsorted Student Records:
Id = 1, Name = Nupur, Percentage = 98
Id = 2, Name = Akash, Percentage = 75
Id = 3, Name = Yash, Percentage = 62
Id = 4, Name = Jyoti, Percentage = 87
Id = 5, Name = Ramlal, Percentage = 80

Student Records sorted by Name:
Id = 2, Name = Akash, Percentage = 75
Id = 4, Name = Jyoti, Percentage = 87
Id = 1, Name = Nupur, Percentage = 98
Id = 5, Name = Ramlal, Percentage = 80
Id = 3, Name = Yash, Percentage = 62

How It Works

  • We define a Student structure with three fields: student_id, student_name, and student_percentage.
  • The comparator function uses strcmp() to compare student names alphabetically.
  • The qsort() function sorts the array of structures using our custom comparator.
  • String names are copied using strcpy() to ensure proper memory management.

Conclusion

This program demonstrates how to store student records in structures and sort them alphabetically by name using qsort() with a custom comparator function. The approach is efficient and handles string comparison correctly.

Updated on: 2026-03-15T12:55:25+05:30

2K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements