Ara Sınav (Vize) 2023-2024 19 soru

C# Programlama 2023-2024 Ara Sınav (Vize)

Kaynak: https://lolonolo.com/2025/03/09/c-programlama-2023-2024-vize-sorulari/

📖 Konu özeti (sınav öncesi tekrar)

C# Programlama 2023-2024 Vize Soruları

Implicit ve Explicit Dönüşümler

C# programlarında implicit (örtük) ve explicit (açık) dönüşümler sıklıkla kullanılır. Mesela int bir değişkenin double’a atanması genellikle derleyici tarafından otomatik yapılırken (örtük dönüşüm), double’dan int’e dönüşümde veri kaybı ihtimali olduğu için (int) ifadesiyle açıkça belirterek dönüşüm yapmak gerekir. Bu sorularda da örneklerine rastladığımız gibi (int)(-0.5) dönüştürme ya da (double)a++ ifadesi explicit dönüşümün örneklerindendir.

Operatörler ve Operatör Önceliği

Koşul ifadelerinde (?:), mantıksal (&&, ||, &, |, !) ve bitwise (~, ^, <<, >>) operatörlerinin kullanımına dikkat etmek çok önemlidir. Örneğin bitwise kaydırma (x >>= 2;) ile sayının değerini ikili olarak kaydırıp sonucu değiştirebilir, XOR operatörü (^) ile (true ^ true = false) şeklinde özel durumlar yakalayabiliriz. Ternary (?:) ve null coalescing (??) operatörleri de ifadeleri kısaltmak ve kodu daha temiz hale getirmek adına kullanışlıdır. Bu arada operatör önceliği (örneğin & ile == arasındaki öncelik farkı) ifadelerin nasıl değerlendirildiğini yakından etkiler ve koşullarda beklenmeyen sonuçlar doğurabilir.

Karar Yapıları ve Koşullar

if, else if blokları ve tek satırlık koşul yapıları kodun mantığını ifade etmek için temel oluşturur. Sorularda gördüğümüz gibi koşulları doğru sırada yazmak, koşul değerlendirme önceliklerini kavramak ve artırma/azaltma operatörlerinin (++, --) etkilerini hesaba katmak, bu yapıları hatasız kullanmaya yardımcı olur. Örneğin if(true ^ true) ifadesi false sonuç verdiği için ilk blok çalışmayıp else bloğuna geçilmesi gibi durumlar, mantıksal operatörlerin kullanımını iyi kavramakla ilgilidir.

Değişken Bildirimleri ve const, var, dynamic, object

Sorularda, C#’ta değişken bildirimini ve const anahtar kelimesini de içeren örneklerle karşılaştık. const ile tanımlanan bir değerin, tanımlandığı anda mutlaka başlatılması gerekir. Örneğin const string dil = "C#"; gibi doğru bir kullanım varken const string fakulte; deyip sonradan değer atamak derleme hatasına yol açar. Ayrıca var anahtar sözcüğüyle tür çıkarımı, dynamic türüyle çalışma zamanında tür denetimi ve object veri türüyle ilgili kurallar da önemlidir. var ile tanımlanan bir değişken, ilk atanan değerin tipiyle sabitlenir ve daha sonra farklı türde bir değer atanamaz. dynamic ise tam tersi biçimde davranır ve çalışma zamanında oluşan hatalara daha açıktır.

String Kullanımı ve Formatlama

Bir diğer önemli kısım da dize (string) işlemleri ve formatlama yöntemleridir. Console.Write veya Console.WriteLine içerisinde "{0} {1}" gibi kalıplar kullanarak sıralı parametre yerleştirmek C#’ta yaygın bir yaklaşımdır. Bu sorularda, Console.Write("{0} - {2} - {1}", ...) gibi örnekler verildi ve parametre indekslerinin doğru eşleştirilmesi gerektiği, aksi halde beklenmeyen sıralar oluşabileceği vurgulandı.

Derleyici ve Çalışma Zamanı Hataları

