Özet: Dinamik Dizi
Coddy'nin C Journey'sinin Logic & Flow bölümünün bir parçası — ders 37 / 63.
Görev
KolayKullanıcı girişine dayalı dinamik bir dizi oluşturan, verileri işleyen ve uygun bellek yönetimini gösteren bir C programı yazın. Programınız şunları yapmalıdır:
- Kullanıcıdan saklanacak eleman sayısını temsil eden bir
ntam sayısı okuyun ntam sayıdan oluşan bir dizi için belleği dinamik olarak ayırmak üzeresizeof()ile birliktemalloc()kullanın- Bellek ayırmanın başarılı olup olmadığını kontrol edin - eğer başarısız olursa,
Memory allocation failed!yazdırın ve programı sonlandırın - Ayırma başarılı olursa,
Array of size [n] created successfully!yazdırın - Kullanıcıdan
ntam sayı değeri okuyun ve bunları ayrılan dizide saklayın - Tüm elemanların toplamını şu formatta hesaplayın ve yazdırın:
Sum: [value] - Minimum değeri şu formatta bulun ve yazdırın:
Minimum: [value] - Ortalamadan büyük kaç eleman olduğunu sayın ve şu formatta yazdırın:
Elements above average: [count] - Kullanılan toplam belleği bayt cinsinden şu formatta yazdırın:
Memory used: [bytes] bytes - Belleği serbest bırakmak için
free()kullanın - Düzgün temizliği onaylamak için
Memory successfully freed!yazdırın
malloc() ve free() kullanmak için <stdlib.h> başlık dosyasını eklemeyi unutmayın. Bu zorluk, ayırmadan kullanıma ve uygun temizliğe kadar dinamik bellek yönetimi konusundaki tam anlayışınızı test eder.
Örneğin, giriş şu şekildeyse:
5
12 8 15 3 20Çıktınız şu şekilde olmalıdır:
Array of size 5 created successfully!
Sum: 58
Minimum: 3
Elements above average: 2
Memory used: 20 bytes
Memory successfully freed!Bu kapsamlı zorluk, ayrılan dizi üzerinde anlamlı veri işleme işlemleri gerçekleştirirken dinamik bellek yönetiminin tüm yaşam döngüsünü gösterir.
Kendin dene
#include <stdio.h>
#include <stdlib.h>
int main() {
// Eleman sayısını oku
int n;
scanf("%d", &n);
// YAPILACAK: Kodunuzu aşağıya yazın
// 1. malloc() kullanarak n tam sayı için bellek ayırın
// 2. Bellek ayırmanın başarılı olup olmadığını kontrol edin
// 3. n tam sayıyı diziye okuyun
// 4. Toplamı hesaplayın, minimumu bulun, ortalamanın üzerindeki elemanları sayın
// 5. Sonuçları yazdırın ve belleği serbest bırakın
return 0;
}Logic & Flow bölümündeki tüm dersler
1Pointer Temelleri
Pointer Nedir?Pointer TanımlamaAdres Operatörü (&)Dereference Operatörü (*)NULL Pointer'larÖzet: Pointer Temelleri4Proje: Basit Metin Aracı
Projeye Genel BakışKarakter Sayma2İşaretçiler ve Diziler
İşaretçi Olarak Dizi İsimleriDizi Elemanları - İşaretçilerİşaretçi Aritmetiğiİşaretçilerin KarşılaştırılmasıÖzet: İşaretçi ile Dizi Gezinme5İşaretçiler ve Fonksiyonlar
Değer ile GeçmeFonksiyonlara İşaretçi Göndermeİşaretçiler ile Değişkenleri DeğiştirmeKlasik Bir Örnek: SwapFonksiyonlara Dizi GöndermeÖzet: Fonksiyon İşaretçi Argümanları8Yapılar ve İşaretçiler
Yapılara İşaretçilerOk Operatörü (->)Yapıları Değer ile AktarmaYapı İşaretçilerini AktarmaYapıların Dinamik TahsisiÖzet: Yapıyı Değiştirme - Ptr11Son Tekrar Görevleri
Tekrar: Dinamik String BirleştirmeTekrar: Struct DizisiTekrar: Kelime Frekans Sayacı3Karakter Dizileri ve Stringler
char Dizisi Olarak StringlerNull Sonlandırıcıscanf ile String Girişistrlen() Kullanımıstrcpy() Kullanımıstrcat() Kullanımıstrcmp() KullanımıÖzet: Temel String Fonksiyonları