BİLECİK ŞEYH EDEBALİ ÜNİVERSİTESİ, MÜHENDİSLİK FAKÜLTESİ, BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ 2016-2017 YAZ OKULU BM106 PROGRAMLAMA DİLLERİ, ARA SINAVI, 25.07.2017 Adı Soyadı Öğrenci No 1 (20p) 2 (10p) 3 (20p) 4 (20p) 5 (30p) Toplam (100p) Açıklamalar: Öğrenciler yanlarında hatırlatma amacıyla sadece bir yüzüne C fonksiyonlarını açıkladıkları, kullanımlarını örnekledikleri bir adet A4 kağıdı bulundurabilirler. Her iki yüzü yazılmış hatırlatma kağıdı kullanmak, kağıtlarda program kodlarının bulunması ve sınav esnasında not paylaşımı yasaktır. Sınav süresi 75 dakikadır. İlk 30 dk çıkmak yasaktır. BAŞARILAR Doç. Dr. Cihan KARAKUZU, Arş. Gör. Nesibe YALÇIN 1- Aşağıdaki programlar içerisinde yer alan hataları bulunuz ve sebebini belirtiniz. #include <stdio.h> #include <conio.h> void main() { int a[]={1,3,4,5}; char * c = &a[2]; printf("%d", *c); printf("%d", c[‐2]); printf("%d", *(c+1)); getch (); } Hatalar: #include <stdio.h> #include <conio.h> #include <string.h> void main() { char dizi[]={'m','e', 's', 'le', 'k'}; char *a = &dizi; printf("%d\n", strlen(a)); printf("%c ", *a); printf("adres %p \n",a); printf("%c", --*a); getch(); } Hatalar: 2- Aşağıdaki programların çıktısı ne olur? #include <stdio.h> #include <conio.h> #include <stdio.h> #include <conio.h> void main() { char a[]="merhaba"; for(int i=0;a[i]!='\0';i++) { a[i]+=1; printf("%c",a[i]); } } Ekran çıktısı: void main() { double x[][2] = {2, -1, 6.2, 0, -4.24, 14}; printf("%d\n", sizeof(x)); printf("%.2f\n",x[2][1]); printf("%d, %d", sizeof(x[2][1]),sizeof(&x[2][1])); getch (); } Ekran çıktısı: BİLECİK ŞEYH EDEBALİ ÜNİVERSİTESİ, MÜHENDİSLİK FAKÜLTESİ, BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ 2016-2017 YAZ OKULU BM106 PROGRAMLAMA DİLLERİ, ARA SINAVI, 25.07.2017 3- Aşağıda akış şeması verilen algoritmaya ilişkin programı C dilinde yazınız. 4- Kullanıcı tarafından girilen bir karakter dizisinin Palindrom olup olmadığını bulan C programını yazınız. Palindrom, tersten okunuşu da aynı olan cümle, kelime ve sayılardır. Örneğin; 2141412, ses, nalan, kayak, ey edip adanada pide ye … NOT: Hazır fonksiyonların kullanımı yasaktır. BİLECİK ŞEYH EDEBALİ ÜNİVERSİTESİ, MÜHENDİSLİK FAKÜLTESİ, BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ 2016-2017 YAZ OKULU BM106 PROGRAMLAMA DİLLERİ, ARA SINAVI, 25.07.2017 5- [-100, 100] arasında rastgele 10 adet tam sayıdan oluşan bir dizi içerisindeki negatif sayıları dizinin başına, kalan kısmada negatif olmayan sayıları gösterici kullanarak yerleştiren programı C dilinde yazınız. Örnek ekran çıktısı; BİLECİK ŞEYH EDEBALİ ÜNİVERSİTESİ, MÜHENDİSLİK FAKÜLTESİ, BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ 2016-2017 YAZ OKULU BM106 PROGRAMLAMA DİLLERİ, ARA SINAVI, 25.07.2017 CEVAPLAR Cevap-1: char *c = &a[2]; int tipinde bir elemanın adresi, char tipinde bir göstericiye atanamaz. c[‐2] Dizinin eleman sırası negatif sayı olamaz. 'le' Karakterler ayrı tanımlanır. char *a = &dizi; Dizinin adı, dizinin adresini de verir. & operatörü kullanılmaz. Cevap-2: nfsibcb 48 14.00 8, 4 Cevap-3: #include <stdio.h> #include <conio.h> void main() { int A=1,B=1,C=A+B; printf("%d %d ",A,B); while(C<100){ printf("%d ",C); A=B; B=C; C=A+B; } getch(); } Cevap-4: #include <stdio.h> #include <conio.h> #include <string.h> void main(){ char yazi[50]; gets(yazi); int boyut=0; for(int i=0;yazi[i]!='\0';i++) boyut++; for(int i=0;i<boyut/2;i++) { if(yazi[i]!=yazi[boyut-i-1]){ printf("Palindrom degil"); getch(); return; } else continue; } printf("Palindrom"); getch (); } BİLECİK ŞEYH EDEBALİ ÜNİVERSİTESİ, MÜHENDİSLİK FAKÜLTESİ, BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ 2016-2017 YAZ OKULU BM106 PROGRAMLAMA DİLLERİ, ARA SINAVI, 25.07.2017 Cevap-5: #include #include #include #include <stdio.h> <conio.h> <stdlib.h> <time.h> void main() { int i=0,dizi[10]; int *p=dizi; srand(time(0)); printf("Dizi: "); for(i=0;i<10;i++) { *(p+i)=-100+rand()%201; printf("%d ",*(p+i)); } int negatif_sira=0; for(i=0;i<10;i++) if(*(p+i)<0) { int gecici = *(p+negatif_sira); *(p+negatif_sira) = *(p+i); *(p+i) = gecici; negatif_sira++; } printf("\nYeni hali: "); for(i=0;i<10;i++) printf("%d ",*(p+i)); getch(); }