"Enter"a basıp içeriğe geçin

C Programlama Örnekleri [Çözümlü]

Bilgisayar Mühendisliğine başlayan arkadaşlara yardımcı olmasıyla oluşturduğum.Bu serinin çok faydalı olup/olmayacağından şüpheliyim.Fakat genede türkçe kaynak olması amacıyla en çok bilinen örneklere bir kaç basit ekleme yaparak bu yazıyı oluşturdum.Soruların cevapları ve açıklamaları için orada verilen bağlantıya tıklayabilirsiniz.

#1 C Programlama Vize Sorusu

Bu soruda bir problemi koda dökmeniz istenmiş.Karar yapıları denilen if-else koşulları kullanılmış.Bunun yerine switch-case yapısıda kullanılabilirdi.Soruyu inceleyip sizde kendiniz basit değişikliklerle geliştirebilirsiniz.

Problem : Bir otoparkta tabelada şöyle yazmaktadır.Giren araçların bekleme sürelerine göre ödeyecekleri fiyat listesi :

  • 0-4 saat 10 lira
  • 5-8 saat 12 lira
  • 9-12 saat 15 lira
  • 12 saat üstü 20 lira

şeklinde bir ücretlendirme vardır.Girilen sonuçlara göre fiyat çıktısı veren programı kodlayınız.

Bu serinin devamını inceleyip,sizde kodlayabilirsiniz.C programlamaya #10’a kadar yaptığım sorularla başlangıç yapabilir.Bu başlangıçtan sonra yazılım dünyasının kapısını aralayabilirsiniz.C yapısal programlama dili özelliği sayesinde belki de programlamaya giriş için doğru bir başlangıç olabilir.Bu konuya çok girmek istemiyorum.Çünkü hangi dille başlanmalı sorusu için çok farklı görüş var.Bundan sonra bir sonraki soruya aşağı da ki bağlantıya tıklayarak gidebilirsiniz.

/* 0-4 saat 10lira  
5-8 saat 12 lira 
9-12saat 15lira 
13 ve üstü 20lira */
#include <stdio.h>
#include <conio.h>
int main ()
{
	int saat;
	printf("Otoparkta Kac Saat Kaldiniz: "); scanf("%d",&saat);
	if(saat<0)
	{
		printf("Yanlis tusladiniz..");
	}
	else if(saat<5)
	{
		printf("Borcunuz = 10 lira..");
	}
	else if(saat<9)
	{
		printf("Borcunuz = 12 lira..");
	}
	else if(saat<13)
	{
		printf("Borcunuz = 15 lira..");
	}
	else
	{
		printf("Borcunuz = 20 lira..");

	}
        getch ();
	return 0;
}

#2 C Programlama Örne Vize Sorusu

Bu soruda ise sonsuz döngü ve tip dönüşümü kavramları test edilmeye çalışılmış.Gene çok zor bir soru olmasa da incelenmesi gerekebilir.

Her ne kadar zor bir soru olmasa da özellikle sonsuz döngü ve girilen değerlerin tiplerine dikkat etmeniz gereken belki 10 puan olarak gelebilecek bir vize sorusu olabilir.

Problem : Bir sınıftaki öğrencilerin yaşlarını toplayıp ortalamasını “-1” girilene kadar yapıp yazdıran program kodunu yazınız.

#include <stdio.h>
int main ()
{
	int toplam = 0,ss=0,yas=0;
	while(1)
	{
		printf("Ogrenci yasini gir: "); scanf("%d",&yas);
		if(yas==-1)
		{
			break;
		}
		toplam += yas;
		ss++;
	}
	printf("%f",(float) toplam / (float) ss); // tip dönüşümü = type casting..
	return 0;
}

#3 C Programlama Örnek Vize Sorusu

Bu sorunun gayet algoritmik bir soru olduğunu düşünüyorum.Sorunun cevabına hemen bakmamanızı tavsiye ederim.Yani sizinde bildiğiniz gibi herkesin kendine has bir kodlama tarzı vardır.Bunun için kendiniz sonuna kadar soruyla debeleşin.Çünkü ancak bu şekilde kendi içinizde ki o size has olan tarzı keşfedebilirsiniz.Kendinizi bu şekilde geliştirmiş olursunuz.

