c
examples
examples.cš§c
/*
* =============================================================================
* ONE-DIMENSIONAL ARRAYS - EXAMPLES FILE
* =============================================================================
*
* This file demonstrates one-dimensional arrays in C.
* Topics: declaration, initialization, access, operations, and more.
*
* Compilation: gcc examples.c -o examples
* Execution: ./examples
* =============================================================================
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*
* =============================================================================
* EXAMPLE 1: Array Declaration and Initialization
* =============================================================================
*/
void example1_declaration_init(void) {
printf("\n=== Example 1: Array Declaration and Initialization ===\n");
// Method 1: Declare then initialize
int arr1[5];
arr1[0] = 10;
arr1[1] = 20;
arr1[2] = 30;
arr1[3] = 40;
arr1[4] = 50;
// Method 2: Initialize at declaration
int arr2[5] = {10, 20, 30, 40, 50};
// Method 3: Partial initialization (rest are 0)
int arr3[5] = {10, 20}; // {10, 20, 0, 0, 0}
// Method 4: All zeros
int arr4[5] = {0}; // {0, 0, 0, 0, 0}
// Method 5: Size from initializer
int arr5[] = {10, 20, 30}; // Size is 3
printf("arr1: ");
for (int i = 0; i < 5; i++) printf("%d ", arr1[i]);
printf("\narr2: ");
for (int i = 0; i < 5; i++) printf("%d ", arr2[i]);
printf("\narr3 (partial): ");
for (int i = 0; i < 5; i++) printf("%d ", arr3[i]);
printf("\narr4 (all zeros): ");
for (int i = 0; i < 5; i++) printf("%d ", arr4[i]);
printf("\narr5 (auto size): ");
int size5 = sizeof(arr5) / sizeof(arr5[0]);
for (int i = 0; i < size5; i++) printf("%d ", arr5[i]);
printf("(size: %d)\n", size5);
}
/*
* =============================================================================
* EXAMPLE 2: Accessing Array Elements
* =============================================================================
*/
void example2_access(void) {
printf("\n=== Example 2: Accessing Array Elements ===\n");
int numbers[5] = {100, 200, 300, 400, 500};
printf("Array contents:\n");
for (int i = 0; i < 5; i++) {
printf(" numbers[%d] = %d\n", i, numbers[i]);
}
// Modifying elements
printf("\nModifying elements:\n");
numbers[0] = 111;
numbers[2] = 333;
numbers[4] = 555;
printf("After modification:\n");
for (int i = 0; i < 5; i++) {
printf(" numbers[%d] = %d\n", i, numbers[i]);
}
// Using expressions as index
int index = 2;
printf("\nUsing variable as index:\n");
printf(" numbers[index] where index=%d: %d\n", index, numbers[index]);
printf(" numbers[index+1]: %d\n", numbers[index + 1]);
}
/*
* =============================================================================
* EXAMPLE 3: Array Memory Layout
* =============================================================================
*/
void example3_memory(void) {
printf("\n=== Example 3: Array Memory Layout ===\n");
int arr[5] = {10, 20, 30, 40, 50};
printf("Memory layout of int arr[5]:\n\n");
printf("Index Address Value\n");
printf("āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā\n");
for (int i = 0; i < 5; i++) {
printf(" [%d] %p %d\n", i, (void*)&arr[i], arr[i]);
}
printf("\nSize information:\n");
printf(" sizeof(arr) = %zu bytes (total)\n", sizeof(arr));
printf(" sizeof(arr[0]) = %zu bytes (per element)\n", sizeof(arr[0]));
printf(" Number of elements = %zu\n", sizeof(arr) / sizeof(arr[0]));
printf("\nAddress arithmetic:\n");
printf(" Base address: %p\n", (void*)arr);
printf(" &arr[0]: %p (same as base)\n", (void*)&arr[0]);
printf(" &arr[1]: %p (+4 bytes)\n", (void*)&arr[1]);
printf(" &arr[2]: %p (+8 bytes)\n", (void*)&arr[2]);
}
/*
* =============================================================================
* EXAMPLE 4: Array Input from User
* =============================================================================
*/
void example4_input(void) {
printf("\n=== Example 4: Array Input ===\n");
int arr[5];
// Simulating user input with predefined values
printf("Simulating input of 5 numbers: 15, 25, 35, 45, 55\n");
int inputs[] = {15, 25, 35, 45, 55};
for (int i = 0; i < 5; i++) {
arr[i] = inputs[i];
printf(" Entered arr[%d] = %d\n", i, arr[i]);
}
printf("\nArray contents: ");
for (int i = 0; i < 5; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
/*
* =============================================================================
* EXAMPLE 5: Finding Sum and Average
* =============================================================================
*/
void example5_sum_average(void) {
printf("\n=== Example 5: Sum and Average ===\n");
int numbers[] = {10, 20, 30, 40, 50, 60, 70, 80, 90, 100};
int size = sizeof(numbers) / sizeof(numbers[0]);
// Calculate sum
int sum = 0;
for (int i = 0; i < size; i++) {
sum += numbers[i];
}
// Calculate average
double average = (double)sum / size;
printf("Array: ");
for (int i = 0; i < size; i++) {
printf("%d ", numbers[i]);
}
printf("\n");
printf("Sum: %d\n", sum);
printf("Average: %.2f\n", average);
}
/*
* =============================================================================
* EXAMPLE 6: Finding Maximum and Minimum
* =============================================================================
*/
void example6_max_min(void) {
printf("\n=== Example 6: Maximum and Minimum ===\n");
int arr[] = {45, 12, 89, 33, 76, 21, 98, 54};
int size = sizeof(arr) / sizeof(arr[0]);
int max = arr[0];
int min = arr[0];
int maxIndex = 0;
int minIndex = 0;
for (int i = 1; i < size; i++) {
if (arr[i] > max) {
max = arr[i];
maxIndex = i;
}
if (arr[i] < min) {
min = arr[i];
minIndex = i;
}
}
printf("Array: ");
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("\n");
printf("Maximum: %d (at index %d)\n", max, maxIndex);
printf("Minimum: %d (at index %d)\n", min, minIndex);
}
/*
* =============================================================================
* EXAMPLE 7: Linear Search
* =============================================================================
*/
void example7_search(void) {
printf("\n=== Example 7: Linear Search ===\n");
int arr[] = {23, 45, 12, 67, 34, 89, 11, 56};
int size = sizeof(arr) / sizeof(arr[0]);
printf("Array: ");
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("\n");
// Search for different values
int targets[] = {67, 100, 11};
for (int t = 0; t < 3; t++) {
int target = targets[t];
int found = -1;
for (int i = 0; i < size; i++) {
if (arr[i] == target) {
found = i;
break;
}
}
if (found != -1) {
printf("Searching for %d: Found at index %d\n", target, found);
} else {
printf("Searching for %d: Not found\n", target);
}
}
}
/*
* =============================================================================
* EXAMPLE 8: Reversing an Array
* =============================================================================
*/
void example8_reverse(void) {
printf("\n=== Example 8: Reversing an Array ===\n");
int arr[] = {1, 2, 3, 4, 5, 6, 7};
int size = sizeof(arr) / sizeof(arr[0]);
printf("Original: ");
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("\n");
// Reverse in place
for (int i = 0; i < size / 2; i++) {
int temp = arr[i];
arr[i] = arr[size - 1 - i];
arr[size - 1 - i] = temp;
}
printf("Reversed: ");
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
/*
* =============================================================================
* EXAMPLE 9: Copying Arrays
* =============================================================================
*/
void example9_copy(void) {
printf("\n=== Example 9: Copying Arrays ===\n");
int source[] = {10, 20, 30, 40, 50};
int size = sizeof(source) / sizeof(source[0]);
int dest[5];
// Method 1: Element by element
for (int i = 0; i < size; i++) {
dest[i] = source[i];
}
printf("Source: ");
for (int i = 0; i < size; i++) printf("%d ", source[i]);
printf("\n");
printf("Dest (after copy): ");
for (int i = 0; i < size; i++) printf("%d ", dest[i]);
printf("\n");
// Method 2: Using memcpy
int dest2[5];
memcpy(dest2, source, sizeof(source));
printf("Dest2 (memcpy): ");
for (int i = 0; i < size; i++) printf("%d ", dest2[i]);
printf("\n");
}
/*
* =============================================================================
* EXAMPLE 10: Counting Occurrences
* =============================================================================
*/
void example10_count(void) {
printf("\n=== Example 10: Counting Occurrences ===\n");
int arr[] = {1, 3, 2, 1, 4, 1, 3, 2, 1, 5};
int size = sizeof(arr) / sizeof(arr[0]);
printf("Array: ");
for (int i = 0; i < size; i++) printf("%d ", arr[i]);
printf("\n\n");
// Count occurrences of each number (1-5)
for (int num = 1; num <= 5; num++) {
int count = 0;
for (int i = 0; i < size; i++) {
if (arr[i] == num) count++;
}
printf("Number %d appears %d time(s)\n", num, count);
}
}
/*
* =============================================================================
* EXAMPLE 11: Array with Different Data Types
* =============================================================================
*/
void example11_types(void) {
printf("\n=== Example 11: Arrays of Different Types ===\n");
// Integer array
int integers[] = {1, 2, 3, 4, 5};
printf("int array: ");
for (int i = 0; i < 5; i++) printf("%d ", integers[i]);
printf("\n");
// Float array
float floats[] = {1.1f, 2.2f, 3.3f, 4.4f, 5.5f};
printf("float array: ");
for (int i = 0; i < 5; i++) printf("%.1f ", floats[i]);
printf("\n");
// Double array
double doubles[] = {1.11, 2.22, 3.33, 4.44, 5.55};
printf("double array: ");
for (int i = 0; i < 5; i++) printf("%.2f ", doubles[i]);
printf("\n");
// Char array
char chars[] = {'H', 'e', 'l', 'l', 'o'};
printf("char array: ");
for (int i = 0; i < 5; i++) printf("%c", chars[i]);
printf("\n");
// Size comparison
printf("\nMemory sizes:\n");
printf(" int[5]: %zu bytes\n", sizeof(integers));
printf(" float[5]: %zu bytes\n", sizeof(floats));
printf(" double[5]: %zu bytes\n", sizeof(doubles));
printf(" char[5]: %zu bytes\n", sizeof(chars));
}
/*
* =============================================================================
* EXAMPLE 12: Shifting Array Elements
* =============================================================================
*/
void example12_shift(void) {
printf("\n=== Example 12: Shifting Elements ===\n");
int arr[] = {1, 2, 3, 4, 5};
int size = 5;
printf("Original: ");
for (int i = 0; i < size; i++) printf("%d ", arr[i]);
printf("\n");
// Left shift by 1
int first = arr[0];
for (int i = 0; i < size - 1; i++) {
arr[i] = arr[i + 1];
}
arr[size - 1] = first;
printf("Left shift: ");
for (int i = 0; i < size; i++) printf("%d ", arr[i]);
printf("\n");
// Reset and right shift
int arr2[] = {1, 2, 3, 4, 5};
int last = arr2[size - 1];
for (int i = size - 1; i > 0; i--) {
arr2[i] = arr2[i - 1];
}
arr2[0] = last;
printf("Right shift: ");
for (int i = 0; i < size; i++) printf("%d ", arr2[i]);
printf("\n");
}
/*
* =============================================================================
* EXAMPLE 13: Removing Duplicates
* =============================================================================
*/
void example13_remove_duplicates(void) {
printf("\n=== Example 13: Removing Duplicates ===\n");
int arr[] = {1, 2, 2, 3, 4, 4, 4, 5, 5};
int size = 9;
printf("Original: ");
for (int i = 0; i < size; i++) printf("%d ", arr[i]);
printf("\n");
int uniqueArr[9];
int uniqueSize = 0;
for (int i = 0; i < size; i++) {
int isDuplicate = 0;
for (int j = 0; j < uniqueSize; j++) {
if (arr[i] == uniqueArr[j]) {
isDuplicate = 1;
break;
}
}
if (!isDuplicate) {
uniqueArr[uniqueSize++] = arr[i];
}
}
printf("Unique: ");
for (int i = 0; i < uniqueSize; i++) printf("%d ", uniqueArr[i]);
printf("(%d elements)\n", uniqueSize);
}
/*
* =============================================================================
* EXAMPLE 14: Merging Two Arrays
* =============================================================================
*/
void example14_merge(void) {
printf("\n=== Example 14: Merging Arrays ===\n");
int arr1[] = {1, 3, 5, 7};
int arr2[] = {2, 4, 6, 8, 10};
int size1 = 4, size2 = 5;
int merged[9];
// Simple concatenation
for (int i = 0; i < size1; i++) {
merged[i] = arr1[i];
}
for (int i = 0; i < size2; i++) {
merged[size1 + i] = arr2[i];
}
printf("Array 1: ");
for (int i = 0; i < size1; i++) printf("%d ", arr1[i]);
printf("\n");
printf("Array 2: ");
for (int i = 0; i < size2; i++) printf("%d ", arr2[i]);
printf("\n");
printf("Merged: ");
for (int i = 0; i < size1 + size2; i++) printf("%d ", merged[i]);
printf("\n");
}
/*
* =============================================================================
* MAIN FUNCTION
* =============================================================================
*/
int main(void) {
printf("āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā\n");
printf("ā ONE-DIMENSIONAL ARRAYS - DEMONSTRATION PROGRAM ā\n");
printf("āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā\n");
example1_declaration_init();
example2_access();
example3_memory();
example4_input();
example5_sum_average();
example6_max_min();
example7_search();
example8_reverse();
example9_copy();
example10_count();
example11_types();
example12_shift();
example13_remove_duplicates();
example14_merge();
printf("\nāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā\n");
printf("ā EXAMPLES COMPLETED ā\n");
printf("āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā\n");
return 0;
}