Bölüm 4 Seçme Komutları Alıştırmalar Bu bölümdeki problemler “C Dersi Çözümlü Problem Kitabı”, N. E. Çağıltay, C. E. Selbes, G. Tokdemir, ve Ç. Turhan, 5. Baskı, Ada Matbaacılık Ltd. Şti., 2013 kitabındaki problemlerdendir.
Örnek 1: !(k>=10)||(x*y<0) True (x-y!=2*x)&&!(kr!=‘u’) False Aşağıdaki koşul ifadelerinin değerlerini bulunuz. int k=5, m=14; double x=-6.1, y=4.2; char kr=‘U’; !(k>=10)||(x*y<0) True (x-y!=2*x)&&!(kr!=‘u’) False 12%k/k%12&&(int)kr False (‘A’<=kr)&&(kr>=‘Z’) False
Örnek 2: Aşağıdaki ifadelerin C dilindeki koşul ifadesi karşılıklarını yazınız. A) x değişken değeri ile karakter ‘+’ eşit değildir. x!=‘+’ B) numa, numb ve numc değişkenlerinden herhangi birisinin değeri 0 ile 10 arasındadır. ((numa>0)&&(numa<10))||((numb>0)&&(numb<10)) ||((numc>0)&&(numc<10)) C) numa pozitif iken numb değişkeninin değeri 75’den farklıdır. (numa>0)&&(numb!=75) D) x çift sayı veya y tek sayıdır. (x%2==0)||(y%2==1)
Örnek 3: if ((kr1==‘a’)&&(kr2==‘s’)) if (kr3==‘i’) Aşağıda C program parçasını ele alalım. if ((kr1==‘a’)&&(kr2==‘s’)) if (kr3==‘i’) printf(“Yanlis degerler.\n”); else printf(“%c%c%c\n”,kr1,’*’,kr2); else if ((kr1==‘k’)&&(kr2==‘h’)) printf(“%c%c%c\n”,kr1,’-’,kr2); A) kr1, kr2 ve kr3 değişkenlerinin değerleri sırasıyla ‘a’, ‘s’ ve ‘t’ ise program çıktısı ne olur? B) kr1, kr2 ve kr3 değişkenlerinin değerleri sırasıyla ‘k’, ‘k’ ve ‘t’ ise program çıktısı ne olur? C) kr1, kr2 ve kr3 değişkenlerinin değerleri sırasıyla ‘k’, ‘h’ ve ‘h’ ise program çıktısı ne olur? a*s Hiç bir şey basılmaz k-h
Örnek 4: Part a) Part b) if (x==50) a=53; else if (y==40) a=4; a=-4; Aşağıdaki komutu içiçe if switch komutlarını kullanarak yeniden yazınız. a= x == 50 ? 53 : (y == 40 ? 4 : -4); Part a) if (x==50) a=53; else if (y==40) a=4; a=-4; Part b) switch (x) { case 50: a=53; break; default: switch (y) case 40: a=4; default: a=-4; }
Örnek 5: Aşağıda verilen if komutlarını tek bir içiçe if komutu kullanarak yeniden yazınız. if (sayi<0) { printf(“Kucuk bir sayi.\n”); printf(“Tekrar giriniz.\n”); scanf(“%d”,&sayi); } if (sayi>=0 && sayi<=25) printf(“Dogru bir sayi.\n”); if (sayi>25) sayi=sayi%25; if (sayi<0) { printf(“Kucuk bir sayi.\n”); printf(“Tekrar giriniz.\n”); scanf(“%d”,&sayi); } else if (sayi<=25) printf(“Dogru bir sayi.\n”); else sayi=sayi%25;
Örnek 6: 3025 ozel sayidir. ÇIKTI: Aşağıdaki program, girilen 4 basamaklı bir sayının (abcd), özel sayı olup olmadığını abcd=(ab+cd)2 özelliğine bakarak kontrol eder. 3025 girdisi için bu programın çıktısını bulunuz. #include <stdio.h> #include <stdlib.h> int main (void) { int sayi,bol1,bol2,yeni; printf("Pozitif bir sayi giriniz: "); scanf("%d",&sayi); if ((sayi/1000==0)||(sayi/10000>0)) printf("%d dort haneli sayi degil.\n",sayi); else bol1=sayi/100; bol2=sayi%100; yeni=(bol1+bol2)*(bol1+bol2); if (yeni==sayi) printf("%d ozel sayidir.\n",sayi); printf("%d ozel sayi degildir.\n",sayi); } system("pause"); return (0); ÇIKTI: 3025 ozel sayidir.
Örnek 7: Ucretiniz: 170.0000 ÇIKTI: Aşağıdaki program, girilen çalışma kodu ve çalışma saatine göre kişinin ücretini hesaplar. Girdi değerleri sırasıyla 2 ve 25 ise, bu programın çıktısı ne olur? #include <stdio.h> #include <stdlib.h> int main (void) { int kod,saat; double ucret; printf("Kodunuzu giriniz: "); scanf("%d",&kod); if ((kod==2)||(kod==3)) { printf("Toplam calisma saatinizi giriniz: "); scanf("%d",&saat); } switch(kod) { case 1: ucret=875; break; case 2: ucret=6.80*saat; case 3: ucret=12.5*(saat%40)+875; printf("Ucretiniz: %8.4f\n",ucret); system("pause"); return (0); ÇIKTI: Ucretiniz: 170.0000
Örnek 8: #include <stdio.h> #include <math.h> Aşağıdaki programda boş bırakılan yerleri doldurunuz. Bu program, pozitif bir tamsayıyı girdi olarak almakta ve bu sayının karekökünün bir tamsayı değeri olup olmadığını görüntülemektedir. #include <stdio.h> #include <math.h> int main (void) { int sayi,n; printf("Pozitif bir tamsayi giriniz: "); scanf("%d",&sayi); n=sqrt((double)sayi); if (n*n==sayi) printf("%d karekoku bir tamsayidir.\n",sayi); else printf("%d karekoku bir tamsayi degildir.\n",sayi); return (0); }
Örnek 9: Kullanıcıdan pozitif bir tamsayı girdi olarak alıp, bu sayının 13 ve/veya 17’ye bölünüp bölünmediğini bularak bu durumu bir mesaj ile belirten bir C programı yazınız. Eğer girilen sayı sadece 13’e bölünüyorsa, “13’e bolunuyor.” sadece 17’ye bölünüyorsa, “17’ye bolunuyor.” 13 ve 17’ye bölünüyorsa, “13 ve 17’ye bolunuyor.” 13 ve 17’ye bölünmüyorsa, “13 ve 17’ye bolunmuyor.” mesajlarını ekranda gösteriniz. Örnek Çıktı: Bir sayı giriniz: 3502 17’ye bolunuyor.
Örnek 9 (Devam): #include <stdio.h> #include <stdlib.h> int main (void) { int n; printf("Bir sayi giriniz: "); scanf("%d",&n); if ((n%13==0)&&(n%17==0)) printf("13 ve 17'ye bolunuyor.\n"); else if (n%13==0) printf("13'e bolunuyor.\n"); else if (n%17==0) printf("17'ye bolunuyor.\n"); else printf("13 ve 17'ye bolunmuyor.\n"); system("pause"); return (0); }
Örnek 10: Bir halıcı çocuklar için üç ayrı tip halı satmaktadır. Bu halıların tipi, kodu ve metrekare birim fiyatları aşağıda verilmiştir. Halı Tipi Kodu Metrekare Birim fiyatı -------------------------------------------------------------------------------- Tweety T 18.80 TL BugsBunny B 17.80 TL Spiderman S 19.20 TL Sipariş alınan halının tipi ve döşenecek alanın metrekaresi girildiğinde ödenmesi gereken ücreti görüntüleyen bir C programı yazınız. Örnek Çıktı: Hali tipi (T/B/S): B Kac metrekare hali dosenecek: 19.6 Odenmesi gereken ucret: 348.88 TL.
Örnek 10 (Devam): #include <stdio.h> int main (void) { char kod; float alan,ucret=0; printf("Hali tipi (T/B/S): "); scanf("%c",&kod); printf("Kac metrekare hali dosenecek: "); scanf("%f",&alan); if (kod=='T') ucret=alan*18.8; else if (kod=='B') ucret=alan*17.8; else if (kod=='S') ucret=alan*19.2; if (ucret<=0) printf("Girişlerde bir hata yapılmıştır.\n"); else printf("Odenmesi gereken ucret: %7.2f TL.\n",ucret); return (0); }
Örnek 11: Bir telefon şirketi telefonda 3 dakikaya kadar konuşmanın ücretini 0.25 TL. olarak belirlemiştir. Ancak şirket, konuşma süresi 3 dakikayı aştığı durumda bundan sonraki her dakika için ek olarak 0.08 TL. almaktadır. Telefon görüşmesinin süresini dakika cinsinden girdi olarak alan ve konuşmanın ücretini hesaplayan C programını yazınız. Örnek Çıktı: Telefon konusma suresi: 8.0 Ucret: 0.65 TL.
Örnek 11 (Devam): #include <stdio.h> #include <stdlib.h> int main (void) { float sure, ucret; printf("Telefon konusma suresi: "); scanf("%f",&sure); if (sure<=3) ucret=0.25; else ucret=0.25+(sure-3)*0.08; printf("Ucret: %6.2f TL.\n",ucret); system("pause"); return (0); }
Örnek 12: Bir yılı (pozitif tamsayı) girdi olarak alan ve bu yılın artık yıl olup olmadığını bulan bir C programı yazınız. Bir yılın artık yıl olması için yılın 4’e bölünmesi ve eğer 100’e bölünüyorsa, 400’e de bölünmesi gerekir. Örneğin: 2004 ve 2000 yılları artık yıl olup, 2007 ve 1900 yılları artık yıl değildirler. Örnek Çıktı: Yili giriniz: 2007 2007 yili artik yil degildir.
Örnek 12 (Devam): #include <stdio.h> #include <stdlib.h> int main (void) { int yil; printf("Yili giriniz: "); scanf("%d",&yil); if (yil%4==0) if (yil%100==0) if (yil%400==0) printf("%d yili artik yildir.\n",yil); else printf("%d yili artik yil degildir.\n",yil); system("pause"); return (0); }
Örnek 13: Bir üçgenin açılarını girdi olarak alan ve bu üçgenin türünü (geniş, dar veya dik açılı üçgen) saptayan bir C programı yazınız. Program aynı zamanda bir üçgen oluşturulup oluşturulmadığını da iç açılarının toplamını bularak kontrol etmelidir. Üçgenin iç açılarının toplamı 180o olmalıdır. Üçgenin açılarının her biri 90o’den küçük ise dar açılı; herhangi bir açısı 90o’den büyükse geniş açılı; bir açısı 90o ise dik üçgendir. Örnek Çıktı: Uc aci giriniz: 30 90 60 Bu bir dik acili ucgendir.
Örnek 13 (Devam): #include <stdio.h> #include <stdlib.h> int main (void) { int aci1,aci2,aci3; printf("Uc aci giriniz: "); scanf("%d%d%d",&aci1,&aci2,&aci3); if (aci1+aci2+aci3==180) if (aci1<90 && aci2<90 && aci3<90) printf("Bu bir dar acili ucgendir.\n"); else if (aci1==90 || aci2==90 || aci3==90) printf("Bu bir dik acili ucgendir.\n"); else printf("Bu bir genis acili ucgendir.\n"); printf("Acilar ucgen olusturmaz.\n"); system("pause"); return (0); }
Örnek 14: Herhangi bir karakteri girdi olarak alan ve bu karakterin bir harf olup olmadığını bulan bir C programı yazınız. Eğer girilen karakter bir harf ise küçük harf veya büyük harf olarak belirtiniz. Örnek Çıktı: Bir karakter giriniz: T T bir buyuk harftir. Bir karakter giriniz: & & bir harf degildir.
Örnek 14 (Devam): #include <stdio.h> #include <stdlib.h> int main (void) { char kar; printf("Bir karakter giriniz: "); scanf("%c",&kar); if ((kar>='A') && (kar<='Z')) printf("%c bir buyuk harftir.\n",kar); else if ((kar>='a') && (kar<='z')) printf("%c bir kucuk harftir.\n",kar); else printf("%c bir harf degildir.\n",kar); system("pause"); return (0); }
Örnek 15: İngiliz alfabesinden herhangi bir büyük veya küçük harfi ch değişkenine okuyan ve bu harfin bu alfabede kaçıncı harf olduğunu bulan bir C programı yazınız. (İpucu: Büyük harf için (int)ch-(int)’A’+1, küçük harf için (int)ch-(int)’a’+1 ifadelerini kullanabilirsiniz). Örnek Çıktı: Bir harf giriniz: D D: 4. harftir.
Örnek 15 (Devam): #include <stdio.h> #include <stdlib.h> int main (void) { char ch; int sira; printf("Bir harf giriniz: "); scanf("%c",&ch); if ((ch>='A') && (ch<='Z')) sira=(int)ch-(int)'A'+1; else if ((ch>='a') && (ch<='z')) sira=(int)ch-(int)'a'+1; printf("%c: %d. harftir.\n",ch,sira); system("pause"); return (0); }
Örnek 16: Toplama, çıkarma, çarpma ve bölme operatörlerinden birini ve iki reel sayıyı girdi olarak alan ve girilen operatöre göre işlem sonucunu bulan bir C programı yazınız. Programda switch komutunu kullanınız. Örnek Çıktı: Isleminizi seciniz (+, -, *, /): / Iki deger giriniz: 23.5 2.5 23.5 / 2.5 = 9.4
Örnek 16 (Devam): #include <stdio.h> #include <stdlib.h> int main (void) { float no1,no2; char op; printf("Isleminizi seciniz (+, -, *, /): "); scanf("%c",&op); printf("Iki deger giriniz: "); scanf("%f%f",&no1,&no2); switch(op) case '+': printf("%0.1f %c %0.1f = %0.1f\n",no1,op,no2,no1+no2); break; case '-': printf("%0.1f %c %0.1f = %0.1f\n",no1,op,no2,no1-no2); case '*': printf("%0.1f %c %0.1f = %0.1f\n",no1,op,no2,no1*no2); case '/': printf("%0.1f %c %0.1f = %0.1f\n",no1,op,no2,no1/no2); default: printf("Yanlis operator girildi.\n"); } system("pause"); return (0);
Örnek 17: Aşağıda belirtilen işlemleri yapan bir C programı yazınız. Toplama (+) veya çıkarma (-) operatörünü giriniz. a ve b değişkenlerine iki tamsayı giriniz. Burada a ve/veya b değerlerinden biri 0 girilmiş ise işlemin yapılamayacağını bir mesaj ile belirtiniz. ‘+’ operatörü için 1/a + 1/b , ‘-’ operatörü için 1/a – 1/b işlemlerinin sonucunu basit kesir cinsinden bulunuz. Bu kısım için switch komutunu kullanmalısınız. Örnek Çıktı: Isleminizi seciniz (+, -): + Iki tamsayi giriniz: 5 8 1/5 + 1/8 = 13/40
Örnek 17 (Devam): #include <stdio.h> #include <stdlib.h> int main (void) { int no1,no2; char op; printf("Isleminizi seciniz (+, -): "); scanf("%c",&op); printf("Iki tamsayi giriniz: "); scanf("%d%d",&no1,&no2); if ((no1==0) || (no2==0)) printf("Islem yapilamiyor.\n"); else switch(op) case '+': printf("1/%d %c 1/%d = %d/%d\n",no1,op,no2,no1+no2,no1*no2); break; case '-': printf("1/%d %c 1/%d = %d/%d\n",no1,op,no2,no1-no2,no1*no2); default: printf("Yanlis operator girildi.\n"); } system("pause"); return (0);