Özellikle mühendislik öğrencilerinin vizesinde çıkabileceğini düşündüğüm bir sorudur.Benim vizemde ise buna benzer bir kaç soru çıkmıştı.Ondan dolayı aşağıda ki kodu iyice incelemenizi ve anlamadığınız yerleri aşağıda ki yorum kısmında sormanızı tavsiye ederim.

Problem : Random degerlerle olusturulacak 10×10’luk matrisi önce yazdıran ve program içerisinde bu işlemi yaparken kaç kere değiştirme işlemi yapıldığını,en büyük rakamı ve kaç tane olduğunu ekrana yazdıran program kodunu yazınız.

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
int main ()
{
	int i,j,matris[10][10],eb,ss=0,jj;
	srand(time(NULL));
	for(i=0;i<10;i++)
	{
		for(j=0;j<10;j++)
		{
			matris[i][j] = rand()%10;	
		}
	}
	printf("Random matris = \n");
	for(i=0;i<10;i++)
	{
		for(j=0;j<10;j++)
		{
			printf("%d ",matris[i][j]);	
		}
		printf("\n");
	}
	//kontrol kısmı
	for(i=0;i<10;i++)
	{
		for(j=0;j<10;j++)
		{
			if(matris[i][j]>eb)
			{
				eb = matris[i][j];	//En büyük elemani bulmamizi saglar.
				ss++;			//Kac kere degistirme yapildigini tutar.
			}
		}
	}
	for(i=0;i<10;i++)
	{
		for(j=0;j<10;j++)
		{
			if(eb==matris[i][j])
			{
				jj++;	//En büyük elemanın sayisini tutar.Bunu yukarıda belirleyemeyiz.Çünkü bir örnek verelim.
			}		//Diyelim ki [0][0].elaman 2 olarak geldi ve karar yapısı bu degeri eb'yi herhangi bir deger vermediğimiz için
		}			// 4>eb şeklinde tanımladı ve eb = matris[0][0] ---> eb=2 oldu farzedelim ki [0][1].elemanda 2 olsun.Bu durumda
	}				//Yukarıda belirttiğimiz takdirde "jj" sayacını bir daha arttıracaktır.Buda sonucun yanlış olmasına neden olacaktır.
	printf("%d kere degistirme yapilmis,en buyuk sayi = %d ve matriste bu sayidan %d tane vardir.",ss,eb,jj);
	getch ();
	return 0;
}

#4 C Programlama Örnek Vize Sorusu

Gene birinci sorunun birazcık daha gelişmişi olarak düşünebilirsiniz.Bu soruda da iç içe karar yapılarını göreceksiniz.Gene her ne kadar çok zor bir soru olmasada çözülmesi gerekir.

Problem : Bir havaliman da uçuş yapacak yolcuların;

  • el için 8 kg sınır
  • bagaj için 15 kg sınır

hakkı bulunmaktadır.Eğer ki yolcular onlara tanınan sınırları geçerse ek ücretlendirmeye tabii olacaktır.Bu kilogramların üstünde getirilen her kg başına

  • el için 4 lira
  • bagaj için 5 lira

ödenecektir.Bu işlemleri yapan programlama dilini yazınız.

Kodu paylaşmadan önce bir kaç satır açıklamak yapmak gerekirse önceleri paylaştığım otopark sorusuna çok benziyor.Sadece iç içe karar yapıları kullanılması gerekiyor.Aşağıda kodları paylaşıyorum.Eğer ki kod ile ilgili tartışmak istediğiniz bir şey olursa aşağıda yorum kısmında belirtebilirsiniz.

/* Soru= Bir havalimanına giren yolcuların valiz sınırı=
el için 8 kg,
bagaj için 15  kg,
olmak üzere bu kg'lar üstünde getirelecek olan ağırlık başına=
el için 4 lira,
bagaj için 5 lira ödenecektir.Bunu hesaplayan Program kodunu yazınız..*/
#include <stdio.h>
int main ()
{
	int ebagaj,nbagaj,borc=0;
	printf("El Bagaj Agirliginizi Girin: "); scanf("%d",&ebagaj);
	printf("Normal Bagaj Agirliginizi Girin: "); scanf("%d",&nbagaj);
		if(ebagaj>8)
		{
			if(nbagaj>15)
			{
				borc = 5*(nbagaj-15) + 4*(ebagaj-8);
			}
			else
			{
				borc = 4*(ebagaj-8);
			}
		
		}
		else if(nbagaj<15)
		{
			printf("borcunuz yoktur..");
		}
		else
		{
			borc = 5*(nbagaj-15);
		}
			printf("Borcunuz = %d",borc);	
	return 0;
}

