C Programming Experiments: Arrays, Pointers, and String Manipulation

Experiment 1: Finding Minimum and Maximum Values

This experiment demonstrates how to find the minimum and maximum values in an array using pointers.

#include <stdio.h>
#define SIZE 6

void read_data(int arr[], int size);
void display_data(int arr[], int size);
void find_extremes(int arr[], int size, int* min_ptr, int* max_ptr);

int main() {
    int numbers[SIZE];
    int minimum, maximum;

    printf("Enter %d integers:\n", SIZE);
    read_data(numbers, SIZE);

    printf("The entered numbers are:\n");
    display_data(numbers, SIZE);

    printf("Processing data...\n");
    find_extremes(numbers, SIZE, &minimum, &maximum);

    printf("Results:\n");
    printf("Minimum = %d, Maximum = %d\n", minimum, maximum);

    return 0;
}

void read_data(int arr[], int size) {
    int index;
    for (index = 0; index < size; ++index)
        scanf("%d", &arr[index]);
}

void display_data(int arr[], int size) {
    int index;
    for (index = 0; index < size; ++index)
        printf("%d ", arr[index]);
    printf("\n");
}

void find_extremes(int arr[], int size, int* min_ptr, int* max_ptr) {
    int index;
    *min_ptr = *max_ptr = arr[0];

    for (index = 0; index < size; ++index) {
        if (arr[index] < *min_ptr)
            *min_ptr = arr[index];
        else if (arr[index] > *max_ptr)
            *max_ptr = arr[index];
    }
}
</stdio.h>

Experiment 2: Returning Pointer to Maximum Element

This experiment shows how to return a pointer to the maximum element in an array.

#include <stdio.h>
#define SIZE 6

void read_data(int arr[], int size);
void display_data(int arr[], int size);
int* locate_max(int arr[], int size);

int main() {
    int numbers[SIZE];
    int* max_ptr;

    printf("Enter %d integers:\n", SIZE);
    read_data(numbers, SIZE);

    printf("The entered numbers are:\n");
    display_data(numbers, SIZE);

    printf("Processing data...\n");
    max_ptr = locate_max(numbers, SIZE);

    printf("Results:\n");
    printf("Maximum = %d\n", *max_ptr);

    return 0;
}

void read_data(int arr[], int size) {
    int index;
    for (index = 0; index < size; ++index)
        scanf("%d", &arr[index]);
}

void display_data(int arr[], int size) {
    int index;
    for (index = 0; index < size; ++index)
        printf("%d ", arr[index]);
    printf("\n");
}

int* locate_max(int arr[], int size) {
    int max_index = 0;
    int index;

    for (index = 0; index < size; ++index)
        if (arr[index] > arr[max_index])
            max_index = index;
    
    return &arr[max_index];
}
</stdio.h>

Experiment 3: String Operations with Character Arrays

This experiment demonstrates string operations using character arrays.

#include <stdio.h>
#include <string.h>
#define BUFFER_SIZE 100

int main() {
    char text1[BUFFER_SIZE] = "Learning makes me happy";
    char text2[BUFFER_SIZE] = "Learning makes me sleepy";
    char temporary[BUFFER_SIZE];

    printf("sizeof(text1) vs. strlen(text1): \n");
    printf("sizeof(text1) = %d\n", sizeof(text1));
    printf("strlen(text1) = %d\n", strlen(text1));
 
    printf("\nBefore swap: \n");
    printf("text1: %s\n", text1);
    printf("text2: %s\n", text2);
 
    printf("\nSwapping...\n");
    strcpy(temporary, text1);
    strcpy(text1, text2);
    strcpy(text2, temporary);
 
    printf("\nAfter swap: \n");
    printf("text1: %s\n", text1);
    printf("text2: %s\n", text2);
 
    return 0;
}
</string.h></stdio.h>

Experiment 4: String Operations with String Pointers

This experiment demonstrates string operations using string pointers.

#include <stdio.h>
#include <string.h>
#define BUFFER_SIZE 100

int main() {
    char *text1 = "Learning makes me happy";
    char *text2 = "Learning makes me sleepy";
    char *temporary;

    printf("sizeof(text1) vs. strlen(text1): \n");
    printf("sizeof(text1) = %d\n", sizeof(text1));
    printf("strlen(text1) = %d\n", strlen(text1));

    printf("\nBefore swap: \n");
    printf("text1: %s\n", text1);
    printf("text2: %s\n", text2);

    printf("\nSwapping...\n");
    temporary = text1;
    text1 = text2;
    text2 = temporary;

    printf("\nAfter swap: \n");
    printf("text1: %s\n", text1);
    printf("text2: %s\n", text2);

    return 0;
}
</string.h></stdio.h>

Experiment 5: Multi-dimensional Arrays and Pointer Arithmetic

This experiment demonstrates accessing multi-dimentional arrays using different pointer types.

#include <stdio.h>

int main() {
    int matrix[2][4] = {{1, 9, 8, 4}, {2, 0, 4, 9}};
    int i, j;
    int *element_ptr;     // Pointer to individual elements
    int (*row_ptr)[4];    // Pointer to rows (arrays of 4 integers)

    printf("Output 1: Direct array access\n");
    for (i = 0; i < 2; ++i) {
        for (j = 0; j < 4; ++j)
            printf("%d ", matrix[i][j]);
        printf("\n");
    }

    printf("\nOutput 2: Using element pointer\n");
    for (element_ptr = &matrix[0][0], i = 0; element_ptr < &matrix[0][0] + 8; ++element_ptr, ++i) {
        printf("%d ", *element_ptr);

        if ((i + 1) % 4 == 0)
            printf("\n");
    }
                         
    printf("\nOutput 3: Using row pointer\n");
    for (row_ptr = matrix; row_ptr < matrix + 2; ++row_ptr) {
        for (j = 0; j < 4; ++j)
            printf("%d ", *(*row_ptr + j));
        printf("\n");
    }

    return 0;
}
</stdio.h>

