Ortaokul Bilgisayar Olimpiyatı 2025, 1. Aşama, Soru 25

[21-30] Sorular İçin Açıklama
● Soruları C programlama dili çerçevesinde cevaplayınız.
● Derleyici olarak gcc kullanıldığını varsayınız.
● Gerekli tüm başlık (header) dosyalarının verilen programa dahil edildiğini
varsayınız.

---

```c
int main() {
int n = 9;
for (int i = 0; i < n; i++)
printf("*");
printf("\n");
for (int i = 1; i < n; i += 2) {
for (int j = i / 2; j < n / 2; j++)
printf("*");
for (int j = 1; j <= i; j++)
printf(" ");
for (int j = i / 2; j < n / 2; j++) {
printf("*");
printf("\n");
}
}
return 0;
}
```
Yukarıdaki kod parçası hangi çıktıyı üretir?

*******
*******
*****
***
*
*******
*****
***
***
*****
***
***
***
***
*****
***
***
***
***

Şıklar:
A) 

*
***
****
*****
******* 
*********

B) 

*********
******* 
*****
***
*

C)
********* 
  *******
    *****
      ***
        *


D) 

*********
**** ****
***   ***
**     **
*       *

E) 
*********
*********
*** * ***
**  *  **
*   *   *

Cevap: D *********
**** ****
***   ***
**     **
*       *

Çözüm:
Programın başındaki for döngüsü öncelikle 9 tane yıldızı aynı satıra yazdırdıktan sonra döngü sonrasındaki printf("\n") komutu ile bir alt satıra geçer. *******
İkinci for döngüsü 1 ile başlayıp ikişer ikişer artacak bir i değerinin 9 a kadar gideceği şekilde ayarlanmıştır. Bu yüzden 1,3,5,7 olmak üzere 4 kez daha çalışacaktır.
## i=1 için
Bu döngünün içerisindeki for (int j=i/2; j<n/2;j++) i/2 = 1/2 yani 0 olacaktır. n/2 = 9/2 yani 4 olacaktır. Bu yüzden 4 kez çalışacaktır ve 4 yıldız ekrana yazar.
for (int j=1; j<=i; j++) döngüsü i değeri ilk iterasyonda 1 olduğu için 1 kez çalışır ve 1 boşluk yazdırır.
for (int j=i/2; j<n/2;j++) i/2 = 1 /2 yani 0 olacaktır. n/2 = 9/2 yanı 4 olacaktır. Bu yüzden 4 kez çalışacakır ve 4 yıldız ekrana yazar.
Daha sonrasında printf("\n")  alt satıra geçeceğinden satır aşağıdaki şekilde oluşmuş olur ve i değeri 3’e yükselir. **** ****
## i=3 için
for (int j=i/2; j<n/2;j++) döngüsü i/2 = 3/2 yani 1 olacaktır. 9/2 = 9/2 yani 4 olacaktır. Bu yüzde n 3 kez çalışacaktır ve 3 yıldız ekrana yazar.
for (int j=1; j<=i; j++) döngüsu i 3 olduğundan j 1 olduğu için 3 kez çalışır ve 3 boşluk yazdırır.
for (int j=i/2; j<n/2;j++) döıngüsü i/2 = 3/2 yani 1 olacaktır, 9/2 = 9/2 yani 4 olacaktır. Bu  yüzden 3 kez çalışacaktır ve 3 yıldız ekrana vazar.
Daha sonrasında printf("\n")  alt satıra geçeçeğinden satır aşağıdaki şekilde oluşmuş olur v e i değeri 5’e yükselir. **** ****
## i=5 için
for (int j=i/2; j<n/2;j++) döğüşü i/2 = 5/2 yani 2 olacaktır. 9/2 = 9/2 yani 4 olacağıtır. Bu yüzden 2 kez çalışacaktır ve 2 yıldız ekrana yazar.
for (int j=1; j<=i; j++) döngösü i 5 olduğundan j 1 olduğu için 5 kez çalışır ve 5 boşluk yazdırır.
for (int j=i/2; j<n/2;j++) döingüsü i/2 = 5/2 yani 2 olacaktır. 2 = 9/2 yani 4 olacaktır. Bu yüzden  2 kez çalışacaktır ve 2 yıldız ekrana yazır.
Daha sonrasında printf("\n")  alt satıra geçecğinden satır aşağıdaki şekilde oluşmuş olur  ve i değeri 7’e yükselir.
i=7 için
for(int j=i/2; j<n/2;j++) döngüsü i/2 = 7/2 yani 3 olacaktır. 9/2 = 9/2 yani 4 olacaktır. Bu yüzden 1 kez çalışacaktır ve 1 yıldız ekrana yazar.
for(int j=1; j<=i; j++) döngüsü i 7 olduğundan j 1 olduğu için 7 kez çalışır ve 7 boşluk yazdırır.
for(int j=i/2; j<n/2; j++) döngüsü i/2 = 7/2 yani 3 olACaktır. 9/2 = 9/2 yani 4 olACaktır. Bu yüzden 1 kez çalışACaktır ve 1 yıldız ekrana yazar.
Daha sonrasında printf("\n") alt satıra geçeceğinden satır aşağıdaki şekilde oluşmuş olur ve i değeri 7'e yükselir.
Daha sonrasında i değeri 9 olur ve döngü koşulunu sağlamadığı için program sonlanır. Programın çıktısı aşağıdaki gibi olur:
*******  *******  ***  ***  **