Upload
others
View
6
Download
0
Embed Size (px)
Citation preview
Başkent Üniversitesi
Mühendislik Fakültesi
2014-2015 Güz Yarıyılı
BİL 101-Bilgisayar Yazılımı I
Arasınavı
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
Yer Sıra no
2
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;
switch(a % 3) {
case 0:
if(y>5 || x<1)
printf("AAA\n");
else
printf("BBB\n");
break;
case 1:
if( x+y > 5 && z==1 )
printf("CCC\n");
else
printf("DDD\n");
z = (x+y) % 6;
printf("%d\n",z);
case 2:
printf("EEE\n");
}
a x y . z_ ÇIKTI:
int i = 1, x = 0;
do{
x = x + i * 2;
printf("%d, %d \n", i, x );
i = i + 2;
}while( i%7 > 0);
i x . ÇIKTI:
int a, b, n = 44;
while(n<65){
a = n % 10 ;
b = n / 10 ;
n += a;
if( a >= 0 && a-b > 3 )
printf(" %d \n", b);
else if( b%a == 0)
printf(" %d \n", b*a );
else
printf(" %d \n", n);
}
n a b . ÇIKTI:
3
#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");
else
printf("BBB\n");
break;
case 1:
if( x+y > 5 && z==1 )
printf("CCC\n");
else
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
*/
4
#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);
else if( b%a == 0)
printf(" %d \n", b*a );
else
printf(" %d \n", n);
}
}
/**
a=0.000000 b=0.000000
4
62
12
68
*/
5
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)
n k s ÇIKTI
s = 1
n%2==0
BAŞLA
s<4
E H
E H
k = n/2
k = (n+1)/2
k =(3*n+1)/2
s = s+1
k==1
k
H
E
DUR
n=k
n
n = 15
6
2.SORU
Çözüm:
#include <stdio.h>
int main() {
int n=15, s=1, k;
do {
if (n % 2 == 0)
k = n/2;
else if (s<4)
k= (3*n+1)/2 ;
else
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
*/
7
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> #include<stdio.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
8
Çö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 deerini 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
*/
9
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.
10
Çö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 ;
else if ((10<= agirlik && agirlik <=40))
doz = 4*150*agirlik;
else if (agirlik >40)
doz = 4*4500*agirlik;
printf("%f" , doz);
break;
case 'b':
case 'B':
if ((agirlik>0 && agirlik <10))
doz = 3*60*agirlik ;
else if ((10<= agirlik && agirlik <=40))
doz = 3*120*agirlik;
else if (agirlik >40)
doz = 3*3000*agirlik;
printf("%f" , doz);
break;
}
return 0;
}
11
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
12
Çö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;
case 2:
puan2++ ;
printf("Mars etti mi? (e/h)\n");
scanf("%c" ,&ch);
if (ch== 'e') puan2++;
printf("Puan durumu : %d\n" ,puan1);
break;
}
}
return 0;
}