Fading Coder

One Final Commit for the Last Sprint

Home > Tools > Content

C Programming Exercises and Solutions

Tools 1

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...

Installing CocoaPods on macOS Catalina (10.15) Using a User-Managed Ruby

System Ruby on macOS 10.15 frequently fails to build native gems required by CocoaPods (for example, ffi), leading to errors like: ERROR: Failed to build gem native extension checking for ffi.h... no...

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...

Leave a Comment

Anonymous

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