C++ PROGRAMLAMA DİLİ
GİRİŞ
C, 1970’li yılların başlarında AT&T Bell laboratuarlarında geliştirilmiş bir programlama dilidir. Kendisinden önceki B dili üzerine kurulu olmasından dolayı bu isim verilmiştir. Kısa sürede özellikle üniversite ve askeri çalışmalarda büyük projelerde kullanılmaya başlandı. C’nin en büyük özelliği sistem programlarının geliştirilmesinde kullanılmasıdır. İşletim sistemlerinin hazırlanmasında makine dili olan Assembler tercih edilmiştir. En yaygın işletim sistemlerinden olan UNIX ise büyük bir oranda C dili kullanılarak hazırlanmıştır. Bu da C dilinin önemini oldukça arttırmıştır.
C programlama dili yapısal bir dildir. Yapısal programlama dilleri yapı ve temel komutlar bakımından birbirlerine benzerler. Tüm yapısal programlama dillerinde olduğu gibi, C’de yazılan programlar da bloklar halinde yazılırlar. Buna en büyük örnek Turbo Pascal’dır. Turbo Pascal ile C/C++ arasında çok benzerlikler bulunmaktadır. Turbo Pascal kullanıcıları için C’de program yazmak çok daha kolaydır.
ÖZEL SEMBOLLER VE C KELİMELERİ
- Bir C programı içerisinde, A’dan Z’ye büyük harfler , a’dan z’ye küçük harfler (Türkçe karakterler hariç) ve 0’dan 9’a kadar rakamlar kullanılır.
- Program içerisinde tek başına kullanılan özel karakterler.
. ! ~ + - & * / % ^ | =
|
=
|
Eşitliğin sağ tarafında verilen ifadeyi sol taraftaki değişkene aktarır.
|
|
&
|
Bit seviyesinde AND(VE) operatörü
|
|
|
|
Bit seviyesinde OR(VEYA) operatörü
|
|
^
|
Bit seviyesinde XOR operatörü
|
|
+
|
Toplama operatörü
|
|
-
|
Çıkarma operatörü
|
|
/
|
Bölme operatörü
|
|
%
|
Modüler bölme operatörü. Bölme işleminde kalanı verir.
|
|
~
|
Bit seviyesinde komplementini ( 0 bitini 1,1 bitini 0 yapar) alma
|
|
!
|
Mantıksal değil(NOT)
|
TANITICI İSİMLERİ
Program içerisinde kullanılan değişken, sabit, fonksiyon gibi isimleri için kullanılan ve programcı tarafından belirlenen özel isimlerdir. Özellikleri aşağıda verilmiştir.
- Harf veya _(alt çizgi karakteri) ile başlamalıdır.
- İlk karakterden sonra rakam ve altçizgi karakterleri kullanılabilir.
- İçerisinde Türkçe karakter, boşluk ve özel karakter bulunamaz.
- Bir C kelimesi olamaz.
- Küçük harf ve büyük harf ayırımı yapılmaktadır. X ile x değişkenleri aynı değildir. Aynı şekilde maas ve Maas değişkenleri de aynı değildir. Bu ifadelerin her biri faklı hafıza alanlarına karşılık gelir.
TEMEL VERİ TİPLERİ
C programlama dilinde kullanılan temel veri tipleri char, int, Float ve double’dır. Ancak bu veri tiplerinin önüne short , unsigned ve long kelimeleri kullanılarak değişik veri tipleri meydana getirilebilir.
C ve C++ derleyicilerinde kullanılan veri tipleri arasında bazı faklılıklar olmakla birlikte, kullanılan temel veri tipleri aşağıdaki tabloda verilmiştir.
|
Tip Adı
|
Uzunluk
|
Sınırlar
|
|
Alt Sınır
|
Üst sınır
|
|
Enum
|
16 bit
|
-32,768
|
32,767
|
|
Unsigned int
|
16 bit
|
0
|
65,535
|
|
Short int
|
16 bit
|
-32,768
|
32,767
|
|
Int
|
16 bit
|
-32,768
|
32,767
|
|
Unsigned long
|
32 bit
|
0
|
4,294,967,295
|
|
Long
|
32 bit
|
-2,147,483,648
|
2,147,483,647
|
|
Float
|
32 bit
|
3.4 x 10-38
|
3.4 x 10 +38
|
|
Double
|
64 bit
|
1.7 x 10 -308
|
1.7 x 10 +308
|
|
Long double
|
80 bit
|
3.4 x 10 -4932
|
1.1 x 10 +4932
|
|
Unsigned char
|
8 bits
|
0
|
255
|
|
char
|
8 bits
|
-128
|
127
|
int ……………….: Tamsayı tipte bilgiler için kullanılır. Sınırları kullanılan C Derleyicisine göre farklılık gösterebilir. Sıralı bir tiptir.
long ……………...: Tamsayı tipte bilgiler için kullanılır. Sıralı bir tiptir. Long int tipi ile aynıdır.
float………………: Ondalıklı sayılar için kullanılır. Tek inceliklidir.
double……………: Ondalıklı sayılar için kullanılır. Çift inceliklidir.
char………………: ASCII karakterleri ve çok küçük sayılar için kullanılır. (String bilgiler için dizi olarak kullanılır.)
unsigned…………: Unsigned belli veri tiplerinin işaretsiz değerler almasını sağlamak için kullanılır. Örneğin; unsigned int veri tipi 0-65,535 arasında değerler alır. Dikkat edilecek olunursa negatif kısım pozitif kısma eklenmiş. Unsigned char , int ve long türleri için uygulanabilir.
DEĞİŞKEN TANIMLAMA
Değişken, bilgileri tutmak için kullanılan ve programcı tarafından tanıtıcı isimleri özelliklerine göre verilen özel isimlerdir. Her değişken belirli bir veri tipine (int,long,char,…) sahip olmalıdır.
Değişkenleri tanımlamak için aşağıdaki yazılım şekli kullanılır:
Veri Tipi Değişken Adı1[, Değişken Adı2,…];
Örnek:
int sayı;
int x,y;
char c;
float maas;
double faktoryel,toplam,kup;
DEĞİŞKENLERE DEĞER ATAMA
Bir değişkene değer atamak için = operatörü kullanılır. Değişkene değer atama işlemleri tanımlama sırasında yapılabileceği gibi, programın uygun yerlerinde de yapılabilir. Tanımlama sırasında yapılan atama ‘İlk değer atama’ olarak kabul edilir.
Tanımlama sırasında değer atama işlemleri aşağıdaki gibi yapılabilir:
char cevap=’E’;
int sayi=100;
Aynı anda birden fazla değişkene değer ataması yapılabilir:
int i , j , k;
:
int i = j = k = 6354;
SABIT TANIMLAMA
Program başından sonuna kadar değeri değişmeyen isimlerdir. Değişkenlerin sahip oldukları değerler program içerisinde istenildiği gibi değiştirilebilir.Ancak sabitlerin değerleri program içerisinde değiştirilemez.
Sabit tanımlamak için const kelimesi kullanilir. Bunun yazilimi;
Const tipadi = deger;
Örnek:
const float pi=3.14285;
const char sifre[ ] = “Sakarya”;
const int elsay=20;
OPERATORLER
Bir veya daha fazla bilgi uzerinde ilsem yapilmasini ve sonucta yeni degerler uretilmesini saglayan programlama diline ozgu sembollere operator denir. Operatorler bir veya daha fazla karakterden olusabilir. C programlama dilinde kullanim amaclarina gore aritmetik, mantiksal , karsilastirma ve bit seviyesinde ilsem yapan oparetorler vardir.
Atama operatoru(=)
Bir degiskene, bir ifadeyi (ilsem,sabit veya degisken ) atamak icin kullanilir. = operatoru, sag taraftaki ifadeyi sol taraftaki degiskene aktarir.
m=63; è m degiskenin degeri 63 olur.
m=x+5; è m degiskenin degeri m+5 isleminin sonucu olur.
Aritmetik operatorler
Temel aritmetik islemelrin yapilmasini saglayan operatorlerdir.
Operator Tanimi Operator Tanimi
+ Toplama % Bölme işleminde kalan
- Çıkarma += Ekleyerek atama
* Çarpma -= Çıkararak atama
/ Bölme *= Çarparak atama
++ Bir arttırma /= Bölerek atama
-- Bir azatma %= Bölerek kalanını atama
Karsilastirma operatorleri
Karsıilastirma islemlerinin yapilmasini saglayan operatorlerdir.
Operator Tanimi
= = Eşit
! = Farkli
< Kucuk
> Buyuk
<= Kucuk esit
>= Buyuk esit
Mantiksal (lojik) operatorler
Mantiksal islemlerde sart sayisinin birden fazla olmasi durumunda bu sart ifadeleri arasina mantiksal operatorler kullanilarak tek sart durumuna getirilir ve sartin tumleyeneni alir.
&& : VE(AND) anlamindadir.
|| : VEYA(OR) anlamindadir.
! : DEGİL(NOT) anlamindadir. Sartin dogru olmasi durumunda yanlis, yanlis olmasi durumunda ise dogru sonuc uretir.
Bit seviyesinde ilsem yapan operatorler
Bir bitin degeri ya 0(sifir) yada 1’dir
& Operatoru : Bit seviyesinde AND(VE) islemi yapar.
| Operatoru : Bit seviyesinde OR(VEYA) islemi yapar.
^ Operatoru : Bit seviyesinde XOR islemi yapar.
~ Operatoru : Bit seviyesinde NOT(degil) islemi yapar.
<< Operatoru : Sola kaydirma (left shift) operatoru olarak kullanilir.
>> Operatoru : Saga kaydirma (right shift) operatoru olarak kullanilir.
GIRIS- CIKIS FONKSIYONLARI
printf
Belirtilen sabit, degisken veya islem sonuclarini standart cikis birimine gondermek amaciyla kullanilir.
Yazılımı:
int printf(const * format [, argı,umanlar,….] )
Örnek:
void main()
{
printf(“C programlama ogreniyorum\n”);
}
|
Kontrol
karakteri
|
İslevi
|
|
\n
\t
\r
\v
\b
\f
|
Imlecin bir sonraki satira gecmesini saglar (newline)
Imlecin ayni satir uzerinde bir sonraki tab noktasina gitmesini saglar.
Ayni satir uzerinde satir basina donmeyi saglar.
Imlecin uzerinde bulundugu satir degistirilmeden bir sonraki satira gecmesini saglar.
Imlecin bir karakter geri gelmesini saglar.
Bir sonraki sayfanin basina gidilmesini saglar.Sayfa atlama.
|
sprintf
Formatlanmış bilgiyi ekran yerine belirtilen string değişkene aktarır. Kullanım olarak printf fonksiyonu gibi işlem görür.
Yazılımı :
int sprintf(char *degisken1, const char *degisken2 [,argument,…] );
Örnek :
#include
#include
main()
{
char str[80];
int x=63;
sprintf(“str,”x değişkeninin değeri %d\n “, x”);
printf(“%s”, str);
getch();
}
puts
Belirtilen bilgiyi standart çıkış aygıtına gönderir. \n (yeni satır) karakterini ilave eder. İşlemin başarılı olması durumunda en son yazılan karakteri verir. Hata oluşması durumunda ise EOF değerini döndürür.
Yazılımı :
int puts ( cost char *degisken)
Örnek :
# include
# include
main ()
{
char str [80];
char num[] = “9905010231”;
int vize = 63, final = 55;
float ort;
ort = (vize+final) / 2.0;
sprintf ( str,“Öğrencinin Numarası:%s”,num);
puts (str);
sprintf ( str,”Vize notu : %d”, vize);
puts (str) ;
sprintf ( str,”Final notu : %d”, vize);
puts (str);
sprintf ( str,”Ortalama : %d”, vize);
puts (str);
getch();
}
scanf
Standart giriş aygıtından (klavye , ekran) bilgi okumak için kullanılır.Bu fonksiyon karakterleri tek tek okur ve herhangi birini veya herhangi bir kombinasyonunu verilen formata göre düzenleyerek belirtilen argümanlara aktarır.
Yazılımı :
int scanf (const char * degisken [, argüman1,…..] );
Örnek :
#include
#include
main ()
{
char ad [20] ;
printf (“Adınız :”); scanf (“%s”,ad);
printf ( “Merhaba %s Nasılsın \n”,ad) ;
getch();
}
Örnek :
#include
#include
main ()
{
int x,y,t;
printf (“İki sayı giriniz :”); scanf (“%d %d”, &x ,&y);
printf (“ 1. sayı : %d \n ”,x);
printf (“ 2. sayı : %d \n ”,y);
t= x+y ;
printf (“Toplam : %d \n” , t );
getch();
}
gets
Bu fonksiyon ile standart giriş biriminden \n (yeni satır ) karakteri girilinceye kadar karakter okumak için kullanılır.
Scanf fonksiyonu ile bilgi okuma işlemleri yapılabilir. Ancak scanf fonksiyonu ile bilgi okuma işlemi sadece bir kelime ile sınırlıdır. Örneğin , bir ad soyad, adres veya açıklama gibi bilgiler içerisinde mutlaka boşluk bulunmalıdır. Cgets fonksiyonu ise belirtilen sayıda karakter okumak mümkündür. Okuma işlemi yeni satır işaretine (\n) kadardır.
Yazılımı :
char *gets ( char *string)
Örnek :
#include
#include
main ()
{
char adsoy [30];
char adres [50];
printf( “Ad soyad :”); gets (adsoy);
printf(“Adres :”); gets (adres);
printf(“Girilen Ad soyad : %s \n”, adsoy);
printf(“Girilen Adres : %s \n”, adres);
getch();
}
cgets
Girilecek karakter sayısını kontrol ederek, string bilgi okumak için kullanılır
Yazılımı :
· char * cgets (char * degisken) ;
·
· Örnek :
·
#include
#include
main ()
{
· char isim [30] ;
· char *p ;
· isim[0] = 10 ;
·
· printf (“Ad soyad giriniz : ”);
· p= cgets (isim);
· printf (“\n”);
· printf (“Girilen ad soyad : %s \n ”,isim);
· printf (“Fonksiyon değeri : %s \n ”, p);
· printf (“Karakter sayısı : %d \n”, isim[0] );
· printf (“İzmir”);
·
· getch();
· }
·
·
PROGRAM KONTROL DEYİMLERİ
·
· Bazı ifade ya da ifadelerin yerine getirilmesi belirli şart ya da şartlara bağlı olabilir. Bu durumda program içerisinde bu tip ifadeleri işlemeden önce gerekli şartların kontrol edilmesi gerekir. Yapılan kontrolle şartın doğru ya da yanlış olup olmadığı araştırılır, bu sonuca göre ifadeler çalıştırılır ya da çalıştırılmaz.
·
IF Deyimi
|
if (şart) ifade
if (a>10) printf( “activate 10’dan büyüktür.”);
|
if (şart)
{
ifade 1
ifade 2
……..
}
|
|
if (şart) if (a> 0 || a= =0 )
{ {
ifade 1 printf (“ a sıfırdan büyük”) ;
ifade 2 a = 1;
} }
else else
{ {
ifade 3 printf (“ a sıfırdan küçük”);
…….. a= -1;
} }
|
Örnek 1 :
Klavyeden girilen bir sayının pozitif mi? Negatif mi? Yoksa sıfır mı? olduğunu bulan programı yapınız…..
Cevap 1 :
# include
# include< stdio.h>
int a;
main ()
{
clrscr();
printf (“Bir sayı giriniz….:”);
scanf (“%d”, &a); // (Bu şekilde iki tane / işaretini gördüğünüzde / ‘tan sonraki işlem geçerli değildir.)
if ( a<0 ) printf (“%d negatif bir sayıdır..”,a);
if ( a>0 ) printf (“%d pozitif bir sayıdır..”,a);
if (a= =0) printf (“Sıfır girildi….. ”);
getch();
}
Örnek 2 :
Klavyeden girilen bir harfin büyük mü? küçük mü? olduğunu bulan programı yapınız.
Cevap 2 :
# include
# include< stdio.h>
char a;
main ()
{
clrscr(); // Ekran temizleme fonksiyonu
printf (“Bir harf giriniz….:”);
scanf (“%c”, &a); // a = getch();
if (a>=’A’ && a<=’Z’ ) printf (“%c büyük harfle girdiniz…” , a );
if (a>=’a’ && a<=’z’ ) printf (“%c küçük harfle girdiniz…” , a );
getch();
}
Örnek 3 :
Klavyeden 2 sayı ve 1 operatör girilmektedir. Girilen operatöre göre (+, - , / , * ) ilgili işlemleri gerçekleştiren programı yapınız….
Cevap 3 :
# include
# include< stdio.h>
char oper; int a,b; float sonuc ;
main ()
{
clrscr();
printf ( “1 . sayı :”); scanf (“%d”, &a);
printf ( “2. sayı :”); scanf (“%d”, &b);
printf (“Operatör giriniz :”); oper = getche();
if (oper = = ‘+’)
{
sonuc= a+b;
printf (“ %d + %d = % 5.2f ”, a,b,sonuc);
}
if (oper = = ‘- ’)
{
sonuc = a- b,
printf (“ %d - %d = %5.2f ”, a,b ,sonuc);
}
if ( oper = = ‘*’)
{
sonuc = a*b;
printf (“ %d * %d = %5.2f”,a,b,sonuc );
}
if ( oper = = ‘/’)
{
sonuc = a/b;
printf(“ %d / %d = %5.2f ”, a,b,sonuc);
}
getch();
}
Switch – Case
Verilen ifadenin aldığı değere göre programın kışını istenen seçeneklere yönlendirmek için kullanılır.
Yazılımı :
switch (ifade) {
case sabit1 : komut (lar)
case sabit2 : komut (lar)
:
:
case sabitN : komut (lar)
[default komut (lar)]
}
Örnek 1 :
Klavyeden 1-5 arasında il trafik kodu girilmektedir. Girilen koda göre ilin ismini ekrana yazan programı yapınız…
Cevap 1 :
# include
# include< stdio.h>
int kod;
main ()
{
clrscr();
printf (“1-5 arasında il trafik kodunu giriniz :”);
scanf (“ %d ”, &kod);
switch (kod)
{
case 1 : printf (“Adana \n“); break;
case 2 : printf (“Adıyaman \n”); break;
case 3 : printf (“Afyon \n“); break;
case 4 : printf (“Ağrı \n”); break;
case 5 : printf (“Amasya \n”); break;
default :
printf (“1-5 arasında bir kod girmediniz..:”);
}
getch();
}
Örnek 2 :
Klavyeden iki sayı girilmektedir. Aşağıdaki menüye göre ilgili işlemi gerçekleştiren programı SWITCH CASE ile yapınız.
1- Toplama
2- Çıkarma
3- Çarpma
4- Bölme
5- Çıkış
Cevap 2 :
# include
# include< stdio.h>
char oper; int a,b;
main ()
{
clrscr();
printf ( “1 . sayı :”); scanf (“%d”, &a);
printf ( “2. sayı :”); scanf (“%d”, &b);
puts (“1- Toplama”);
puts (“2- Çıkarma “);
puts (“3- Çarpma ”);
puts (“4- Bölme ”);
puts (“5- Çıkış ”);
puts (“Seçiminiz…:”); scanf (“%d”,&sec);
switch (sec)
{
case 1 : printf (“ %d + %d = %d ”, a,b, a+b); break;
case 2 : printf (“ %d - %d = %d ”, a,b, a-b ); break;
case 3 : printf (“ %d * %d = %d ” , a,b, a*b); break;
case 4 : printf (“ %d / %d = %d “ , a,b, a/b ); break;
case 5 : abort ();
}
getch();
}
DO – While Döngüsü
Verilen şart doğru olduğu sürece belirtilen işlemleri tekrarlamak için kullanılır. Şart kontrol işlemi döngünün sonunda yapılır.
Yazılımı :
do {
:
Komut / komutlar
:
} while (şart) ;
Örnek 1 :
Klavyeden bir mesaj ve mesajın kaç kere yazdırılacağı girilmektedir. Buna göre mesajı istenilen sayıda ekrana yazan programı do-while döngüsüyle yapınız…
Cevap 1 :
# include
# include
int x, a=0; char msj;
main()
{ clrscr();
printf (“Mesajı giriniz……….:”); scanf (“%s”,&msj);
printf (“Kaç kere yazılsın…....:”); scanf (“%d”,&x);
do {
printf (“%s\n”,msj);
++a;
}while ( a
getch ();
}
Örnek 2:
1-10 arasındaki sayıların karesini ve küpünü yazan programı aşağıdaki şekilde do-while döngüsüyle yapınız….
Sayı Karesi Kübü
1 1 1
2 4 8
3 9 27
4 16 64
: : :
: : :
Cevap 2 :
# include
# include
int i;
main()
{ clrscr();
printf(“Sayı\t Karesi\t Kübü\t”);
do {
printf (“\n %d\t %d\t %d\t”, i, i*i , i*i*i );
++ i;
}while( i<=10);
getch ();
}
Örnek 3 :
80 ile 10 arasındaki tek sayıları ekrana yazan programı yapınız…
Cevap 3 :
# include
# include
int a;
main()
{ clrscr();
do { a --;
if (a%2 = =1) printf (“%d\t ”,a);
} while (a>10);
getch ();
}
While
Verilen şart doğru olduğu sürece belirtilen işlemleri tekrarlamak için kullanılır. While komutunda şart başlangıçta kontrol edilir. Şayet şart doğru ise döngüye girilir, şart doğru değil ise döngüye uğramadan diğer terimler çalıştırılır.
Yazılımı :
while (şart) ifade;
while (şart )
{
ifade -1;
ifade -2 ;
:
:
ifade –n;
}
Örnek 1 :
Klavyeden 0 girilene kadar sayıyı ve karesini ekrana yazan programı yapınız….
Cevap 1 :
# include
# include
int a=1;
main()
{ clrscr();
while(a= = a)
{ printf (“Bir sayı girin :”);
scanf (“%d”, &a);
if (a= = 0 ) break;
printf (“Sayı : %d Karesi : %d \n”,a,a*a);
}
getch();
}
Örnek 2 :
Küçük harfle girilen bir cümleyi büyük harfe çeviren programı while döngüsünü kullanarak yapınız.
Cevap 2:
# include
# include
# include
# include
int u, i; char cumle[50];
main()
{ clrscr();
puts (“Küçük harf ile bir cümle giriniz…:”);
scanf(“%s”, &cumle);
u= strlen (cumle);
i=0;
while(i
printf(“%c”, toupper(cumle[i]));
i ++; }
getch();
}
FOR Döngüsü
Verilen şart doğru olduğu sürece belirtilen işlemlerin tekrarlanmasını sağlar.
Yazılımı :
For ( [İfade 1]; [İfade 2]; [İfade 3]; ) Komut / Komutlar
Örnek 1 :
1-10 arasındaki sayıları ekrana yazan programı yapınız..
Cevap 1 :
#include
#include
main()
{ clrscr();
int i;
for( i=1; i<=10; i++) printf(“%d\n”,i);
getch();
}
Örnek 2 :
Klavyeden girilen bir sayının faktöriyelini bulan programı for döngüsü kullanarak yapınız…
Cevap 2 :
#include
#include
main()
{ clrscr();
int a,f;
printf (“Bir sayı giriniz….:”); scanf (“%d”,&a);
f=1;
for (; ;) // Sonsuz döngü
{ f = f*s;
s--;
if ( s = = 1) break ;
}
getch();
}
DİZİLER
Dizi bellekte ard arda sıralanmış aynı türden verilere verilen isimdir. Diziler tek bir isin altında bellekte ardışık olarak sıralanmış birden fazla aynı tipte veriye ulaşılabildiği için basit bir bellek değişkenine göre daha geniş bir kullanım alanına sahiptir. Programda kullanılan verilerin aynı çatı altında adlandırılabilmesi için ortak özelliklere sahip olması gerekir. Tek boyutlu dizilere vektör, çift boyutlu dizilere matris denilir.
Örnek 1 :
Dizileri anlamamız için basit, kolay ve anlaşılır bir örnek….
Cevap 1 :
# include
# include
int i,a[5];
main()
{ clrscr();
for( i=0;i<5; i++)
{
printf (“%d. Sayıyı giriniz : ”,i+1 );
scanf ( “%d ”, & a[i]);
}
printf (“ \n İlk girilen sayı………: %d”, a[0]);
printf (“ \n Üçüncü girilen sayı…: %d”, a[2]);
printf (“ \n Son girilen sayı……..: %d”, a[4]);
getch();
}
Örnek 2 :
Klavyeden girilen 8 adet sayı bir diziye okutulmaktadır. Girilen sayılar içinde en büyük ve en küçük sayıyı bulan programı yapınız….
Cevap 2 :
# include
# include
main()
{ clrscr();
int z[8] , eb, ek, i ;
for (i=0; i<8; i++)
{
printf (“%d . sayı......:”,i+1);
scanf (“ %d”,&z[i] );
}
eb= z[0]; ek= z[0];
for (i=1; i< 8; i++)
{
if(z[i] > eb) eb= z[i];
if(z[i] < ek) ek= z[i];
}
for(i=0; i<8; i++)
{
if (z[i] = = eb) printf (“En büyük sayı : %d ve %d. sırada yazıldı…\n”, eb,i+1);
if (z[i] = = ek) printf (“En küçük sayı : %d ve %d .sırada yazıldı…\n”, ek,i+1);
}
getch();
}
Örnek 3 :
Bilgisayar tarafından rasgele üretilen 10 adet sayı bir diziye okutulmaktadır. Bu dizinin elemanlarını ekrana yazan programı yapınız…
Cevap 3 :
#include
#include
#include
main() { clrscr();
randomize();
int i,a[10];
for (i=0; i<10; i++) a[i]=random(1000);
for (i=0; i<10; i++) printf (“%d. sayı : %d \n” ,i+1, a[i] );
getch();
}
Örnek 4 :
Klavyeden girilen 20 adet sayının pozitif olanlarını pozitif adlı diziye, negatifleri negatif dizisine atayan ve ayrı yarı ekrana listeleyen programı yapınız..
Cevap 4 :
#include
#include
main() { clrscr();
int a[20],i,b,c;
int pozitif[20] , negatif[20];
b=-1; c=-1;
for( i=0; i<20; i++)
{
printf(“%d. sayıyı giriniz…:”,i+1);
scanf (“%d”, &a[i]);
if (a[i]<0) { b++; negatif[b] = a[i];}
if (a[i]>0) { c++; pozitif [c] = a[i];}
}
clrscr();
for (i=0; i<=c; i++) printf (“Pozitif Sayılar……..: %d\n”,pozitif[i]);}
for (i=0; i<=b; i++) printf (“Negatif Sayılar…….: %d\n”,negatif[i]); }
getch();
}
// Çift boyutlu diziler (Matrisler) ile ilgili örnekler
Örnek 5 :
2 x 2 boyutlu iki matrisin toplamını üçüncü matrise aktaran programı yapınız. Her iki matrisin değerleri aynıdır. Ve değerleri şöyledir
A Matrisi B Matrisi
C Matrisi
Cevap 5 :
#include
#include
int a[2][2]={1,2,3,4};
int b[2][2]={1,2,3,4};
int c[2][2]; int i,j;
for(i=0; i<2; i++)
for(j=0; j<2; j++) c[i][j] = a[i][j] + b[i][j];
for(i=0; i<2; i++)
for(j=0; j<2; j++)
{
printf(“%d \t”, c[i][j]);
if(j= =1) printf (“\n”);
}
getch();
}
Örnek 6 :
5 x 5 boyutundaki A matrisini sabit olarak tanımlayarak, 10’dan büyük elemanlarını tek boyutlu B matrisine aktaran programı yapınız…
Cevap 6 :
#include
#include
int a[5][5] = { 25,1,58,14,2,47,36,3,5,41,11,8,4,22,12,7,77,33,27,98,55,66,32,18,38};
int b[20];
int i,j,k=0;
main()
{ clrscr();
for (i=0; i<5; i++)
for (j=0; j<5; j++) if (a[i][j]>10) { b[k] = a[i][j] ; k++;}
for (i=0; i<5; i++) printf(“%d\t”, b[i]);
getch();
}
POINTERLAR
Pointer tipi değişkenler normal değişkenlerin adreslerini tutan değişkenlerdir. Pointerlar kullanılarak C programlama dilinde adres bazında işlemler yapmak mümkündür. Özetle pointer başka bir değişkenin bilgisayar belleğindeki adresini gösteren değişkendir.
Pointer tipi değişkenler değişkenin başına * operatörü kullanarak tanımlar. Örneğin; int tipi bir değişkenin adresini tutacak olan pointer tipi değişken int *a şeklinde tanımlanır. Pointerlarda * ve & operatörlerinin görevleri şu şekildedir.
* operatörü : Adresin içindeki değeri bulmak için kullanılır.
& operatörü : Değişkenin adres bilgisini tutar.
Örnek 1 :
Pointer kavramını anlamamız için basit ve anlaşılır bir örnek….
Cevap 1 :
#include
#include
main() { clrscr();
int j, *p;
p= &j;
j=112;
printf(“j değişkeninin adresi : %p \n ”,&j);
printf(“j değişkeninin tuttuğu sayı : %d\n ”, j);
printf(“p pointerının adresi : %p\n”,p);
printf(“p pointerının tuttuğu adresteki sayı : %d \n ”,*p);
getch();
}
**** Pointerlar bellekte 2 byte’lık yer kaplar.
Örnek 2 :
Klavyeden girilen 10 adet sayı bir diziye okutulmaktadır. Diziyi düz ve ters sırada ekrana yazan programı pointer kullanarak yapınız..
Cevap 2 :
#include
#include
main() { clrscr();
int a[5], i , *p;
p=a;
for (i=0; i<5; i++)
{
printf(“%d. sayıyı girin :”,i+1);
scanf(“%d”,&a[i]);
}
for(i=0; i<5; i++) printf(“%d .sayı…:%d\n”,i+1,*p++);
p=&a[4];
for(i=5; i>=1; i--) printf(“%d. sayı…:%d\n”,i,*p--);
getch();
}
Örnek 3 :
Klavyeden girilen 10 adet sayı bir diziye okutulmaktadır. Sayıların toplamını ve ortalamasını pointer ve fonksiyon kullanarak yapınız…
Cevap 3 :
#include
#include
int a[10],i; float x,ort;
toplam ( int *k)
{
int n;
for (n=0; n<10;n++) x+ = *k++;
ort = x/10;
}
main()
{ clrscr();
for (i=0; i<10; i++)
{
printf(“%d. sayıyı giriniz…:”,i+1);
scanf(“%d”,&a[i]);
}
toplam(a); // a dizisinin ilk adresine gider…..
printf(“Sayıların toplamı ….: %3.0f”,x);
printf(“Sayıların ortalaması…: %3.2f”,ort);
getch();
}
Örnek 4 :
Yarı çapı girilen dairenin alanını ve çevresini hesaplayan programı fonksiyon ve pointer kullanarak yapınız. Alan ve çevre ana programda yazdırılacaktır.
Cevap 4 :
#include
#include
#include
# define PI 3.14
daire (float cvp1, float *a1, float *cev1)
{
*a1=PI * cvp1 * cvp1;
*cev1 = PI *cvp1 * 2;
}
main()
{
float cvp,a,cev;
clrscr();
printf(“Dairenin yarı çapını giriniz…: ”);
scanf(“%f”,&cvp);
daire(cvp,&a,&cev);
printf (“Dairenin alanı….:%4.2 f\n”,a);
printf(“Dairenin çevresi...: %4.2f\n”,cev);
getch();
}
YAPISAL VERİ TİPLERİ
Struct (Yapı)
Diziler aynı tipteki verilere indis verilerek tek bir isimle erişmek için kullanılır. Struct deyimiyle bildirilen topluluk ise farklı tipteki verilere tek bir isimle erişmek için kullanılır. Topluluk bildiriminde (struct) birçok farklı tipteki değişken bir araya getirilerek tek bir isim altında toplanır.
Örnek 1 :
Klavyeden doğum günü ve günün tarihi girilen bilgiler doğrultusunda yaşınızı ve genç ya da yaşlı olup olmadığınızı bulan programı struct veri tipini kullanarak yapalım….
Cevap 1 :
#include
#include
struct tarih { int ay,gun,yil;} ;
main() { clrscr();
struct tarih bugun,dg; // bugun ve dg degişkenleri tarih tipinde tanımlanmıştır.
int yas;
puts (“Doğum gününüzü girin….:”);
scanf(“%d %d %d ”, &dg.gun, &dg.ay, &dg.yil);
puts (“Bugünün tarihini girin…..:”);
scanf(“%d %d %d”,&bugun.gun, & bugun.ay, &bugun.yil);
if((bugun.ay = = dg.ay && bugun.gun>= dg.gun) || (bugun.ay >dg.ay))
yas= bugun.ay – dg.yil;
else
yas = (bugun.yil- (dg.yil-1));
if(yas>15 && yas<25)
printf(“%d yaşında ve gençsiniz…”,yas);
else
printf(“%d yaşında ve yaşlısınız….”,yas);
getch(); }
Örnek 2 :
10 kişilik bir sınıftaki öğrencilerin matematik ve fizik derslerinden 2 not girilmektedir. Her bir öğrenci ve derse ait ortalamaları bulup matematik ve fizik ortalamalarının toplamı 50 ve üzeri olanların isimleri ile beraber “Geçti” mesajını, aksi durumda “Kaldı” mesajını yazan programı yapalım…
Cevap 2 :
#include
#include
struct ders { char ad[20];
int matnot1,matnot2,matnot3,fiznot1,fiznot2,fiznot3;
int matort,fizort,genelort;
} dersnot[10];
main()
{ clrscr();
int i;
for (i=0; i<10; i++)
{
printf(“%d . Ad………………:”,i+1); scanf(“%s”,¬[i].ad);
printf(“Matematik 1. not……..:”); scanf(“%d”,¬[i].matnot1);
printf(“Matematik 2. not……..:”); scanf(“%d”,¬[i].matnot2);
printf(“Fizik 1. not…………...:”); scanf(“%d”,¬[i].fiznot1);
printf(“Fizik 2. not…………...:”); scanf(“%d”,¬[i].fiznot2);
not[i].matort = (not[i].matnot1 + not[i].matnot2 ) / 2;
not[i].fizort = (not[i].fiznot1 + not[i].fiznot2 ) / 2;
not[i].genelort = (not[i].matnot1 + not[i].fiznot2) / 2;
}
for(i=0; i<10; i++)
{
printf(“\n Adı………….:%s\n”, not[i].ad);
if(not[i].genelort >=50)
printf (“Öğrenci geçti....”) ;
else
printf (“Öğrenci kaldı… ”);
}