C ile Uygulamalar 3 - Cevaplar Cevap-1: //Soru 1 int recursivefaktoriyel(int); //Fonksiyonun prototipi tanımlanmaktadır. int sayi; printf("faktoriyeli Hesaplanacak Sayiyi Giriniz:"); scanf("%d",&sayi); printf( "\n%d!=%d",sayi,recursivefaktoriyel(sayi) ); //recursivefaktoriyel fonksiyonunda hesaplanan sayının faktöriyeli ekrana yazdırılmaktadır. int recursivefaktoriyel(int sayi) //Sayının faktöriyelinin hesaplandığı öz yineleyici fonksiyon. if(sayi<=1) //sayi 1'den küçük eşit olduğu durumda if yapısına girilmekte ve 1 döndürülerek recursivefaktoriyel fonksiyonunun çağrımı durdurulmaktadır. return 1; return sayi*recursivefaktoriyel(sayi-1); omeryucel.wordpress.com 1
Cevap-2: //Soru 2 int recursivekuvvet(int,int); //Fonksiyonun prototipi tanımlanmaktadır. int x,n; printf("x Degerini Giriniz:"); scanf("%d",&x); printf("n Degerini Giriniz:"); scanf("%d",&n); printf( "\n%d^%d=%d",x,n,recursivekuvvet(x,n) ); //recursivekuvvet fonksiyonunda hesaplanan sayının kuvveti ekrana yazdırılmaktadır. int recursivekuvvet(int x,int n) //Girilen taban ve üst değerine göre sayının kuvvetinin hesaplandığı öz yineleyici fonksiyon. if(x==0) return 0; //0^n=0 if(x>0 && n==0) return 1; //x^0=1 if(x>0 && n==1) return x; //x^1=x if(x>0 && n>1) return x*recursivekuvvet(x,n-1); omeryucel.wordpress.com 2
Cevap-3: //Soru 3 void ucgen(char *); //Fonksiyonun prototipi tanımlanmaktadır. char kelime[30]; printf("bir Kelime Giriniz:"); gets(kelime); printf("\n"); ucgen(kelime); void ucgen(char *ifade) //Girilen kelimeye göre ters üçgenin oluşturulduğu fonksiyon. while(*ifade) //*ifade!=null printf("%s\n",ifade++); printf("%s\n",ifade); omeryucel.wordpress.com 3
Cevap-4: //Soru 4 int dizi[10]=1,2,3,4,5,6,7,8,9,10; int boyut=10,gecici; int i; printf("dizinin Ilk Hali: "); for(i=0;i<boyut;i++) printf("%d ",dizi[i]); for(i=0;i<boyut/2;i++) //Dizi ters çevrilmektedir. gecici=dizi[i]; dizi[i]=dizi[boyut-1-i]; dizi[boyut-1-i]=gecici; printf("\ndizinin Ters Cevrilmis Hali: "); for(i=0;i<boyut;i++) printf("%d ",dizi[i]); omeryucel.wordpress.com 4
Cevap-5: //Soru 5 int kelimesayisi(char *); //Fonksiyonların prototipleri tanımlanmaktadır. int karaktersayisi(char *); char cumle[100]; printf("bir Cumle Giriniz:"); gets(cumle); printf( "\ncumledeki Kelime Sayisi: %d",kelimesayisi(cumle) ); //kelimesayisi fonksiyonunda bulunan cümledeki kelime sayısı ekrana yazdırılmaktadır. printf( "\ncumledeki Karakter Sayisi: %d",karaktersayisi(cumle) ); //karaktersayisi fonksiyonunda bulunan cümledeki karakter sayısı ekrana yazdırılmaktadır. int kelimesayisi(char *cumle) //Girilen cümledeki kelime sayısının bulunduğu fonksiyon. int sayac=0,i=0; for(;*cumle!='\0';cumle++) //cumle'nin string sonu karakterine gelinmediği müddetçe döngü devam etmektedir. if(*cumle!=' ' && i==0) sayac++; i=1; else if(*cumle==' ') i=0; return sayac; int karaktersayisi(char *cumle) //Girilen cümledeki karakter sayısının bulunduğu fonksiyon. int i=0; while(cumle[i]!='\0') //cumle'nin string sonu karakterine gelinmediği müddetçe döngü devam etmektedir. omeryucel.wordpress.com 5
i++; //Karakter sayısının tespit edilmesi amacıyla i değişkeni her adımda arttırılmaktadır. return i; omeryucel.wordpress.com 6
Cevap-6: //Soru 6 int sayi; int birlik,onluk,yuzluk,binlik; do //do-while döngüsünde koşula bakılmaksızın döngüye en az bir kere girilmektedir. printf("dort Basamakli Bir Tam Sayi Giriniz:"); scanf("%d",&sayi); while(sayi<1000 sayi>9999); //Girilen sayı dört basamaklı bir sayı olduğunda döngüden çıkılmaktadır. binlik=sayi/1000; //Sayı basamaklarına ayrılmaktadır. yuzluk=( sayi-(binlik*1000) )/100; onluk=( sayi-(binlik*1000)-(yuzluk*100) )/10; birlik=( sayi-(binlik*1000)-(yuzluk*100)-(onluk*10) ); printf("\nbu Sayida;"); printf("\n%d Tane Binlik Sayi",binlik); printf("\n%d Tane Yuzluk Sayi",yuzluk); printf("\n%d Tane Onluk Sayi",onluk); printf("\n%d Tane Birlik Sayi Vardir.",birlik); omeryucel.wordpress.com 7
Cevap-7: //Soru 7 int sayi; int birler,onlar,yuzler; do //do-while döngüsünde koşula bakılmaksızın döngüye en az bir kere girilmektedir. printf("uc Basamakli Bir Tam Sayi Giriniz:"); scanf("%d",&sayi); while(sayi<99 sayi>1000); //Girilen sayı üç basamaklı bir sayı olduğunda döngüden çıkılmaktadır. yuzler=sayi/100; //Sayı basamaklarına ayrılmaktadır. onlar=( sayi-(yuzler*100) )/10; birler=( sayi-(yuzler*100)-(onlar*10) ); printf("uc Basamakli En Buyuk Tam Sayi: "); if(yuzler>=onlar && yuzler>=birler && onlar>=birler) //Sayının basamakları birbirleriyle karşılaştırılmaktadır. printf("%d%d%d",yuzler,onlar,birler); else if(yuzler>=onlar && yuzler>=birler && birler>=onlar) printf("%d%d%d",yuzler,birler,onlar); else if(onlar>=yuzler && onlar>=birler && yuzler>=birler) printf("%d%d%d",onlar,yuzler,birler); else if(onlar>=yuzler && onlar>=birler && birler>=yuzler) printf("%d%d%d",onlar,birler,yuzler); else if(birler>=yuzler && birler>=onlar && yuzler>=onlar) printf("%d%d%d",birler,yuzler,onlar); else printf("%d%d%d",birler,onlar,yuzler); omeryucel.wordpress.com 8
Cevap-8: //Soru 8 int binarysearch(int *,int,int); //Fonksiyonların prototipleri tanımlanmaktadır. void bubblesort(int *,int); void diziyazdir(int *,int); int dizi[10]=79,1,11,23,67,5,60,7,15,9; int aranan; short kosul; bubblesort(dizi,10); printf("dizide Aramak Istediginiz Sayiyi Giriniz:"); scanf("%d",&aranan); kosul=binarysearch(dizi,10,aranan); if(kosul==-1) //binarysearch fonksiyonundan -1 dönmesi halinde if yapısına girilmektedir. printf("aranan Sayi Dizide Bulunmamaktadir."); else printf("aranan Sayi Dizide %d.indisde Bulunmaktadir.",kosul); void bubblesort(int *dizi,int boyut) //Dizinin sıralandığı fonksiyon. int gecici,i,j; for(i=0;i<boyut-1;i++) for(j=0;j<boyut-1-i;j++) if( *(dizi+j)>*(dizi+j+1) ) gecici=*(dizi+j); *(dizi+j)=*(dizi+j+1); *(dizi+j+1)=gecici; omeryucel.wordpress.com 9
int binarysearch(int *dizi,int boyut,int aranan) //Dizide sayının arandığı fonksiyon. int ortadaki,sol=0,sag=boyut-1; while(sol<=sag) ortadaki=(sol+sag)/2; if( aranan==*(dizi+ortadaki) ) return ortadaki; else if( aranan>*(dizi+ortadaki) ) sol=ortadaki+1; else sag=ortadaki-1; return -1; //Aranan sayının dizide bulunamaması halinde -1 döndürülmektedir. omeryucel.wordpress.com 10
Cevap-9: //Soru 9 #define SATIR 5 //SATIR sabiti 5 olarak tanımlanmaktadır. #define SUTUN 5 //SUTUN sabiti 5 olarak tanımlanmaktadır. void altucgenselmatris(int [][SUTUN],int,int); //Fonksiyonların prototipleri tanımlanmaktadır. void matrisyazdir(int [][SUTUN],int,int); int matris[5][5]=0; //Matrisin tüm elemanları 0 olarak tanımlanmaktadır. altucgenselmatris(matris,satir,sutun); matrisyazdir(matris,satir,sutun); void altucgenselmatris(int matris[][sutun],int satir,int sutun) //Alt üçgensel matrisin oluşturulduğu fonksiyon. int i,j; for(i=0;i<satir;i++) for(j=0;j<sutun;j++) if(i>=j) matris[i][j]=1; //Matrisin i.satır ve j.sütunundaki eleman 1 yapılmaktadır. void matrisyazdir(int matris[][sutun],int satir,int sutun) //Matrisin ekrana yazdırıldığı fonksiyon. int i,j; for(i=0;i<satir;i++) for(j=0;j<sutun;j++) printf(" %d ",matris[i][j]); printf("\n"); omeryucel.wordpress.com 11
Cevap-10: //Soru 10 #define BOYUT 100 void satirhesapla(int [],int [],int); //Fonksiyonların prototipleri tanımlanmaktadır. void diziyazdir(int [],int); int dizi1[boyut]=1; int dizi2[boyut]=1,1; char hesaplanacakdizi='a'; //a karakteri dizi1 için, b karakteri dizi2 için kullanılmaktadır. int i,n; printf("pascal Ucgeninin Boyutunu Girin:"); scanf("%d",&n); diziyazdir(dizi1,1); diziyazdir(dizi2,2); for(i=3;i<=n;i++) if(hesaplanacakdizi=='a') satirhesapla(dizi1,dizi2,i); diziyazdir(dizi1,i); hesaplanacakdizi='b'; else satirhesapla(dizi2,dizi1,i); diziyazdir(dizi2,i); hesaplanacakdizi='a'; void satirhesapla(int d1[],int d2[],int elemansayisi) //Pascal üçgenine ait satırın hesaplandığı fonksiyon. omeryucel.wordpress.com 12
int i; d1[0]=1; for(i=1;i<elemansayisi-1;i++) d1[i]=d2[i-1]+d2[i]; d1[i]=1; void diziyazdir(int dizi[],int elemansayisi) //Dizinin ekrana yazdırıldığı fonksiyon. int i; for(i=0;i<elemansayisi;i++) printf("%5d",dizi[i]); printf("\n"); omeryucel.wordpress.com 13