Diziler
Diziler
Dizi: aynı isim ve tipe sahip olmaları nedeniyle birbirleriyle ilişkili olan hafıza konumları grubudur.
Dizi Tanımlama
Diziler hafızada bir yer kaplar. Programlayan kişi elemanın tipini ve kaç eleman kullanacağını belirterek bilgisayarın uygun hafızayı ayırmasını sağlar.
float x[5];
yukarıda bir dizi bildirimi yapılmıştır. x float türünde bir 15 elemanlı dizidir. Köşeli parantez ([ ]] dizi tanımlaması için kullanılır.
Bir dizinin ilk eleman her zaman sıfırıncı elemandır, x[0], x dizisinin ilk elemanıdır.
Aşağıda elemanları tanımlanmış x dizisini inceleyelim.
x dizisinin ilk elemanı 2‘dir. Son elemanı 9‘dur.
x[0] + x[2] = 6 dır.
dizinin elemanları ekrana yazdırılmak istenirse
printf (” %d “, x[0]+x[2]);
ekrana 6 ifadesini yazacaktır.
int x[5]= {1,5,9,4,3};
Yukarıdaki dizi tanımlamasında dizinin elemanları önceden belirlenmiş şekildedir. Dizinin ilk elamanı x[0] = 1 dir. Diziye atanan eleman sayısı belirtilenden az ise kalan elemanlara sıfır atanacaktır.
int x [6] ={ 2,4,7,8}
Bu örnekte gösterileceği üzere x[5] ve x[6] değerleri sıfır olacaktır.
int x[ ]={1,2,3,4,5}
İfadesinde dizinin eleman sayısı belirtilmemiş elemanları belirtilmiştir, bu şekilde tanımlanan dizilerde dizi eleman sayısı tanımlanan eleman adedince olur.
Karakter Dizleri
char string1[]=“ikinci”;
Yukarıdaki tanımlamada string1 dizisine “birinci” stringi içindeki elemanlar bağımsız şekilde atanmaktadır. sting1[2] çağrıldığında aslında i çağrılmış olur., yani bir başka gösterim ile string1[5]=c karakteridir.
char st2[]={‘b’,’i’,’r’,’i’,’n’,’c’,’i’};
Bu iki string ifadesi de aynıdır st[2]=r dir. İki dizi string gösterimde birbirine denktir. denktir.
Kullanıcıdan Dizi Girdisi Alma
Elemanları belirli olan diziyi ekrana yazdırmayı göstermiştik. Elemanları kullanıcı tarafından girilen bir dizi belirleyelim, girdi işlemi scanf ile yapıldığına göre buna ek olarak çok elemanlı bir dizi girdireceğimiz zaman for döngüsünü kullanacağız.,
string girdisi:
char a2[20]; // bir karakter dizisidir. scanf(“%f”,a2); // klavyeden 20 elemanlı bir string alırız yani 20 karakter alırız.
Klavyeden okunan 20 karakter a2[20] karakter dizisine atanır. Burada & ifadesinin kullanılmadığına dikkat ediniz.
ekrana yazdırma işlemi:
printf(“%s”, a2); // ekrana a2 karakter dizisini yazdırır.
#include <stdio.h> int main( ) { char string1[ 20 ], string2[] = "Turk Muhendis"; int i; printf("Bir string girin: "); scanf( "%s", string1 ); printf( "string1: %s\nstring2: %s\n boslukla string1:\n", string1, string2 ); for ( i = 0; string1[ i ] != '\0'; i++ ) printf( "%c ", string1[ i ] ); printf( "\n" ); return 0; }
(string1 !=’\0′)
for yapsı içinde bulunan ifade sonlandırıcı null karakteri ile karşılaşmadığı sürece doğrudur.
Define
#define BOYUT 10
Bir sembolik sabittir. BOYUT değişkenin her geçtiği yere 10 değerini atayacaktır.
Const
Programlarınızda, fonksiyonun diziyi değiştirmemesi gereken bazı durumlar olabilir. Diziler referansa göre çağırma ile geçirildiğinden, bir dizideki değerlerin değiştirilmesini kontrol etmek güçtür. C, const tip belirteciyle bir fonksiyon içinde dizinin elemanlarının değerlerinin değiştirilmesini engeller.
void diziyiAyarlamayiDene ( const int [] );
#include <stdio.h> #define BOYUT 99 void orta( const int [ ] ); void diziyiYazdir ( const int [ ] ); int main( ) { int frekans[ 10 ] = { 0 }; int cevap [BOYUT] = { 6, 7, 8, 9, 8, 7, 8, 9, 8, 9, 7, 8, 9, 5, 9, 8, 7, 8, 7, 8, 6, 7, 8, 9, 3, 9, 8, 7, 8, 7, 7, 8, 9, 8, 9, 8, 9, 7, 8, 9, 6, 7, 8, 7, 8, 7, 9, 8, 9, 2, 7, 8, 9, 8, 9, 8, 9, 7, 5, 3, 5, 6, 7, 2, 5, 3, 9, 4, 6, 4, 7, 8, 9, 6, 8, 7, 8, 9, 7, 8, 7, 4, 4, 2, 5, 3, 8, 7, 5, 6, 4, 5, 6, 1, 6, 5, 7, 8, 7 }; orta ( cevap ); return 0; } void orta ( const int cevap [ ] ) { int j, toplam = 0; printf( "%s\n%s\n%s\n", "********", " orta ", "********" ); for ( j = 0; j <= BOYUT - 1; j++ ) toplam += cevap [ j ]; printf( "Orta veri nesnelerinin ortalama degeridir.\n" "Ortalama butun veri nesnelerinin\n" "toplaminin veri nesnelerinin sayisina( %d )\n" "bolumudur. \nBu veriler icin\n\n" "ortalama: %d / %d = %.4f\n\n", BOYUT, toplam, BOYUT, ( double ) toplam / BOYUT); } void diziyiYazdir( const int a[] ) { int j; for ( j = 0; j <= BOYUT - 1; j++ ) { if ( j % 20 == 0 ) printf( "\n" ); printf( "%2d", a[ j ] ); } }
Dizi Yazdırma
for (i=0; i<=9i i++) printf(“%3d%16d\n”, i, n[i]);
ifadesi ile dizi ekrana yazdırılmıştır.
#include <stdio.h> int main( ) { int n[10]={32, 27, 64, 18, 95, 14, 90, 70, 60, 37}; int i; printf ("%s %13s\n","Eleman","Deger"); /* Ekrana Dizi Yazdırma*/ for (i = 0; i <= 9; i++) printf ("%3d%16d\n",i,n[i]); return 0; }
#define BOYUT 10
Bir sembolik sabittir. BOYUT değişkenin her geçtiği yere 10 değerini atayacaktır.
#include <stdio.h> #define BOYUT 10 int main( ) { int n[ BOYUT ] = "19", "3", "15", "7", "11", "9", "13", "5", "17", "1" ; int i, j; printf( "%s%13s%11s\n", "Eleman", "Deger", "Grafik" ); for ( i = 0; i <= BOYUT - 1; i++ ) { printf( "%4d%13d \t", i, n[ i ]); for ( j = 1; j <= n[ i ]; j++ ) /* bir satır yaz */ printf( "%c", '*' ); printf( "\n" ); } return 0; }