Başkent Üniversitesi Mühendislik Fakültesi 2014-2015 Bahar Yarıyılı BİL 101-Bilgisayar Yazılımı I Arasınavı Cevap Anahtarı Yer Sıra no Sınav Tarihi : 07-04-2015 Sınav Başlama Saati : 09:15 Sınav Süresi : 100 Dakika Öğretim Elemanları : Kaya Kılan (Koordinatör), Erdem Çorapçıoğlu, Timur Karaçay BİL10X Öğrenci Arasınav, Sınav Evrakı Puanlama Kuralları (Lütfen dikkatlice okuyunuz. Özellikle yarıyıl sonu öğrenci itirazlarını inceleyen kurulların işlerini önemli ölçüde hafifletmiş olursunuz ) 1-Sınav kâğıtlarını sayarak yoklama sırası ile desteleyiniz. Bir zarf içinde ve yoklama kâğıdı ile birlikte saklayınız. Zarfın üstüne sınava girenlerin listesini yapıştırınız. Kontrole gelen öğrencilerin kâğıtlarını bulmak için kolaylık olacaktır. 2- Cevap Anahtarı olmadan değerlendirme işlemine başlamayınız. Cevap Anahtarında her soru yanıtı için ara ve toplam puanlar yazılmış olmalıdır. Anahtarı dikkatlice inceleyip hataları ve puanlama önerilerinizi diğer ders sorumlularına gönderiniz. 3-Puanlamalarda değişiklik önerisi gelmezse aynen geçerli olacaktır. Önceden öngörülen yanlışlar için ne kadar puan kırılacağı cevapların üzerine yazılmıştır. 4-Öngörülememiş bir durumla karşılaşıldığında lütfen diğer ders sorumlularına e-posta göndererek bildiriniz. Bu tür durumlar için ortak tavır belirlenmesini sağlayınız. (Bu durumu ve ceza puanını cevap anahtarının üzerine not alınız) 5-Cevap anahtarının tam doğruluğundan emin olana kadar herhangi bir şekilde öğrencilere göstermeyiniz. Elektronik kopyasını öğrencilere vermeyiniz. (Sonradan sınıfta çözülebilir. Çalışma soruları adı altında sınav biçiminden çıkarıp dağıtılabilir) 6-Sınav yanıt kâğıdına kırmızı kurşun kalemle işaretleme ve puanlama yapınız. 7-Programlama yanıtlarına verilecek puanlama için iki yöntemden birini seçebilirsiniz: a-ilk bakışta yanıtın genelinin doğru olduğunu düşünüyorsanız, yukardan aşağı incelerken bulduğunuz alt hataları eksi (-) puanla işaretleyebilirsiniz. b-ilk bakışta yanıtın genelinin yanlış ve eksik olduğunu düşünüyorsanız; doğru bulunacak alt parçalara (+) artı puanla işaretleyebilirsiniz. Yanıtın toplam puanını yanıtın sağ boşluğuna bir yuvarlak içine alınız. (Parçalı puanları yuvarlak içine almayınız böylece hangisi toplam puan hangisi parçalı puan kolayca anlaşılır.) Sınav kâğıdının kapağında soru yanıtları için ayrılan özel kutuya puanı ayrıca yazınız. 8-Hataların üstünü değil altını çiziniz. Öğrencinin yazısının okunur olmasına özen gösteriniz. 9-Önemli hataların yanına, yanında yer yoksa oklar çizerek açıklama yazınız. Öğrenci kağıdını incelemeye geldiğinde hata nedenin açıklanması kolay olacaktır 10-Toplam puanı ayrılan kutucuğa (ön kapak) sayı ve yazı ile yazınız. 11-Değerlendirme işlemi tamamlandığında, Öğrenci Listesi Soyad Ad sırasında çizelge hazırlayınız. Diğer ders sorumlularına haber vererek üzerinde uzlaşılan bir günde ilan ediniz. (Çizelgenin bir kopyasını bölüme vermeyi unutmayınız) 12-Sınav kağıtlarını öğrenciye gösterme sorumluluğu Dersin Öğretim Elemanındır. Öğrenci ilanı izleyen 15 Gün içinde sınav kağıdını inceleyebilir. İnceleme esnasında öğrencilerle puanlar üzerinde tartışmayınız. Gerçekten unutulan, gözden kaçan ya da eksik toplamadan kaynaklanan bir durum varsa telafi yoluna gidiniz. Israrla notunu arttırmama tutumu içine girmeyiniz. PROGRAM YAZMA YANITLARINI PUANLARKEN: a)adımların parçalı puanları yazım sırası doğru ise verilmelidir. b)değişken isimlendirme kurallarına uymayanlara bir kereliğine -1 ceza puanı verilir. (Bir değişken adı da yanlış olsa kırılır) c)hesaplamada atama yönü yanlış yazılmışsa her seferinde -2p d)blok işaretlerini unutma her seferinde - (açmadığı için -1, kapatmadığı içinde -1) e)yanlış sembol kullanımı (* yerine. gibi) sadece o işlem için bir seferlik - f)küçük yazım hatalarından (; unutma, printf tırnaklarını unutma bir kerelik -1 p
SORU 1: %15 SORU 2: %10 SORU 3: %15 SORU 4: %25 SORU 5: %35 TOPLAM %100 SORU 1. Aşağıda verilen program ya da program parçalarının üreteceği ekran çıktısını, değişkenlerin değerlerini göstererek belirtilen yere yazınız. (4+6+5 puan) int main() { int x; for(x=-1; x<=10 ; x++ ){ if(x < 5) continue; else break; printf("baskent"); printf( Bitti\n ); int main() { int s=1, n=3, k; do{ for( k=1; k<=n ; k++ ) printf("%d ",k * s); printf("\n"); s++; while( s <= n ); c = 0; while( c <= 4 ) { switch ( c ) { case 1 : x = 0; break; case 2 : x = 30; case 4 : x = 50 ; break; default : x = 100; printf ( c = %d,x= %d \n, c, x ); ++c;. x ÇIKTI: Bitti s n k ÇIKTI: 1 2 3 2 4 6 3 6 9 c x. ÇIKTI: c = 0,x= 100 c = 1,x= 0 c = 2,x= 50 c = 3,x= 100 c = 4,x= 50 2
SORU 2. Aşağıda verilen akış çiziminin (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) a b c d ÇIKTI: 72, 48, 0, 193, 1 2p, 2p, 2p, 2p, 2p SORU 3. Uçağın taşıdığı yolcu sayısı; uçak numarasının onda birinin faktöriyelinin 5 (beş) katı olarak hesaplanabilmektedir. Uçak numarası verildiğine göre yolcu sayısını hesaplayan bir C Programı yazınız. (15 puan) ÖRNEK ÇALIŞMA : Uçak numarasını giriniz : 40 Yolcu sayısı = 120 int main() { int ucakno; int faktoriyel=1, n; // Değişken atama: 2 puan int ondabir; int yolcusayisi; printf("ucak numarasini giriniz:"); // girdi alma 2 puan scanf("%d", &ucakno); ondabir= ucakno/10; // onda bir bulma 1 puan for(n=ondabir; n>=1;n--) { // faktoriyel hesabı 5 puan faktoriyel=faktoriyel*n; yolcusayisi = faktoriyel * 5 ; // yolcu hesaplama 3 printf("\nyolcu sayisi = %d ", yolcusayisi); // çıktı yazma 2 puan 3
4
SORU 4 ) Bir teleferik hattının iki uç kulesi arasındaki uzaklık 1000 m dir. Hattın tam ortasında bir de orta kule bulunmaktadır. Hattın başlangıcındaki kuleye 1, ortasındakine 2 ve sonuncuya da 3 numarası verilmiştir. Klavyeden girilen, vagonun hat üzerinde bulunduğu noktanın başlangıçtan uzaklığını veren konum bilgisi ne gore; vagonun hangi kuleye daha yakın olduğunu ve hızını ekrana yazan c programını yazınız. (25 puan) Teleferik vagonunun hızı v = 2.425 + 0,00175 X d 2 d= Vagonun bir sonraki kuleye olan uzakliği ÖRNEK ÇALIŞMA : Vagonun konum bilgisini giriniz : 400 -------------------------------------- Vagonun yakın olduğu kule : 2 Teleferik vagonunun hızı : 19.925 #include<stdlib.h> int main(){ float yer, uzaklik, hiz; int kule; // değişken atama: 3 p printf(" Teleferik konumu:?"); scanf("%f",&yer); // girdi alma 3 puan if(yer<=250) // yer test-1 : 5 puan { kule=1; uzaklik= yer; else if(yer <=750) // yer testi 2: 5 puan { kule=2; uzaklik=yer<500? 500-yer: yer-500; else { kule=3; // yer testi 3: 3puan uzaklik=1000-yer; hiz=2.425+0.00175 *uzaklik* uzaklik; // Hız hesaplaması: 6 puan printf("en yakin kule : %d hiz: %.3f ",kule,hiz); system("pause"); 5
SORU 5. Kullanıcıdan alınan öğrenci sayısı ve öğrencilerin yaş bilgilerine göre belirli aralıklardaki öğrencilerin yaş ortalamalarını hesaplayan C programını yazınız. Ortalamaların hesaplanacağı yaş aralıkları 17-20 ve 25-27 olmalıdır. Kullanıcı tarafından 17-27 aralığı haricinde girilen yaşlar için hata bilgisi verilmelidir. Eğer sınıfta, belirtilen aralıkta öğrenci yoksa o aralığın ortalaması hesaplanmamalıdır. (35 puan) ÖRNEK ÇALIŞMA: Kaç adet öğrenci var? : 30 1. öğrencinin yaşını giriniz : 18 2. öğrencinin yaşını giriniz : 60 Hatalı giriş yaptınız. Yaş 17-27 arasında olmalı. 2. öğrencinin yaşını giriniz : 20... 30. öğrencinin yaşını giriniz : 26 Yaşı 17-20 arasındaki öğrencilerin yaş ortalaması : 18.50 Yaşı 25-27 arasındaki öğrencilerin yaş ortalaması : 26.00 Program Bitti int main() { int i=0, yas, ogrencisayisi; // Değişken tanımlama int adetbir=0, adetiki=0, toplambir=0, toplamiki=0; // İlk değer atama float ortbir, ortiki; // Ortalama değişkenleri printf("ogrenci sayisini giriniz: "); scanf("%d",&ogrencisayisi); // Öğrenci sayısı while ( i < ogrencisayisi) { // Döngü kurma 5p printf("%d. ogrencinin yasini giriniz:", i+1); // Öğrenci mesajı scanf("%d",&yas); // Yaş bilgisi alma if(yas < 17 yas > 27){ // Aralık kontrolu 2p printf("hatalı giriş yaptınız. Yaş 17-27 arasında olmalı.\n"); // else{ i++; // Döngü ilerletme if(yas > 25){ // Yaş aralığına göre işlem 2p toplambir += yas; // Toplama adetbir ++; // Sayaç else if(yas <20){ toplamiki += yas; // Toplama adetiki ++; // Sayaç if(adetbir>0){ // Öğrenci sayısına göre işlem 2p ortbir = (float)toplambir / adetbir; // Ortalama hesabı 2p printf("\nyaşı 25'ten büyük olanların yaş ortalaması : %.2f", ortbir); if(adetiki>0){ // Öğrenci sayısına göre işlem 2p ortiki = (float)toplamiki / adetiki; // Ortalama hesabı 2p printf("\nyaşı 17 ile 20 arasındakilerin yaş ortalaması : %.2f", ortiki); printf("\nprogram Bitti"); // Bitti Mesajı 6