Başkent Üniversitesi MühendislikFakültesi 2013-2014 BaharYarıyılı YerSıra No BİL 101 Bilgisayar Yazılımı-I Dersi Dönem Sonu MAZERET Sınavı SınavTarihi : 03.06.2015 SınavBaşlamaSaati : 12:00 SınavSüresi : 90 Dakika ÖğretimElemanları : Öğr.Gör. N. Kaya Kılan (Koordinator), Prof.Dr. Timur Karaçay, Öğr.Gör. M. Erdem Çorapçıoğlu SINAVDA DİKKAT EDİLECEK HUSUSLAR 1. Sınavda 4 adetsorubulunmaktadır. Eksiksoruolmasıdurumundagörevliyiuyarınız. 2. Soruları, cevapiçinayrılanyerlerdeçözünüz. Sayfaarkalarınıkullanabilirsiniz. 3. Zımbalıkâğıtlarıbirbirindenayırmayınız. 4. Sorusormayınız.(Sorulardayanlışlıkgörüyorsanızyanlışın ne olduğunuyazıpsoruyuonagöreçözünüz.) 5. Sınavın ilk yarımsaatindenöncesınıfınızdanayrılmayınız. ADI SOYADI: NUMARASI: BÖLÜMÜ: SINAV YERİ: ÖĞRENCİNİN İMZASI: Soru 1 (15p) Soru 2 (15p) Soru 3 (35p) Soru 4 (35p) TOPLAM
2 SORU-1) Aşağıdaki programın çıktısını, adım adım izleyerek (trace) bulunuz? (15 puan) include <stdio.h> int f(int x) { if (x <=2) return 2; else return 2*f(x-1); int main() { int k =4, m=6; printf("%d %d \n", f(k), f(m)); Yanıt: 8 32
SORU-2) Negatif bir sayı girilinceye kadar girilen ( 1-100 arasındaki) sayıların 50 den büyük olan en büyük sayıyı bulan bir program geliştiriniz. programda while döngüsü kullanmak zorunludur. (15 puan) 3 Örnek Girdi/Çıktı: sayi giriniz :4 sayi giriniz :79 sayi giriniz :38 sayi giriniz :120 sayi giriniz :55 sayi giriniz :-1 50 den buyuk en buyuk sayi = 120 int main() { int sayi=0, enbuyuk= -1; // atama 2 puan while (sayi>=0) { // döngü kurma 5 puan printf("sayi giriniz :"); scanf("%d",&sayi); if(sayi >50) { if(enbuyuk<sayi) enbuyuk=sayi; // denetim 5 puan printf("50 den buyuk en buyuk sayi = %d",enbuyuk); // Çıktı 3 puan system("pause");
4 SORU-3/1) Duvardaki hedef tahtasında 12 halka vardır. Rastgele 40 atış yapıldığına göre; en çok vurulan halka ve vurma sayısını veren bir program geliştirip işletiniz. Not: Atışın hiç birinin Halka dışına çıkmadığı varsayılmalıdır! (35 puan) Örnek çıktı: En cok vurulan halka numarasi=3, Vurma sayisi=6 #include<stdlib.h> #include<time.h> int main() { int HalkaSayisi[13]={0,enb=0; //Atamalar:7 puan int i,encokhalka,encok=-1,vuran; srand(time(null)); for(i=1;i<=40 ;i++) // Vurma döngüsü puan15 {vuran=1+rand()%12; HalkaSayisi[vuran]++; // printf("%d. hedef %d kere vuruldu ",vuran,halkasayisi[vuran]); // printf("\n"); for(i=1;i<=12;i++){ // en çok vurulan döngüsü 10 puan if(halkasayisi[i]>encok) { encok=halkasayisi[i]; if(halkasayisi[i]==encok) enb=i; printf("en cok vurulan halka numarasi=%d,\nvurma sayisi=%d",enb,encok); // çıktı 3 puan system("pause");
SORU-3/2:Bir Gözlem Evinde her gün sonunda; sabah, öğle ve akşam yapılan sıcaklık ölçümleri ile sıcaklık faktörleri ve sıcaklık faktörlerinin ortalaması hesaplanmaktadır. Bu uygulamada kullanılacak içeriğinde en uygun bir altfonksiyon bulunan C program tasarlayıp, kodlayınız. (35 puan) Sıcaklık faktörü formülü: sf= (1+2/s +3/s 2 + 4/s 3 +...+11/s 10 )/2 s:ölçülen sıcaklık Örnek Girdi/Çıktı: Uc sicaklik değerini giriniz:5.6 12.0 10.5 Sicaklik Faktorleri: Sabah 0.26, Ogle 0.10, Aksam 0.12 Ortalama sicaklik faktoru: 0.16 #include<stdlib.h> #include<math.h> floatsicaklikfak(float s){ // sicaklikfaktörufonk. 10 puan float sf=1; inti, n=2; for(i=1;i<=10;i++){ sf=sf+n/(pow(s,n-1)); n++; return sf/2; int main(){ float s1,s2,s3,sf1,sf2,sf3; // Ana fonk. 25puan printf( "ucsicaklikdegerinigiriniz :" ); // girdiler 4puan scanf("%f%f%f",&s1,&s2,&s3); sf1= sicaklikfak(s1); // fonkcagirma3+2+1 sf2= sicaklikfak(s2); sf3= sicaklikfak(s3); printf("\n SicaklikFaktorleri: Sabah %.2f, Ogle %.2f, aksam %.2f ", f1,sf2,sf3) ; //sf yazma 5 puan printf("\n Ortalamasicaklikfaktoru : %.2f", (sf1+sf2+sf3)/3); // ortalama 5+5puan 5
6 SORU4: İlk değer ataması yoluyla elemanları belirlenmiş 6 elemanı ve 4 elemanlı tam sayı dizi içerisinde bulunan ortak elemanları yeni bir diziye aktaran uygun C programını hazırlayınız. Dizilerin ekrana yazdırılması işlemi DiziYaz isimli fonksiyon kullanılarak yapılmalıdır. Dizi elemanları sırasıyla 6 elemanlı dizi için {1,2,3,4,5,6 ve 4 elemanlı dizi için {2,6,7,8 olarak belirlenmelidir. (35 puan) ÖRNEK: A = {1,2,3,4,5,6 ve B = {2,6,7,8 ise A B = {2, 6 ; Ortak eleman ÖRNEK ÇALIŞMA: A dizisinin elemanları: 1 2 3 4 5 6 B dizisinin elemanları: 2 6 7 8 Ave B dizisinin ortak elemanları: 2 6 void DiziYaz(int a[],int n) // fonksiyon 10 puan { int i; for(i=0;i<n;i++) { if(a[i]!=0) printf(" %d ",a[i]); printf("\n\n"); int main() { int a[]={1, 2, 3, 4, 5, 6; // ilk değer 5 puan int b[]={2, 6, 7, 8; // ilk değer 3 puan int ab[4]={0; // ilk değer 2 puan int i,j,t=0; for(i=0;i<4;i++) // arama döngüsü 10 puan for(j=0;j<6;j++) if(b[i]==a[j]) { ab[t]=b[i]; t++; printf("a dizisinin elemanlari:"); DiziYaz(a,6); // cagırma 2 puan printf("b dizisinin elemanlari:"); DiziYaz(b,4); // cagırma 1 puan printf("a ve B dizisinin ortak elemanlari:"); DiziYaz(ab,4); // cagırma 2 puan