C Programlama - İşaretçiler ile Sorular ve Çözümler

1. İki tamsayıyı işaretçiler kullanarak takas eden bir C programı yazın.
#include <stdio.h>

void swap(int *a, int *b) {
    int temp = *a;
    *a = *b;
    *b = temp;
}

int main() {
    int x = 5, y = 10;
    printf("Değiştirmeden önce: x = %d, y = %d\n", x, y);
    swap(&x, &y);
    printf("Değiştirdikten sonra: x = %d, y = %d\n", x, y);
    return 0;
}
            
2. Bir dizinin elemanlarının toplamını işaretçiler kullanarak bulan bir C programı yazın.
#include <stdio.h>

int arraySum(int *arr, int size) {
    int sum = 0;
    for (int i = 0; i < size; i++) {
        sum += *(arr + i);
    }
    return sum;
}

int main() {
    int arr[] = {1, 2, 3, 4, 5};
    int size = sizeof(arr) / sizeof(arr[0]);
    printf("Dizi elemanlarının toplamı: %d\n", arraySum(arr, size));
    return 0;
}
            
3. Bir diziyi işaretçiler kullanarak tersine çeviren bir C programı yazın.
#include <stdio.h>

void reverseArray(int *arr, int size) {
    int *start = arr;
    int *end = arr + size - 1;
    
    while (start < end) {
        int temp = *start;
        *start = *end;
        *end = temp;
        start++;
        end--;
    }
}