#5 C Programlama Örnek Vize Sorusu

Bu soruda klasik bir soru bence.Bu soruyu çözmek için matrislere hakim olmak gerekir.Fakat genede ben yazının içinde sizlere gerekli açıklamaya yaptım.

Problem :Satır ve sutunu da dahil olmak uzere kullanıcı tarafından girilecek iki matrisin çarpımını yazdıran program kodunu yazınız.(Satır ve sütun kullanıcıya sorularak girilecektir.Ardından matris kullanıcı tarafından doldurulacaktır.)

Bunu yapmadan önce bilmeniz gereken bir kaç şey var.İki matrisin çarpılması için birinin satırı ve diğerinin sütunu eşit olmalıdır.Yani bunu göstermek gerekirse:

  • (AxB) boyutunda bir matrisimiz olsun
  • (CxD) boyutunda bir diğer matrisimiz olsun.
  • Tabiki burada A,B,C,D doğal sayıların bir elemanı olmalı yani 1,2,3.. gibi sayıları ifade etmeli.

Bu iki matrisin çarpılabilmesi için B ve C harfleri aynı sayıyı ifade etmelidir.Bunu somutlaştırma adına bir örnek vermek gerekirse,

  • 2×3 boyutunda bir matrisle 4×5 boyutunda bir matris çarpılamaz.
  • 2×3 boyutunda bir matrisle 3×5 boyutunda bir matris ancak birbiriyle çarpılabilir.

Olayı özet ve tek cümle halinde vermek gerekirse iki matris arasında çarpma işlemi yapabilmek istiyorsak birinci matrisin sütunuyla ikinci matrisin satırı aynı sayı olmalıdır.

Ayrıca aşağıda ki videolu anlatımı da izlemenizi tavsiye ederim:

https://www.youtube.com/watch?v=8gDh7MO7yo
#include <stdio.h>
#include <conio.h>
int main ()
{
	int satir,ort,sutun;
	printf("1.Matrisin satir sayisini girin:"); scanf("%d",&satir);
	printf("1.Matrisin sutun ve 2.matrisin satir sayisini girin:"); scanf("%d",&ort);
	printf("2.Matrisin sutun sayisini girin: "); scanf("%d",&sutun);
	int matris[satir][ort],matris2[ort][sutun],i,j,z,toplam=0,cmatris[satir][sutun];
	//
	for(i=0;i<satir;++i)
	{
		for(j=0;j<ort;j++)
		{
			printf("%d.satiri ve %d.sutun icin deger giriniz: ",i+1,j+1);
			scanf("%d",&matris[i][j]);
		}
	}
	//
	for(i=0;i<ort;++i)
	{
		for(j=0;j<sutun;++j)
		{
			printf("%d.satiri ve %d.sutun icin deger giriniz: ",i+1,j+1);
			scanf("%d",&matris2[i][j]);
		}		
	}
	//
	for(i=0;i<satir;i++)
	{
		for(j=0;j<sutun;j++)
		{
			for(z=0;z<ort;z++)
			{
				toplam += matris[i][z] * matris2[z][j];
				
			}
			
			cmatris[satir][sutun] = toplam;
			toplam = 0;
			printf("%d ",cmatris[satir][sutun]);
		}
		printf("\n");
	}
	
	getch ();
	return 0;
}

#6 C Programlama Örnek Vize Sorusu

İf-else ve while döngülerinin iç içe olduğu bir teoremin kodlandığı bir sorudur.Bu soruyu kodlarken zevk alacağınıza inanıyorum.Açıkçası ben bu tarz problemleri kodlarken çok zevk alıyorum.

Problem : Klavyeden girilen veya bir başka deyişle okunan değerin fermat sayı formuna uyup/uymadığını kontrol eden program kodunu yazınız.

Fermat Sayı Nedir ?

2^2n+1 şeklinde yazılabilen sayılara fermat sayı denir.Bir kaç örnek vermek gerekirse

  • n=0 için sonuç 2 olacaktır.
  • n=1 için sonuç 5 olacaktır.
  • n=2 için sonuç 9 olacaktır.
  • n=3 için sonuç 17 olacaktır.
  • n=4 için sonuç 33 olacaktır.
  • n=5 için sonuç 65 olacaktır.
  • n=6 için sonuç 129 olacaktır.

