MEMBUAT STRUCT
Struct
• Kasus 1
– Misalkan anda ingin menyimpan data
sejumlah mahasiswa, yang terdiri dari
nama dan nilai. Dapatkah disimpan dalam
satu array?
– Tidak bisa, karena kedua data memiliki
tipe yang berbeda.
• Nama: string
• Nilai: float
Struct
• Kasus 2
– Misal anda memiliki suatu fungsi untuk
memasukkan data mahasiswa, terdiri dari
nama mahasiswa, tanggal lahir, dan
tempat lahir, dideklarasi sbb:
void entri_data(char nama[26], char
tgl_lahir[11], char tempat_lahir[30]);
int main(){
struct dataMhs mhs1 = {"Indah Nian", 95.4};
struct dataMhs mhs2;
mhs2.nama = "Putri Melati";
mhs2.nilai = 87.6;
printf("%s %.1f\n", mhs1.nama, mhs1.nilai);
printf("%s %.1f\n", mhs2.nama, mhs2.nilai);
return 0;
}
Membuat Struct
Membuat struct global dengan variabel global
#include <stdio.h>
Indah Nian 95.4
struct {
Putri Melati 87.6
char *nama;
float nilai;
} mhs1, mhs2;
int main(){
mhs1.nama = "Indah Nian";
mhs1.nilai = 95.4;
mhs2.nama = "Putri Melati";
mhs2.nilai = 87.6;
printf("%s %.1f\n", mhs1.nama, mhs1.nilai);
printf("%s %.1f\n", mhs2.nama, mhs2.nilai);
return 0;
}
Field String
• Field bertipe string pada struct
– Dapat dideklarasi sebagai pointer
• Contoh: char *nama
• Untuk mengisinya dapat menggunakan
operator assignment (=).
– Dapat dideklarasi sebagai array
• Contoh: char alamat[40]
• Untuk mengisinya harus menyalin string ke
array tsb, dapat menggunakan fungsi strcpy();
Field String
Mengisi field string dengan strcpy()
#include <stdio.h>
#include <string.h> Indah Nian
Jl. Cemara
int main(){
Struct struct {
lokal char *nama, alamat[40];
} mhs;
int main(){
struct dataMhs mhs = {"Indah Nian", 95.4};
struct dataMhs *p; p = &mhs;
printf("%s %.1f\n", mhs.nama, mhs.nilai);
printf("%s %.1f\n", p->nama, p->nilai);
printf("%s %.1f\n", (*p).nama, (*p).nilai);
return 0;
}
Membaca Data untuk Struct
• Membaca data dari keyboard
– Jika data dari keyboard dibaca dengan
fungsi gets() atau fgets(), maka untuk
memasukkan ke field string pada struct,
data ini harus disimpan ke variabel biasa,
baru dimasukkan ke field struct.
– Alternatif lainnya adalah menggunakan
scanf() untuk complex format string.
Membaca Data untuk Struct
Menggunakan gets()
#include <stdio.h>
struct dataMhs {
char *nama; Nama? Putri Melati
float nilai; Nilai? 87.6
} mhs; Putri Melati 87.6
int main(){
char x[40];
printf("Nama? "); gets(x); mhs.nama = x;
printf("Nilai? "); scanf("%f", &mhs.nilai);
printf("%s %.1f\n", mhs.nama, mhs.nilai);
return 0;
} Input nama disimpan ke x, baru
dimasukkan ke field mhs.nama.
Membaca Data untuk Struct
Menggunakan scanf() complex format string
#include <stdio.h>
int main(){
struct dataMhs { Nama? Putri Melati
char nama[50]; Nilai? 87.6
float nilai; Putri Melati 87.6
}mhs;
int main(){
typedef struct {
char nama[50];
float nilai;
} M;
M A[SIZE]; A adalah
... array dari
struct M
Array dari Struct
...
int i;
for (i=0; i<SIZE; i++)
scanf("%[^;];%f", A[i].nama, &A[i].nilai);
int main(){
balok B = {6, 4, 5};
int V = hitung_volume(B); Volume: 120
printf("Volume: %d", V);
return 0;
}
Struct dan Fungsi
#include <stdio.h> Passing by
typedef struct {
int pj, lb, tg;
reference
} balok ;
int main(){
balok B = {6, 4, 5};
int V = hitung_volume(&B); Volume: 120
printf("Volume: %d", V); return
0;
}
4
ENUMERASI
Enumerasi
• Enumerasi
– Adalah kumpulan konstanta integer yang
direpresentasi oleh identifier.
– Didefinisikan dengan keyword enum.
– Penomoran identifier pada suatu enum
selalu dimulai dari 0, kecuali ditentukan
lain, dan bertambah 1.
Enumerasi
enum bulan {JAN, FEB, MAR, APR, MEI, JUN, JUL,
AGS, SEP, OKT, NOV, DES}
int main() {
enum hari H;
const char *namaHari[] = {"", "Senin", "Selasa",
"Rabu", "Kamis", "Jumat", "Sabtu", "Minggu"};
1 Senin
for (H=MON; H<=SUN; H++)
2 Selasa
printf("%2d %s\n", H, namaHari[H]);
3 Rabu
return 0;
4 Kamis
}
5 Jumat
6 Sabtu
7 Minggu
Latihan 1
Tulis program untuk menampilkan bingkai segi
empat yang dibentuk karakter *.