int main() {
    int arr[] = {1, 2, 3, 4, 5};
    int size = sizeof(arr) / sizeof(arr[0]);
    reverseArray(arr, size);
    printf("Ters çevrilmiş dizi: ");
    for (int i = 0; i < size; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
    return 0;
}
            
4. Bir karakter dizisindeki sesli harfleri işaretçiler kullanarak sayan bir C programı yazın.
#include <stdio.h>
#include <ctype.h>

int countVowels(char *str) {
    int count = 0;
    while (*str != '\0') {
        char c = tolower(*str);
        if (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u') {
            count++;
        }
        str++;
    }
    return count;
}

int main() {
    char str[] = "Merhaba, Dünya!";
    printf("Sesli harf sayısı: %d\n", countVowels(str));
    return 0;
}
            
5. Bir dizideki en büyük elemanı işaretçiler kullanarak bulan bir C programı yazın.
#include <stdio.h>

int findMax(int *arr, int size) {
    int max = *arr;
    for (int i = 1; i < size; i++) {
        if (*(arr + i) > max) {
            max = *(arr + i);
        }
    }
    return max;
}

int main() {
    int arr[] = {5, 10, 3, 8, 15};
    int size = sizeof(arr) / sizeof(arr[0]);
    printf("Dizideki en büyük eleman: %d\n", findMax(arr, size));
    return 0;
}
            
6. İşaretçiler kullanarak bir karakterin bir dizideki tekrar sayısını bulan bir C programı yazın.
#include <stdio.h>

int countOccurrences(char *str, char ch) {
    int count = 0;
    while (*str != '\0') {
        if (*str == ch) {
            count++;
        }
        str++;
    }
    return count;
}

int main() {
    char str[] = "hello world";
    char ch = 'l';
    printf("'%c' karakterinin tekrar sayısı: %d\n", ch, countOccurrences(str, ch));
    return 0;
}
            
7. İşaretçiler kullanarak bir dizenin palindrom olup olmadığını kontrol eden bir C programı yazın.
#include <stdio.h>
#include <stdbool.h>
#include <string.h>

bool isPalindrome(char *str) {
    int length = strlen(str);
    char *start = str;
    char *end = str + length - 1;
    
    while (start < end) {
        if (*start != *end) {
            return false;
        }
        start++;
        end--;
    }
    return true;
}

int main() {
    char str[] = "radar";
    if (isPalindrome(str)) {
        printf("Dize palindromdur.\n");
    } else {
        printf("Dize palindrom değildir.\n");
    }
    return 0;
}
            
8. İşaretçiler kullanarak bir dizenin uzunluğunu bulan bir C programı yazın.
#include <stdio.h>

int stringLength(char *str) {
    int length = 0;
    while (*str != '\0') {
        length++;
        str++;
    }
    return length;
}

int main() {
    char str[] = "hello";
    printf("Dizinin uzunluğu: %d\n", stringLength(str));
    return 0;
}
            
9. İşaretçiler kullanarak bir dizenin diğerine kopyalanmasını sağlayan bir C programı yazın.
#include <stdio.h>

void stringCopy(char *dest, const char *src) {
    while (*src != '\0') {
        *dest = *src;
        dest++;
        src++;
    }
    *dest = '\0';
}

int main() {
    char str1[20];
    char str2[] = "Hello";
    stringCopy(str1, str2);
    printf("Kopyalanmış dize: %s\n", str1);
    return 0;
}
            
10. İşaretçiler kullanarak bir sayının faktöriyelini bulan bir C programı yazın.
#include <stdio.h>

int factorial(int n) {
    int result = 1;
    for (int i = 1; i <= n; i++) {
        result *= i;
    }
    return result;
}

int main() {
    int num = 5;
    printf("%d sayısının faktöriyeli: %d\n", num, factorial(num));
    return 0;
}
            
11. İşaretçiler kullanarak bir tamsayı dizisini sıralayan bir C programı yazın.
#include <stdio.h>

void bubbleSort(int *arr, int size) {
    for (int i = 0; i < size - 1; i++) {
        for (int j = 0; j < size - i - 1; j++) {
            if (*(arr + j) > *(arr + j + 1)) {
                int temp = *(arr + j);
                *(arr + j) = *(arr + j + 1);
                *(arr + j + 1) = temp;
            }
        }
    }
}

int main() {
    int arr[] = {5, 2, 8, 1, 4};
    int size = sizeof(arr) / sizeof(arr[0]);
    bubbleSort(arr, size);
    printf("Sıralanmış dizi: ");
    for (int i = 0; i < size; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
    return 0;
}
            
12. İşaretçiler kullanarak bir tamsayı dizisini tersine çeviren bir C programı yazın.
#include <stdio.h>

void reverseArray(int *arr, int size) {
    int *start = arr;
    int *end = arr + size - 1;
    
    while (start < end) {
        int temp = *start;
        *start = *end;
        *end = temp;
        start++;
        end--;
    }
}

int main() {
    int arr[] = {1, 2, 3, 4, 5};
    int size = sizeof(arr) / sizeof(arr[0]);
    reverseArray(arr, size);
    printf("Ters çevrilmiş dizi: ");
    for (int i = 0; i < size; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
    return 0;
}
            
13. İşaretçiler kullanarak iki dizenin anagram olup olmadığını kontrol eden bir C programı yazın.
#include <stdio.h>
#include <stdbool.h>
#include <string.h>

bool areAnagrams(char *str1, char *str2) {
    int count[256] = {0};
    while (*str1 != '\0') {
        count[(int)*str1]++;
        str1++;
    }
    while (*str2 != '\0') {
        count[(int)*str2]--;
        str2++;
    }
    for (int i = 0; i < 256; i++) {
        if (count[i] != 0) {
            return false;
        }
    }
    return true;
}

int main() {
    char str1[] = "listen";
    char str2[] = "silent";
    if (areAnagrams(str1, str2)) {
        printf("Dizeler anagramdır.\n");
    } else {
        printf("Dizeler anagram değildir.\n");
    }
    return 0;
}
            
14. İşaretçiler kullanarak bir dizideki en büyük ve en küçük elemanları bulan bir C programı yazın.
#include <stdio.h>

void findMinMax(int *arr, int size, int *max, int *min) {
    *max = *min = *arr;
    for (int i = 1; i < size; i++) {
        if (*(arr + i) > *max) {
            *max = *(arr + i);
        }
        if (*(arr + i) < *min) {
            *min = *(arr + i);
        }
    }
}

int main() {
    int arr[] = {5, 10, 3, 8, 15};
    int size = sizeof(arr) / sizeof(arr[0]);
    int max, min;
    findMinMax(arr, size, &max, &min);
    printf("En büyük eleman: %d\n", max);
    printf("En küçük eleman: %d\n", min);
    return 0;
}
            
15. İşaretçiler kullanarak iki matrisi çarpan bir C programı yazın.
#include <stdio.h>

void matrixMultiply(int *mat1, int *mat2, int *result, int rows1, int cols1, int cols2) {
    for (int i = 0; i < rows1; i++) {
        for (int j = 0; j < cols2; j++) {
            *(result + i * cols2 + j) = 0;
            for (int k = 0; k < cols1; k++) {
                *(result + i * cols2 + j) += *((mat1 + i * cols1) + k) * *((mat2 + k * cols2) + j);
            }
        }
    }
}

void displayMatrix(int *matrix, int rows, int cols) {
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            printf("%d ", *((matrix + i * cols) + j));
        }
        printf("\n");
    }
}

int main() {
    int mat1[2][3] = {
        {1, 2, 3},
        {4, 5, 6}
    };
    int mat2[3][2] = {
        {7, 8},
        {9, 10},
        {11, 12}
    };
    int result[2][2];
    
    matrixMultiply((int *)mat1, (int *)mat2, (int *)result, 2, 3, 2);
    
    printf("Sonuç Matrisi:\n");
    displayMatrix((int *)result, 2, 2);
    
    return 0;
}
            
16. İşaretçi kullanarak tüm alfabeleri yazdıran bir C programı yazın.
#include <stdio.h>

int main() {
    char *ptr = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    printf("Alfabe: ");
    while (*ptr != '\0') {
        printf("%c ", *ptr);
        ptr++;
    }
    printf("\n");
    return 0;
}
            
17. İşaretçi kullanarak 0'dan 9'a kadar tüm rakamları yazdıran bir C programı yazın.
#include <stdio.h>

int main() {
    char *ptr = "0123456789";
    printf("Rakamlar: ");
    while (*ptr != '\0') {
        printf("%c ", *ptr);
        ptr++;
    }
    printf("\n");
    return 0;
}
            
18. İşaretçi kullanarak 'a'dan 'z'ye kadar tüm küçük harfleri yazdıran bir C programı yazın.
#include <stdio.h>

int main() {
    char *ptr = "abcdefghijklmnopqrstuvwxyz";
    printf("Küçük harfler: ");
    while (*ptr != '\0') {
        printf("%c ", *ptr);
        ptr++;
    }
    printf("\n");
    return 0;
}
            
Kaynak: pivoteduunit