C Programlama Dinamik olarak ayrılan bir hafıza bölgesine 1 ile 100 arasında rastgele oluşturulan 10 tane tam sayıyı yazan program
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
/*
Dinamik olarak ayrılan bir hafıza bölgesine 1 ile 100 arasında rastgele oluşturulan
10 tane tam sayıyı yazan program
//Dinamik bellek ayırma yöntemi kullanımı
*/
#include <locale.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
setlocale(LC_ALL, "Turkish");
srand(time(NULL)); //Rastgele Sayı Üretimi
int* p;
int i;
p = malloc(10 * sizeof(int));
for (i = 0; i < 10; i++)
{
*(p + i) = 1 + (rand() % 100);
printf("%2d. Eleman= %d\n", i + 1, *(p + i));
}
}
C Programlama Dizideki Elemanları Tersten Yazma (Pointer)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
/*
Dizideki Elemanları Tersten Yazma (Pointer)
Verilen dizi içerisinde yer alan sayıları pointer kullanarak ters şekilde sıralayan programı C dilinde yazınız.
*/
#include <stdio.h>
#include <locale.h>
#define SIZE 100
void main ()
{
setlocale(LC_ALL, "Turkish");
int dizi[SIZE];
int i, N;
int* ptr;
printf("Dizinin Boyutunu Giriniz: ");
scanf("%d", &N);
printf("\nDizideki %d Elemanın Değerlerini Giriniz \n",N);
ptr = &dizi[0]; // ptr, dizi[0] dizisinin adresini saklar
for (i = 1; i <= N; i++)
{
printf("\n%d. Elemanı Giriniz: ", i);
scanf("%d", ptr); //değerin adresini alır.
ptr++; //Adresi artırır. Adres 4 byte artar.
}
printf("\n--------------------------\n");
printf("\nDizideki Elemanların Tersi\n");
ptr = &dizi[N - 1];
for (i = N; i > 0; i--)
{
printf("\n%d. Eleman= %d \n", i, *ptr); //*ptr dizideki değerleri verir.
ptr--; //Adresi azaltır. Adres 4 byte azalır.
}
}
C Programlama Diziyi Artan Şekilde Yazma (pointer)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
/*
Diziyi Artan Şekilde Yazma
//Pointer Kullanımı
*/
#include <stdio.h>
#include <locale.h>
#define SIZE 100
void main()
{
setlocale(LC_ALL, "Turkish");
int N;
int dizi[SIZE];
int i, j, k;
int* ptr;
printf("Dizinin Boyutunu Giriniz: ");
scanf("%d", &N);
printf("\nDizideki %d Elemanın Değerlerini Giriniz \n", N);
ptr = &dizi[0]; // ptr, dizi[0] dizisinin adresini saklar
for (i = 0; i < N; i++)
{
printf("\n%d. Elemanı Giriniz: ", i + 1);
scanf("%d", ptr + i);
/*
Dizi, işaretçi değişkeni dizinin temel adresini gösteren işaretçiler yardımıyla getirilebilir.
Bu nedenle, işaretçileri kullanarak diziyi sıralamak için,
dizinin öğelerine (pointer + indeks) biçimini kullanarak erişmemiz gerekir.
*/
}
for (i = 0; i < N; i++)
{
for (j = i + 1; j < N; j++)
{
if (*(ptr + i) > * (ptr + j))
{
k = *(ptr + i);
*(ptr + i) = *(ptr + j);
*(ptr + j) = k;
}
}
}
printf("\nKüçükten Büyüğe Sıralanmış Hali\n");
for (i = 0; i < N; i++)
{
printf("\n%d. Eleman= %d \n", i + 1, *(ptr + i));
}
}
C Programlama Dizideki Metnin Tüm Permütasyonlarını Yazma
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
/*
Dizideki Metnin Tüm Permütasyonlarını Yazma
//Pointer Kullanımı
*/
#include <stdio.h>
#include <locale.h>
#define SIZE 100
int uzunlukbulma(char metin[])
{
/*
strlen() fonksiyonun işlevini yapar.
(strlen fonksiyonu başlangıç adresini aldığı yazının uzunluğu ile geri döner.)
*/
int i = 0; // karakter sayısını alacak
while (1) // Sonsuz Döngü
{
if (metin[i] == '\0') // '\0' simgesi NULL(bos) karakter
{
break; //NULL gelince sonsuz döngüden çıkıyoruz
}
i++;
}
return i; //Metnin uzunluğunu verir.
/* Alternatif
while(metin[i] != '\0') //Null görene kadar dönmeye devam eder.
{
i++;
}
return i;
*/
}
int yerdegistirme(char *metin1, char *metin2)
{
char k;
k = *metin1;
*metin1 = *metin2;
*metin2 = k;
return k;
}
void permutasyon(char* ptr,int x, int y)
{
int i;
if (x == y)
{
printf("%s\n", ptr);
}
else
{
for (i = x; i < y; i++)
{
yerdegistirme((ptr + x), (ptr + i));
permutasyon(ptr, x + 1, y);
yerdegistirme((ptr + x), (ptr + i));
}
}
}
int main()
{
setlocale(LC_ALL, "Turkish");
char metin[SIZE];
printf("Metin giriniz: ");
gets(metin); // alternatif: scanf("%s", metin);
int uzunluk = uzunlukbulma(metin);
permutasyon(metin, 0, uzunluk);
}
C Programlama Dizinin En Büyük Elemanını Bulma
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
/*
Dizinin En Büyük Elemanını Bulma
//Dinamik bellek ayırma yöntemi kullanımı
*/
#include <stdio.h>
#include <locale.h>
#include <stdlib.h>
int main()
{
setlocale(LC_ALL, "Turkish");
int i, n;
int* ptr;
printf("Dizinin Boyutunu Giriniz: ");
scanf("%d", &n);
ptr = (int*)calloc(n,sizeof(int));
if (ptr == NULL)
{
printf("Yeterli Hafıza Alanı Yok!");
}
for (i = 0; i < n; i++)
{
printf("%d. Elemanı Giriniz: ", i + 1);
scanf("%d", ptr + i);
}
for (i = 0; i < n; i++)
{
if (*ptr < *(ptr + i))
{
*ptr = *(ptr + i);
}
}
printf("Dizinin En Büyük Elemanı = %d\n", *ptr);
return 0;
}
C Programlama Metni Tersten Yazdırma
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
/*
Metni Tersten Yazdırma
//Pointer Kullanımı
*/
#include <stdio.h>
#include <locale.h>
#define SIZE 20
int main()
{
setlocale(LC_ALL, "Turkish");
char metin[SIZE];
char tersi[SIZE];
char* ptr_1 = metin;
char* ptr_2 = tersi;
int i = 0;
printf("Metin giriniz: ");
gets(metin); // alternatif: scanf("%s", metin);
while (*ptr_1)
{
ptr_1++;
i++;
}
while (i >= 0)
{
ptr_1--;
*ptr_2 = *ptr_1;
ptr_2++;
--i;
}
*ptr_1 = '\0';
printf("Metnin Tersi: %s", tersi);
return 0;
}
C Programlama Rastgele Oluşan Dizideki Rakamları Tek Ve Çift Olarak Ayırma
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
/*
Rastgele Oluşan Dizideki Rakamları Tek Ve Çift Olarak Ayırma
Dinamik bellek ayırma yöntemi kullanılarak 20 elemanlı bir dizi oluşturulacak.
Bu dizinin elemanları 1 ile 9 arasındaki sayıları rastgele değerlerle program dolduracak.
Oluşturulan dizideki rakamların tekleri bir diziye çiftleri ayrı bir diziye yerleştirerek çıktı oluşturulacak.
*/
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <time.h>
int main(void)
{
setlocale(LC_ALL, "Turkish");
srand(time(NULL)); //Rastgele Sayı Üretimi
int i;
int cift_sayac = 0;
int tek_sayac = 0;
int* dizi; //Ana dizi için bir pointer
int* cift; //Çift sayılar için bir dizi
int* tek; //Tek Sayılar için bir dizi
if ((dizi = malloc(20 * sizeof (int))) == NULL)
{
printf("YETERLI HAFIZA YOK");
}
cift = realloc(dizi, 20 * sizeof(int));
if ((tek = malloc(20 * sizeof ( int))) == NULL)
{
printf("YETERLI HAFIZA YOK");
}
dizi = &dizi[0]; //Pointer ile dizi aynı isimle koyarak ekstra bir dizi tanımlamamıza gerek olmuyor.
for (i = 0; i < 20; ++i)
{
dizi[i] = 1 + (rand() % 9);
printf("%.2d. Eleman= %d\n", i + 1, dizi[i]);
if (dizi[i] % 2 == 0) //Çift Kontrolü
{
cift[cift_sayac] = dizi[i];
cift_sayac++;
}
else //diğerleri de tek oluyor.
{
tek[tek_sayac] = dizi[i];
tek_sayac++;
}
}
printf("\nÇİFT SAYILAR\n");
for (i = 0; i < cift_sayac; i++)
{
printf("%d ", cift[i]);
}
printf("\n");
printf("\nTEK SAYILAR\n");
for (i = 0; i < tek_sayac; i++)
{
printf("%d ", tek[i]);
}
printf("\n");
free(dizi);
free(tek);
}
C Programlama örnek
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <stdio.h>
void main()
{
int* m, ** p, *** k, myArray[5] = { 2,4,6,8,10 };
m = &myArray[2]; //m artık MyArray[2] adresini tutuyor.
p = &m;
k = &p;
printf("%p\n", **k); // MyArray[2] adresini verir.
printf("%d\n", *(**(k)+2)); // MyArray[2] deydi 8 bayt giderse MyArray[4] dizisinin değerini verir.
m = myArray; //m=&myArray[0] m dizinin ilk elemanın adresidir.
printf("%d\n", *(*(p)+1)); //Output=4
**(p) += 7.26;
m += 3; // m artık dizi[3] de başlıyor.
printf("%d\n", *(*(p)-3)); //Output=9
printf("%p\n", **k); // MyArray[3] adresini verir.
}
C Programlama örnek 2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <stdio.h>
int fun(int x, int y)
{
if (x == y)
return x;
if (x > y)
{
printf("\n%d, %d\n", x, y);
return fun(x - y, y);
}
return fun(x, y - x);
}
int main()
{
int sayilar[] = { 132,48,55,47,-6 };
int* ptr = &sayilar[3]; //ptr[0]=*(ptr+0)=sayilar[3]
/* int* ptr;
ptr= &sayilar[3]; */
int sonuc = fun(sayilar[0], (*ptr) + 1);
printf("\nfun(%d,%d) = %d\n", ptr[-3], *(ptr)+1, sonuc);
return 0;
}
C Programlama pointer örnek
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <stdio.h>
#include <locale.h>
void main()
{
double* m, ** k, myArray[5] = { 1.0,2.0,3.0,4.0,5.0 };
m = myArray; //m=&myArray[0] m dizinin ilk elemanın adresidir.
printf("%.1f\n", *(m + 1)); // Output=2.0
*(m + 3) += 3.86; // myArray[3]= *(m+3) =7.86
m += 2; // m artık dizi[2] de başlıyor.
printf("%.1f\n", *(m + 1)); //Output=7.9
m = &myArray[3]; //m artık MyArray[3] adresini tutuyor.
k = &m;
printf("%.1f\n", *(*(k)-1)); //myArray[2] değerini verir.
printf("%p\n", *k); //myArray[3]'ün adresini verir.
m = m - 1;
printf("%p", m); //myArray[2] adresini verir.
}
C Programlama pointer işlemleri
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <stdio.h>
int x=0;
void main()
{
int *ptr=&x;
/*
aynı anlamda
int *ptr;
ptr=&x;
*/
printf("%p\n", ptr);
x++;
printf("%p\n", ptr);
}
/*Aynı Adres değerini verir.*/
C Programlama dizi ve pointer
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <stdio.h>
void main()
{
double* m, ** k, myArray[5] = { 2.0,4.0,6.0,8.0,10.0 };
m = &myArray[1];
k = &m;
printf("%p\n", *k); //myArray[1] adresini verir.
printf("%.1f\n", *(*(k)+2)); //myArray[3] değerini verir. Output=8.0
m = myArray;
printf("%.1f\n", *(m + 1)); //Output=4.0
*(m + 3) += 7.26;
m += 2;
printf("%.1f\n", *(m + 1)); //Output=15.30
m -= 2;
printf("%p\n", m); // myArray[0] adresini verir.
}