Bu sonuçlara göre farklı farklı algoritmalar oluşturulabilir.Aşağıda benim yazdığım algoritmayı inceleyebilirsiniz.Fakat öncesinde kendinizin uğraşmasını ve uygun bir çözüm üretmesini öneririm.Çünkü bu sayede algoritmik düşünce yeteneğinizin geliştiğini farkedeceksiniz.

#include <stdio.h>
#include <math.h>
#include <conio.h>
int main ()
{
	int sayi,n=2,fark=2,sonuc = 0;
	printf("Sayi Gir: "); scanf("%d",&sayi);
	if(sayi>5)
	{
		while(1)
		{
			fark *= 2;
			sonuc = 5 + fark;
			if(sonuc==sayi)
			{
				printf("Fermat sayidir");
				break;
			}
			else
				printf("Fermat sayi degildir.");
				break;
		}	
	}
	else
	{
		if(sayi==2 || sayi==5)
		{
			printf("Fermat sayidir.");
		}
		else
		{
			printf("Fermat sayi degildir.");
		}
	}
	getch ();
	return 0;
} 

#7 C Programlama Örnek Vize Sorusu

Matematiksel ifade ve karar yapıların olduğu çok zor olmayan bir soru.

Problem : Klavyeden girilen 3 basamaklı sayının rakamları çift olanların toplamını yazdıran program kodu.

İlk başta yapmamız gereken matematiksel ifadelerle sayının rakamlarını bulmak ardından bir koşul yapısıyla çift olanlarını tespit edip toplama yapmamız.

#include <stdio.h>
#include <conio.h>
int main ()
{
	int sayi,a,b,c,sonuc = 0;
	printf("Uc Basamakli Bir Sayi giriniz: "); scanf("%d",&sayi);
	a = sayi/100;
	b = (sayi/10)%10;
	c = (sayi%100)%10;
	if(a%2 == 0)
	{
		sonuc += a;
	}
	if(b%2 == 0)
	{
		sonuc += b;
	}
	if(c%2==0)
	{
		sonuc += c;
	}
	printf("%d",sonuc);
	getch ();
	return 0;
}

#8 C Programlama Örnek Vize Sorusu

Kullanıcıdan bir sayı girmesi isteniyor.Girilen sayi asalsa ekrana asal yazdırılması değilse girilen sayiya en yakin asal sayiyi yazdırılmasi isteniyor.Bu soruyu değişik bir yolla çözdüm.İçerisinde fonksiyonlar ve döndürdüğü değerlere bağlı olarak işlemler gerçekleşiyor.Bu sorunun başka şekilde çözümlerini de görmüştüm.Fakat ben böyle çözdüm.Bence bu cevap hoşunuza gidecektir.

Problem : Girilen bir sayı asal mı ? Asal değilse ona en yakın asal sayıyı ekrana yazdıran program kodunu yazınız.

#include <stdio.h>
#include <conio.h>
int asalmi(int sayi)
{
	for(int i=2;i<sayi/2;i++)
	{
		if(sayi%i==0)
		{
			return 1;
		}
	}
	return 0;
}
int asalbul(int sayi)
{
	int islemsayisi1=0,islemsayisi2=0; int tempsayi = sayi;
	while(asalmi(sayi)!=0)
	{
		islemsayisi1++;
		sayi++;
	}
	while(asalmi(tempsayi)!=0)
	{
		islemsayisi2++;
		tempsayi--;
	}
	if(islemsayisi1>islemsayisi2)
	{
		return tempsayi;
	}
	else
	{
		return sayi;
	}
}
int main ()
{
	int sayi;
	printf("Bir sayi gir: "); scanf("%d",&sayi);
	if(asalmi(sayi)==1)
	{
		printf("Girdiginiz sayiya en yakin asal sayi %d'dir.",asalbul(sayi));	
	}
	else
	{
		printf("Sayi asaldir.");
	}
	getch ();
	return 0;
}

#9 C Programlama Örnek Vize Sorusu

Luhn algoritması yani kredi kartı doğrulama algoritması istenmiş.

