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.

C
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}
Keluaran
Fajar Nugroho (2410511007) IPK 3.42
Sinta Maharani (2410511012) IPK 3.81
  • typedef memberi nama Mahasiswa untuk tipe struct itu, sehingga tidak perlu menulis struct setiap 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.

C
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}
Keluaran
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

C
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}
Keluaran
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).

Jalankan contoh kode di pelajaran ini tanpa instalasi lewat compiler C online.

Tandai pelajaran ini selesai

Masuk ke aplikasi untuk mencatat kemajuan, lalu lanjutkan ke pelajaran berikutnya dari perangkat mana pun.

Buka di aplikasi