C# dilinde kodun derlenmeden önce syntax (sözdizimi) hataları veya kullanılmamış değişken ataması gibi durumlar söz konusu olabilir. Sorulardan birinde, double değişkenine değer atanmadan önce yazdırma denendiği için “derleme hatası” çıkabileceğinden bahsedildi. Bu, yerel değişkenlerin varsayılan bir başlangıç değeri olmadığı için derleyicinin atama yapılmadan kullanımına izin vermemesinden kaynaklanır. Öte yandan çalışma zamanı (runtime) hataları tip dönüşümünün başarısız olması veya bölme sıfıra bölme gibi durumlarda ortaya çıkar. Tüm bunlar, C# dilinin temellerini kavramak açısından çok önemlidir. Veri türleri, operatörler, koşul yapıları ve string formatlama gibi mekanizmalar, her seviyedeki geliştiricinin hakim olması gereken yapı taşlarıdır. Özellikle operatör önceliği ve tip dönüşümleri gibi konulara dikkat ederek temiz ve hatasız kod yazmak mümkündür.

C# Programlama 2023-2024 Vize Soruları

C# Programlama 2023-2024 Vize Soruları

19 soru
Şıkka dokun, anında açıklamasını gör — ya da çalışma modunda tüm cevapları aç.
Soru 1
Aşağıdaki değer atamalarından hangisi geçerlidir?
DDoğru cevap
Açıklama
Açıklama : C# 11 ve üstünde çok satırlı (raw) string sözdizimi mevcuttur.
A, B ve C seçenekleri kaçış karakteri veya tırnak kullanımı açısından hatalıdır;
E seçeneği ise geçersiz bir ayrıştırma içerir. D seçeneği ise çok satırlı string söz dizimine uygundur
ve bu nedenle derleyici hatası vermez. Bu örnek, C# programlama temellerinde dize literal kullanımını göstermektedir.
Soru 2
Aşağıdaki kod parçacığında program çıktısı hangi şıkta doğru verilmiştir?
bool stat = true;
int x = -1, y = 2, z = 3;
int result = !stat & ++x == 0 ? x / y : z + x - y;
Console.Write(result);
CDoğru cevap
Açıklama
Açıklama : !stat false döndürür, ++x ise x’i 0’a çıkarır (başta -1’di).
Ardından koşul (++x == 0) true olacağı için soru işareti (?) sonrası kısım çalışır (x / y).
x / y = 0 / 2 tamsayı bölmesi 0’dır, ancak kodda !stat & ++x == 0 ifadesindeki
bitwise AND (&) kullanımına dikkat edilmelidir. Sonuçta işlenenler ve öncelik sırası incelendiğinde sonuç 1 olarak elde edilir
(burada z + x - y kısmı devreye girebilir). Kod çalıştığında C# operatör önceliği sebebiyle aslında
!stat & (++x == 0) ifadesi değerlendirilir, x=0 olur, ancak z + x - y bölümü seçildiğinde 3+0-2=1 döndürür.
Böylece ekrana 1 yazdırılır.
Soru 3
Aşağıdaki değişken atamalarından hangisi geçerlidir?
BDoğru cevap
Açıklama
Açıklama : C#’ta onaltılık (hex) sabit atama 0x ile yapılır. 0x05AD geçerli bir 16’lık sayıdır.
Diğer seçenekler ya C# söz dizimi bakımından hatalı isimlendirme (int short gibi) ya da geçersiz sabit formatları içerir.
Soru 4
Aşağıdaki C# koduna göre aşağıdaki şıklardan hangisi yanlıştır?
float x = 1.5F;
ushort y = 1;
int z = (int)(-0.5D);
double Toplam = x + y + z;
BDoğru cevap
Açıklama
Açıklama : Kod gerçekte derleme hatası vermez. x bir float, y bir ushort,
z ise (int) dönüştürülmüş bir double ifadesinden gelir. Bu, C#’ta explicit (aşikar) ve implicit (örtük)
dönüşümlerin bir arada olduğu geçerli bir örnektir. Toplam değeri 2.0 + 1.5’den dolayı 2.5 eder.
Dolayısıyla “hata verir” ifadesi yanlıştır.
Soru 5
Aşağıdaki kod parçasının çıktısı hangi şıkta doğru verilmiştir?
int a = 1, b = -1;
int? c = null;
int result = b <= a ? c ?? 5 : 0;
Console.Write(result);
EDoğru cevap
Açıklama
Açıklama : Koşulda b <= a true olduğu için c ?? 5 ifadesi çalışır.
Burada c null olduğu için ?? operatörü ile 5 seçilir ve ekrana 5 yazılır.
C# null coalescing operatörünün (??) örnek kullanımıdır.
Soru 6
Aşağıdaki kodun çıktısı hangi şıkta doğru verilmiştir?
int x = 0;
int y = -1;
int z = 1;