Problem :Luhn algoritmasını yani kredi kartı doğrulama algoritmasını c programlama dilinde kodlayınız.

Luhn Algoritması Nasıl Çalışır ?

Hans Peter Luhn adlı bir bilim adamı tarafından bulunan bu algoritmayı bir örnekle açıklamaya çalışalım.Diyelim kredi kartı numaranız aşağıda ki gibi olsun.

3254 3298 2853 1293

  • Çift haneler yani 2-4-6-8-10-12-14-16.hanede ki sayılar toplanır.
  • Tek hanelerde ki sayılarsa ikiyle çarpılır.Ardından bu sayıların rakamları toplanır.

Kısaca yukarı da verdiğimiz örnek üzerinden yapmak gerekirse

  • Önce çift haneleri toplayalım.

2+4+2+8+8+3+2+3 = 32

  • Tek hanede ki rakamları 2’ye çarparak sonuç olarak çıkan sayıların tekrardan rakamlarını toplayalım.

3×2 = 6         5×2 = 10          3×2= 6       9×2 = 18     2×2 = 4     5×2 = 10     1×2 = 2       9×2 = 18

Şimdi bu sayıların rakamlarını toplayalım.

6 + 1 + 0 + 6 + 1 + 8 + 4 + 1 + 0 + 2 + 1 + 8 = 38

Çift hanede ki rakamlara uygulanan işlem sonrası sonuç = 32

Tek hanede ki rakamlara uygulanan işlem sonrası sonuç = 38

  • Çift ve tek hanelere uygulanan işlem sonucu elde ettiğimiz 2 farklı sayıyı toplayıp 10’a göre mod alıyoruz.Eğer ki kalan sıfırsa yani 10’a tam bölünüyorsa kredi kartı numarası doğrudur.

32 + 38 = x(mod10)     x 0’a eşit olduğundan görüldüğü gibi bu kredi kartı numarası doğrudur.

#include <stdio.h>
#include <conio.h>
int main ()
{
	int kartno[16],i,cifttop=0,tektop=0;
	printf("Kartinizin on yuzunde bulunan 16 haneli kart numaranizi girin: \n");
	for(i=0;i<16;++i)
	{
		printf("16 Haneli Kart Numaranizin %d.hanesini girin: ",i+1);
		scanf("%d",&kartno[i]);
	}
	for(i=0;i<16;++i)
	{
		if(i%2==0)
		{
			cifttop += kartno[i];
		}
		else
			tektop += (kartno[i]*2); 
	}
	if(cifttop+tektop % 10 == 0)
	{
		printf("Kart numaraniz dogrudur.");
	}
	else
		printf("Kart numaraniz yanlistir.");
	getch ();
	return 0;
}

#10 C Programlama Örnek Vize Sorusu

Matematiksel bir kavram olan cullen sayı kavramının algoritması istenmiş.Güzel bir soru olduğunu düşünüyorum.

Problem : Klavyeden girilen bir sayının cullen sayı olup/olmadığını kontrol eden program kodunu yazınız.

Cullen Sayı Nedir ?

Eğer ki bir sayı (n*2^n)+1 şeklinde yazılabiliyorsa bu sayıya cullen sayı denir.Mesela bir örnek verelim.

  • 32 sayısını ele alalım

32 = (n*2^n)+1     >>  31 = n*2^n şeklinde yazılamayacağından cullen sayı değildir.

  • Aynı şekilde 25 sayısını ele alalım.

25 = (n*2^n)+1 >> 24 = n*2^n >> buradan da n = 3 oluyor.Öyleyse 25 bir cullen sayıdır.

#include <stdio.h>
#include <math.h>
#include <conio.h>
int main ()
{
	int sayi,n=0,sonuc=0;
	printf("sayi gir: "); scanf("%d",&sayi);	
	while(1)
	{
		sonuc = pow(2,n)*n+1;
		if(sonuc >= sayi)
		{
			if(sonuc==sayi)
			{
				printf("Cullen sayidir.");
				break;
			}
			else
			{
				printf("cullen sayi degildir.");
				break;
			}
			
		}
	n++;
	}
	
	
	getch ();
	return 0;
}
Tarafımızca Değerlendirildi.

İlk Yorumu Siz Yapın

    Bir cevap yazın

    E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

    This site uses Akismet to reduce spam. Learn how your comment data is processed.