Başkent Üniversitesi Mühendislik Fakültesi 2014-2015 Güz Yarıyılı BİL 101-Bilgisayar Yazılımı I Arasınavı Yer Sıra no Sınav Tarihi : 11-11-2014 Sınav Başlama Saati : 09:15 Sınav Süresi : 100 Dakika Öğretim Elemanları : Kaya Kılan (Koordinatör), Erdem Çorapçıoğlu, Esma Ergüner Özkoç, Mehmet Dikmen, Muhammet Yorulmaz, Umut Tosun ÖĞRENCİ AD SOYAD :... NUMARA :... BÖLÜM :... İMZA :... SINAVDA DİKKAT EDİLECEK KURALLAR 1. Bu soru kitapçığı kapak sayfası dahil Beş (5 ) sayfadan oluşur. Eksik kağıt olması durumunda görevliyi uyarınız. Zımbalı kağıtları birbirinden ayırmayınız. 2. Cevaplarınızı ayrılan yerlere yazınız. Yerler yetmediği takdirde soru kağıtlarının arka yüzleri kullanılabilir. Düzgün ve okunaklı yazmaya özen gösteriniz. 3. Soru sormayınız.(sorularda yanlışlık görüyorsanız yanlışın ne olduğunu yazıp soruyu ona göre çözünüz.) 4. Sınavın ilk yarım saatinden önce ve bitime onbeş dakika kala sınıfınızdan ayrılmayınız. 5. Bu sınav toplam 5 sorudan oluşmaktadır. SORU 1 SORU 2 SORU 3 SORU 4 SORU 5 TOPLAM
SORU 1. Aşağıda verilen program parçalarının üreteceği ekran çıktısını, değişkenlerin değerlerini göstererek belirtilen yere yazınız. (16 puan) int a = 10,x = 3,y = 4,z = 2; a x y. z_ ÇIKTI: switch(a % 3) { case 0: if(y>5 x<1) printf("aaa\n"); printf("bbb\n"); break; case 1: if( x+y > 5 && z==1 ) printf("ccc\n"); printf("ddd\n"); z = (x+y) % 6; printf("%d\n",z); case 2: printf("eee\n"); int i = 1, x = 0; i x. ÇIKTI: do{ x = x + i * 2; printf("%d, %d \n", i, x ); i = i + 2; while( i%7 > 0); int a, b, n = 44; n a b. ÇIKTI: while(n<65){ a = n % 10 ; b = n / 10 ; n += a; if( a >= 0 && a-b > 3 ) printf(" %d \n", b); if( b%a == 0) printf(" %d \n", b*a ); printf(" %d \n", n); 2
#include <stdio.h> int main(){ int a = 10,x = 3,y = 4,z = 2; switch(a % 3) { case 0: if(y>5 x<1) printf("aaa\n"); printf("bbb\n"); break; case 1: if( x+y > 5 && z==1 ) printf("ccc\n"); printf("ddd\n"); z = (x+y) % 6; printf("%d\n",z); case 2: printf("eee\n"); /** DDD 1 EEE */ #include <stdio.h> int main(){ int i = 1, x = 0; do{ x = x + i * 2; printf("%d, %d \n", i, x ); i = i + 2; while( i%7 > 0); /** 1 2 3 8 5 18 */ 3
#include <stdio.h> int main(){ int a, b, n = 44; printf("a =%f b=%f \n",a,b); printf("--------------\n"); while(n<65){ a = n % 10 ; b = n / 10 ; n += a; if( a >= 0 && a-b > 3 ) printf(" %d \n", b); if( b%a == 0) printf(" %d \n", b*a ); printf(" %d \n", n); /** a=0.000000 b=0.000000 4 62 12 68 */ 4
SORU 2. Aşağıda verilen akış diyagramının (flow chart) üreteceği ekran çıktı ya da çıktılarını, değişkenlerin değerlerini göstererek belirtilen yere yazınız. (10 puan) BAŞLA n k s ÇIKTI n = 15 s = 1 E n%2==0 H H s<4 E k = n/2 k = (n+1)/2 k =(3*n+1)/2 s = s+1 k n=k H k==1 E n DUR 5
2.SORU Çözüm: #include <stdio.h> int main() { int n=15, s=1, k; do { if (n % 2 == 0) k = n/2; if (s<4) k= (3*n+1)/2 ; k = (n+1)/2; s = s+1; printf("\nk = %d",k); n=k; while (k!= 1); printf("\nn = %d",n); /** k = 23 k = 35 k = 53 k = 27 k = 14 k = 7 k = 4 k = 2 k = 1 n = 1 */ 6
SORU 3. Aşağıdaki programın amacı; klavyeden girilen sayı ve pozitif kuvvet değerine göre üssünü hesaplayıp ekrana yazdırmaktır. Ancak verilen program bazı sözdizim(syntax) ve mantık hataları içermektedir. Sadece hatalı olan satırların karşısına doğru biçimlerini örnekteki gibi yazınız. Yeni bir satır eklemeyiniz. (14 puan) #include<studio.h> int main() { int sayac, sayi, kuvvet, sonuc ; printf("sayı ve kuvvet değerini giriniz : ") scanf("%d%d", sayi, kuvvet ); if( kuvvet!= 0 ){ printf("yanlış!! Kuvveti pozitif giriniz:"); scanf("%d", kuvvet ); { for( sayac=1 ; sayac<kuvvet ; sayac+1 ) sonuc = sayi * sayi; printf("---------\n Sonuç = ", sayi); return 0; ÖRNEK ÇALIŞMA : Sayı ve kuvvet değerini giriniz : 2-5 Yanlış!! Kuvveti pozitif giriniz : -5 Yanlış!! Kuvveti pozitif giriniz : 5 --------- Sonuç = 16 #include<stdio.h> 7
Çözüm: /* Ara Sınav Soru 3 */ #include <stdio.h> int main() { int sayac, sayi, kuvvet, sonuc ; printf("sayı ve kuvvet değerini giriniz : "); scanf("%d%d", &sayi, &kuvvet ); while( kuvvet <= 0 ) { printf("yanlış!! Kuvveti pozitif giriniz:"); scanf("%d", &kuvvet ); for( sayac=1 ; sayac < kuvvet ; sayac++ ) { sonuc = sayac * sayac; printf("---------\n Sonuc = %d --> %d \n", sayac, sonuc); return 0; /** Say² ve kuvvet de erini giriniz : 2-5 Yanl²!! Kuvveti pozitif giriniz:-5 Yanl²!! Kuvveti pozitif giriniz:5 --------- Sonuc = 1 --> 1 --------- Sonuc = 2 --> 4 --------- Sonuc = 3 --> 9 --------- Sonuc = 4 --> 16 */ 8
SORU 4. Çocuklarda antibiyotik dozunun ayarlanması yaşamsal önem taşımaktadır. Bu nedenle aşağıda verilen bilgilere göre antibiyotik dozu hesaplayan bir C programı yazmanız istenmektedir. Program, piyasada bulunan etken maddeleri farklı iki antibiyotik türü (A,B) için çocuğun kilosuna göre doz hesabı yapmalıdır. Bu hesabı yaparken aşağıdaki çizelge kullanılmaktadır. Çizelgede, 1 günde, 10 Kg dan küçük (10 dahil değil), 10-40Kg arası normal (10, 40 dahil) ve 40 Kg dan büyük çocuklara verilecek doz miktarı ve günlük uygulama adeti verilmiştir. Bu çizelgedeki değerler ile kullanıcıdan alınan antibiyotik türü ve kilo bilgisine göre çocuğun her seferde alacağı doz miktarı hesaplanmalıdır. (Örneğin, aşağıdaki Örnek Çalışma 1 de çocuğun kilosu normal aralıkta olduğu için günlük alması gereken antibiyotik miktarı 16,3 X 150 = 2445 mg dır. A antibiyotiği 4 seferde alınacağından 4 e bölünür ve her dozda 611,25mg olarak hesaplanır) (30 puan) Antibiyotik Türü Günlük Doz Sayısı 10Kg dan Küçük 10Kg-40Kg Arası (Normal) 40Kg dan Büyük A 4 Normalin Yarısı 150mg/kg 4500mg B 3 Normalin Yarısı 120mg/kg 3000mg ÖRNEK ÇALIŞMA 1: Kullanılacak antibiyotik türünü giriniz ( A, a, B, b ): A Çocuğun kilosunu giriniz(gr) giriniz: 16300 Çocuk, A türündeki antibiyotikten günde 4 defa 611.25 mglık dozlar halinde almalıdır. ÖRNEK ÇALIŞMA 2: Kullanılacak antibiyotik türünü giriniz ( A, a, B, b ): b Çocuğun kilosunu giriniz(gr) giriniz: 55000 Çocuk, b türündeki antibiyotikten günde 3 defa 1000.00 mglık dozlar halinde almalıdır. 9
Çözüm: /* Ara Sınav Soru 4 */ #include <stdio.h> int main() { char ch; int gunluk_doz_sayisi ; float doz; float agirlik; printf("antibiyotik türünü giriniz (A,a,B,b)\n"); scanf("%c", &ch) ; printf("çocuğun kilosunu (gr) giriniz\n"); scanf("%d", &agirlik) ; agirlik = (float) agirlik /1000; switch(ch) { case 'a': case 'A': if ((agirlik>0 && agirlik <10)) doz = 4*75*agirlik ; if ((10<= agirlik && agirlik <=40)) doz = 4*150*agirlik; if (agirlik >40) doz = 4*4500*agirlik; printf("%f", doz); break; case 'b': case 'B': if ((agirlik>0 && agirlik <10)) doz = 3*60*agirlik ; if ((10<= agirlik && agirlik <=40)) doz = 3*120*agirlik; if (agirlik >40) doz = 3*3000*agirlik; printf("%f", doz); break; return 0; 10
SORU 5. Tavla oyununda kendi pullarını önce tamamlayan oyuncu o eli kazanır ve 1 puan alır. Kazanan oyuncu rakibini mars ederek kazanmış ise 2 puan alır. Toplamda 5 puan ya da üstüne ulaşan ilk oyuncu oyunu kazanır. Yukarıda verilen bilgiler ışığında; her eli kimin kazandığı (1 ya da 2 nolu oyuncu) ve mars edip etmediği bilgileri klavyeden girildiğinde; her elin sonunda o anki puan durumunu ekranda görüntüleyen ve oyun bittiğinde de kazanan oyuncuyu ekrana yazan bir C programı geliştiriniz. (30 puan) ÖRNEK ÇALIŞMA 1: ÖRNEK ÇALIŞMA 2: 1. eli kazananı giriniz (1 ya da 2): 1 Mars etti mi (e/h): e Puan durumu: 2-0 2. eli kazananı giriniz (1 ya da 2): 1 Mars etti mi (e/h): e Puan durumu: 4-0 3. eli kazananı giriniz (1 ya da 2): 1 Mars etti mi (e/h): h Puan durumu: 5-0 ------------------------------------ 3 EL SONUNDA KAZANAN: 1. OYUNCUDUR 1. eli kazanan oyuncu (1 ya da 2): 2 Mars etti mi (e/h): h Puan durumu: 0-1 2. eli kazanan oyuncu (1 ya da 2): 1 Mars etti mi (e/h): h Puan durumu: 1-1 3. eli kazanan oyuncu (1 ya da 2): 2 Mars etti mi (e/h): e Puan durumu: 1-3 4. eli kazanan oyuncu (1 ya da 2): 1 Mars etti mi (e/h): h Puan durumu: 2-3 5. eli kazanan oyuncu (1 ya da 2): 2 Mars etti mi (e/h): e Puan durumu: 2-5 ------------------------------------ 5 EL SONUNDA KAZANAN: 2. OYUNCUDUR 11
Çözüm: /* Ara Sınav Soru 5 */ #include <stdio.h> int main() { char ch; int i, puan1, puan2, oyuncu; for (i=1; i<=5; i++) { printf("%d eli kazananı giriniz\n", i); scanf("%d", &oyuncu); switch (oyuncu) { case 1: puan1++ ; printf("mars etti mi? (e/h)\n"); scanf("%c",&ch); if (ch== 'e') puan1++; printf("puan durumu : %d\n",puan1); break; return 0; case 2: puan2++ ; printf("mars etti mi? (e/h)\n"); scanf("%c",&ch); if (ch== 'e') puan2++; printf("puan durumu : %d\n",puan1); break; 12