Memori · Pelajaran 10 dari 12
Struct
9 menit baca · BelajarCode
Struct mengelompokkan beberapa variabel dengan tipe berbeda menjadi satu tipe baru. Misalnya data mahasiswa: nama, NIM, dan IPK.
1#include <stdio.h>2#include <string.h>34typedef struct {5 char nama[50];6 char nim[12];7 double ipk;8} Mahasiswa;910int main(void) {11 Mahasiswa m;12 strcpy(m.nama, "Fajar Nugroho");13 strcpy(m.nim, "2410511007");14 m.ipk = 3.42;1516 Mahasiswa n = {"Sinta Maharani", "2410511012", 3.81};1718 printf("%s (%s) IPK %.2f\n", m.nama, m.nim, m.ipk);19 printf("%s (%s) IPK %.2f\n", n.nama, n.nim, n.ipk);20 return 0;21}Fajar Nugroho (2410511007) IPK 3.42 Sinta Maharani (2410511012) IPK 3.81
typedefmemberi namaMahasiswauntuk tipe struct itu, sehingga tidak perlu menulisstructsetiap kali.- Anggota struct diakses dengan titik:
m.ipk.
Pointer ke struct dan operator panah
Struct yang besar sebaiknya dikirim ke fungsi lewat pointer, supaya tidak disalin. Anggotanya diakses dengan operator panah ->. Penulisan p->ipk sama dengan (*p).ipk.
1#include <stdio.h>23typedef struct {4 char nama[50];5 double ipk;6 int sks;7} Mahasiswa;89void tambah_semester(Mahasiswa *m, double ip_semester, int sks_semester) {10 double total = m->ipk * m->sks + ip_semester * sks_semester;11 m->sks += sks_semester;12 m->ipk = total / m->sks;13}1415int main(void) {16 Mahasiswa m = {"Bagas", 3.20, 40};17 tambah_semester(&m, 3.80, 20);18 printf("%s: IPK %.2f dari %d SKS\n", m.nama, m.ipk, m.sks);19 return 0;20}Bagas: IPK 3.40 dari 60 SKS
IPK baru dihitung sebagai rata-rata berbobot SKS: (3,20 × 40 + 3,80 × 20) / 60 = 3,40.
Array of struct
1#include <stdio.h>23typedef struct {4 char kode[8];5 char nama[30];6 int sks;7} MataKuliah;89int main(void) {10 MataKuliah krs[] = {11 {"IF101", "Algoritma Pemrograman", 4},12 {"IF102", "Matematika Diskrit", 3},13 {"IF103", "Pengantar Basis Data", 3},14 };15 int n = sizeof(krs) / sizeof(krs[0]);16 int total = 0;17 for (int i = 0; i < n; i++) {18 printf("%-6s %-22s %d SKS\n", krs[i].kode, krs[i].nama, krs[i].sks);19 total += krs[i].sks;20 }21 printf("Total: %d SKS\n", total);22 return 0;23}IF101 Algoritma Pemrograman 4 SKS IF102 Matematika Diskrit 3 SKS IF103 Pengantar Basis Data 3 SKS Total: 10 SKS
Cek pemahaman
Jika Mahasiswa *p = &m;, mana cara yang benar untuk mengakses IPK?
Latihan
Titik dan jarak
Buat struct Titik dengan anggota x dan y bertipe double. Tulis fungsi double jarak(Titik a, Titik b) memakai sqrt dari math.h, lalu hitung jarak titik (1, 2) ke (4, 6).
Pembahasan
1#include <math.h>2#include <stdio.h>34typedef struct {5 double x;6 double y;7} Titik;89double jarak(Titik a, Titik b) {10 double dx = a.x - b.x;11 double dy = a.y - b.y;12 return sqrt(dx * dx + dy * dy);13}1415int main(void) {16 Titik a = {1, 2};17 Titik b = {4, 6};18 printf("Jarak = %.2f\n", jarak(a, b));19 return 0;20}Jarak = 5.00
Struct kecil seperti Titik aman dikirim sebagai salinan. Saat dikompilasi dengan gcc di komputer sendiri, tambahkan -lm supaya pustaka matematika ikut ditautkan.
Jalankan contoh kode di pelajaran ini tanpa instalasi lewat compiler C online.