Unit 6 of MAKAUT C Programming (PPS-II) covers composite data aggregation via structures (struct), unions, bitfields, pointer to structures, and structure memory alignment.
In MAKAUT semester exams, questions on Structure Memory Padding and full code implementations of a Student Database & Marksheet Grade System are mandatory items in Group C (15 Marks).
---
1. Introduction to User-Defined Data Types
While arrays are homogeneous (all elements of identical data type), a struct enables heterogeneous data aggregation under a unified name.
1struct Student {2 int rollNo;3 char name[50];4 float marks;5}; // Semicolon is mandatory!
---
2. Accessing Structure Members: . vs ->
- Dot Operator (`.`): Used when accessing members via a structure variable (
s1.rollNo). - Arrow Operator (`->`): Used when accessing members via a structure pointer (
ptr->rollNo\equiv(*ptr).rollNo).
---
3. Structure Memory Alignment & Padding Explained
To optimize 32-bit/64-bit CPU word alignment, compilers insert unused padding bytes between structure fields.
1struct Example {2 char c; // 1 Byte3 // 3 Bytes of Padding inserted here!4 int i; // 4 Bytes5};
Size of struct Example equals 8 Bytes, not 5 Bytes!
To force exact packing without padding, use #pragma pack(1):
1"text-[#cf222e] dark:text-[#c586c0] font-semibold">#pragma pack(1)2struct PackedExample {3 char c; // 1 Byte4 int i; // 4 Bytes5}; // Total size = 5 Bytes
---
4. struct vs union Comparison
| Feature | `struct` | `union` |
|---|---|---|
| Memory Allocated | Sum of sizes of all members + padding | Size of largest member only |
| Member Access | All members accessible concurrently | Only one member accessible at a time |
| Keyword | struct | union |
---
5. Solved MAKAUT Exam Programs
Program 1: Student Information System (Nested Structures)
1"text-[#cf222e] dark:text-[#c586c0] font-semibold">#include "text-[#0a3069] dark:text-[#ce9178]"><stdio.h>23struct Address {4 char city[30];5 char state[30];6 int pinCode;7};89struct Student {10 int rollNo;11 char name[50];12 struct Address addr; // Nested structure13};1415int main() {16 struct Student s1 = {101, "Aritra Sen", {"Kolkata", "West Bengal", 700091}};1718 printf("--- Student Profile ---\n");19 printf("Roll No : %d\n", s1.rollNo);20 printf("Name : %s\n", s1.name);21 printf("City : %s\n", s1.addr.city);22 printf("State : %s\n", s1.addr.state);23 printf("Pin Code: %d\n", s1.addr.pinCode);2425 return 0;26}
---
Program 2: MAKAUT Comprehensive Student Marksheet & Grade System
*Exam Context: Group C (15 Marks)*
1"text-[#cf222e] dark:text-[#c586c0] font-semibold">#include "text-[#0a3069] dark:text-[#ce9178]"><stdio.h>23"text-[#cf222e] dark:text-[#c586c0] font-semibold">#define MAX_SUBJECTS 545struct Student {6 int rollNo;7 char name[50];8 float marks[MAX_SUBJECTS];9 float totalMarks;10 float avgMarks;11 char grade;12};1314char calculateGrade(float mark) {15 if (mark >= 90) return 'O';16 if (mark >= 80) return 'E';17 if (mark >= 70) return 'A';18 if (mark >= 60) return 'B';19 if (mark >= 50) return 'C';20 if (mark >= 40) return 'D';21 return 'F';22}2324int main() {25 int n = 2; // Student records count26 struct Student students[2] = {27 {101, "Rahul Banerjee", {85, 92, 78, 65, 88}},28 {102, "Sneha Mukherjee", {95, 89, 91, 94, 90}}29 };3031 for (int i = 0; i < n; i++) {32 students[i].totalMarks = 0;33 for (int j = 0; j < MAX_SUBJECTS; j++) {34 students[i].totalMarks += students[i].marks[j];35 }36 students[i].avgMarks = students[i].totalMarks / MAX_SUBJECTS;37 students[i].grade = calculateGrade(students[i].avgMarks);38 }3940 printf("\n================ MAKAUT OFFICIAL MARKSHEET REPORT ================\n");41 for (int i = 0; i < n; i++) {42 printf("\nStudent Roll: %d | Name: %s\n", students[i].rollNo, students[i].name);43 printf("------------------------------------------------------------------\n");44 for (int j = 0; j < MAX_SUBJECTS; j++) {45 printf(" Sub %d Mark: %5.2f | Sub Grade: %c\n",46 j + 1, students[i].marks[j], calculateGrade(students[i].marks[j]));47 }48 printf("Total Marks : %.2f / 500.00\n", students[i].totalMarks);49 printf("Average : %.2f%%\n", students[i].avgMarks);50 printf("Overall Totality Grade: %c\n", students[i].grade);51 }52 printf("==================================================================\n");5354 return 0;55}