Fungsi dan Array · Pelajaran 6 dari 12
Fungsi dan prototipe
9 menit baca · BelajarCode
1#include <stdio.h>23double luas_lingkaran(double r);4int faktorial(int n);56int main(void) {7 printf("Luas lingkaran r=7: %.2f\n", luas_lingkaran(7));8 printf("5! = %d\n", faktorial(5));9 return 0;10}1112double luas_lingkaran(double r) {13 return 3.14159 * r * r;14}1516int faktorial(int n) {17 if (n <= 1) return 1;18 return n * faktorial(n - 1);19}Luas lingkaran r=7: 153.94 5! = 120
- Baris
double luas_lingkaran(double r);di atasmainadalah prototipe. Prototipe memberi tahu kompiler nama, tipe kembalian, dan parameter fungsi sebelum definisinya ditemukan. - Fungsi yang tidak mengembalikan nilai bertipe
void. - Fungsi boleh memanggil dirinya sendiri (rekursi), seperti
faktorial.
Pass by value
Di C, argumen dikirim sebagai salinan. Mengubah parameter di dalam fungsi tidak mengubah variabel milik pemanggil.
1#include <stdio.h>23void coba_ubah(int x) {4 x = 100;5 printf("Di dalam fungsi: x = %d\n", x);6}78int main(void) {9 int angka = 5;10 coba_ubah(angka);11 printf("Di main: angka = %d\n", angka);12 return 0;13}Di dalam fungsi: x = 100 Di main: angka = 5
Untuk mengubah variabel pemanggil, fungsi membutuhkan alamat variabel itu, yaitu pointer. Ini dibahas di bab Memori.
Berkas header
Pada proyek besar, prototipe dikumpulkan di berkas header (.h), lalu definisinya di berkas .c. Berkas lain cukup menulis #include "matematika.h" untuk memakai fungsinya. Inilah cara pustaka standar seperti stdio.h bekerja.
Cek pemahaman
Kenapa prototipe fungsi diperlukan jika definisi fungsi ditulis setelah main?
Latihan
FPB dan KPK
Tulis fungsi fpb(a, b) dengan algoritma Euclid dan fungsi kpk(a, b) yang memakai rumus a / fpb(a, b) × b. Baca dua bilangan, lalu tampilkan FPB dan KPK-nya.
Pembahasan
1#include <stdio.h>23int fpb(int a, int b) {4 while (b != 0) {5 int sisa = a % b;6 a = b;7 b = sisa;8 }9 return a;10}1112long long kpk(int a, int b) {13 return (long long)a / fpb(a, b) * b;14}1516int main(void) {17 int a, b;18 if (scanf("%d %d", &a, &b) != 2) return 1;19 printf("FPB(%d, %d) = %d\n", a, b, fpb(a, b));20 printf("KPK(%d, %d) = %lld\n", a, b, kpk(a, b));21 return 0;22}84 36
FPB(84, 36) = 12 KPK(84, 36) = 252
KPK dihitung dengan membagi dulu baru mengalikan, supaya hasil sementaranya tidak terlalu besar.
Jalankan contoh kode di pelajaran ini tanpa instalasi lewat compiler C online.