Birleştirme
- C kursu
- Orta seviye
- Ders 17/116
- 6 dk
Yardımcı fonksiyonları bir kütüphanede birleştirirsin.
Yardımcıları birleştir
Bu son derste tüm yardımcıları çağıran bir run_tests fonksiyonu yazacaksın. Böylece kütüphane, tek bir giriş noktasından tüm davranışları sınar.
run_tests, main'in içindeki test çağrılarını taşır; sonuna printf("Hazır\n"); ekler. main yalnızca run_tests() çağırır. Bu desen, gerçek kütüphanelerde test sürücüsü olarak yaygındır: kütüphane kullanıcısı bir fonksiyon çağırır ve tüm davranışları görür. Projenin sonunda altı yardımcı ve bir test sürücüsü elde edersin.
Uygulama run_tests ekle ve main'i sadeleştir
Var olan tanımların altına void run_tests(void) ekle. İçine main'de bulunan tüm printf çağrılarını taşı (Modül hazır, str_len("Merhaba"), str_is_empty(""), num_abs(-7), num_sign(-5), int arr[3] = {5,-3,8};, arr_max(arr, 3), arr_sum(arr, 3)). Sonuna printf("Hazır\n"); ekle. main'in gövdesini run_tests(); return 0; yap.
Başlangıç kodu
#include <stdio.h>
int str_len(const char *s);
int str_is_empty(const char *s);
int num_abs(int n);
int num_sign(int n);
int arr_max(int *a, int n);
int arr_sum(int *a, int n);
int str_len(const char *s) {
int n = 0;
while (*s) { n++; s++; }
return n;
}
int str_is_empty(const char *s) {
return str_len(s) == 0;
}
int num_abs(int n) {
return n < 0 ? -n : n;
}
int num_sign(int n) {
if (n > 0) return 1;
if (n < 0) return -1;
return 0;
}
int arr_max(int *a, int n) {
int m = a[0];
for (int i = 1; i < n; i++) if (a[i] > m) m = a[i];
return m;
}
int arr_sum(int *a, int n) {
int s = 0;
for (int i = 0; i < n; i++) s += a[i];
return s;
}
int main(void) {
printf("Modül hazır\n");
printf("%d\n", str_len("Merhaba"));
printf("%d\n", str_is_empty(""));
printf("%d\n", num_abs(-7));
printf("%d\n", num_sign(-5));
int arr[3] = {5, -3, 8};
printf("%d\n", arr_max(arr, 3));
printf("%d\n", arr_sum(arr, 3));
return 0;
}
// run_tests fonksiyonunu yaz: tüm printf çağrılarını buraya taşı
// Sonuna "Hazır" yazan bir printf ekle
// main gövdesini run_tests çağrısıyla değiştirÖrnek çözüm
#include <stdio.h>
int str_len(const char *s);
int str_is_empty(const char *s);
int num_abs(int n);
int num_sign(int n);
int arr_max(int *a, int n);
int arr_sum(int *a, int n);
int str_len(const char *s) {
int n = 0;
while (*s) { n++; s++; }
return n;
}
int str_is_empty(const char *s) {
return str_len(s) == 0;
}
int num_abs(int n) {
return n < 0 ? -n : n;
}
int num_sign(int n) {
if (n > 0) return 1;
if (n < 0) return -1;
return 0;
}
int arr_max(int *a, int n) {
int m = a[0];
for (int i = 1; i < n; i++) if (a[i] > m) m = a[i];
return m;
}
int arr_sum(int *a, int n) {
int s = 0;
for (int i = 0; i < n; i++) s += a[i];
return s;
}
void run_tests(void) {
printf("Modül hazır\n");
printf("%d\n", str_len("Merhaba"));
printf("%d\n", str_is_empty(""));
printf("%d\n", num_abs(-7));
printf("%d\n", num_sign(-5));
int arr[3] = {5, -3, 8};
printf("%d\n", arr_max(arr, 3));
printf("%d\n", arr_sum(arr, 3));
printf("Hazır\n");
}
int main(void) {
run_tests();
return 0;
}Beklenen çıktı
Modül hazır 7 1 7 -1 8 10 Hazır
Proje tamamlandı
Beş derslik yardımcı kütüphane projesini tamamladın. Modül iskeletinden başladın; string, sayı ve dizi yardımcılarını ekledin; sonunda bir run_tests test sürücüsüyle birleştirdin.
Bu yapı, gerçek C projelerinin temelidir: başlık dosyası bildirimler, kaynak dosyası tanımlar ve test sürücüsü kullanım. Bir sonraki grupta ileri dize işleme teknikleri görecek, bu yardımcıların bazılarını daha güçlü versiyonlarla tekrar kullanacaksın. Proje boyunca biriktirdiğin kod, ilerideki projeler için iskelet olarak hizmet verecek.
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Yardımcıları kategorisine eşle
| Kavram | Anlamı |
|---|---|
str_len, str_is_empty |
Dize yardımcıları |
num_abs, num_sign |
Sayı yardımcıları |
arr_max, arr_sum |
Dizi yardımcıları |
run_tests |
Test sürücüsü |
2 run_tests fonksiyonu ne yapar?
- Yeni bir tür tanımlar
- Bellek ayırır
- Kullanıcıdan girdi alır
- Tüm yardımcıları çağırıp sonuçları yazdırır Doğru cevap
Açıklama: run_tests tüm yardımcıları sınar ve sonuçları yazdırır.
3 run_tests çağrısını tamamla
int main(void) {
____();
return 0;
}
int main(void) {
run_tests();
return 0;
}
Açıklama: main, run_tests fonksiyonunu çağırır.