Adım Adım C-II Eksik kalmış konular
Bu dersin amacı Bu derste; değişkenler, sabitler ve operatörler ile fonksiyonlar konusunun detayları anlatılacaktır. Ders bitiminde; Daha etkin programlar yazma becerisinin artması beklenilmektedir.
Değişken bildirimleri Sayısal değişkenler int i; short int si; unsigned int ui; long int li; float f; double d; Sayısal olmayan değişkenler char ch; // tek karakter char isim[10]; // 10 karakterlik string
Yerel ve Global değişkenler Yerel değişkenler herhangi bir fonksiyon içinde tanımlanırlar. Onlar sadece tanımlandıkları fonksiyon içinde kullanılabilirler. func1() int x; x=10; func2() int x; x=-199;
Yerel ve Global değişkenler Global değişkenler fonksiyon dışında tanımlanır ve program boyunca her yerden erişilebilir. int x, y; main() x=10; func1() y=x+10;
Tip dönüşümleri Kimi zaman farklı veri tipleri arasında atama işlemi yerine getirilebilir. Aşağıdaki örnekte bazı atamalar verilmiştir. int x; fhar ch; float f; func() ch=x; x=f; f=ch; f=x;
Değişkenlere ilk değer atama Genel kullanımı; tip değişken_adı=sabit_değer; Örnekler; char ch= a ; int first=1; float pi=3.14; char str[8]= merhaba ; char str[8]= m, e, r, h, a, b, a, \0
Aritmetik operatörler Dört işlem ve modüler işlem için; +,-,*,/ ve % kullanılır. Değer artırımları için; a=a+1 için a++ veya ++a a=a-1 için a- - veya - -a a=a+10 için a+=10 a=a-10 için a-=10 kullanılır.
Mantıksal operatörler Temel operatörler olarak; >, >=, <,<=, ==,!= kullanılır. Ayrıca; && AND OR! NOT Örnek: 10>5 &&! (10<9) 3<4
Bitwise operatörleri C ile bit işlemleri yapmak mümkündür. Bunun için bitwise operatörleri kullanılır. Operatörlerden bazıları aşağıdadır. & ^ ~ >> << AND OR XOR Tümleyen alma Sağa kaydır Sola kaydır. char x; x=7; x<<1; // 1 bit sola kaydırma x>>3; // 3 bit sağa kaydırma encode (ch) char ch; ch=~ch; return ch;
? Operatörü? Operatörü şartlı yapıları kolayca ifade etmede kullanılır. Genel kullanımı; ifade1? ifade2 : ifade3 x=10; Y=x>9?100:200; X eğer 9 dan büyük ise y 100 değerini alır aksi takdirde y, 200 değerini alır
& ve * operatörleri & operatörü değişkenlerin adresini, * operatörü ise adresi verilen değişkenlerin değerini verir. m=&count; // count değişkeninin bellekte tutulduğu adres m değişkenine atanır. q=*m; // m adresinde bulunan değer q değişkenine atanır. Eğer bu iki deyim arasında başka bir deyim yoksa, count değişkeninin değeri q Değişkenine atanır.
Fonksiyonlar konusunun detayı Bir fonksiyon için temel form; fonksiyon_adı (parametre listesi) parametre tanımlamaları; fonksiyon gövdesi;
Return (geriye dönüş) değerleri Bütün fonksiyonlar geriye bir değer döndürür. Bu değer sıfır veya başka bir değer olabilir. Eğer tip tanımı yapılmamışsa fonksiyon geriye tamsayı tipli değer döndürür.
Fonksiyon kullanımları Doğru kullanım x=power(y); if (max(x,y)>100) printf ( greater than 100 ); gibi kullanılabilir. Hatalı kullanım swap(x,y)=100; olamaz.
Fonksiyon argümanları Argümanlar fonksiyonlara iki yöntemden biri ile verilirler. Bunlar; call by value ve call by reference yöntemleridir. Call by value yönteminde, argümanların değerleri fonksiyonun parametrelerine kopyalanır. Call by reference yönteminde ise, her bir argümanın adresi fonksiyon parametrelerine kopyalanır. Call by value ile değişen sadece fonksiyon parametreleri iken call by reference yönteminde ana program içindeki argüman değerleri de değişmektedir.
Call by value ve call by reference örnekleri sqr(x) int x; x=x*x; return x; Bu örnek call by value örneğidir. Değişiklikler fonksiyon içinde yapılır. swap (x,y) int *x, *y; int temp=*x; *x=*y; *y=temp; bu bir call by reference örneğidir. Ana program içerisinden çağırırken; main() int x=10,y=20; swap(&x,&y);
Komut satırı argümanları (argc, argv) Bazı durumlarda main fonksiyonuna da parametre geçirmek gerekebilir. O zaman argc ve argv argümanlarını kullanırız. Örneğin MSDOS ortamında; Program Tom yazınca Merhaba Tom gibi bir mesajın ekrana çıkması için programda bu argümanlar olmalıdır. DOS taki harici komutlar buna benzer bir yöntemle üretilmişlerdir.
argc, argv argümanları örnek main (argc, argv) int argc; char *argv[]; if (argc!=2) printf( isim yazmayı unuttunuz ); exit(0); printf( Merhaba %s,argv[1]);
Örnek Şimdide bir örnek üzerinde öğrendiklerimizi test edelim. Örneğimiz şunları içermektedir; Veri giriş Veri listeleme Max bulma Min bulma Ortalama bulma
1 #include<stdio.h> #include<conio.h> int indis, not[5]; void verigir(int[], int); void verigoster(int[], int); void cizik(); int max(int[],int); int min(int[],int); float ort(int[],int);
2 void main() verigir(not, 5); cizik(); verigoster(not, 5); cizik(); printf("max Sayi \t:%d",max(not,5)); cizik(); printf("min Sayi \t:%d",min(not,5)); cizik(); printf("ortalama \t:%f",ort(not,5)); getch();
3 void verigir(sayi_dizi, boyut) int *sayi_dizi; for (indis=0;indis<boyut;indis++) printf("not giriniz\t:");scanf("%d",&sayi_dizi[indis]);
4 void verigoster(sayi_dizi, boyut) int *sayi_dizi; for (indis=0;indis<boyut;indis++) printf("\n%d. Not \t:%d", indis+1,sayi_dizi[indis]);
5 void cizik() printf("\n-------------------\n");
6 int max(sayi_dizi, boyut) int *sayi_dizi; int maxi=0; for (indis=0;indis<boyut;indis++) if (sayi_dizi[indis]>maxi) maxi=sayi_dizi[indis]; return maxi;
7 int min(sayi_dizi, boyut) int *sayi_dizi; int mini=101; for (indis=0;indis<boyut;indis++) if (sayi_dizi[indis]<mini) mini=sayi_dizi[indis]; return mini;
8 float ort(sayi_dizi, boyut) int *sayi_dizi; int toplam=0; for (indis=0;indis<boyut;indis++) toplam=toplam+sayi_dizi[indis]; return float (toplam/boyut);