Fading Coder

One Final Commit for the Last Sprint

Home > Tools > Content

C Programming Exercises and Solutions

Tools May 5 28

C Programming Exercises and Solutions

1. Greatest Common Divisor and Least Common Multiple

#include 
#include 
int main()
{
    int calculateGCD(int first, int second);
    int calculateLCM(int first, int second);
    
    int num1, num2, temp;
    printf("Enter two numbers:\n");
    scanf("%d%d", &num1, &num2);
    if (num1 < num2)
    {
        temp = num1;
        num1 = num2;
        num2 = temp;
    }
    int gcd = calculateGCD(num1, num2);
    int lcm = calculateLCM(num1, num2);
    printf("Greatest Common Divisor: %d\n", gcd);
    printf("Least Common Multiple: %d\n", lcm);
    return 0;
}

int calculateGCD(int first, int second)
{
    int remainder;
    while (second != 0)
    {
        remainder = first % second;
        first = second;
        second = remainder;
    }
    return first;
}

int calculateLCM(int first, int second)
{
    int product = first * second;
    return product / calculateGCD(first, second);
}

2. Quadratic Equation Solver

1. Define real numbers a, b, c

2. Check if a is zero

3. Handle cases where b²-4ac is greater than, equal to, or less than zero

#include
#include
int main()
{
    void solveQuadratic(double, double, double);
    double a, b, c;
    printf("Enter coefficients a, b, c: ");
    scanf("%lf %lf %lf", &a, &b, &c);
    solveQuadratic(a, b, c);
    
    return 0;
}

void solveQuadratic(double a, double b, double c)
{
    double root1, root2, realPart, imagPart;
    if (fabs(a) <= 1e-6)
    {
        printf("Invalid input: coefficient 'a' cannot be zero\n");
    }
    else
    {
        double discriminant = b * b - 4 * a * c;
        if (discriminant > 0) // Two distinct real roots
        {
            root1 = (-b + sqrt(discriminant)) / (2 * a);
            root2 = (-b - sqrt(discriminant)) / (2 * a);
            printf("Root 1 = %.2lf; Root 2 = %.2lf", root1, root2);
        }
        else if (discriminant == 0) // Two equal real roots
        {
            root1 = root2 = -b / (2 * a);
            printf("Root 1 = Root 2 = %.2lf", root1);
        }
        else // Complex roots
        {
            realPart = -b / (2 * a);
            imagPart = sqrt(-discriminant) / (2 * a);
            printf("Root 1 = %.2lf + %.2lfi; Root 2 = %.2lf - %.2lfi", 
                   realPart, imagPart, realPart, imagPart);
        }
    }
}

3. Prime Number Checker

#include
#include
int main()
{
    void checkPrime(int);
    int number;
    printf("Enter an integer: ");
    scanf("%d", &number);
    checkPrime(number);

    return 0;
}

void checkPrime(int num)
{
    int i;
    if (num <= 1)
        printf("%d is not a prime number\n", num);
    else if (num == 2)
        printf("%d is a prime number\n", num);
    else
    {
        for (i = 2; i <= sqrt(num); i++)
        {
            if (num % i == 0)
            {
                printf("%d is not a prime number\n", num);
                return;
            }
        }
        printf("%d is a prime number\n", num);
    }
}

4. Matrix Operations

Matrix Transposition

