Standart C Programlama Dili


4.P. Problemler

1. Altkısım 4.2.1’in sonundaki printf deyiminin çıktısı

4! = 24

şeklinde olur. Bir an için, fakt’ın sayi değişkeninin değerini gerçekten değiştirdiğini varsayın; bu durumda da çıktının aynı olacağını söyleyebilir miyiz?

2. C dilinde bir fonksiyon çağrısı esnasında verilen argümanların sayı ve tipinin bildirimdeki ile aynı olmasına gerek yoktur. Ancak, çok gerekmedikçe bu özelliği kullanmak iyi değildir. printf kütüphane fonksiyonu buna bir örnektir. Burada, sizden (sayısı belli olmayan) argümanların enbüyüğünü döndüren maks adında bir fonksiyon yazmanızı istiyoruz. Listenin sonunu belirtmek için çağrıdaki son argüman her zaman sıfır olacaktır. Örnekler: maks(15,-62,21,57,43,0)==57; maks(0)==0; maks(-10,0)==-10. İpucu: Microsoft C derleyicisinde (ve muhtemelen diğer birçok C derleyicilerinde) argümanlar bellekte arka arkaya olan yerlerde geçirilirler; yani, ikinci argüman ilk argümanın hemen arkasında saklanır vs. Yazacağınız fonksiyonun tanımında tek bir parametre belirtmeniz yeterli olacaktır. Arkadan gelen argümanları adres alma ve dolaylama işleçlerini kullanarak elde edebilirsiniz. Bu fonksiyonun taşınabilir olmadığına dikkat edin.

3. Sistemimizde

#include <stdio.h>

int main (void)
{
  { int y = 2007; }
  {
    int i;
    printf("%d\n", i);
  }
  return 0;
}

programı

2007

yazar. Bunu açıklayabilir misiniz?

4. Sistemimizde

#include <stdio.h>

int main (void)
{
  { int a1=111, a2=222, a3=333, a4=444; }
  {
    register r1, r2, r3, r4;
    printf("%d %d %d %d\n", r1, r2, r3, r4);
  }
  return 0;
}

programı

131 3982 333 444

yazar. Bu size register değişken tanımı konusunda neyi düşündürür? r3 değişkeni bir yazmaçta mı saklanmaktadır?

5. Bölüm 0’ın başında verilen programın ne yaptığını anlatın.

6. Bir önceki bölümde anlatılan ve C kütüphanesinde bulunan strcpy, strcmp, strcat ve strlen fonksiyonlarının işlevsel benzerlerini yazın.

7. 8 vezir programını, yerlestir özçağrılı fonksiyonu içindeki sira değişkeninin küresel bir değişken olacağı şekilde tekrar düzenleyin. Şimdi program daha az yığıt yeri kullanacaktır.

8. 8 vezir programını özçağrılı olmayana (yani yinelemeli olana) çevirin.

9. Sudoku (sayı yerleştirme) bulmacalarını çözen bir özçağrılı program yazın. Program girdi olarak aşağıdakine benzer bir bulmacayı almalı ve çıktı olarak, eğer birden fazla varsa, tüm çözümleri vermelidir.

- 6 -   - 5 -   - - 3
- - 1   8 - -   - - 9
- - 4   7 - -   - - 2

- 3 -   - 6 -   - - -
- 8 -   - - -   - 5 -
- - -   - 2 -   - 4 -

5 - -   - - 3   6 - -
8 - -   - - 9   1 - -
7 - -   - 4 -   - 8 -

Yazdığınız program aşağıdakine benzer “zor” bulmacaları ne kadar zamanda çözebilmektedir?

- - -   - - -   - - -
- - -   - - 3   - 8 5
- - 1   - 2 -   - - -

- - -   5 - 7   - - -
- - 4   - - -   1 - -
- 9 -   - - -   - - -

5 - -   - - -   - 7 3
- - 2   - 1 -   - - -
- - -   - 4 -   - - 9