if( y + z != x && y > z )
    Console.WriteLine("*");
else if( y > x || ++y > z )
    Console.WriteLine("/");
else if( y == x & x < z ) Console.WriteLine("+"); else if( z >= x + y )
    Console.WriteLine("-");
else
    Console.WriteLine("%");
EDoğru cevap
Açıklama
Açıklama : Kod adım adım değerlendirildiğinde birinci if koşulu (y+z != x && y>z) yanlıştır.
İkinci else-if (y>x || ++y>z) ifadesinde y>x false ama ++y>z = 0>1 = false.
Üçüncü koşulda (y == x & x<z) y artık 0 olduğundan y==x (0==0) doğru ve x bu nedenle Console.WriteLine("+"); satırı çalışır ve “+” çıktısı alınır.
Soru 7
Aşağıdaki kodla ilgili program çıktısı hangi şıkta doğrudur?
double pi;
Console.Write($" {pi} - ");
{
    pi = 3.14;
    Console.Write($" {pi} - ");
}
Console.Write($" {pi}");
EDoğru cevap
Açıklama
Açıklama : Değer atanmamış double pi; değişkeni ilk kullanım esnasında
yazdırılmaya çalışıldığından C# derleyicisi “kullanılmadan önce atanmalı” şeklinde hata verir.
C#’ta yerel değişkenler varsayılan başlangıç değerine sahip olmadıkları için program derlenmez.
Soru 8
Aşağıdaki ifadenin çıktısı hangi şıkta doğru verilmiştir?
Console.Write("{0} : {1}", 
    false != null,
    !(false || true & false) ^ false
);
CDoğru cevap
Açıklama
Açıklama : C#’ta false != null ifadesi bool bağlamında true döner.
İkinci kısımda (true & false) = false, dolayısıyla false || false = false,
!(false) = true, son olarak true ^ false = true (XOR).
Dolayısıyla ekrana True : True yazdırır.
Soru 9
Aşağıdaki kodun çıktısı hangi şıkta doğru verilmiştir?
float? a = -9F;
double b = (double)a++;
Console.Write((int)(--a - b++ + 1));
CDoğru cevap
Açıklama
Açıklama : a++ ifadesinden önce a -9’dur.
(double)a++ b’ye -9 olarak atanır fakat a sonrasında -8’e dönüşür.
Ardından --a işlemi a’yı -9 yapar.
b++ ifadesi b’yi önce -9 kullanır, sonra b -8’e güncellenir.
İşlemin tamamı (int)(-9 - (-9) + 1) = (int)(0 + 1) = 1 sonucunu verir.
10. Soru
10- byte x = 1;
short y = -10;
double z= 0.1;

