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;
}