#include
int main()
{
    void transposeMatrix(int matrix[3][3]);
    int matrix[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
    int row, col;

    // Print original matrix
    printf("Original Matrix:\n");
    for (row = 0; row < 3; row++)
    {
        for (col = 0; col < 3; col++)
        {
            printf("%d ", matrix[row][col]);
        }
        printf("\n");
    }

    transposeMatrix(matrix); // Transpose the matrix
    printf("\nTransposed Matrix:\n");
    
    // Print transposed matrix
    for (row = 0; row < 3; row++)
    {
        for (col = 0; col < 3; col++)
        {
            printf("%d ", matrix[row][col]);
        }
        printf("\n");
    }

    return 0;
}

void transposeMatrix(int matrix[3][3])
{
    int row, col, temp;
    for (row = 0; row < 3; row++)
    {
        for (col = row; col < 3; col++)
        {
            temp = matrix[row][col];
            matrix[row][col] = matrix[col][row];
            matrix[col][row] = temp;
        }
    }
}

Copy Matrix to Transpose

#include
int main()
{
    int source[2][3] = {{1,2,3},{4,5,6}};
    int target[3][2];
    int i, j;
    
    // Print original matrix
    printf("Original Matrix:\n");
    for (i = 0; i < 2; i++)
    {
        for (j = 0; j < 3; j++)
        {
            printf("%d ", source[i][j]);
        }
        printf("\n");
    }
    
    // Transpose by copying
    for (i = 0; i < 2; i++)
    {
        for (j = 0; j < 3; j++)
        {
            target[j][i] = source[i][j];
        }
    }
    
    // Print transposed matrix
    printf("Transposed Matrix:\n");
    for (i = 0; i < 3; i++)
    {
        for (j = 0; j < 2; j++)
        {
            printf("%d ", target[i][j]);
        }
        printf("\n");
    }

    return 0;
}

Find Maximum Element in Matrix

#include
int main()
{
    int matrix[2][3] = {{1,2,3},{4,5,6}};
   
    int i, j, maxValue, maxRow = 0, maxCol = 0;
    maxValue = matrix[0][0];
    
    // Find maximum element and its position
    for (i = 0; i < 2; i++)
    {
        for (j = 0; j < 3; j++)
        {
            if (maxValue < matrix[i][j])
            {
                maxValue = matrix[i][j];
                maxRow = i;
                maxCol = j;
            }
        }
    }
    printf("Maximum value: %d at row %d, column %d\n", maxValue, maxRow+1, maxCol+1);

    return 0;
}

5. String Reversal

#include 
#include 
void reverseString(char str[])
{
    int startIndex = 0;
    int endIndex = strlen(str) - 1;
    char temp;
    while (startIndex < endIndex)
    {
        temp = str[startIndex];
        str[startIndex] = str[endIndex];
        str[endIndex] = temp;
        endIndex--;
        startIndex++;
    }
}
int main()
{
    char input[100];
    printf("Enter a string: ");
    fgets(input, sizeof(input), stdin);
    printf("Original string: %s", input);
    reverseString(input);

    printf("Reversed string: %s", input);

    return 0;
}

6. String Concatenation

#include 
#include 

void concatenateStrings(char dest[], char src[])
{
    int destLength = strlen(dest);
    int i = 0;
    while (src[i] != '\0')
    {
        dest[destLength] = src[i];
        i++;
        destLength++;
    }
    dest[destLength] = '\0';
}
int main()
{
    char first[100];
    char second[50];
    printf("Enter first string: ");
    fgets(first, sizeof(first), stdin);
    printf("Enter second string: ");
    fgets(second, sizeof(second), stdin);
    
    // Remove newline characters if present
    if (first[strlen(first)-1] == '\n') first[strlen(first)-1] = '\0';
    if (second[strlen(second)-1] == '\n') second[strlen(second)-1] = '\0';
    
    concatenateStrings(first, second);
    printf("Concatenated string: %s", first);

    return 0;
}

7. String Copy

#include 
#include 

void copyString(char dest[], char src[])
{
    int i;
    for (i = 0; src[i] != '\0'; i++)
    {
        dest[i] = src[i];
    }
    dest[i] = '\0';
}

int main()
{
    char source[100];
    char destination[100];
    printf("Enter source string: ");
    fgets(source, sizeof(source), stdin);
    
    // Remove newline character if present
    if (source[strlen(source)-1] == '\n') source[strlen(source)-1] = '\0';
    
    copyString(destination, source);
    printf("Copied string: %s\n", destination);
    return 0;
}

8. Format Four-Digit Number

Method 1: String Processing

#include 
void formatNumberString(char str[])
{
    int i = 0;
    while (str[i] != '\0')
    {
        printf("%c", str[i]); 
        if (str[i + 1] == '\0') break;   // Don't add space after last character
        printf(" ");
        i++;
    }
}
int main()
{
    char numberStr[5];    // 4 digits + null terminator
    printf("Enter a 4-digit number: ");
    scanf("%4s", numberStr);
    formatNumberString(numberStr);
    return 0;
}

Method 2: Mathematical Processing

#include

int main()
{
    void separateDigits(int number);
    int input;
    printf("Enter a 4-digit number: ");
    scanf("%d",&input);
    separateDigits(input);	
    return 0;
} 
void separateDigits(int number)
{
    int i,digits[4];
    
    // Extract digits from right to left
    for(i=3;i>=0;i--)
    {
        digits[i] = number % 10;
        number /= 10;
    }
    
    // Print digits with spaces
    for(i=0;i<3;i++)
    {
        printf("%d ",digits[i]);
    }
    
    printf("%d",digits[3]);
}

9. Find Longest Word in a String

#include 
#include 
int main()
{
    void findLongestWord(char text[], char longestWord[]);
    char text[100], longestWord[100];
    printf("Enter a line of text: ");
    fgets(text, sizeof(text), stdin);
    findLongestWord(text, longestWord);
    printf("Longest word: %s", longestWord);
    return 0;
}
void findLongestWord(char text[], char longestWord[])
{
    int i = 0, j = 0;
    int maxLength = 0;
    int currentLength = 0;
    
    // Initialize longestWord as empty
    longestWord[0] = '\0';
    
    while (text[i] != '\0')
    {
        j = i;
        currentLength = 0;
        
        // Find end of current word
        while (text[j] != ' ' && text[j] != '\0')
        {
            j++;
            currentLength++;
        }
        
        // Update longest word if current word is longer
        if (currentLength > maxLength)
        {
            maxLength = currentLength;
            strncpy(longestWord, text + i, currentLength);
            longestWord[currentLength] = '\0';
        }
        
        // Skip to next word
        while (text[j] == ' ') j++;
        i = j;
    }
}

10. Character Sorting

#include 
void bubbleSort(char arr[], int n)
{
    int i, j;
    char temp;
    for (i = 0; i < n - 1; i++)
    {
        for (j = 0; j < n - i - 1; j++)
        {
            if (arr[j] > arr[j + 1])
            {
                temp = arr[j + 1];
                arr[j + 1] = arr[j];
                arr[j] = temp;
            }
        }
    }
}

int main()
{
    char characters[11];
    printf("Enter 10 characters: ");
    for (int i = 0; i < 10; i++)
        scanf(" %c", &characters[i]);
    
    printf("Before sorting: %s\n", characters);
    bubbleSort(characters, 10);
    printf("After sorting: %s\n", characters);
    
    return 0;
}

11. Recursive Legendre Polynomial Calculation

Recursive formula:

  • n = 0: return 1
  • n = 1: return x
  • n > 1: return ((2n-1)x * P(n-1,x) - (n-1) * P(n-2,x)) / n
#include 
double legendrePoly(int n, int x)
{
    if (n == 0)
        return 1;
    else if (n == 1)
        return x;
    else
        return ((2 * n - 1) * x * legendrePoly(n - 1, x) - (n - 1) * legendrePoly(n - 2, x)) / n;
}

int main()
{
    int degree, value;
    printf("Enter degree (n) and value (x) for Legendre polynomial: ");
    scanf("%d%d", °ree, &value);
    double result = legendrePoly(degree, value);
    printf("Value of %d-degree Legendre polynomial at x=%d: %.4f", degree, value, result);

    return 0;
}

12. Recursive Factorial Calculation

Factorial definition:

  • n! = 1, if n = 0 or n = 1
  • n! = n * (n-1)!, if n > 1
#include 
long long factorial(int n)
{
    if (n < 0)
    {
        printf("Error: Negative input\n");
        return -1;
    }
    else if (n == 0 || n == 1)
        return 1;
    else
        return n * factorial(n - 1);
}

int main()
{
    long long sum = 0;
    printf("Sum of factorials from 1! to 20!:\n");
    
    for (int i = 1; i <= 20; i++)
    {
        sum += factorial(i);
        printf("%2d! = %lld\n", i, factorial(i));
    }
    
    printf("Total sum: %lld\n", sum);
    return 0;
}

13. Student Grade Processing

Program to process grades for 10 students across 5 courses:

  • Calculate average grade for each student
  • Calculate average grade for each course
  • Find the highest score and identify student and course
  • Calculate variance of average grades
#include
#include
#define STUDENTS 10
#define COURSES 5

void calculateStudentAverages(int grades[][COURSES]);
void calculateCourseAverages(int grades[][COURSES]);
void findHighestScore(int grades[][COURSES]);
double calculateVariance(float averages[], int count);

int main()
{
    int studentGrades[STUDENTS][COURSES];
    int i, j;
    
    // Input grades
    printf("Enter grades for %d students across %d courses:\n", STUDENTS, COURSES);
    for (i = 0; i < STUDENTS; i++)
    {
        printf("Student %d: ", i + 1);
        for (j = 0; j < COURSES; j++)
        {
            scanf("%d", &studentGrades[i][j]);
        }
    }
    
    calculateStudentAverages(studentGrades);
    calculateCourseAverages(studentGrades);
    findHighestScore(studentGrades);
    
    return 0;
}

void calculateStudentAverages(int grades[][COURSES])
{
    int i, j;
    float sum, average;
    
    printf("\nStudent Averages:\n");
    for (i = 0; i < STUDENTS; i++)
    {
        sum = 0.0;
        for (j = 0; j < COURSES; j++)
        {
            sum += grades[i][j];
        }
        average = sum / COURSES;
        printf("Student %d: %.2f\n", i + 1, average);
    }
}

void calculateCourseAverages(int grades[][COURSES])
{
    int i, j;
    float sum, average;
    
    printf("\nCourse Averages:\n");
    for (j = 0; j < COURSES; j++)
    {
        sum = 0.0;
        for (i = 0; i < STUDENTS; i++)
        {
            sum += grades[i][j];
        }
        average = sum / STUDENTS;
        printf("Course %d: %.2f\n", j + 1, average);
    }
}

void findHighestScore(int grades[][COURSES])
{
    int i, j, maxScore = 0, studentNum = 0, courseNum = 0;
    
    for (i = 0; i < STUDENTS; i++)
    {
        for (j = 0; j < COURSES; j++)
        {
            if (grades[i][j] > maxScore)
            {
                maxScore = grades[i][j];
                studentNum = i + 1;
                courseNum = j + 1;
            }
        }
    }
    
    printf("\nHighest Score: %d (Student %d, Course %d)\n", maxScore, studentNum, courseNum);
}

14. Employee Information System

Program to manage employee data with the following features:

  • Input employee numbers and names
  • Sort employees by number using bubble sort
  • Search for employee by number using binary search
#include 
#include 
#define NUM_EMPLOYEES 3
#define NAME_LENGTH 20

void inputEmployeeData(int ids[], char names[][NAME_LENGTH]);
void sortEmployees(int ids[], char names[][NAME_LENGTH]);
void searchEmployee(int targetId, int ids[], char names[][NAME_LENGTH]);

int main()
{
    int employeeIds[NUM_EMPLOYEES];
    char employeeNames[NUM_EMPLOYEES][NAME_LENGTH];
    
    inputEmployeeData(employeeIds, employeeNames);
    
    printf("\nEmployee List (before sorting):\n");
    for (int i = 0; i < NUM_EMPLOYEES; i++)
    {
        printf("%d: %s\n", employeeIds[i], employeeNames[i]);
    }
    
    sortEmployees(employeeIds, employeeNames);
    
    printf("\nEmployee List (after sorting):\n");
    for (int i = 0; i < NUM_EMPLOYEES; i++)
    {
        printf("%d: %s\n", employeeIds[i], employeeNames[i]);
    }
    
    printf("\nEnter employee ID to search: ");
    int searchId;
    scanf("%d", &searchId);
    searchEmployee(searchId, employeeIds, employeeNames);
    
    return 0;
}

void inputEmployeeData(int ids[], char names[][NAME_LENGTH])
{
    for (int i = 0; i < NUM_EMPLOYEES; i++)
    {
        printf("Enter employee ID and name for employee %d: ", i + 1);
        scanf("%d", &ids[i]);
        getchar(); // Consume newline
        fgets(names[i], NAME_LENGTH, stdin);
        // Remove newline character if present
        if (names[i][strlen(names[i])-1] == '\n')
            names[i][strlen(names[i])-1] = '\0';
    }
}

void sortEmployees(int ids[], char names[][NAME_LENGTH])
{
    int i, j, tempId;
    char tempName[NAME_LENGTH];
    
    for (i = 0; i < NUM_EMPLOYEES - 1; i++)
    {
        for (j = 0; j < NUM_EMPLOYEES - i - 1; j++)
        {
            if (ids[j] > ids[j + 1])
            {
                // Swap IDs
                tempId = ids[j];
                ids[j] = ids[j + 1];
                ids[j + 1] = tempId;
                
                // Swap names
                strcpy(tempName, names[j]);
                strcpy(names[j], names[j + 1]);
                strcpy(names[j + 1], tempName);
            }
        }
    }
}

void searchEmployee(int targetId, int ids[], char names[][NAME_LENGTH])
{
    int low = 0, high = NUM_EMPLOYEES - 1, mid;
    
    while (low <= high)
    {
        mid = (low + high) / 2;
        
        if (targetId < ids[mid])
            high = mid - 1;
        else if (targetId > ids[mid])
            low = mid + 1;
        else
        {
            printf("Employee ID %d found: %s\n", targetId, names[mid]);
            return;
        }
    }
    
    printf("Employee ID %d not found\n", targetId);
}

15. Number Base Conversion

Hexadecimal to Decimal Conversion

#include
#include
int hexToDecimal(char hex[])
{
    int length, decimal = 0;
    for (int i = 0; hex[i] != '\0'; i++) {
        if (hex[i] >= 'a' && hex[i] <= 'f')
            decimal = decimal * 16 + (hex[i] - 'a' + 10);
        else if (hex[i] >= 'A' && hex[i] <= 'F')
            decimal = decimal * 16 + (hex[i] - 'A' + 10);
        else
            decimal = decimal * 16 + (hex[i] - '0');
    }
    return decimal;
}

int main() {
    char hexNumber[9]; // 8 hex digits + null terminator
    printf("Enter an 8-digit hexadecimal number: ");
    scanf("%8s", hexNumber);
    
    int decimalValue = hexToDecimal(hexNumber);
    printf("Decimal equivalent: %d\n", decimalValue);

    return 0;
}

Decimal to Hexadecimal Conversion

#include
void decimalToHex(int decimal)
{
    if (decimal == 0)
    {
        printf("0\n");
        return;
    }
    
    char hexDigits[16] = "0123456789ABCDEF";
    char hexString[50];
    int i = 0;
    
    // Convert to hexadecimal
    while (decimal > 0)
    {
        hexString[i++] = hexDigits[decimal % 16];
        decimal /= 16;
    }
    hexString[i] = '\0';
    
    // Print in reverse order
    printf("Hexadecimal equivalent: ");
    for (int j = i - 1; j >= 0; j--)
    {
        printf("%c", hexString[j]);
    }
    printf("\n");
}

int main()
{
    int number;
    printf("Enter a decimal number: ");
    scanf("%d", &number);
    decimalToHex(number);
    return 0;
}

16. Recursive Number to String Conversion

#include 
void numberToString(int num)
{
    if (num / 10 != 0)
        numberToString(num / 10);
    printf("%c", (num % 10) + '0');
}

int main()
{
    int number;
    printf("Enter an integer: ");
    scanf("%d", &number);
    
    printf("String representation: ");
    if (number < 0)
    {
        printf("-");
        numberToString(-number);
    }
    else
    {
        numberToString(number);
    }
    printf("\n");

    return 0;
}

17. Day of Year Calculation

Program to calculate the day of the year for a given date (year, month, day)

#include 

int isLeapYear(int year);
int dayOfYear(int year, int month, int day);
int daysInMonth(int month, int year);

int main()
{
    int year, month, day;
    printf("Enter year, month, day (e.g., 2023 12 31): ");
    scanf("%d%d%d", &year, &month, &day);
    
    if (month < 1 || month > 12 || day < 1 || day > daysInMonth(month, year))
    {
        printf("Invalid date\n");
        return 1;
    }
    
    int dayNumber = dayOfYear(year, month, day);
    printf("Day of the year: %d\n", dayNumber);

    return 0;
}

int isLeapYear(int year)
{
    return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}

int daysInMonth(int month, int year)
{
    int daysPerMonth[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    
    if (month == 2 && isLeapYear(year))
        return 29;
    
    return daysPerMonth[month - 1];
}

int dayOfYear(int year, int month, int day)
{
    int dayCount = 0;
    
    // Add days for all months before the current month
    for (int m = 1; m < month; m++)
    {
        dayCount += daysInMonth(m, year);
    }
    
    // Add days in the current month
    dayCount += day;
    
    return dayCount;
}

Related Articles

Efficient Usage of HTTP Client in IntelliJ IDEA

IntelliJ IDEA incorporates a versatile HTTP client tool, enabling developres to interact with RESTful services and APIs effectively with in the editor. This functionality streamlines workflows, replac...

Resolve PhpStorm "Interpreter is not specified or invalid" on WAMP (Windows)

Symptom PhpStorm displays: "Interpreter is not specified or invalid. Press ‘Fix’ to edit your project configuration." This occurs when the IDE cannot locate a valid PHP CLI executable or when the debu...

Capturing Android Screenshots and Screen Recordings with ADB

Two practical ways to grab images and videos from an Android device: Mirror the phone display to a computer and use desktop tools for screenshots and GIFs Use ADB commands (no UI mirroring required)...

Leave a Comment

Anonymous

◎Feel free to join the discussion and share your thoughts.