Yukarida verilen değişkenler kullanılarak 0.1:-1:10 çıktısı
alınmak istenmektedir. Aşağıdaki şıklardan hangisi istenen
çıktıyı verir?
A) Console.Write($"{z}:{-x}:{-y}");
B) Console.Write("{0}:{1}:{2}", z, -y, -x);
C) Console.Write($" {0} : {2} : {1}");
D) Console.Write("{2}:{0}:{1}", -y, -x, z);
E) Console.Write("{1}:{0}:{2}", x, z, -y);
Soru 11
Veri tiplerinin değer aralıkları hangi şıkta doğru sıralanmıştır?
ADoğru cevap
Açıklama
Açıklama : C# temel tamsayı tiplerinde en küçük aralığa sahip olan byte,
daha sonra short, ardından int ve en geniş aralığa sahip long gelir.
Bu, C# veri tipi boyut ve aralık sıralamasına uygundur.
Soru 12
Aşağıdaki program çıktısı hangi şıkta doğru verilmiştir?
char harf = 'C';
char sembol = '#';
int yil = 2023;
string bolumKodu = "BLGPRG";
Console.Write("{0} {2} {3} {1}", sembol, bolumKodu, harf, yil);
BDoğru cevap
Açıklama
Açıklama : Format parametrelerinde {0} = sembol,
{1} = bolumKodu, {2} = harf, {3} = yil sırasıyla yerleştirilmiştir.
Dolayısıyla çıktı # C 2023 BLGPRG şeklinde oluşur.
Soru 13
Aşağıdaki kodun çıktısı hangi şıkta doğru verilmiştir?
Console.Write("0 - {2} - {1}", "İstanbul Üniversitesi", 1453, "C#");
EDoğru cevap
Açıklama
Açıklama : Format ifadesinde {0} = "İstanbul Üniversitesi",
{1} = 1453, {2} = "C#" olarak sıralanmış. Ama stringin içinde “0 – {2} – {1}” kullanılıyor.
Yani önce “0” düz metin, sonra {2} = "C#", en sonda {1} = 1453 yazılır.
Bu yüzden ekranda “0 – C# – 1453” çıkar.
Soru 14
C# dilinde veri tipleriyle ilgili aşağıdaki şıklardan hangisi yanlıştır?
DDoğru cevap
Açıklama
Açıklama : object tipinde bir değişken tanımlarken mutlaka başlangıç değeri atama zorunluluğu yoktur.
Diğer seçenekler, var ve dynamic için bilinen davranışlardır. Bu yüzden D seçeneği yanlıştır.
Soru 15
Aşağıdaki programla ilgili hangi ifade doğrudur?
sbyte a = -128;
byte b = (byte)a;
Console.Write(--b);
CDoğru cevap
Açıklama
Açıklama : (byte)a ifadesi, -128 değerini byte aralığına göre (0-255) dönüştürmeye çalışır.
Bu “wrap around” etkisi yaratır ve sonuç beklenmeyen bir değerdir (örneğin 128 gibi). Daha sonra --b işlemi ile
yine belirsiz bir aralıkta değer çıkabilir. Dolayısıyla tutarsız (öngörülmeyen) bir sonuç oluşur.
Soru 16
Aşağıdaki kodun çıktısı hangi şıkta doğru verilmiştir?
int x = 4;
x >>= 2;
int y = ~x;
Console.Write($"{x} : {y}");
ADoğru cevap
Açıklama
Açıklama : x >>= 2, 4’ü ikili sistemde 2 bit kaydırarak 1’e düşürür.
~x (bitwise NOT) ifadesi 1’in tüm bitlerini tersine çevirir, bu da -2 sonucunu verir
(32-bit imzalı sayılar için). Bu yüzden çıktı 1 : -2 şeklindedir.
Soru 17
Aşağıdaki kodun çıktısı hangi şıkta doğru verilmiştir?
char sembol = '-';
if (true ^ true)
    sembol = '.';
else if (!true & true)
    sembol = ':';
else
    sembol = ';';

Console.WriteLine(sembol);
DDoğru cevap
Açıklama
Açıklama : true ^ true (XOR) false döndürür, bu yüzden ilk if bloğu çalışmaz.
İkinci blok (!true & true) => false & true = false, orası da çalışmaz.
else bloğuna düşülür ve sembol ';' olarak atanır.
Böylece ekrana noktalı virgül ; yazılır.
Soru 18
Kullanıcıdan alınan girdiyi tam sayı veri tipine çeviren ve bunu tam sayı değişkende saklayan kod hangisidir?
BDoğru cevap
Açıklama
Açıklama : Konsoldan okunan metin Console.ReadLine() ile alınır.
Convert.ToInt32 ifadesi, string’i tam sayıya dönüştürür ve bu da int türündeki x değişkenine atanır.
Diğer seçenekler ya söz dizimi hatalı ya da beklenen veri tipi yanlış dönüşüme sahiptir.
Soru 19
Aşağıdaki iki satırlı kodlardan hangisi derleme hatası vermez?
EDoğru cevap
Açıklama
Açıklama : Const değişkenler tanımlandığı anda değer almalıdır ve
E seçeneğindeki kod buna uygundur. Diğer şıklarda ya const ile sonradan atama yapılmaya çalışılmış
(A) ya da değişken büyük-küçük harf hatası (C’de Yil yerine yil olmalı) gibi
derleme hataları mevcuttur.
Soru 20
Aşağıdaki kod parçasının çıktısı hangi şıkta doğrudur?
int x = -1;
int y = 1;
bool result = true & (++x >= -1) | (y < = + --x + 1);
Console.Write($"{x} : {result}");
ADoğru cevap
Açıklama
Açıklama : ++x öncesi x=-1, ++x x’i 0’a çıkarır.
(0 >= -1) doğru, bu kısım true & true => true. Ardından y <= + --x + 1 kısmında
--x x’i tekrar -1’e indirir. Dolayısıyla + --x + 1 => + -1 + 1 = 0.
y <= 0 => 1 <= 0 false. true | false => true.
Son durumda x tekrar -1 olmuş ve result true’dur. Ekranda “-1 : True” görülür.