Bilgisayar Ve Programlamaya Giriş Dersi 7. Ünite Sorularla Öğrenelim
Diziler, Göstericiler Ve Dizgiler
- Özet
- Sorularla Öğrenelim
C programlamada dizileri tanımlayınız?
C programlamada diziler, aynı tipte olan birbirleri ile ilişkili verilerin veya değişkenlerin belli bir indis sırasına göre tek bir değişken adı altında bir arada tutulmasını sağlayan yapılardır.
Dizi tanımlamanın genel ifadesi nasıl olmalıdır? Açıklayınız
Dizi tanımlanırken genel ifade, tip dizi_adı[ BOYUT] ; şeklindedir. tip ifadesi int, char, float, double vb. değişken türlerinden herhangi birisi olabilir. Köşeli parantez [ ] ifadesi içerisinde belirtilen, BOYUT ise dizi içerisinde saklanacak, işlem yapılacak olan toplam veri sayısı olup, tanımlanan dizinin genel kapasitesini-boyutunu ifade eder.
Dizilerde dikkat edilmesi gereken önemli nokta nedir?
Dizilerde dikkat edilmesi gereken önemli bir nokta, BOYUT kadar elemana sahip bir dizinin ilk elemanının indisi 0 (sıfır) ile başlamasından dolayı, dizinin son elemanının indis değeri sayısal olarak BOYUT-1 olmaktadır.
Yalnızca isim ve kapasite olarak tanımlanan dizilere nasıl değer atanır?
Dizinin kapasitesine göre içindeki verilerin sıfırlanması veya atanacak değeri belirlemek amacıyla ilave olarak kodlamaya gereksinim duyulmaktadır. Daha sonraki satırlarda hataya sebep olmaması açısından, genellikle, dizi tanımlanmasının hemen ardından değer sıfırlama ya da yeni değer atama işlemini mutlaka yapmak gerekir.
Program kodlarında ilgili satır açıklaması nasıl yapılmaktadır?
Program kodlarındaki satırların bitiminden sonra /* ve */ işaretleri arasında yer alan metinler derleyici tarafından program satırı olarak dikkate alınmaz ve derlenmez. Bu işaretler arasına yazılan metinler ilgili satırı açıklamak amacıyla yazılmıştır.
5 elemana sahip k dizisinin ilk olarak int k[5]; şeklinde tanımlanmasından hemen sonra, değer atama öncesinde, sayısal olarak hangi değerlere sahip olduğu ile ilgili olarak bir kod yazınız?
Bu kodlama; for ( i = 0; i < 5; i++ ) /* k dizisinin elemanlarını ekrana yazan yineleme*/ { printf (“ k[%d] = %d\n “, i, k[i ] ); } şeklindedir.
Yukarıdaki kodun devamında k dizisinin elemanlarının her biri sıra ile sıfırlayıp, yalnızca değer ataması yapılmak istenip ekrana yazdırma istenmediğinde nasıl bir kod yazılmalıdır?
Bu durumda; for ( i = 0; i < 5; i++ ) /*0 dan 4’ e kadar toplam 5 adet yineleme indisi*/ { k[ i ] = 0; } /* Sıfırlama*/ şeklinde bir kodlama yazılmalıdır.
Yukarıdaki kodun devamında sıfırlama işlemi sonrasında k dizisinin içeriği tekrar ekrana yazdırmak için hangi kodlama yazılmalıdır?
Bu durumda; for ( i = 0; i < 5; i++ ) /*k dizisinin elemanlarını ekrana yazar*/ { printf(“k[%d] = %d\n”, i, k[i]); } şeklinde bir kodlama yazılır.
Dizilerin boyut bilgilerinde kullanılabilecek ve programlamada büyük esneklik sağlayan ifade nedir?
Bu ifade # define ifadesidir. Main fonksiyonundan önce önişlemci tanımları bölümünde kullanılan bu yapı önişlemci komutudur.
#define BOYUT 5 ifadesini tanımlayınız?
#define BOYUT 5 ifadesi, sembolik sabit olan BOYUT’un değerinin 5 olduğunu belirtir. Önişlemci tarafından, kodun derleme işleminden önce dikkate alınarak BOYUT yazan her yere 5 ifadesini yerleştiren bir tanımdır.
Kod ilk yazıldığında ve çalıştırıldığında, içinde tanımlanan dizinin 100 elemana sahip olması yeterli iken, daha sonraki kod güncellemelerinde dizi elemanının kapasitesinin 1000’e çıkarılması gerekirse ne yapmak gerekmektedir?
Bu durumda dizi boyutunun kullanıldığı her yerde 100 sayısının 1000 sayısı ile ayrı ayrı değiştirilmesi gerekecektir. Bu değişikliğin yerine # define BOYUT 1000 ifadesi ile bu işlem çok daha pratik bir şekilde, tek bir satırdaki değişiklikle gerçekleştirilebilinir.
for ( i = 1; i <= BOYUT; i++ ) /*0 dan 4’ e kadar toplam 5 adet indis*/{ printf (“ k[%d] değerini giriniz:”,(i-1) ); scanf (“ %d “,&k[i-1] ); } Yukarıdaki kodu açıklayınız?
Kod bölümü ile sırasıyla k dizisinin her bir elemanına klavyeden giriş sağlandığı görülmektedir. scanf (“%d”, &k[i-1] ); ifadesi klavyeden giriş yapılmasını sağlamaktadır. define işlemcisi ile BOYUT 5 olarak belirlendiği için, toplam 5 adet değer girişi için for yinelemesi ile değer atanmaktadır.
for ( i = 1; i <= BOYUT; i++ ) /* 0 dan 4’ e kadar toplam 5 adet indis*/{ printf( “k[%d] = %d\n”, (i-1), k[i1] ); } Yukarıdaki kodu açıklayınız?
Bu kod bölümü dizi elemanlarını ekrana yazdırmak için kullanılır.
Dizi elemanlarına değer atanmasında kullanılan bir diğer yöntem nedir? Örnek vererek açıklayınız.
Dizi elemanlarına değer atanmasında kullanılan bir diğer yöntem ise, ilk olarak dizi tanımlaması yapılırken, süslü parantezlerin {, } kullanılmasıdır. Örneğin arasınav1 adında 5 tane değere sahip bir dizinin eleman değerleri önceden biliniyorsa, doğrudan atanmak istendiğinde, int arasinav1[5]={50, 80, 60, 90, 70}; şeklinde belirtilebilir.
Doğrudan atama işlemli dizi tanımlaması yapılırken, {,} arasına dizinin eleman sayısından daha az değişken değeri yazılması durumunda ne olur?
Bu durumda eksik bırakılan değerler en sondaki değerler kabul edilerek bu değerlere doğrudan 0 degeri atanır.
int ort[5]={ 0 }; şeklindeki tanımlamada dizi elemanları hangi değeri alırlar?
Bu durumda tüm elemanlar 0 değerini alır. Bu tanımlamada, ilk değer ort[0]. eleman otomatik olarak 0 değerini alır, sonraki elemanlar yukarıdaki arasinav2 dizisinde olduğu gibi eksik tanımlandığı için doğrudan sıfırlanır. Diğer bir ifade ile, diziye en az bir değer atanması ile birlikte geri kalan diğer değerler de otomatik olarak sıfırlanmaktadır.
int final [ ]={40, 70, 50, 30, 80}; tanımlamasını açıklayınız?
Bu tanımlamada {} parantezler içerisinde 5 adet sayı tanımlanmış olup, [ ] köşeli parantez içerisine dizinin kapasitesi ile ilgili bir değer yazılmamış olmasına rağmen { } parantezleri içerisinde 5 değer olduğu için final dizisinin boyutu derleyici tarafından 5 olarak algılanır.
Aynı anda, aynı türden birden fazla dizi tanımlaması durumunda nasıl bir yol izlenir?
Bu durumla ilgili olarak, çoklu değişken tanımlamada da geçerli olan kurallar diziler için de geçerli olup her yeni dizi birbirinden virgül işareti “,” ile ayrılarak tanımlanmaktadır.
İki boyutlu dizilerin tek boyutlu dizilerden farkı nedir?
İki boyutlu diziler, tek boyutlu dizilerden farklı olarak birden fazla satır ve sütunlardan oluşan tablolardır.
Aynı kapasite-eleman sayısına sahip, tek boyutlu ve iki boyutlu dizileri kapasite açısından karşılaştırınız?
Aynı kapasite-eleman sayısına sahip, tek boyutlu ve iki boyutlu diziler kapasite açısından karşılaştırılırsa, tek boyutlu bir dizinin elemanlarının dizilimi 1xmxn şeklinde iken, iki boyutlu dizinin elemanlarının dizilimi ise mxn şeklindedir.
Tek boyutlu ve iki boyutlu dizilerde indis değeri nasıl değişmektedir?
Tek boyutlu dizilerde indis değerleri tek bir yönde birer birer artarken, iki boyutlu dizilerde iki yönde de indis değerleri değişmektedir. Böylece, iki boyutlu bir dizideki bir elemanın içeriğine erişmek için hangi satır ve sütun değerine sahip ise, iki boyutlu bir düzlemdeki bir koordinat şeklinde; dikeyde y, yatayda x bir değişken gibi kabul edilir ise, b[y][x] şeklinde, x ve y indis değerleri ile ulaşılır.
İki boyutlu dizilerde ilk ve son indis değeri nedir?
Dizinin satır ve sütun için ilk indis değeri tek boyutlu dizilerde olduğu gibi yine 0’dan başlamaktadır. m satır, n sütun sayısı olmak üzere, mxn’lik bir dizinin m*n adet farklı değere sahip eleman sayısı mevcuttur. Her
satırda, sonuncu eleman b[y][n-1]., her sütunda sonuncu eleman b[m-1][x]. elemandır.
İki boyutlu dizinin elemanlarına erişimde b[y][x] yerine yanlışlıkla b[y, x] şeklindeki kullanım program tarafından nasıl algılanır?
Bu kullanım hatalı bir kullanımdır. C Programlamada derleyici tarafından b[y, x] ifadesi b[x] olarak algılanır.
İki boyutlu dizilerin satır elemanları nasıl belirlenir?
Süslü parantez {, } yapıları kullanılarak, tek boyutlu dizilerde olduğu gibi iki boyutlu dizilerde de dizinin ilk tanımlanması aşamasında ilk değer atanabilmektedir. En dışarıda {} lerin içinde alt {} ler yardımıyla iki boyutlu dizinin satır elemanları belirlenebilir.
float matematik [5][4] = { {40, 60, 60}, {50, 80, 85}, {70, 50, 80, 0}, {90, 70, 70, 0}, {80, 50, 90} }; Şeklinde tanımlanan matematik dizisinin elemanları nelerdir
Bu dizinin elemanları, ilk alt parantezdeki değerler {40, 60, 60}, 0. satıra, ikinci alt parantezdeki değerler {50, 80, 85}, 1. satıra, üçüncü alt parantezdeki değerler {70, 50, 80, 0}, 2. satıra, dördüncü alt parantezdeki değerler {90, 70, 70, 0}, 3.satıra, beşinci alt parantezdeki değerler {80, 50, 90}, 4. Satıra ait değerlerdir.
j=0;for ( i = 0; i < OGR; i++ ) { matematik[i][j+3] = (matematik[i][j] + matematik[i][j+1] + matematik[i][j+2]) /3;} Yukarıdaki kodu açıklayınız?
Kod bölümü ile matematik dizisinin 3 indis nolu, öncesinde değer içermeyen son sütunundaki elemanlar, 3 sınavın ortalaması alınarak hesaplanmakta ve ilgili elemana atanmaktadırlar.
for ( i = 0; i< OGR; i++ ) /*matematik dizisinin elemanlarını ekrana yazar*/{ for( j=0; j<4; j++) { printf(“ %8.2f ”, matematik[i][j]); }printf(“\n”); } Yukarıdaki kodu açıklayınız?
Kod bölümü ile iç içe kullanılan for yinelemeleri ile dizinin içerdiği elemanlar satır ve sütunlar üzerinde ilerleyerek ekrana yazdırılmaktadır. Bu yineleme sayesinde sırasıyla,
matematik[0][0], matematik[0][1], matematik[0][2], matematik[0][3], matematik[1][0], matematik[1][1],
matematik[1][2], matematik[1][3], matematik[2][0], matematik[2][1], matematik[2][2], matematik[2][3],
matematik[2][0], matematik[2][1], matematik[2][2],matematik[2][3], matematik[4][0], matematik[4][1],
matematik[4][2], matematik[4][3], elemanlarına ulaşılmaktadır.
İçerde yer alan j sayaç değerini kullanan for yinelemesi her sütundaki elemanları üzerinde hareket ederken, en dışarda yer alan i indisli for yinelemesi ise dizinin satırlarını üzerinde hareket etmektedir.
Göstericileri tanımlayınız?
C Programlamada tanımlanan değişkenler, tiplerine göre bellekte değişik byte uzunluklarında alanlar kaplamaktadırlar. Normal değişkenler içeriklerinde programlarda kullanılacak değişkenlerin sayısal değerini içerirken, göstericiler bağlantıda olduğu değişkenlerin adreslerini içerirler. Böylece dolaylı olarak değişkenlere ulaşmayı sağlarlar. Göstericiler, programda fonksiyonlar arasında aynı anda birden fazla değişken aktarımı gibi işlemlerde oldukça büyük kolaylık sağlayan yapılardır.
Göstericiler kodlamada nasıl tanımlanırlar?
Gösterici bildiriminde, normal değişken bildiriminden farklı olarak, gösterici adı önünde ‘*’ karakteri kullanılmaktadır. tip * değişken_adı; şeklinde tanımlanmaktadır. tip değişkenler için de kullanılan int, float, char vb. türlerinden herhangi birisi olabilir.
Gösterici tanımlanmasında dikkat edilmesi gereken husus nedir?
Dikkat edilmesi gereken nokta, gösterici ile göstericiye bellek adresi atanacak değişkenin veri tipi aynı olmalıdır.
Aşağıda yer alan int k; int *Gk; Gk = &k; Satırlarını tanımlayınız?
Bu satırlar ile k adında tam sayı türünde bir değişken tanımlanmış olup, bu k değişkeninin adresi Gk göstericisine atanmıştır. k normal bir değişken iken, Gk gösterici olarak tanımlanmıştır.
#include #include /*getch fonksiyonunu kullanabilmek icin*/
int main()
{int k,*Gk;
k=25;
Gk=&k;
printf(“k degiskeninin adresi :%p”,&k);
printf(“\nGk_gosterici nin icerdigi adres :%p”,Gk);
printf(“\nGk_gosterici nin adresi :%d”,Gk);
printf(“\nk degisken degeri:%d”, k);
printf(“\nGk_gosterici nin degeri:%d”, *Gk);
getch(); /*Ekran ciktisini ekranda bekletebilmek icin*/
return 0; }
Yukarıdaki kodlamanın program çıktısı nedir?
Bu kodlamanın program çıktısı k değişkeninin adresi :0028FF44 Gk nin içerdiği adres :0028FF44 Gk nin adresi :2686788 k değişken değeri :25 Gk değeri :25. Şeklindedir.
Göstericilerin dizilerle birlikte kullanılmasını açıklayınız?
Göstericiler değişkenlerin başlangıç adresini belirtmeleri dolayısı ile dizilerle benzer özellikleri içermektedirler. Dizilerin ilk elemanlarını göstericilerle belirterek, diziler-göstericiler birbirlerinin yerine kullanılabilirler.
Göstericilerin kullanıldığı diğer bir işlem türü nedir?
Göstericiler bellekteki adres değerleri ile işlem yapabilme kabiliyetlerinden dolayı aritmetik işlemlerde de adresler arası işlemleri kullanırlar. Göstericilerin aritmetik işlemlerinde +, - ++, -- işlemcileri kullanılabilir.
Göstericilerin işlemlerdeki arttırma ve eksiltme işlemleri nasıldır?
İşlemlerdeki arttırma ve eksiltme işlemleri sayısal olarak olmayıp, göstericinin bir arttırılması bir sonraki bellek adresine öteleme olarak sağlanır.
Göstericilerin arttırma eksiltme ile öteleme yapmasının önemi nedir?
Elbette ki bu öteleme esnasında veri türü de bellekte kapladığı büyüklüğünden dolayı önemlidir. Çünkü arttırma ve eksiltme işlemleri değişkenin hafızada kapladığı int, float, char vb. kadar arttırılıp eksiltilecektir.
Dizilerin veya göstericilerin hafızada kapsadığı alanların analizi hangi fonksiyon ile gösterilir?
Dizilerin veya göstericilerin hafızada kapsadığı alanların analizi için sizeof() fonksiyonu kullanılabilir.
Göstericilerle aritmetik işlem nasıl yapılır? Örnek vererek açıklayınız?
Göstericilerle aritmetik işlem yapılabilmesi için hafızada ileri-geri hareket edilmesi gerekir. Örnek vermek gerekirse; her bir elemanı 4 byte uzunluğunda olan tam sayı türünde dizi_t[5]’in başlangıç adresi 1000 ise, bu dizinin başlangıç adresini gösteren gösterci G_t =dizi_t; tanımlandığında G_t 1000 adresini gösterirken, G_t++ ; şeklinde aritmetik olarak arttırıldığında 1004 adresini gösterecektir.
Dizgileri tanımlayınız?
C programlama dilinde, dizgiler için tanımlanmış bir veri tipi bulunmamaktadır. Dizgiler karakterlerden oluşan diziler veya göstericiler olarak tanımlanabilir. Bu nedenle, dizgi tanımlarında tek boyutlu diziler tanımlanmaktadır.
Dizgilerin normal dizilerden farkı nedir?
Normal dizilerden farklı olarak son elemanı NULL(0) (‘\0’) değeri ile sonlandırılmaktadır. Bu özelliklerinden dolayı karakter dizilerini, dizginin içereceği karakter sayısından bir karakter fazla kapasiteli olacak şekilde tanımlamak gerekmektedir.
char d[10];şeklindeki bir dizgiyi açıklayınız?
Şeklindeki bir dizgi tanımlamasında, dizginin d[9] indis nolu elemanı NULL değere sahiptir. Bu durumda d dizgisine 9 karakterli bir kelime yazılabilir. d dizgisi içerisindeki karakterler hafızada okunurken NULL’ a kadar okunur, NULL bir sınır değeri oluşturur.
char ad[] = “neslihan”;dizgisini açıklayınız?
Bu tanımlamada 8 adet karakter içerilmektedir. Dizi boyutu verilmemiştir. Bu nedenle NULL karakteri de dahil olmak üzere toplamda 9 karakter kapasitesine sahip bir karakter dizisi yani dizgi tanımlanmıştır. Sırasıyla ‘n’, ‘e’, ‘s’, ‘l’, ‘i’, ‘h’, ‘a’, ‘n’, ‘\0’ karakterlerini içeren ad dizgisinin ilk elemanı olan ad [0] ‘n’, 7 indis nolu ad[7] elemanı ise yine ‘n’ harfini içermektedir. ad[8] nolu elemanı ise kelime sonu anlamına gelen ‘ \0 ’ NULL karakterini içerir.
char ad[] = “neslihan” dizgisini farklı olarak nasıl yazabilirsiniz?
Bu dizgiyi char ad [ ]={‘n’, ‘e’, ‘s’, ‘l’, ‘i’, ‘h’, ‘a’, ‘n’, ‘\0’}; şeklinde de tanımlanabilmektedir. Ancak bu tanımlama şeklinde en sonda yer alan ‘\0’ karakteri eklenmeye unutulmamalıdır.
Kodlamada dizgilerin içerisine metin nasıl yazılır?
Dizgilerin içeriği kelime hâlinde yazılacak ise, “metin” şeklinde yazılırken, süslü parantez { } gösterimi ile ise, karakter karakter ifade edilir ve her karakter ‘k’ şeklinde ‘ ’ işaretleri arasına alınmaktadır.
Dizgilerde gets() fonksiyonunun görevi nedir?
gets fonksiyonu giriş değeri olarak karakter dizisinin adını kullanır ve ENTER tuşuna basıp sonlandırılmadığı sürece klavyeden girilen karakterlerin ilgili diziye atamalarını yapar.
printf fonksiyonu kullanılarak karakter kümesi yazdırılacak ise hangi belirteç kullanılmalıdır?
printf fonksiyonu kullanılarak karakter kümesi yazdırılacak ise %s belirteci kullanılmalıdır.
#include <stdio.h> #include <conio.h> /*getch fonksiyonunu kullanabilmek
icin*/ int main(void) { char ad[10], i=0; printf(“Bir isim giriniz:”); gets(ad); /*klavyeden karakter girisi saglar*/ printf(“Girdiginiz isim: %s\n”,ad); printf(girdiginiz ismin harfleri: \n”); while(ad [ i ] != ‘\0’) /*ad dizgisinin içerigi ‘\0’, NULL olmadigi surece*/ /*yineleme devam eder*/ {printf(“%c\n”,ad[i]); i++; } getch(); /*Ekranda goruntuleme icin*/ return 0; } Yukarıdaki kodlamanın program çıktısı nasıl olur?
Bu kodlamanın program çıktısı, Bir isim giriniz: neslihan Girdiginiz isim: neslihan Girdiginiz ismin harfleri: n e s l i h a n şeklinde olur.
printf fonksiyonu kullanılarak yalnızca karakter yazdırılacak ise hangi belirteç kullanılmalıdır?
printf fonksiyonu kullanılarak karakter kümesi yazdırılacak ise %c belirteci kullanılmalıdır.
Diziler nedir?
C Programlamada diziler, aynı tipte olan birbirleri ile ilişkili verilerin veya değişkenlerin bellli bir indis sırasına göre tek bir değişken adı altında bir arada tutulmasını sağlayan yapılardır. Kodlama ihtiyacına göre, program kodunun çalıştırılmasından itibaren işlem yapılacak veri listesinin belli bir sıraya göre düzenli bir şekilde hafızada tutulmasını ve erişilmesini sağlarlar.
int k[5] şeklinde bir dizi tanımlanması neden daha kullanışlı bir çözüm sunar?
Veri değişken türlerini tanımlarken, tam sayı tipinde dört farklı değişkene ihtiyaç olduğunda, “int k1, k2, k3, k4,k5 ;” şeklinde tanımlama yapılabiliyordu. Ancak bu değişkenlerin hepsi aynı türde ve özellikle de bu değişkenler sırasıyla belli bir algoritmaya göre hesaplamaya tabi tutulacak ise, int k[5] ; şeklinde bir dizi tanımlanması daha kullanışlı bir çözüm sunmaktadır. Çünkü program kodlarımızda, ne kadar çok değişken olursa, kod blokları içerisinde kontrol edilmesi de bir o kadar zor olacaktır. Bu örnekte yalnızca 5 farklı değişken için bir dizi oluşturulmuş olmasına rağmen, değişken sayısının çok fazla olup. (örneğin 1000), elle tek tek tanımlanması imkânsız olan durumlarda dizilerin kullanımının önemi ortaya çıkmaktadır. Böylece yinelemeler ve daha sonraki bölümde anlatılacak olan fonksiyonlarla birlikte daha kolay ve düzenli bir veri kullanımına olanak sağladığı görülecektir.
Dizi tanımlanırken genel ifade nasıl yazılır?
Dizi tanımlanırken genel ifade, tip dizi_adı[ BOYUT] ; şeklindedir. tip ifadesi int, char, float, double vb. değişken türlerinden herhangi birisi olabilir. Köşeli parantez [ ] ifadesi içerisinde belirtilen, BOYUT ise dizi içerisinde saklanacak, işlem yapılacak olan toplam veri sayısı olup, tanımlanan dizinin genel kapasitesini-boyutunu ifade eder. Buna göre, int k[5] ifadesi, tam sayı türünde 5 elemanlı k adında bir dizi tanımlar.
Bir dizinin ilk elemanın indisi hangi sayı ile başlar?
Dizilerde dikkat edilmesi gereken önemli bir nokta, BOYUT kadar elemana sahip bir dizinin ilk elemanının indisi 0 (sıfır) ile başlamasından dolayı, dizinin son elemanının indis değeri sayısal olarak BOYUT-1 olmaktadır. int k[5]; örneğimizde, ilk eleman k[0] olmakla birlikte, elemanlar k[1], k[2], k[3] şeklinde devam ederek sonuncu, yani dördüncü eleman ise k[4] nolu dizi elemanı olacaktır.
C program kodlarındaki satırların bitiminden sonra kullanılan /* ve */ işaretlerinin görevi nedir?
Program kodlarındaki satırların bitiminden sonra /* ve */ işaretleri arasında yer alan metinler derleyici tarafından program satırı olarak dikkate alınmaz ve derlenmez. Bu işaretler arasına yazılan metinler ilgili satırı açıklamak amacıyla yazılmıştır.
C programlama dilinde printf komutu ne ifade eder?
printf komutu yardımıyla da her elemanın ekrana yazdırma işlemi gerçekleştirilmektedir.
#include <stdio.h>
#include <conio.h> /*getch fonksiyonunu kullanabilmek icin*/ /*tanimlanmistir.*/
int main( void)
{
int k[5]; /*k adinda dizi tanimlamasi*/ int i; /* sayaç-indis degeri*/
printf(“Ilk tanimlama sonrasi k dizisi elemanlari:\n”); /*Aciklama*/
for ( i = 0; i < 5; i++ ) /* k dizisinin elemanlarini ekrana yazan yineleme*/
{ printf(“k[%d] = %d\n”, i , k[i]); }
for ( i = 0; i < 5; i++ )/*0 dan 4’ e kadar toplam 5 adet yineleme indisi*/
{ k[i] = 0; } /*Sifirlama*/
printf(“Sifirlama sonrasi k dizisi elemanlari:\n”); /*Aciklama*/
for ( i = 0; i < 5; i++ )/*k dizisinin elemanlarini ekrana yazar*/ { printf(“k[%d] = %d\n”, i , k[i]); }
getch(); /*Program ciktisini ekranda bekletebilmek icin*/
return 0; }
Yukarıdaki kod bloğuna göre program çıktısı nasıl olacaktır?
Program Çıktısı
Tanimlama Sonrasi k dizisi elemanlari: k[0] = 0
k[1] = 0
k[2] = 2686832
k[3] = 328
k[4] = 320
Sifirlama Sonrasi k dizisi elemanları: k[0] = 0
k[1] = 0
k[2] = 0
k[3] = 0
k[4] = 0
Dizilerde # define ifadesinin işlevi nedir?
Dizilerin boyut bilgilerinde kullanılabilecek ve programlamada büyük esneklik sağlayan yapılardan biri de # define ifadesidir. Main fonksiyonundan önce önişlemci tanımları bölümünde kullanılan bu yapı önişlemci komutudur.
#define BOYUT 5 ifadesi, sembolik sabit olan BOYUT’un değerinin 5 olduğunu belirtir. Önişlemci tarafından, kodun derleme işleminden önce dikkate alınarak BOYUT yazan her yere 5 ifadesini yerleştiren bir tanımdır.
#include <stdio.h>
#include <conio.h> /*getch fonksiyonunu kullanabilmek icin*/ #define BOYUT 5
int main(void)
{
int k [BOYU T ]; /* k adinda dizi tanimlamasi*/
int i; /*sayac-indis degeri*/
printf(“k dizisi elemanlarina %d adet deger atayiniz\n”, BOYUT );
for ( i = 1; i <= BOYUT ; i++ ) /*0 dan 4’ e kadar toplam 5 adet indis*/
{ printf(“ k[%d] degerini giriniz:”,(i-1) );
scanf (“ %d “, &k[i-1] );
}
printf(“\n k dizisine klavyeden girdiginiz %d adet sayi degerleri
:\n”, BOYU T );
for ( i = 1; i <= BOYU T ; i++ ) /* 0 dan 4’ e kadar toplam 5 adet indis*/
{ printf(“ k[%d] = %d \n”, (i-1) , k[i-1] ); }
getch(); /*Program ciktisini ekranda bekletebilmek için*/
return 0; }
yukarıdaki kod bloğunun program çıktısı nasıl olacaktır?
Program Çıktısı
k dizisi elemanlarina 5 adet deger atayiniz k[0] degerini giriniz: 10
k[1] degerini giriniz: 20
k[2] degerini giriniz: 30
k[3] degerini giriniz: 40
k[4] degerini giriniz: 50
k dizisine klavyeden girdiginiz 5 adet sayi degerleri : k[0] : 10
k[1] : 20
k[2] : 30
k[3] : 40
k[4] : 50
Aynı anda, aynı türden birden fazla dizi tanımlaması ne demektir?
Dizi tanımlamalarında üzerinde durulması gerekli bir diğer önemli durum ise, aynı anda, aynı türden birden fazla dizi tanımlamasıdır. Bu durumla ilgili olarak, çoklu değiş- ken tanımlamada da geçerli olan kurallar diziler için de geçerli olup her yeni dizi birbirinden virgül işareti “,” ile ayrılarak tanımlanmaktadır.
Örnek olarak, “int k[5], not[50]; ” şeklindeki tanımlamada tam sayı türünden, birbirinden bağımsız içeriklere sahip, 5 elemanlı k ve 50 elemanlı not dizileri aynı satırda tanımlanabilmektedir.
int arasinav2[5]={60,70,80}; şeklindeki bir tanımlamada a[3]. ve a[4]. elemanlar hangi değeri alır?
Doğrudan atama işlemli dizi tanımlaması yapılırken, {, } arasına dizinin eleman sayısından daha az değişken değeri yazılması durumunda eksik bırakılan değerler en sondaki değerler kabul edilerek bu değerlere doğrudan 0 değeri atanır. Buna göre int arasinav2[5]={60,70,80}; şeklindeki bir tanımlamada a[3]. ve a[4]. elemanlar 0 kabul edilir.
int final [ ]={40, 70, 50, 30, 80}; tanımlamasında final dizisinin boyutu derleyici tarafından kaç olarak algılanır?
int final [ ]={40, 70, 50, 30, 80}; tanımlamasında {} parantezler içerisinde 5 adet sayı tanımlanmış olup, [ ] köşeli parantez içerisine dizinin kapasitesi ile ilgili bir değer yazılmamış olmasına rağmen { } parantezleri içerisinde 5 değer olduğu için final dizisinin boyutu derleyici tarafından 5 olarak algılanır.
İki boyutlu diziler ile tek boyutlu diziler arasında kapasite açısından ne gibi farklılıklar bulunur?
İki boyutlu diziler, tek boyutlu dizilerden farklı olarak birden fazla satır ve sütunlardan oluşan tablolardır. Aynı kapasite-eleman sayısına sahip, tek boyutlu ve iki boyutlu diziler kapasite açısından karşılaştırılırsa, tek boyutlu bir dizinin elemanlarının dizilimi 1xmxn şeklinde iken, iki boyutlu dizinin elemanlarının dizilimi ise mxn şeklindedir.
İndis değerleri bakımından İki boyutlu diziler ile tek boyutlu diziler arasında ne gibi farklılıklar bulunur?
Tek boyutlu dizilerde indis değerleri tek bir yönde birer birer artarken, iki boyutlu dizilerde iki yönde de indis değerleri değişmektedir. Böylece, iki boyutlu bir dizideki bir elemanın içeriğine erişmek için hangi satır ve sütun değerine sahip ise, iki boyutlu bir düzlemdeki bir koordinat şeklinde; dikeyde y, yatayda x bir değişken gibi kabul edilir ise, b[y][x] şeklinde, x ve y indis değerleri ile ulaşılır. Dizinin satır ve sütun için ilk indis değeri tek boyutlu dizilerde olduğu gibi yine 0’dan başlamaktadır. m satır, n sütun sayısı olmak üzere, mxn’lik bir dizinin m*n adet farklı değere sahip eleman sayısı mevcuttur. Her satırda, sonuncu eleman b[y][n-1]., her sütunda sonuncu eleman b[m-1][x]. elemandır.
İki boyutlu dizinin elemanlarına erişimde b[y][x] yerine b[y, x] şeklindeki kullanım mümkün müdür?
İki boyutlu dizinin elemanlarına erişimde b[y][x] yerine yanlışlıkla b[y, x] şeklindeki kullanım hatalı bir kullanımdır. C Programlamada derleyici tarafından b[y, x] ifadesi b[x] olarak algılanır.
C Programlamada Göstericiler neyi ifade eder?
C Programlamada tanımlanan değişkenler, tiplerine göre bellekte değişik byte uzunlukla- rında alanlar kaplamaktadırlar. Normal değişkenler içeriklerinde programlarda kullanılacak değişkenlerin sayısal değerini içerirken, göstericiler bağlantıda olduğu değişkenlerin adreslerini içerirler. Böylece dolaylı olarak değişkenlere ulaşmayı sağlarlar. Göstericiler, programda fonksiyonlar arasında aynı anda birden fazla değişken aktarımı gibi işlemlerde oldukça büyük kolaylık sağlayan yapılardır.
C programlamada göstericiler nasıl tanımlanır?
Göstericiler (ingilizce ifadesi: pointerlar) programlarda kullanımlarından önce tanımlanmaları gerekmektedir. Gösterici bildiriminde, normal değişken bildiriminden farklı olarak, gösterici adı önünde ‘*’ karakteri kullanılmaktadır.
tip * degisken_adı;
şeklinde tanımlanmaktadır. tip değişkenler için de kullanılan int, float, char vb. türlerinden herhangi birisi olabilir. Ancak dikkat edilmesi gereken nokta, gösterici ile göstericiye bellek adresi atanacak değişkenin veri tipi aynı olmalıdır.
sizeof() fonksiyonunun işlevi nedir?
Dizilerin veya göstericilerin hafızada kapsadığı alanların analizi için sizeof() fonksiyonu kullanılabilir. sizeof() fonksiyonu girdi olarak aldığı değişkenin hafızada byte olarak kapladığı alanı geri döndürecektir.
C programlama dilinde dizgiler neyi ifade eder?
C programlama dilinde, dizgiler için tanımlanmış bir veri tipi bulunmamaktadır. Dizgiler karakterlerden oluşan diziler veya göstericiler olarak tanımlanabilir. Bu nedenle, dizgi tanımlarında tek boyutlu diziler tanımlanmaktadır. Normal dizilerden farklı olarak son elemanı NULL(0) (‘\0’) değeri ile sonlandırılmaktadır. Bu özelliklerinden dolayı karakter dizilerini, dizginin içereceği karakter sayısından bir karakter fazla kapasiteli olacak şekilde tanımlamak gerekmektedir.
char ad[] = “neslihan” tanımlamasına göre dizi boyutu kaçtır?
char d[10];
şeklindeki bir dizgi tanımlamasında, dizginin d[9] indis nolu elemanı NULL değere sahiptir. Bu durumda d dizgisine 9 karakterli bir kelime yazılabilir. d dizgisi içerisindeki karakterler hafızada okunurken NULL’ a kadar okunur, NULL bir sınır değeri oluşturur.
char ad[] = “neslihan”;
tanımlamasında 8 adet karakter içerilmektedir. Dizi boyutu verilmemiştir. Bu nedenle NULL karakteri de dahil olmak üzere toplamda 9 karakter kapasitesine sahip bir karakter dizisi yani dizgi tanımlanmıştır. Sırasıyla ‘n’, ‘e’, ‘s’, ‘l’, ‘i’, ‘h’, ‘a’, ‘n’, ‘\0’ karakterlerini içeren ad dizgisinin ilk elemanı olan ad [0] ‘n’, 7 indis nolu ad[7] elemanı ise yine ‘n’ harfini içermektedir. ad[8] nolu elemanı ise kelime sonu anlamına gelen ‘ \0 ’ NULL karakterini içerir.