Experiment 6: String Replacement Function

This experiment shows how to replace characters in a string.

#include <stdio.h>
#define BUFFER_SIZE 100

void replace_characters(char *text, char old_char, char new_char);

int main() {
    char sentence[BUFFER_SIZE] = "Programming is challenging or not, it is a question.";

    printf("Original text: \n");
    printf("%s\n", sentence);

    replace_characters(sentence, 'i', '*');

    printf("Modified text: \n");
    printf("%s\n", sentence);

    return 0;
}

void replace_characters(char *text, char old_char, char new_char) {
    while(*text) {
        if(*text == old_char)
            *text = new_char;
        text++;
    }
}
</stdio.h>

Experiment 7: String Truncation Function

This experiment demonstrates truncating a string at a specified character.

#include <stdio.h>
#define BUFFER_SIZE 100

char* truncate_string(char *text, char delimiter);

int main() {
    char input[BUFFER_SIZE];
    char delimiter;

    while(printf("Enter a string: "), gets(input) != NULL) {
        printf("Enter a character: ");
        delimiter = getchar();

        printf("Truncating...\n");
        truncate_string(input, delimiter);

        printf("Truncated string: %s\n\n", input);
        getchar();
    }

    return 0;
}

char* truncate_string(char *text, char delimiter) {
    int index;
    for(index = 0; text[index] != '\0'; index++) {
        if(text[index] == delimiter) {
            text[index] = '\0';
            break;
        }
    }
    return text;
}
</stdio.h>

Experiment 8: ID Validation

This experiment validates ID numbers based on their format.

#include <stdio.h>
#include <string.h>
#define NUM_IDS 5

int validate_id(char *id);

int main() {
    char *ids[NUM_IDS] = {"31010120000721656X",
                        "3301061996X0203301",
                        "53010220051126571",
                        "510104199211197977",
                        "53010220051126133Y"};
    int index;

    for (index = 0; index < NUM_IDS; ++index)
        if (validate_id(ids[index]))
            printf("%s\tValid\n", ids[index]);
        else
            printf("%s\tInvalid\n", ids[index]);

    return 0;
}

int validate_id(char *id) {
    int index, last_char;
    if(strlen(id) == 18) {
        for(index = 0; index < 18; ++index)
            ;
        last_char = id[index-1];
        if((index == 18 && (last_char == 'X' || (last_char >= '0' && last_char <= '9'))))
            return 1;
        else
            return 0;
    } else {
        return 0;
    }
}
</string.h></stdio.h>

Experiment 9: String Encoding and Decoding

This experiment demonstrates encoding and decoding strings using a Caesar cipher.

#include <stdio.h>
#define BUFFER_SIZE 100

void encode_text(char *text, int shift);
void decode_text(char *text, int shift);

int main() {
    char message[BUFFER_SIZE];
    int shift_value;

    printf("Enter text: ");
    gets(message);

    printf("Enter shift value: ");
    scanf("%d", &shift_value);

    printf("Encoded text: ");
    encode_text(message, shift_value);
    printf("%s\n", message);

    printf("Decoded text: ");
    decode_text(message, shift_value);
    printf("%s\n", message);

    return 0;
}

void encode_text(char *text, int shift) {
    int index;
    
    for(index = 0; text[index] != '\0'; index++) {
        if(text[index] >= 'A' && text[index] <= 'Z') {
            if(text[index] + shift <= 'Z')
                text[index] += shift;
            else
                text[index] = text[index] + shift%26 - 26;
        }
        else if(text[index] >= 'a' && text[index] <= 'z') {
            if(text[index] + shift <= 'z')
                text[index] += shift;
            else
                text[index] = text[index] + shift%26 - 26;
        }
    }
}

void decode_text(char *text, int shift) {
    int index;
    for(index = 0; text[index] != '\0'; index++) {
        if(text[index] >= 'A' && text[index] <= 'Z') {
            if(text[index] - shift >= 'A')
                text[index] -= shift;
            else
                text[index] = text[index] - shift%26 + 26;
        }
        else if(text[index] >= 'a' && text[index] <= 'z') {
            if(text[index] - shift >= 'a')
                text[index] -= shift;
            else
                text[index] = text[index] - shift%26 + 26;
        }
    }
}
</stdio.h>

Experiment 10: Command-line Argument Sorting

This experiment sorts command-line arguments alphabetically.

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

void sort_arguments(int arg_count, char *arguments[]);

int main(int argc, char *argv[]) {
    int index;
    sort_arguments(argc, argv);
    
    for(index = 1; index < argc; ++index)
        printf("hello, %s\n", argv[index]);

    return 0;
}

void sort_arguments(int arg_count, char *arguments[]) {
    int i, j;
    char *temp;
    for(j = 1; j < arg_count - 1; j++) {
        for(i = 1; i < arg_count - j - 1; i++) {
            if(strcmp(arguments[i], arguments[i+1]) > 0) {
                temp = arguments[i];
                arguments[i] = arguments[i+1];
                arguments[i+1] = temp;
            }
        }
    }
}
</string.h></stdio.h>

Tags: c programming Arrays pointers strings functions

Posted on Fri, 30 Oct 2026 16:08:02 +0000 by blmg911